【问题标题】:Suitescript Modify Current RecordSuitescript 修改当前记录
【发布时间】:2014-04-04 16:35:57
【问题描述】:

我查看了所有内容,但似乎找不到如何使用 Suitescript 修改现有记录。本质上,我希望能够在启动脚本的记录上设置一个字段。例如,当我查看自定义记录、潜在资源并保存它时 - 它会启动脚本(确实会发生);但是如何从启动脚本的记录中获取信息?

或者我是不是走错了路?

-- 这就是我的 .js 中的内容

function getMaxEmployeeNumber(){
var record = nlapiLoadRecord(nlapiGetRecordType()), nlapiGetRecordId());
record.setFieldValue('Last Name', 'Set from script');
}

我不知道这是否有帮助,但在 NetSuite 中我已经完成了以下操作: 1. 创建了一个名为“员工编号创建”的新用户事件脚本 2. 创建了一个包含一个函数的脚本文件(上图),并将其添加到我的“脚本”选项卡下的脚本中。 3. 创建了一个部署,该部署适用于状态为“正在测试”且事件类型为“编辑”的自定义记录(潜在资源)。

【问题讨论】:

  • 请原谅...我想我明白了。阅读 nlobjRecord API 文档后,我注意到“现有 NetSuite 记录的 nlobjRecord 对象。此函数返回的记录对象与系统中出现的记录完全相同。因此,在 beforeLoad 用户事件脚本中,如果您尝试更改字段并同时加载记录,更改不会生效。”我将“提交后功能”设置为我上面的功能,它起作用了!虽然我不明白为什么当我在“提交前函数”中有函数时它不会。
  • 在您使用 nlapiLoadRecord() 的其他情况下,您需要确保使用 nlapiSubmitRecord() 函数来提交您所做的更改。不是你的特殊情况,但值得注意。

标签: netsuite


【解决方案1】:

有几种方法可以将脚本连接到“保存”记录。您可以使用客户端脚本附加到“保存记录”事件,这样您就可以验证记录并在必要时阻止其保存。

您还可以使用用户事件脚本并附加到“提交前”事件,您可以在记录进入数据库之前修改任何字段,或附加到“提交后”事件,您可以在其中执行操作记录提交到数据库后的其他记录。

在任一脚本中,您都可以使用nlapiGetFieldValue 和相关函数从记录上的字段中检索信息,nlapiSetFieldValue 和相关函数将更新记录上的字段。

编辑:在 NetSuite 帮助中搜索“记录 API”以查看您可以使用的所有记录相关函数的文档。

【讨论】:

  • 为什么要调用 API 来获取字段的值?有没有办法在 beforeSubmit 事件/挂钩脚本中直接获取当前记录对象并更新其字段?
  • 那些API调用实际上是对当前记录进行操作;在 SuiteScript 1.0 中,NetSuite 引擎将当前记录对象置于全局上下文中,这些 API 调用以这种方式对其进行操作。还有其他方法可以与当前记录进行交互,但这是最简单的。如果您调查该“记录 API”页面,您将看到检索对当前记录的引用的其他方法,例如 nlapiGetNewRecord
  • 所以你可以说 nlapiGetFieldValue(field_id) 和 nlapiGetNewRecord().getFieldValue(field_id) 是等价的吗?还是一种比另一种更受欢迎?
  • 感谢您的澄清 :) 我确实查看了他们的文档,但我发现它对许多循环定义没有太大帮助。
  • 您在执行nlapiGetNewRecord 时需要小心,具体取决于您正在处理的事件类型。当事件类型为xedit(用户或nlapiSubmitField的内联编辑)时,nlapiGetNewRecord返回的实例只包含已更改的字段,而不是记录上的所有字段。
【解决方案2】:

BeforeLoad 非常适合在表单中添加自定义按钮等操作。当然,您不想在实际记录显示给用户之前对其进行更改。

您的 setFieldValue 函数调用需要引用自定义记录上的自定义字段的 ID。这些字段被称为“custrecord_whatever_you_named_it”。最佳做法是在创建自定义字段时在 ID 字段中输入“_whatever”。例如,“_last_name”。如果您有一个具有此 ID 的字段,您的脚本将如下所示:

record.setFieldValue('custrecord_last_name', 'Set from script');

此外,如果您正在使用初始化值的用户事件脚本(例如设置 ID),则无需加载记录。只需在 BeforeLoad 函数中使用它:

nlapiSetFieldValue('XXXXX', 'YYYYY');

【讨论】:

  • 很多时候您可能希望在向用户显示之前设置字段,这可以在加载前完成。例如,非存储的计算字段。
  • 非存储计算字段可以定义为自定义字段。无需编写脚本。
【解决方案3】:

设置字段的多种方式。

对于客户端,您可以直接使用 nlapiSetFieldValue。

或者服务器,你可以通过rec=nlapiGetNewRecord或者rec=nlapiLoadRecord加载记录,然后用rec.setFieldValue,nlapiSubmit(rec)设置字段。

我发现在大多数情况下最有效的方法是 nlapiSubmitField,用于直接编辑。是最容易失败的操作。

【讨论】:

    【解决方案4】:

    您必须在修改后提交记录。您可以使用函数 nlapiSubmitRecord()

    提交记录

    这是示例代码。

    function getMaxEmployeeNumber()
    {
        var record = nlapiLoadRecord(nlapiGetRecordType()), nlapiGetRecordId());
        record.setFieldValue('Last Name', 'Set from script');
        nlapiSubmitRecord(record, true);
    }
    

    【讨论】:

      【解决方案5】:

      您错过了提交记录,这就是您设置的值没有反映的原因。

      查看 nlapiSubmitRecord() API

      【讨论】:

        【解决方案6】:

        var 记录 = nlapiLoadRecord(nlapiGetRecordType()), nlapiGetRecordId());

        这一行有一个额外的括号,甚至不会在不抛出错误的情况下执行。对此进行更正,并在完成后提交记录。

        var 记录 = nlapiLoadRecord(nlapiGetRecordType(), nlapiGetRecordId());

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-08-21
          • 2018-10-28
          • 2018-11-27
          • 2018-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多