Пример #1
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);
        }
Пример #2
0
        public IEnumerable <IToAbapValueConverter <T> > GetToRfcConverters <T>(RfcType rfcType)
        {
            var sourceType = typeof(T);
            var key        = $"{rfcType}_{sourceType}";

            if (!_toRfcConverters.ContainsKey(key))
            {
                var converters = _decoratedResolver.GetToRfcConverters <T>(rfcType).ToArray();
                _toRfcConverters.Add(key, converters.Length == 0 ? null : converters);
            }

            var entry = _toRfcConverters[key];

            if (entry != null)
            {
                return((IEnumerable <IToAbapValueConverter <T> >)entry);
            }
            return(new IToAbapValueConverter <T> [0]);
        }