[英]Dynamic GP: Read Line Items of Sales Invoice
從Microsoft Dynamics GP 2013的Web服務通過以下代碼創建銷售發票:
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();
}
}
通過以下代碼讀取銷售發票:
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();
}
}
問題是: 如何獲取特定發票的行項目?
您需要獲取實際的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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.