如何通过SAP DI API获取新建销售订单DocEntry并添加运费?
SAP DI API:获取销售订单DocEntry并插入运费到RDR3
获取刚创建的销售订单DocEntry
当你通过DI API成功创建销售订单后,无需额外查询,直接从创建时使用的SalesOrder对象中读取DocEntry属性即可。DI API在调用Add()方法成功提交订单后,会自动将生成的DocEntry赋值给该对象的对应属性。
示例代码(C#):
SAPbobsCOM.SalesOrders oSalesOrder = (SAPbobsCOM.SalesOrders)company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oOrders); // 填充销售订单必要字段 oSalesOrder.CardCode = "C0001"; oSalesOrder.Lines.ItemCode = "I0001"; oSalesOrder.Lines.Quantity = 10; oSalesOrder.Lines.Add(); int addResult = oSalesOrder.Add(); if (addResult == 0) { // 成功创建后直接获取DocEntry int docEntry = oSalesOrder.DocEntry; Console.WriteLine($"新销售订单DocEntry:{docEntry}"); } else { // 处理创建失败逻辑 SAPbobsCOM.CompanyService companyService = company.GetCompanyService(); SAPbobsCOM.ILogger logger = companyService.GetLogger(); Console.WriteLine($"创建失败:{logger.GetLastErrorDescription()}"); }
向RDR3表插入运费数据
拿到DocEntry后,使用DI API的Recordset对象执行INSERT语句,直接写入RDR3表(该表存储销售订单特殊行数据,含运费)。需注意RDR3的核心字段:
DocEntry:对应目标销售订单的DocEntryLineNum:特殊行行号,运费行通常设为0LineType:行类型标识,运费对应值为"F"(部分SAP版本需用枚举值BoSpecialLineType.slt_Freight,可通过查询现有RDR3数据确认)Freight:运费金额
示例代码(C#):
if (addResult == 0) { int docEntry = oSalesOrder.DocEntry; SAPbobsCOM.Recordset oRecordset = (SAPbobsCOM.Recordset)company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset); string insertSql = $"INSERT INTO RDR3 (DocEntry, LineNum, LineType, Freight) VALUES ({docEntry}, 0, 'F', 150.00)"; try { oRecordset.DoQuery(insertSql); Console.WriteLine("运费已成功添加"); } catch (Exception ex) { Console.WriteLine($"插入运费失败:{ex.Message}"); } }
注意事项
- 确保DI API版本与SAP Business One版本兼容,避免字段或枚举值差异
- 确认当前用户拥有RDR3表的写入权限
- 若需设置运费税码等额外属性,可在INSERT语句中添加对应字段(如
TaxCode)
内容的提问来源于stack exchange,提问作者PatriceJ
相关产品推荐
相关产品推荐

