使用 GP Web 服务传递多个行项目

问题描述 投票:0回答:1

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

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");
c# arrays web-services dynamics-crm-2011 dynamics-gp
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.