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); })); }
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); }
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); })); }
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); }
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)); })); }
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); })); }
protected AbapValue(RfcFieldInfo fieldInfo) { FieldInfo = fieldInfo; }
public AbapLongValue(RfcFieldInfo fieldInfo, long value) : base(fieldInfo) { Value = value; }
public AbapStringValue(RfcFieldInfo fieldInfo, string value) : base(fieldInfo) { Value = value; }
public AbapByteValue(RfcFieldInfo fieldInfo, byte[] value) : base(fieldInfo) { Value = value; }
public static RfcRc GetTypeFieldDescription(TypeDescriptionHandle descriptionHandle, int index, out RfcFieldInfo parameterInfo, out RfcErrorInfo errorInfo) { throw new NotImplementedException(); }
public AbapIntValue(RfcFieldInfo fieldInfo, int value) : base(fieldInfo) { Value = value; }
public FieldMappingContext(IRfcRuntime rfcRuntime, IDataContainerHandle handle, RfcFieldInfo fieldInfo) { RfcRuntime = rfcRuntime; Handle = handle; FieldInfo = fieldInfo; }