2017-01-16 55 views
1

以下是我正在使用的代碼來傳遞多個訂單項以通過GP Web服務創建銷售訂單。我可以通過單行項目沒有任何問題,但是當我通過多個項目它只是採取最後一個。該陣列有大約5個物品ID,我將固定數量傳遞爲15,需要使這兩個動態。但爲了測試目的,我正在嘗試這樣做。我知道一些Web服務對象的創建/初始化的問題。作爲整個系列的新手,我無法找到確切的問題。通過GP webservice傳遞多個訂單項

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

lines = new SalesOrderLine [] {salesOrderLine}; 我認爲每次運行循環時,該行都會替換現有的Line值。 –

回答

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

+0

非常感謝Mr.James :) – Developer