public async Task <TOutput> GetStructAsync <TOutput>(List <string> options, bool includeUnsafeFields = false, string delimiter = "|", string noData = "") where TOutput : class, ISapTable { using IRfcConnection rfcConnection = GetConnection(); using IRfcFunction rfcFunction = rfcConnection.CreateFunction(READ_TABLE_FUNCTION_NAME); List <string> fieldNames = GetRfcEntityFieldNames(typeof(TOutput), includeUnsafeFields); var inputParameters = new TableInputParameter { Query = GetRfcTableName <TOutput>(), Delimiter = delimiter, NoData = noData, RowCount = 1, RowSkips = 0, Fields = fieldNames?.Select(f => new TableField { FieldName = f }).ToArray(), Options = options?.Select(o => new TableOption { Text = o }).ToArray() }; TableOutputParameter result = await rfcFunction.InvokeAsync <TableOutputParameter>(inputParameters); return(ConvertToStruct <TOutput>(result, delimiter, fieldNames)); }
private T ConvertToStruct <T>(TableOutputParameter outputParameter, string delimiter, List <string> fieldList) { if (outputParameter?.Data == null) { return(default);
private List <T> ConvertToList <T>(TableOutputParameter outputParameter, string delimiter, List <string> fieldNames) { return(outputParameter.Data?.Select(x => ConvertTo <T>(x, delimiter, fieldNames)).ToList() ?? Activator.CreateInstance <List <T> >()); }