【发布时间】:2015-12-15 05:45:02
【问题描述】:
我的问题是,在创建发票后,我永远无法获取新的行项目来引用其对应的销售订单行项目。
我一直在通过 SuiteTalk 生成发票。当我最初创建发票时,我清空 lineItemList 并重新添加我需要的项目。我确保 orderLine 属性与销售订单行项目行号匹配。这很好用。
但是,当我尝试使用其他行项目更新发票时,我永远无法让新项目保留其 orderLine 属性。 orderLine 属性用于销售订单上的“发票”列。
为了使引用正确,我需要删除发票并使用我需要的所有行项目重新创建它。
有谁知道我想要做的事情是否可行?
在此示例中,我使用此 CreateInvoice 函数从头开始创建发票并将其添加到 NetSuite。一切正常。
public void CreateInvoice(SalesOrder salesOrder) {
Invoice brandNewInvoice = new Invoice() {
createdFrom = new RecordRef() {
internalId = salesOrder.internalId,
},
entity = salesOrder.entity,
tranDate = endDate,
tranDateSpecified = true,
startDate = startDate,
startDateSpecified = true,
endDate = endDate,
endDateSpecified = true,
itemList = new InvoiceItemList(),
};
invoice.itemList.item = GetInvoiceItemList(salesOrder); //see the function shown further down
netSuiteService.add(brandNewInvoice);
}
在此示例中,发票已创建,因此我从 NetSuite 获取它,然后将现有 itemList 替换为新的。更新后,发票现在将没有任何行项目的 orderLine 属性。发票也会丢失其“创建自”字段,因为没有设置 orderLine 属性的行项目。
public void UpdateInvoice(SalesOrder salesOrder, String invoiceInternalId) {
Invoice invoice = GetNetSuiteInvoice(invoiceInternalId);
invoice.itemList.item = GetInvoiceItemList(salesOrder); //see the function shown further down
netSuiteService.update(invoice);
}
这是用于创建 itemList 的函数:
public InvoiceItem[] GetInvoiceItemList(SalesOrder salesOrder) {
InvoiceItem[] invoiceItemList = new InvoiceItem[salesOrder.itemList.item.Length];
for (int i = 0; i < salesOrder.itemList.item.Length; i++) {
SalesOrderItem soItem = salesOrder.itemList.item[i];
double quantity = 1;
invoiceItemList[i] = new InvoiceItem() {
item = new RecordRef() {
internalId = soItem.item.internalId,
name = soItem.item.name,
},
amount = quantity * Double.Parse(soItem.rate),
amountSpecified = true,
quantity = quantity,
quantitySpecified = true,
price = new RecordRef() {
internalId = soItem.price.internalId,
name = soItem.price.name,
},
rate = soItem.rate,
orderLine = soItem.line, //this will establish the link between the invoice and the sales order
orderLineSpecified = true,
taxRate1 = soItem.taxRate1,
taxRate1Specified = true,
};
}
return invoiceItemList;
}
【问题讨论】:
标签: c# web-services netsuite