示例#1
0
        public Try <AbapValue> ConvertFrom(T value, RfcFieldInfo fieldInfo)
        {
            return(Prelude.Try <AbapValue>(() =>
            {
                if (!IsSupportedRfcType(fieldInfo.Type))
                {
                    throw new NotSupportedException($"Cannot convert string to RfcType {fieldInfo.Type} .");
                }

                string stringValue = null;

                if (value is IConvertible convertible)
                {
                    switch (convertible.GetTypeCode())
                    {
                    case TypeCode.Boolean:
                        stringValue = Convert.ToBoolean(value, CultureInfo.InvariantCulture) ? "X" : "";
                        break;

                    default:
                        stringValue = (string)Convert.ChangeType(value, typeof(string), CultureInfo.InvariantCulture);
                        break;
                    }
                }

                return new AbapStringValue(fieldInfo, stringValue);
            }));
        }
示例#2
0
        public Either <RfcErrorInfo, AbapValue> ToAbapValue <T>(T value, RfcFieldInfo fieldInfo)
        {
            AbapValue abapValue = null;

            if (value is AbapValue av)
            {
                return(av);
            }

            foreach (var converter in _converterResolver.GetToRfcConverters <T>(fieldInfo.Type))
            {
                var result = converter.ConvertFrom(value, fieldInfo)();
                if (result.IsFaulted)
                {
                    continue;
                }
                result.IfSucc(v => abapValue = v);
                break;
            }

            if (abapValue == null)
            {
                return(new RfcErrorInfo(RfcRc.RFC_CONVERSION_FAILURE, RfcErrorGroup.EXTERNAL_APPLICATION_FAILURE, "",
                                        $"Converting from type {typeof(T)} to abap type {fieldInfo.Type} is not supported.",
                                        "", "E", "", "", "", "", ""));
            }

            return(abapValue);
        }
示例#3
0
        public Try <AbapValue> ConvertFrom(DateTime value, RfcFieldInfo fieldInfo)
        {
            return(Prelude.Try <AbapValue>(() =>
            {
                if (!IsSupportedRfcType(fieldInfo.Type))
                {
                    throw new NotSupportedException($"Cannot convert DateTime to RfcType {fieldInfo.Type} .");
                }

                string stringValue;

                var dateTime = (DateTime)Convert.ChangeType(value, typeof(DateTime), CultureInfo.InvariantCulture);

                // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault
                switch (fieldInfo.Type)
                {
                case RfcType.DATE:
                    stringValue = dateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
                    break;

                case RfcType.TIME:
                    stringValue = dateTime.ToString("HHmmss", CultureInfo.InvariantCulture);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(fieldInfo), fieldInfo.Type,
                                                          $"not supported Type field in {nameof(fieldInfo)}.");
                }

                return new AbapStringValue(fieldInfo, stringValue);
            }));
        }
示例#4
0
文件: Api.cs 项目: fw2568/YaNco
        public static RfcRc GetTypeFieldDescription(TypeDescriptionHandle descriptionHandle, int index,
                                                    out RfcFieldInfo parameterInfo, out RfcErrorInfo errorInfo)
        {
            var rc = Interopt.RfcGetFieldDescByIndex(descriptionHandle.Ptr, (uint)index, out var parameterDescr, out errorInfo);

            parameterInfo = new RfcFieldInfo(parameterDescr.Name, parameterDescr.Type, parameterDescr.NucLength, parameterDescr.UcLength, parameterDescr.Decimals);
            return(rc);
        }
示例#5
0
        public Try <AbapValue> ConvertFrom(T value, RfcFieldInfo fieldInfo)
        {
            return(Prelude.Try <AbapValue>(() =>
            {
                if (!IsSupportedRfcType(fieldInfo.Type))
                {
                    throw new NotSupportedException($"Cannot convert from RfcType {fieldInfo.Type} to integer value.");
                }

                return new AbapIntValue(fieldInfo, (int)Convert.ChangeType(value, typeof(int), CultureInfo.InvariantCulture));
            }));
        }
示例#6
0
        public Try <AbapValue> ConvertFrom(byte[] value, RfcFieldInfo fieldInfo)
        {
            return(Prelude.Try <AbapValue>(() =>
            {
                if (!IsSupportedRfcType(fieldInfo.Type))
                {
                    throw new NotSupportedException($"Cannot convert from RfcType {fieldInfo.Type} to byte array.");
                }

                return new AbapByteValue(fieldInfo, value);
            }));
        }
示例#7
0
 protected AbapValue(RfcFieldInfo fieldInfo)
 {
     FieldInfo = fieldInfo;
 }
示例#8
0
 public AbapLongValue(RfcFieldInfo fieldInfo, long value) :
     base(fieldInfo)
 {
     Value = value;
 }
示例#9
0
 public AbapStringValue(RfcFieldInfo fieldInfo, string value) :
     base(fieldInfo)
 {
     Value = value;
 }
示例#10
0
 public AbapByteValue(RfcFieldInfo fieldInfo, byte[] value) :
     base(fieldInfo)
 {
     Value = value;
 }
示例#11
0
 public static RfcRc GetTypeFieldDescription(TypeDescriptionHandle descriptionHandle, int index,
                                             out RfcFieldInfo parameterInfo, out RfcErrorInfo errorInfo)
 {
     throw new NotImplementedException();
 }
示例#12
0
 public AbapIntValue(RfcFieldInfo fieldInfo, int value) :
     base(fieldInfo)
 {
     Value = value;
 }
示例#13
0
 public FieldMappingContext(IRfcRuntime rfcRuntime, IDataContainerHandle handle, RfcFieldInfo fieldInfo)
 {
     RfcRuntime = rfcRuntime;
     Handle     = handle;
     FieldInfo  = fieldInfo;
 }