private List <MaterialDefinition> SetMaterialDefinitionOption(MaterialQueryOptions queryOptions, List <Material> materialList) { var definitionList = new List <MaterialDefinition>(); if (queryOptions.IncludeDefinition) { var list = materialList.Where(x => x.Code != null).Select(x => (object)x.Code).ToList(); List <object>[] parts = list.Partition(PartitionCount); foreach (List <object> part in parts) { List <string> query = new AbapQuery() .Set(QueryOperator.In("MATNR", part)) .GetQuery(); using IRfcConnection connection = _serviceProvider.GetService <IRfcConnection>(); connection.Connect(); using IReadTable <MaterialDefinition> tableFunction = _serviceProvider.GetService <IReadTable <MaterialDefinition> >(); List <MaterialDefinition> definitions = tableFunction.GetTable(connection, query); if (definitions.Any()) { definitionList.AddRange(definitions); } } } return(definitionList); }
private List <MaterialCategoryDefinition> SetMaterialCategoryOption(MaterialQueryOptions queryOptions, List <Material> materialList) { var materialCategoryDefinitionList = new List <MaterialCategoryDefinition>(); if (queryOptions.IncludeMaterialCategory) { var materialCategoryList = materialList.Where(x => x.MaterialCategoryCode != null) .Select(x => (object)x.MaterialCategoryCode) .Distinct() .ToList(); List <object>[] materialCategoryParts = materialCategoryList.Partition(PartitionCount); foreach (List <object> part in materialCategoryParts) { List <string> queryList = new AbapQuery() .Set(QueryOperator.In("ZZEXTWG", part)) .GetQuery(); using var connection = _serviceProvider.GetService <IRfcConnection>(); connection.Connect(); using var tableFunction = _serviceProvider.GetService <IReadTable <MaterialCategoryDefinition> >(); var definitions = tableFunction.GetTable(connection, queryList); if (definitions.Any()) { materialCategoryDefinitionList.AddRange(definitions); } } } return(materialCategoryDefinitionList); }
private List <Task> SetMaterialDefinitionOptionAsync(MaterialQueryOptions queryOptions, List <Material> materialList, ConcurrentQueue <MaterialDefinition> definitionList) { var taskList = new List <Task>(); if (queryOptions.IncludeDefinition) { var list = materialList.Where(x => x.Code != null).Select(x => (object)x.Code).ToList(); List <object>[] parts = list.Partition(PartitionCount); foreach (List <object> part in parts) { List <string> query = new AbapQuery() .Set(QueryOperator.In("MATNR", part)) .GetQuery(); taskList.Add(Task.Run(() => { using var connection = _serviceProvider.GetService <IRfcConnection>(); connection.Connect(); using var tableFunction = _serviceProvider.GetService <IReadTable <MaterialDefinition> >(); var definitions = tableFunction.GetTable(connection, query); foreach (MaterialDefinition definition in definitions) { definitionList.Enqueue(definition); } })); } } return(taskList); }
public async Task <List <Material> > GetMaterialsByPrefixAsync(string materialCodePrefix, int recordCount = 5) { List <string> whereClause = new AbapQuery().Set(QueryOperator.StartsWith("MATNR", materialCodePrefix)) .And(QueryOperator.NotEqual("LVORM", true, RfcDataTypes.BOOLEAN_X)).GetQuery(); using IRfcClient sapClient = _serviceProvider.GetRequiredService <IRfcClient>(); return(await sapClient.GetTableDataAsync <Material>(whereClause, rowCount : recordCount, includeUnsafeFields : true)); }
public async Task <Material> GetMaterialAsync(string materialCode) { List <string> whereClause = new AbapQuery().Set(QueryOperator.Equal("MATNR", materialCode)) .And(QueryOperator.NotEqual("LVORM", true, RfcDataTypes.BOOLEAN_X)).GetQuery(); using IRfcClient sapClient = _serviceProvider.GetRequiredService <IRfcClient>(); return((await sapClient.GetTableDataAsync <Material>(whereClause)).FirstOrDefault()); }
public Material GetMaterial(string materialCodePrefix, bool getUnsafeFields = true, int rowCount = 0) { var query = new AbapQuery().Set(QueryOperator.Equal("MATNR", materialCodePrefix)) .And(QueryOperator.NotEqual("LVORM", true, RfcTablePropertySapTypes.BOOLEAN_X)).GetQuery(); using IRfcConnection connection = _serviceProvider.GetService <IRfcConnection>(); connection.Connect(); using IReadTable <Material> tableFunction = _serviceProvider.GetService <IReadTable <Material> >(); List <Material> result = tableFunction.GetTable(connection, query, rowCount: rowCount, getUnsafeFields: getUnsafeFields); return(result.First()); }
private List <Task> SetMaterialCategoryOptionAsync(MaterialQueryOptions queryOptions, List <Material> materialList, ConcurrentQueue <MaterialCategoryDefinition> materialCategoryDefinitionList, SemaphoreSlim semaphoreSlim = null) { var taskList = new List <Task>(); if (!queryOptions.IncludeMaterialCategory) { return(taskList); } var materialCategoryList = materialList.Where(x => x.MaterialCategoryCode != null) .Select(x => (object)x.MaterialCategoryCode) .Distinct() .ToList(); List <object>[] materialCategoryParts = materialCategoryList.Partition(PartitionCount); foreach (List <object> part in materialCategoryParts) { List <string> queryList = new AbapQuery() .Set(QueryOperator.In("ZZEXTWG", part)) .GetQuery(); taskList.Add(Task.Run(async() => { try { if (semaphoreSlim != null) { await semaphoreSlim.WaitAsync(); } using IRfcClient client = _serviceProvider.GetRequiredService <IRfcClient>(); List <MaterialCategoryDefinition> definitions = await client.GetTableDataAsync <MaterialCategoryDefinition>(queryList, includeUnsafeFields: true); foreach (MaterialCategoryDefinition definition in definitions) { materialCategoryDefinitionList.Enqueue(definition); } } finally { if (semaphoreSlim != null) { semaphoreSlim.Release(); } } })); } return(taskList); }
public List <Material> GetMaterialsByPrefix(string materialCodePrefix, MaterialQueryOptions options = null, bool getUnsafeFields = true, int rowCount = 0) { options ??= new MaterialQueryOptions(); var query = new AbapQuery().Set(QueryOperator.StartsWith("MATNR", materialCodePrefix)) .And(QueryOperator.NotEqual("LVORM", true, RfcTablePropertySapTypes.BOOLEAN_X)).GetQuery(); using IRfcConnection connection = _serviceProvider.GetService <IRfcConnection>(); connection.Connect(); using IReadTable <Material> tableFunction = _serviceProvider.GetService <IReadTable <Material> >(); List <Material> result = tableFunction.GetTable(connection, query, rowCount: rowCount, getUnsafeFields: getUnsafeFields); return(SetOptions(result, options, getUnsafeFields)); }