使用 GP webservice 传递多个行项目

Passing multiple line items with GP webservice

下面是我正在使用的代码,用于传递多个订单项以通过 GP Web 服务创建销售订单。我可以毫无问题地传递单个 Line Item,但是当我传递多个 Items 时,它只接受最后一个。该数组有大约 5 个项目 ID,我将固定数量传递为 15,需要使两者都动态化。但出于测试目的,我正在尝试这样。我知道某些 Web 服务对象的 creation/initialization 存在问题。作为整套东西的新手,我找不到确切的问题。

C# Code

            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");

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();