?作為GPT綜合癥的一種表現(xiàn),我們今朝來探究下GPT會不會搶了我們SuiteScript的編程飯碗,以及如何與之相處。以下內(nèi)容來自我個人的實踐總結(jié)。
我們假設一個功能場景:
為了讓用戶能夠在報價單上實現(xiàn)“一鍵多行”功能,也就是在報價中可以通過“一鍵多行”按鈕,一次添加多行。其中數(shù)據(jù)源來自一個自定義記錄,我們把它稱為“數(shù)據(jù)模板”。通過用戶自己維護數(shù)據(jù)源,在報價時可以把數(shù)據(jù)源中的記錄,通過點個按鈕,一次性的導入當前的行上去。在報價單上放個超鏈接,可以打開那個數(shù)據(jù)模板。
設想中的界面如下所示:
結(jié)合chatGPT,就是OpenAI的3.5版本,我們開始了GPT輔助編程的實踐。
Prompt & chatGPT
Prompt:
使用NetSuite suitescript Client腳本,搜索一個自定義記錄中匹配的Item數(shù)據(jù),將結(jié)果插入當前的estimate的行中。請給出具體代碼。
chatGPT:
以下是一個示例代碼,用于搜索一個自定義記錄中匹配的Item數(shù)據(jù),并將結(jié)果插入當前的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;
? ??
? ? // 創(chuàng)建一個查詢自定義記錄的搜索
? ? var customRecordSearch = search.create({
? ? ? type: 'customrecord_' + customRecordId,
? ? ? filters: [
? ? ? ? ['isinactive', 'is', 'F']
? ? ? ],
? ? ? columns: [
? ? ? ? 'name',
? ? ? ? 'custrecord_item',
? ? ? ? 'custrecord_quantity'
? ? ? ]
? ? });
? ??
? ? // 運行搜索并處理結(jié)果
? ? customRecordSearch.run().each(function (result) {
? ? ??
? ? ? // 獲取自定義記錄中的Item和Quantity字段
? ? ? var item = result.getValue('custrecord_item');
? ? ? var quantity = result.getValue('custrecord_quantity');
? ? ??
? ? ? // 創(chuàng)建一個新的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
? ? ? });
? ? ??
? ? ? // 保存新行并繼續(xù)處理下一個結(jié)果
? ? ? record.getCurrentRecord().commitLine({
? ? ? ? sublistId: 'item'
? ? ? });
? ? ??
? ? ? return true;
? ? });
? }
??
? return {
? ? pageInit: function (context) {
? ? ? addCustomRecordItemsToEstimate();
? ? }
? };
});
```
Prompt:
NetSuite Userevent Script,在estimate的Item list的位置添加一個Button,名字叫做“一鍵導入”。當用戶點擊時,執(zhí)行前面所說的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頁面加載前執(zhí)行,將一個名為“一鍵導入”的按鈕添加到Item sublist中。當用戶點擊這個按鈕時,會執(zhí)行名為“importEstimateItems”的客戶端腳本。同時,這個UserEvent Script也會將客戶端腳本的URL添加到estimate表單中,以便客戶端腳本能夠被正確加載和執(zhí)行。
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 = '<a href=\ + linkUrl + '\打開自定義記錄</a>';
? ? ? 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頁面加載前執(zhí)行,將一個名為“一鍵導入”的按鈕添加到Item sublist中,并在這個按鈕旁邊添加一個超鏈接,用于打開自定義記錄的界面。注意,這里的自定義記錄類型為`customrecord_my_custom_record`,應該替換為實際的自定義記錄類型。
同時,這個UserEvent Script也會將客戶端腳本的URL添加到estimate表單中,以便客戶端腳本能夠被正確加載和執(zhí)行。
請注意,這個UserEvent Script中的代碼與之前的回答中的代碼是相同的,只是添加了一個新的字段來顯示自定義記錄鏈接。
分析與心得
代碼問題:
- 我的意圖是進行增加行,但是chatGPT給出context.UserEventType.VIEW的代碼建議。
- chatGPT把Record和CurrentRecord兩個類搞錯了,導致了類方法調(diào)用失敗。
- 在Client Script中未建立Page Init函數(shù)。
- 在Item Tab中添加serverWidget.FieldType.INLINEHTML的建議失敗,系統(tǒng)不允許。
- 在一直無法正確的添加多行的情況下,chatGPT給出了提示了兩個重要提示:一是有可能是因為必填字段沒有賦值導致的,二是通過網(wǎng)頁調(diào)試工具來檢查錯誤來源。這最終幫助了我們發(fā)現(xiàn)了錯誤來源。
心得:
- 代碼建議出現(xiàn)錯誤的概率很高,需要有代碼經(jīng)驗的人才能駕馭。
- 代碼建議的框架是完整的,特別在注釋習慣上好過人工。在解決了關鍵問題的錯誤后,能夠幫助提升效率。
- 雖然NetSuite用戶手冊給出了代碼Samples,但是chatGPT并沒有采用之 。如果能將chatGPT作為問答入口,將NetSuite的Sample Codes作為知識庫,則較好。
- chatGPT在解決JS相關的通用語法的問答上準確度高。例如,“netsuite腳本中,如何表示在本級目錄?”
- 不同的Prompt,會帶來回答的差異。所以應該從Prompt Engineering的角度來做問題優(yōu)化。
- 采用chatGPT來實現(xiàn)功能的骨干,然后人工去概念性錯誤,細節(jié)調(diào)整。這是有效的配合模式。
- 在ERP顧問領域,可以有效賦能獨立實施顧問和甲方系統(tǒng)管理員,來實現(xiàn)輕量級開發(fā)。這將深刻的改變這兩類人的工作狀態(tài)。讓顧問更加專注在業(yè)務流程的創(chuàng)新上,方便的進行概念驗證。
- 由于涉及SuiteScript的代碼,有概念性錯誤,可以判斷chatGPT在SuiteScript上的語料庫還不是很充沛,訓練不足。如果能夠建立私有化的GPT,用NetSuite的專用腳本數(shù)據(jù)去訓練,應該可以有很大改善。
結(jié)合GPT的代碼模式
基于上述的實踐,我們初步總結(jié)出如下的最佳實踐:文章來源:http://www.zghlxwxcb.cn/news/detail-432562.html
以上是我們結(jié)合GPT進行NetSuite代碼的實踐?;窘Y(jié)論是還是得有編程基礎以及NetSuite SuiteScript的底子,否則效率無法提升。NetSuite開發(fā)的小伙伴可以暫時松一口氣了。文章來源地址http://www.zghlxwxcb.cn/news/detail-432562.html
到了這里,關于NetSuite GPT的輔助編程實踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!