Передача нескольких позиций с помощью веб-сервиса GP

Ниже приведен код, с которым я работаю, чтобы передать несколько позиций для создания заказа на продажу через веб-службу GP. Я могу без проблем передать один элемент строки, но когда я пропускаю несколько элементов, он принимает только последний элемент. Массив имеет около 5 идентификаторов элементов, и я передаю фиксированное количество как 15, необходимо сделать оба динамических. Но для целей тестирования я пытаюсь вот так. Я знаю проблему с созданием / инициализацией некоторых объектов веб-сервиса. Как новичок во всем наборе вещей, я не смог найти точную проблему.

Код C#

            CompanyKey companyKey;
            Context context;
            SalesOrder salesOrder;
            SalesDocumentTypeKey salesOrderType;
            CustomerKey customerKey;
            BatchKey batchKey;
           // SalesOrderLine salesOrderLine;
            ItemKey orderedItem;
            Quantity orderedAmount;
            Policy salesOrderCreatePolicy;
            DynamicsGPClient wsDynamicsGP = new DynamicsGPClient();
            wsDynamicsGP.ClientCredentials.Windows.ClientCredential.UserName = "Admin";
            wsDynamicsGP.ClientCredentials.Windows.ClientCredential.Password = "pass";
            wsDynamicsGP.ClientCredentials.Windows.ClientCredential.Domain = "Gp";
            System.ServiceModel.WSHttpBinding binding;
            binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
            context = new Context();
            companyKey = new CompanyKey();
            companyKey.Id = (1);
            context.OrganizationKey = (OrganizationKey)companyKey;
            salesOrder = new SalesOrder();
            salesOrderType = new SalesDocumentTypeKey();
            salesOrderType.Type = SalesDocumentType.Order;
            salesOrder.DocumentTypeKey = salesOrderType;
            customerKey = new CustomerKey();
            customerKey.Id = "121001";
            salesOrder.CustomerKey = customerKey;
            batchKey = new BatchKey();
            batchKey.Id = "RMS";
            salesOrder.BatchKey = batchKey;
           // SalesOrderLine[] orders = new SalesOrderLine[6];

            SalesOrderLine[] lines = { };

            for (int i = 1; i < 5; i++)
            {
                SalesOrderLine salesOrderLine = new SalesOrderLine();
                orderedItem = new ItemKey();
                orderedItem.Id = Arr[i].ToString();
                salesOrderLine.ItemKey = orderedItem;
                orderedAmount = new Quantity();
                orderedAmount.Value = 15;
                salesOrderLine.Quantity = orderedAmount;
                lines = new SalesOrderLine[] { salesOrderLine };
                MessageBox.Show(lines.Count().ToString());
            }
            salesOrder.Lines = lines;
            //salesOrder.Lines = orders;
            salesOrderCreatePolicy = wsDynamicsGP.GetPolicyByOperation("CreateSalesOrder", context);
            wsDynamicsGP.CreateSalesOrder(salesOrder, context, salesOrderCreatePolicy);
            if (wsDynamicsGP.State != CommunicationState.Faulted)
            {
                wsDynamicsGP.Close();
            }

            MessageBox.Show("Success");

1 ответ

Решение

lines = new SalesOrderLine[] { salesOrderLine }; воссоздаст lines каждый раз массив объектов означает, что вы потеряете все ранее добавленные объекты. Фактически добавляется только последний объект в цикле.

Попробуйте использовать List<T> вот так:

SalesOrderLine[] lines = { }; становится List<SalesOrderLine> lines = new List<SalesOrderLine>();

lines = new SalesOrderLine[] { salesOrderLine }; становится: lines.Add(salesOrderLine);

Если это важно, вы получите массив в качестве входных данных:

salesOrder.Lines = lines; становится: salesOrder.Lines = lines.ToArray();

Другие вопросы по тегам