2017-01-16 8 views
1

以下は、GP Webサービスを通じて受注を登録するために複数の明細を渡すためのコードです。私は問題なく1つのLine Itemを渡すことができますが、複数の項目を渡すときには最後の項目だけを取ります。配列は約5項目のIDを持っていて、私は固定量を15として渡しています。両方を動的にする必要があります。しかし、テスト目的のために私はこのようにしています。私はいくつかのWebサービスオブジェクトの作成/初期化に関する問題を知っています。初心者としては、私は正確な問題を見つけることができませんでした。GPウェブサービスで複数の明細を渡す

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}; ループを実行するたびに、この行が既存の行の値を置き換えると思います。 –

答えて

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

関連する問題