Netsuite Suitescript修改当前记录

Netsuite Suitescript修改当前记录,netsuite,Netsuite,我已经浏览了所有地方,但似乎找不到如何使用Suitescript修改现有记录。基本上,我希望能够在记录上设置一个字段来启动脚本。例如,当我查看自定义记录、潜在资源并保存它时,它会启动脚本(确实发生了);但是如何从启动脚本的记录中获取信息呢 还是我走错了方向 --这就是我的.js中的内容 function getMaxEmployeeNumber(){ var record = nlapiLoadRecord(nlapiGetRecordType()), nlapiGetRecordId());

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

还是我走错了方向

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

function getMaxEmployeeNumber(){
var record = nlapiLoadRecord(nlapiGetRecordType()), nlapiGetRecordId());
record.setFieldValue('Last Name', 'Set from script');
}
我不知道这是否有帮助,但在NetSuite中,我做了以下工作: 1.创建了名为“员工编号创建”的新用户事件脚本 2.创建了一个脚本文件,其中包含一个函数(如上),并将其添加到“脚本”选项卡下的“我的脚本”中。
3.创建了一个应用于状态为“测试”且事件类型为“编辑”的自定义记录(潜在资源)的部署。

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

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

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


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

BeforeLoad适用于向表单添加自定义按钮等操作。当然,在实际记录显示给用户之前,您不想更改它

setFieldValue函数调用需要引用自定义记录上自定义字段的ID。这些字段被称为类似“custrecord\u无论您将其命名为什么”。最佳做法是在创建自定义字段时在ID字段中输入“\u whatever”。例如,“姓”。如果您有一个具有此ID的字段,您的脚本将如下所示:

record.setFieldValue('custrecord_last_name', 'Set from script');
此外,如果使用初始化值的用户事件脚本(如设置ID),则无需加载记录。只需在BeforeLoad函数中使用此选项:

nlapiSetFieldValue('XXXXX', 'YYYYY');

设置字段的方法很多

对于客户端,您可以使用durectly nlapiSetFieldValue

或服务器,您可以通过rec=nlapiGetNewRecord或rec=nlapiLoadRecord加载记录,然后使用rec.setFieldValue、nlapismit(rec)设置字段


我发现在大多数情况下,nlapiSubmitField最有效,可以直接编辑。是失败率最低的操作。

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

下面是示例代码

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

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


请参见nlapiSubmitRecord()API

var record=nlapiLoadRecord(nlapiGetRecordType()),nlapiGetRecordId()

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


var record=nlapiLoadRecord(nlapiGetRecordType(),nlapiGetRecordId())

法律会仁慈的…我想我明白了。在阅读了nlobjRecord API文档之后,我注意到了这一行“现有NetSuite记录的nlobjRecord对象。此函数返回的记录对象与系统中显示的记录完全相同。因此,在beforeLoad用户事件脚本中,如果您试图更改字段并同时加载记录,更改将不会生效。”我将“提交后”函数设置为上面的函数,它成功了!尽管我不明白为什么在“提交前”函数中有该函数时不会生效“。在使用nlapiLoadRecord()的其他情况下,需要确保使用nlapiSubmitRecord()函数提交所做的更改。这不是您的特殊情况,但值得注意。很多时候,您可能希望在向用户显示字段之前设置字段,这可以在加载之前完成。例如,非存储的计算字段。非存储的计算字段可以定义为自定义字段。不需要编写脚本。为什么要通过API调用来获取字段的值?有没有办法直接在beforeSubmit事件/钩子脚本中获取当前记录对象并更新其字段?这些API调用实际上在当前记录上运行;在SuiteScript 1.0中,NetSuite引擎将当前记录对象放在全局上下文中,这些API调用以这种方式对其进行操作。还有其他与当前记录交互的方法,但这是最简单的。如果您调查“Record API”页面,您将看到检索当前记录引用的其他方法,例如
nlapiGetNewRecord
。那么您可以说nlapiGetFieldValue(field_id)和nlapiGetNewRecord()。getFieldValue(field_id)是等效的吗?或者一种方法比另一种更可取?谢谢你澄清:)我确实看过他们的文档,但我发现它没有太大的帮助。。对于许多循环定义。根据正在处理的事件类型,在执行
nlapiGetNewRecord
时需要小心。当事件类型为
xedit
(由用户或
nlapitsubmitfield
进行的内联编辑)时,
nlapiGetNewRecord
返回的实例仅包含已更改的字段,而不是记录上的所有字段。