作为GPT综合症的一种表现,我们今朝来探究下GPT会不会抢了我们SuiteScript的编程饭碗,以及如何与之相处。以下内容来自我个人的实践总结。
我们假设一个功能场景:
为了让用户能够在报价单上实现“一键多行”功能,也就是在报价中可以通过“一键多行”按钮,一次添加多行。其中数据源来自一个自定义记录,我们把它称为“数据模板”。通过用户自己维护数据源,在报价时可以把数据源中的记录,通过点个按钮,一次性的导入当前的行上去。在报价单上放个超链接,可以打开那个数据模板。
设想中的界面如下所示:
结合chatGPT,就是OpenAI的3.5版本,我们开始了GPT辅助编程的实践。
Prompt:
使用NetSuite suitescript Client脚本,搜索一个自定义记录中匹配的Item数据,将结果插入当前的estimate的行中。请给出具体代码。
chatGPT:
以下是一个示例代码,用于搜索一个自定义记录中匹配的Item数据,并将结果插入当前的estimate的行中:
```javascript
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/search', 'N/record'], function (search, record) {
function addCustomRecordItemsToEstimate() {
// 获取当前estimate的ID
var estimateId = record.getCurrentRecord().id;
// 定义自定义记录的ID
var customRecordId = 123;
// 创建一个查询自定义记录的搜索
var customRecordSearch = search.create({
type: 'customrecord_' + customRecordId,
filters: [
['isinactive', 'is', 'F']
],
columns: [
'name',
'custrecord_item',
'custrecord_quantity'
]
});
// 运行搜索并处理结果
customRecordSearch.run().each(function (result) {
// 获取自定义记录中的Item和Quantity字段
var item = result.getValue('custrecord_item');
var quantity = result.getValue('custrecord_quantity');
// 创建一个新的estimate行
var line = record.getCurrentRecord().selectNewLine({
sublistId: 'item'
});
// 设置行上的Item和Quantity字段
record.getCurrentRecord().setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: item
});
record.getCurrentRecord().setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: quantity
});
// 保存新行并继续处理下一个结果
record.getCurrentRecord().commitLine({
sublistId: 'item'
});
return true;
});
}
return {
pageInit: function (context) {
addCustomRecordItemsToEstimate();
}
};
});
```
Prompt:
NetSuite Userevent Script,在estimate的Item list的位置添加一个Button,名字叫做“一键导入”。当用户点击时,执行前面所说的Client Script。请给出详细代码。
chatGPT:
下面是一个可能的NetSuite UserEvent Script:
```javascript
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(['N/ui/serverWidget', 'N/url'], function (serverWidget, url) {
function beforeLoad(context) {
if (context.type === context.UserEventType.VIEW) {
var form = context.form;
var sublist = form.getSublist({ id: 'item' });
sublist.addButton({
id: 'custpage_import_button',
label: '一键导入',
functionName: 'addCustomRecordItemsToEstimate'
});
var scriptUrl = url.resolveScript({
scriptId: 'customscript_my_client_script',
deploymentId: 'customdeploy_my_client_script',
returnExternalUrl: false
});
form.clientScriptModulePath = scriptUrl;
}
}
return {
beforeLoad: beforeLoad
};
});
```
这个UserEvent Script会在estimate页面加载前执行,将一个名为“一键导入”的按钮添加到Item sublist中。当用户点击这个按钮时,会执行名为“importEstimateItems”的客户端脚本。同时,这个UserEvent Script也会将客户端脚本的URL添加到estimate表单中,以便客户端脚本能够被正确加载和执行。
Prompt:
NetSuite Userevent Script,请刚才的Button旁边,添加一个超链接。这个链接可以打开某个自定义记录的界面。
chatGPT:
下面是一个可能的NetSuite UserEvent Script:
```javascript
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(['N/ui/serverWidget', 'N/url'], function (serverWidget, url) {
function beforeLoad(context) {
if (context.type === context.UserEventType.VIEW) {
var form = context.form;
var sublist = form.getSublist({ id: 'item' });
sublist.addButton({
id: 'custpage_import_button',
label: '一键导入',
functionName: 'importEstimateItems'
});
// 添加自定义记录链接
var linkUrl = url.resolveRecord({
recordType: 'customrecord_my_custom_record',
isEditMode: true
});
var link = '';
sublist.addField({
id: 'custpage_custom_record_link',
label: '自定义记录',
type: serverWidget.FieldType.INLINEHTML
}).defaultValue = link;
// 添加客户端脚本链接
var scriptUrl = url.resolveScript({
scriptId: 'customscript_my_client_script',
deploymentId: 'customdeploy_my_client_script',
returnExternalUrl: false
});
form.clientScriptModulePath = scriptUrl;
}
}
return {
beforeLoad: beforeLoad
};
});
```
这个UserEvent Script会在estimate页面加载前执行,将一个名为“一键导入”的按钮添加到Item sublist中,并在这个按钮旁边添加一个超链接,用于打开自定义记录的界面。注意,这里的自定义记录类型为`customrecord_my_custom_record`,应该替换为实际的自定义记录类型。
同时,这个UserEvent Script也会将客户端脚本的URL添加到estimate表单中,以便客户端脚本能够被正确加载和执行。
请注意,这个UserEvent Script中的代码与之前的回答中的代码是相同的,只是添加了一个新的字段来显示自定义记录链接。
基于上述的实践,我们初步总结出如下的最佳实践:
以上是我们结合GPT进行NetSuite代码的实践。基本结论是还是得有编程基础以及NetSuite SuiteScript的底子,否则效率无法提升。NetSuite开发的小伙伴可以暂时松一口气了。