Dee*_*gan 1 javascript json global-variables netsuite suitescript
我有一个名为itemId的JavaScript全局变量(此itemId是一个具有键值对的对象),此对象将存储标准项记录详细信息.
我能够在"用户事件脚本加载前事件"中存储此值,并尝试在"提交前事件"中访问全局变量"itemId",但此itemId(Object)变为空值.
当试图使用Key获取此对象的值时,它显示错误:":无法读取属性"ItemQuantityTolerance"from undefined"
码:
SuiteScript版本:2.0
var itemId = new Object();
function beforeLoad(scriptContext) {
try {
var IR_Record = scriptContext.newRecord;
var form = scriptContext.form;
form.clientScriptFileId = 50137;
if (IR_Record != null && IR_Record != '' && IR_Record != undefined) {
var ItemsId = new Array();
var IR_LineItemCount = null;
var lineNumber = null;
IR_LineItemCount = IR_Record.getLineCount('item');
log.debug('Value', 'IR_LineItemCount : ' + IR_LineItemCount);
if (IR_LineItemCount != null && IR_LineItemCount != '' && IR_LineItemCount != undefined) {
for (var i = 0; i < IR_LineItemCount; i++) {
lineNumber = i;
log.debug('Value', 'LineNumber : ' + lineNumber);
var IR_ItemId = IR_Record.getSublistValue({
sublistId: 'item',
fieldId: 'item',
line: i
});
ItemsId[lineNumber] = IR_ItemId;
log.debug('Value', 'IR_ItemId : ' + IR_ItemId);
}
if (ItemsId != null && ItemsId != '' && ItemsId != undefined) {
log.debug('Value:', 'ItemsId:' + ItemsId);
getItemToleranceValues(ItemsId);
}
}
}
} catch (exception) {
log.debug("Value :", "Before-Load Error :", exception.message);
throw exception.message;
}
}
function getItemToleranceValues(ItemsId) {
try {
var ItemDetialsSearch = "";
var ItemSearchResults = "";
var Item_Id = null;
var Item_Name = "";
ItemDetialsSearch = search.create({
type: 'item',
filters: ['internalid', 'anyof', ItemsId],
columns: ['internalid', 'itemid']
});
if (ItemDetialsSearch != null && ItemDetialsSearch != '' && ItemDetialsSearch != undefined) {
ItemSearchResults = ItemDetialsSearch.run().getRange(0, 200);
if (ItemSearchResults != null && ItemSearchResults != '' && ItemSearchResults != undefined) {
for (var i = 0; i < ItemSearchResults.length; i++) {
var itemDetails = new Object();
Item_Id = ItemSearchResults[i].getValue('internalid');
Item_Name = ItemSearchResults[i].getValue('itemid');
if (Item_Name != null && Item_Name != '' && Item_Name != undefined) {
itemDetails['ItemName'] = Item_Name;
}
itemId[Item_Id] = itemDetails;
}
log.debug("itemId:", itemId);
}
}
} catch (exception) {
log.debug("Value:", "Item-Tolerance-Value Error:" + exception.message);
throw exception.message;
}
}
function beforeSubmit(scriptContext) {
try {
var IR_Record = scriptContext.newRecord;
var itemName = "";
if (IR_Record != null && IR_Record != '' && IR_Record != undefined) {
if (itemId != null && itemId != '' && itemId != undefined) {
log.debug("itemId:", itemId);
itemName = itemId[IR_ItemId]['ItemName']; // Getting Empty Values at this point, eventhough it is global variable with values
log.debug('Value', 'itemName : ' + itemName);
}
}
}catch(exception){
throw exception.message;
}
Run Code Online (Sandbox Code Playgroud)
itemId对象的示例值:
{
337: {
ItemName: "Apple",
},
359: {
ItemName: "Orange"
}
}
Run Code Online (Sandbox Code Playgroud)
如何访问全局变量itemId使用它属性"ItemName"获取值.
提前致谢.
您错误地理解了脚本执行生命周期.在服务器端,在加载之前,在提交之前和提交之后执行都是完全独立的.它看起来像您正在加载的itemId的唯一的地方是通过调用getItemToleranceValues你的beforeLoad脚本,但你访问你的空值beforeSubmit的脚本.
如果有理由在beforeLoad脚本中加载该值,则可以将该值缓存在会话变量中,然后在beforeSubmit脚本中检索它.请参阅N /运行时模块中的Session.get/set