示例#1
0
 public Either <RfcErrorInfo, Unit> SetFromDictionary <T>(IDictionary <string, T> dictionary)
 {
     return(GetFieldInfos()
            .Bind(fields =>
                  fields.Map(fieldInfo =>
                             !dictionary.ContainsKey(fieldInfo.Name)
                     ? Unit.Default
                     : RfcRuntime.SetFieldValue(Handle, dictionary[fieldInfo.Name], () => fieldInfo)
                             )
                  .Traverse(l => l))
            .Map(_ => Unit.Default));
 }
示例#2
0
 public Either <RfcErrorInfo, RfcFieldInfo[]> GetFieldInfos()
 {
     return(RfcRuntime.GetTypeDescription(Handle).Use(used => used
                                                      .Bind(handle =>
     {
         return RfcRuntime.GetTypeFieldCount(handle).Bind(fieldCount =>
         {
             return Enumerable.Range(0, fieldCount).Map(i =>
                                                        RfcRuntime.GetTypeFieldDescription(handle, i)).Traverse(l => l);
         });
     })).Map(r => r.ToArray()));
 }
示例#3
0
 public Either <RfcErrorInfo, IDictionary <string, AbapValue> > ToDictionary()
 {
     return(GetFieldInfos()
            .Bind(fields =>
                  fields.Map(fieldInfo =>
                             from fieldValue in RfcRuntime.GetFieldValue <AbapValue>(Handle, () => fieldInfo)
                             from fieldName in Prelude.Right(fieldInfo.Name).Bind <RfcErrorInfo>()
                             select(fieldName, fieldValue)
                             ).Traverse(l => l))
            .Map(l => l.ToDictionary(
                     v => v.fieldName,
                     v => v.fieldValue))
            .Map(d => (IDictionary <string, AbapValue>)d));
 }