gpt4 book ai didi

c# - Netsuite:如何将采购订单链接到销售订单

转载 作者:行者123 更新时间:2023-12-03 09:36:12 24 4
gpt4 key购买 nike

我正在尝试自动将 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);

我用来更新销售订单中采购订单编号的代码:
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);

但我得到以下错误:
由于以下原因之一,您无权为元素 createPOSpecified 设置值:1) 该字段是只读的; 2) 相关功能被禁用; 3) 该字段在创建或更新记录时可用,但在两种情况下都不可用。

注:在 NetSuite 的销售订单屏幕中不显示 createPOSpecified。当我尝试更新表单中存在的销售订单中的字段时,我能够成功更新它,但我尝试更新的字段 (createPOSpecified) 在此销售表单中不可用。在这种情况下,我该如何更新?这也是将采购订单与销售订单链接的更好方法吗?

谢谢,
赫曼特。

2020 年 5 月 25 日更新(回复 Anand Rajaram)
  • 我们使用 ADMINISTRATOR 角色创建采购订单并将其链接到销售订单。我们的客户提供了具有此角色的用户,我们无权查看屏幕中显示的字段,并且限制了 EDIT。但是我们可以编辑屏幕中显示的大部分字段。
  • createPOSpecified 不是自定义字段。它是 SALESORDETITEM 类中的一个属性。它不会显示在任何销售订单表格中。

  • enter image description here
  • 如果这是创建采购订单并将其链接到销售订单的正确代码,那么我几乎没有疑问:

    3.1 当我们通过 NetSuite 通过单击销售订单项目网格中的 dropship 链接创建采购订单时,我们能够看到标记已发货按钮。

  • enter image description here

    但是当我们通过代码创建采购订单时,它显示接收按钮并且采购订单状态没有变化。

    enter image description here
    3.2 **createdFrom** field is displaying as below when we create purchase order through netsuite.

    enter image description here

    当我们通过代码创建采购订单时,此字段不显示。我们已经为 提供了信息createdFrom 属性,但不确定为什么不显示

    enter image description here

    我们假设这是有助于链接销售订单的字段。我们在创建项目履行和供应商账单时提供了此信息,并且这些信息与销售订单正确链接,但我们不确定为什么采购订单未与销售订单链接。
  • 最后关于您提供的以下评论
    这基本上是在销售订单表单上有一个自定义交易正文字段,一旦创建了采购订单,就在销售订单字段中更新新创建的采购订单。

  • 我们的销售订单表单中没有任何用于提供采购订单的自定义交易正文字段。但是一旦通过 NetSuite 创建采购订单,采购订单编号将显示在销售订单项目网格中。

    enter image description here

    所以这一切归结为:我们在代码中遗漏了什么以及我们必须修复什么才能显示“标记已发货”按钮、“创建自”标签并将采购订单链接到销售订单。

    谢谢,
    赫曼特。

    最佳答案

    我没有答案,但希望我能做出贡献。首先,我认为你从错误的方向接近这个。与其创建 PO 然后尝试将其链接到 SO,我认为您必须通过 native 直销流程初始化 PO,然后保存 PO。例如,在 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'
    }
    })

    这个新 PO 填充了来自 SO 的所有有效项目,当它保存时,所有链接都会自动完成(在 PO 上自动设置 createdFrom;在 SO 项目上自动设置 createdPo)。我尝试使用两种不同的方法在 SuiteTalk 中重新创建它,但都失败了。他们来了:

    第一种方法尝试使用 initialize() 来模拟 SuiteScript 方法。方法。这就是从估计创建 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."

    该错误是不言自明的。无法使用 initialize() 从 SO 创建 PO .这是非常令人沮丧的。

    第二种方法本质上是尝试以编程方式单击订单项上的“代发货”链接。它失败并出现与您之前遇到的类似错误:
    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."

    不幸的是,这是我能做的最好的事情。初始化方法似乎是最有可能解决问题的方法,但它失败的事实让我怀疑是否有可能使用 SuiteTalk 创建一件代发货/特殊订单 PO。

    关于c# - Netsuite:如何将采购订单链接到销售订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61936920/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com