示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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));
        }
示例#5
0
        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());
        }
示例#6
0
        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());
        }
示例#7
0
        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);
        }
示例#8
0
        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));
        }