2014-03-31 28 views
0

從微軟Dynamics GP的2013通過下面的代碼創建銷售發票Web服務:動態GP:讀銷售發票的行項目

private void CreateInvoice() 
    { 
     CompanyKey companyKey; 
     Context context; 
     SalesInvoice salesInvoice; 
     SalesDocumentTypeKey salesInvoiceType; 
     CustomerKey customerKey; 
     BatchKey batchKey; 
     SalesInvoiceLine salesInvoiceLine; 
     ItemKey invoiceItem; 
     Quantity invoiceCount; 
     Policy salesInvoiceCreatePolicy; 
     MoneyAmount unitPrice; 

     DynamicsGPClient wsDynamicsGP = new DynamicsGPClient(); 
     context = new Context(); 
     companyKey = new CompanyKey(); 
     companyKey.Id = (-1); 
     context.OrganizationKey = (OrganizationKey)companyKey; 
     salesInvoice = new SalesInvoice(); 
     salesInvoice.Key = new SalesDocumentKey(); 
     salesInvoice.Key.Id = "XX555"; 
     salesInvoiceType = new SalesDocumentTypeKey(); 
     salesInvoiceType.Type = SalesDocumentType.Invoice; 
     salesInvoice.DocumentTypeKey = salesInvoiceType; 
     customerKey = new CustomerKey(); 
     customerKey.Id = "ADAMPARK0001";// "AARONFIT0001"; 
     salesInvoice.CustomerKey = customerKey; 
     batchKey = new BatchKey(); 
     batchKey.Id = "SALES INVOICES"; 
     salesInvoice.BatchKey = batchKey; 

     IList<SalesInvoiceLine> salesInvoiceLines = new List<SalesInvoiceLine>(); 
     string[] itemId = { "ACCS-HDS-1EAR", "32X IDE" }; //"ACCS-RST-DXBK";// "512 SDRAM";//    
     for (int i = 0; i < itemId.Count(); i++) 
     { 
      salesInvoiceLine = new SalesInvoiceLine(); 
      invoiceItem = new ItemKey(); 
      invoiceItem.Id = itemId[i]; 
      salesInvoiceLine.ItemKey = invoiceItem; 
      unitPrice = new MoneyAmount(); 
      unitPrice.Currency = "USD"; 
      unitPrice.DecimalDigits = 2; 
      unitPrice.Value = 1.00M; 
      salesInvoiceLine.UnitPrice = unitPrice; 
      invoiceCount = new Quantity(); 
      invoiceCount.Value = 1 + i; 
      salesInvoiceLine.Quantity = invoiceCount; 
      salesInvoiceLines.Add(salesInvoiceLine); 
     }    
     SalesInvoiceLine[] invoiceLines = salesInvoiceLines.ToArray(); 
     salesInvoice.Lines = invoiceLines; 
     salesInvoiceCreatePolicy = wsDynamicsGP.GetPolicyByOperation("CreateSalesInvoice", context); 
     wsDynamicsGP.CreateSalesInvoice(salesInvoice, context, salesInvoiceCreatePolicy); 
     if (wsDynamicsGP.State != CommunicationState.Faulted) 
     { 
      wsDynamicsGP.Close();    
     } 
    } 

Creating Sales Invoice Example is here

閱讀銷售發票由下面的代碼:

private void ShowInvoice() 
    { 

     CompanyKey companyKey; 
     Context context; 
     LikeRestrictionOfstring salespersonIdRestriction; 
     ListRestrictionOfNullableOfSalesTransactionState transactionStateRestriction; 
     SalesInvoiceCriteria salesInvoiceCriteria; 
     SalesInvoiceSummary[] salesInvoiceSummary; 
     BetweenRestrictionOfNullableOfdateTime restriction; 

     DynamicsGPClient wsDynamicsGP = new DynamicsGPClient(); 
     context = new Context(); 
     companyKey = new CompanyKey(); 
     companyKey.Id = (-1); 
     context.OrganizationKey = (OrganizationKey)companyKey; 
     salespersonIdRestriction = new LikeRestrictionOfstring(); 
     transactionStateRestriction = new ListRestrictionOfNullableOfSalesTransactionState(); 
     transactionStateRestriction.EqualValue = SalesTransactionState.Work; 
     salesInvoiceCriteria = new SalesInvoiceCriteria(); 
     salesInvoiceCriteria.TransactionState = transactionStateRestriction; 
     salesInvoiceCriteria.SalespersonId = salespersonIdRestriction; 
     salesInvoiceSummary = wsDynamicsGP.GetSalesInvoiceList(salesInvoiceCriteria, context); 

     StringBuilder summaryList = new StringBuilder();   
     foreach (SalesInvoiceSummary a in salesInvoiceSummary) 
     { 
      summaryList.AppendLine("<b>Invoice number:</b> " + a.Key.Id + " <b>Invoice amount:</b> " + a.TotalAmount.Value.ToString("C")); 
     } 
     if (wsDynamicsGP.State != CommunicationState.Faulted) 
     { 
      wsDynamicsGP.Close(); 
     } 
    } 

Reading Sales Invoice Example is here

問題是:如何獲取特定發票的行項目?

回答

1

您需要獲取包含關聯訂單項的實際SalesInvoice對象。您可以使用GetSalesInvoiceByKey()傳遞發票的訂單號(SOPNUMBE)來完成此操作。

擴展你的第二個例子:

foreach (SalesInvoiceSummary a in salesInvoiceSummary) 
{ 
    summaryList.AppendLine("<b>Invoice number:</b> " + a.Key.Id + " <b>Invoice amount:</b> " + a.TotalAmount.Value.ToString("C")); 

    SalesInvoice invoice = wsDynamicsGP.GetSalesInvoiceByKey(a.Key.Id, context); 
    SalesInvoiceLine[] lineItems = invoice.Lines; 
} 

然而,有沒有要求調用GetSalesInvoiceList()第一 - 你可以直接打電話GetSalesInvoiceByKey()如果知道訂單編號。