Hem*_*ant 8 c# netsuite suitetalk
我正在尝试自动将 NetSuite 采购订单链接到 NetSuite 销售订单,以下是我尝试完成此任务的代码。但我收到错误(见底部)。你能检查一下并让我知道我在这里遗漏了什么吗?
采购订单创建代码:
var createPurchaseOrder = new PurchaseOrder();
createPurchaseOrder.entity = new RecordRef()
{
internalId = “653”
//type = RecordType.purchaseOrder,
//typeSpecified = true
};
RecordRef soRecordRef = new RecordRef();
soRecordRef.internalId = “XXXXXXXX”;
soRecordRef.type = RecordType.salesOrder;
soRecordRef.typeSpecified = true;
createPurchaseOrder.createdFrom = soRecordRef;
RecordRef depRecordRef = new RecordRef();
depRecordRef.internalId = “3”;
depRecordRef.name = “eBay : eBay FNC”;
depRecordRef.type = RecordType.department;
depRecordRef.typeSpecified = true;
createPurchaseOrder.department = depRecordRef;
PurchaseOrderItem[] Items = new PurchaseOrderItem[1];
Items[0] = new PurchaseOrderItem();
RecordRef item = new RecordRef();
item.type = RecordType.nonInventoryPurchaseItem;
item.typeSpecified = true;
item.internalId = “XXXXX”;
Items[0].item = item;
Items[0].rate = “5”;
Items[0].quantity = 1;
Items[0].quantitySpecified = true;
PurchaseOrderItemList purchaseOrderItemList = new PurchaseOrderItemList();
purchaseOrderItemList.item = Items;
createPurchaseOrder.itemList = purchaseOrderItemList;
WriteResponse response = Service.add(createPurchaseOrder);
Run Code Online (Sandbox Code Playgroud)
我用来更新销售订单中采购订单编号的代码:
var updateSalesOrder = new SalesOrder();
updateSalesOrder.internalId = “XXXXXXXX”;
SalesOrderItem[] soItems = new SalesOrderItem[1];
var soItem = new SalesOrderItem();
RecordRef roItem = new RecordRef();
roItem.type = RecordType.inventoryItem;
roItem.typeSpecified = true;
roItem.internalId = “XXXXX”;
soItem.item = roItem;
RecordRef prLevel = new RecordRef();
prLevel.type = RecordType.priceLevel;
prLevel.internalId = “-1”;
prLevel.typeSpecified = true;
soItem.price = prLevel;
soItem.rate = “15”;
soItem.quantity = 1;
soItem.quantitySpecified = true;
RecordRef poItem = new RecordRef();
poItem.type = RecordType.purchaseOrder;
poItem.typeSpecified = true;
poItem.internalId = purchaseOrder.internalId;
soItem.createdPo = poItem;
soItems[0] = soItem;
SalesOrderItemList salesOrderItemList = new SalesOrderItemList();
salesOrderItemList.item = soItems;
updateSalesOrder.itemList = salesOrderItemList;
response = Service.update(updateSalesOrder);
if (response.status.isSuccess != true) throw new Exception(response.status.statusDetail[0].message);
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误: 由于以下原因之一,您无权为元素 createPOSpecified 设置值:1)该字段是只读的;2) 相关功能被禁用;3) 该字段在创建或更新记录时可用,但在两种情况下都不可用。
注意:在 NetSuite 的销售订单屏幕中不显示 createPOSpecified。当我尝试更新表单中存在的销售订单中的字段时,我能够成功更新它,但我尝试更新的字段 (createPOSpecified) 在此销售表单中不可用。在这种情况下,我该如何更新?这也是将采购订单与销售订单链接的更好方法吗?
谢谢,赫曼特。
2020 年 5 月 25 日更新(回复 Anand Rajaram)
我们使用 ADMINISTRATOR 角色创建采购订单并将其链接到销售订单。我们的客户提供了具有此角色的用户,我们无权查看屏幕中显示的字段,并且限制了 EDIT。但是我们可以编辑屏幕中显示的大部分字段。
createPOSpecified不是自定义字段。它是 SALESORDETITEM 类中的一个属性。它不会显示在任何销售订单表格中。
如果这是创建采购订单并将其链接到销售订单的正确代码,那么我几乎没有疑问:
3.1 当我们通过 NetSuite 通过单击销售订单项目网格中的 dropship 链接创建采购订单时,我们能够看到标记已发货按钮。
但是当我们通过代码创建采购订单时,它显示接收按钮并且采购订单状态没有变化。
3.2 **createdFrom** field is displaying as below when we create purchase order through netsuite.
Run Code Online (Sandbox Code Playgroud)
当我们通过代码创建采购订单时,此字段不显示。我们已经提供了createdFrom属性的信息,但不确定为什么它没有显示
我们假设这是有助于链接销售订单的字段。我们在创建项目履行和供应商账单时提供了此信息,并且这些信息与销售订单正确链接,但我们不确定为什么采购订单未与销售订单链接。
我们的销售订单表单中没有任何用于提供采购订单的自定义交易正文字段。但是一旦通过 NetSuite 创建采购订单,采购订单编号将显示在销售订单项目网格中。
所以这一切归结为:我们在代码中遗漏了什么,以及我们必须修复什么才能显示“标记已发货”按钮、“创建自”标签以及将采购订单链接到销售订单。
谢谢,赫曼特。
小智 4
我没有答案,但希望我能做出贡献。首先,我认为你是从错误的方向来处理这个问题的。我认为您必须通过本机代发货流程初始化 PO,然后保存 PO,而不是创建 PO 然后尝试将其链接到 SO。例如,在 SuiteScript 2.0 中创建直运 PO 非常容易。其操作方法如下:
var purchaseOrder = record.create ({
type: record.Type.PURCHASE_ORDER,
isDynamic: true,
defaultValues: {
recordmode: 'dynamic',
soid: '11111',
dropship: true,
custid: '22222',
entity: '33333'
}
})
Run Code Online (Sandbox Code Playgroud)
这个新 PO 填充了 SO 中的所有有效项目,保存后所有链接都会自动完成(createdFrom在 PO 上自动设置;createdPo在 SO 项目上自动设置)。我尝试使用两种不同的方法在 SuiteTalk 中重新创建此内容,但都失败了。他们来了:
第一种方法尝试使用该方法来模拟 SuiteScript 方法initialize()。这就是从 Estimate 创建 SO 或从 SO 创建 IF 的方式,因此看起来很有希望:
var initrec = new InitializeRecord
{
type = InitializeType.purchaseOrder,
reference = new InitializeRef
{
internalId = "11111",
type = InitializeRefType.salesOrder,
typeSpecified = true
}
};
var res = NSBase.Client.Service.initialize(initrec);
// "You can not initialize purchaseOrder by referencing salesOrder."
Run Code Online (Sandbox Code Playgroud)
该错误是不言自明的。无法使用 .SO 从 SO 创建 PO initialize()。这是非常令人沮丧的。
第二种方法本质上是尝试以编程方式单击订单项上的“直达”链接。它失败并出现与您之前遇到的类似的错误:
var objSO = new SalesOrder();
objSO.internalId = "11111";
objSO.itemList = new SalesOrderItemList
{
item = new SalesOrderItem[]
{
new SalesOrderItem { line = 10, lineSpecified = true, createPo = SalesOrderItemCreatePo._dropShipment, createPoSpecified = true }
},
replaceAll = false
};
var result = Service.update(objSO);
// "You do not have permissions to set a value for element item.createpo due to one of the following reasons: 1) The field is read-only; 2) An associated feature is disabled; 3) The field is available either when a record is created or updated, but not in both cases."
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是我能做的最好的事情。初始化方法绝对看起来是最有可能解决该问题的方法,而它失败的事实让我想知道是否有可能使用 SuiteTalk 创建直运/特殊订单采购订单。
| 归档时间: |
|
| 查看次数: |
2500 次 |
| 最近记录: |