2017-01-16 5 views
1

다음은 GP 웹 서비스를 통해 판매 주문을 작성하기 위해 여러 광고 항목을 전달하는 코드입니다. 하나의 Line Item을 문제없이 전달할 수 있지만 여러 항목을 전달할 때 마지막 항목 만 가져옵니다. 배열 약 5 항목 ID가 있고 고정 된 수량으로 전달 해요 15, 모두 동적 만들 필요가 있습니다. 하지만 테스트 목적으로 나는 이것을 시도하고있다. 일부 웹 서비스 객체의 생성/초기화 문제가 있습니다. 초보자로서 나는 정확한 문제를 발견 할 수 없었습니다.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 };되다되다 :

salesOrder.Lines = lines;가되다 : lines.Add(salesOrderLine);

중요한 당신이 입력으로 배열 끝의 경우 : salesOrder.Lines = lines.ToArray();

+0

고맙습니다 Mr.James :) – Developer