【问题标题】:Passing multiple line items with GP webservice使用 GP 网络服务传递多个订单项
【发布时间】:2017-05-31 04:38:05
【问题描述】:

下面是我正在使用的代码,用于传递多个订单项以通过 GP Web 服务创建销售订单。我可以毫无问题地传递单个 Line Item,但是当我传递多个 Item 时,它只取最后一个。该数组有大约 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");

【问题讨论】:

  • lines = new SalesOrderLine[] { salesOrderLine };我认为每次运行循环时,这条线都会替换现有的 Line 值。

标签: c# arrays web-services dynamics-crm-2011 gp


【解决方案1】:

lines = new SalesOrderLine[] { salesOrderLine }; 每次都会重新创建 lines 数组对象,这意味着您会丢失任何以前添加的对象。实际上只添加了循环中的最终对象。

尝试像这样使用List&lt;T&gt;

SalesOrderLine[] lines = { }; 变为 List&lt;SalesOrderLine&gt; lines = new List&lt;SalesOrderLine&gt;();

lines = new SalesOrderLine[] { salesOrderLine }; 变为:lines.Add(salesOrderLine);

如果它很重要,您最终会得到一个数组作为输入:

salesOrder.Lines = lines; 变为:salesOrder.Lines = lines.ToArray();

【讨论】:

  • 非常感谢詹姆斯先生 :)
猜你喜欢
  • 2013-10-17
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多