尝试将 SuiteScript 搜索结果存储为查找参数
Trying to store SuiteScript search result as a lookup parameter
我有以下代码,它 return 通过从支持案例记录中查找销售订单的内部 ID。
所以事件的顺序是:
- 通过电子邮件收到支持案例
- 自由短信正文字段包含对销售订单交易记录编号的引用。这是通过使用 'SO1547878'
的数字约定来标识的
- 通过电子邮件案例创建功能创建案例时会触发工作流。销售订单编号被提取并存储在自定义字段中。
- 使用以下工作流操作脚本查找记录的内部 ID 并将其写入控制台(日志调试):
*@NApiVersion 2.x
*@NScriptType WorkflowActionScript
* @param {Object} context
define(["N/search", "N/record"], function (search, record) {
function onAction(context) {
var recordObj = context.newRecord;
var oc_number = recordObj.getValue({ fieldId: "custevent_case_creation" });
var s = search
.create({
type: "salesorder",
filters: [
search.createFilter({
name: "tranid",
operator: search.Operator.IS,
values: [oc_number],
}),
],
columns: ["internalid"],
})
.run()
.getRange({
start: 0,
end: 1,
});
log.debug("result set", s);
return s[0];
}
return {
onAction: onAction,
};
});
我正在尝试 return 生成的内部 ID 作为参数,以便我可以为案例记录中的记录创建 link。
我被卡住了,想弄清楚我将如何做到这一点?
有没有办法将查找的内部 ID 的值存储在案例记录中? (i.e.the 一个当前在调试日志中)?
我对 JS 和 Suitescript 还很陌生,所以我不确定在这个过程中的什么时候,这个值需要存储在支持案例记录中。
在这一刻。工作流操作脚本(与上述脚本相关的工作流的一部分)设置为在提交后触发
谢谢
编辑:多亏了 Bknights,我有了一个可行的解决方案。
工作流程:
新改版脚本如下:
*@NApiVersion 2.x
*@NScriptType WorkflowActionScript
* @param {Object} context
*/
define(["N/search", "N/record"], function (search, record) {
function onAction(context) {
var recordObj = context.newRecord;
var oc_number = recordObj.getValue({ fieldId: "custevent_case_creation" });
var s = search
.create({
type: "salesorder",
filters: [
search.createFilter({
name: "tranid",
operator: search.Operator.IS,
values: [oc_number],
}),
],
columns: ["internalid"],
})
.run()
.getRange({
start: 0,
end: 1,
});
log.debug("result set", s[0].id);
return s[0].id;
}
return {
onAction: onAction,
};
});
在工作流操作脚本的脚本记录中,设置您期望的 return 类型。在这种情况下,它将是销售订单记录:
这将允许您使用 list/record 字段来存储来自脚本创建的 'search message' 工作流操作的值
结果
编辑 2:这个的变体
/**
*@NApiVersion 2.x
*@NScriptType WorkflowActionScript
* @param {Object} context
*/
define(["N/search", "N/record"], function (search, record) {
function onAction(context) {
try {
var recordObj = context.newRecord;
var oc_number = recordObj.getValue({
fieldId: "custevent_case_creation",
});
var s = search
.create({
type: "salesorder",
filters: [
search.createFilter({
name: "tranid",
operator: search.Operator.IS,
values: [oc_number],
}),
],
columns: ["internalid","department"],
})
.run()
.getRange({
start: 0,
end: 1,
});
log.debug("result set", s[0]);
recordObj.setValue({fieldId:'custevent_case_sales_order', value:s[0].id});
// return s[0]
} catch (error) {
log.debug(
error.name,
"recordObjId: " +
recordObj.id +
", oc_number:" +
oc_number +
", message: " +
error.message
);
}
}
return {
onAction: onAction,
};
});
根据您想对订单执行的操作 link,您可以做几件事。
如果您想从支持案例记录中引用销售订单记录,您需要添加自定义 List/Record 字段以支持引用交易的案例。 (例如 custevent_case_order
)
然后将此脚本移动到 beforeSubmit UserEvent 脚本,而不是 return 将其扩展为:
recordObj.setValue({fieldId:'custevent_case_order', value:s[0].id});
对于性能,您可能需要测试您是否处于 create/update 事件中以及自定义订单字段是否尚未填写。
如果这是更大工作流程的一部分,您可能仍想在用户事件脚本中查找销售订单,然后在填充该字段后启动您的工作流程。
如果您想保持工作流完整,您当前的代码可以 return s[0].id
到工作流或工作流操作自定义字段,然后将其应用到带有设置字段值操作的案例。
我有以下代码,它 return 通过从支持案例记录中查找销售订单的内部 ID。
所以事件的顺序是:
- 通过电子邮件收到支持案例
- 自由短信正文字段包含对销售订单交易记录编号的引用。这是通过使用 'SO1547878' 的数字约定来标识的
- 通过电子邮件案例创建功能创建案例时会触发工作流。销售订单编号被提取并存储在自定义字段中。
- 使用以下工作流操作脚本查找记录的内部 ID 并将其写入控制台(日志调试):
*@NApiVersion 2.x *@NScriptType WorkflowActionScript * @param {Object} context
define(["N/search", "N/record"], function (search, record) { function onAction(context) { var recordObj = context.newRecord; var oc_number = recordObj.getValue({ fieldId: "custevent_case_creation" }); var s = search .create({ type: "salesorder", filters: [ search.createFilter({ name: "tranid", operator: search.Operator.IS, values: [oc_number], }), ], columns: ["internalid"], }) .run() .getRange({ start: 0, end: 1, }); log.debug("result set", s); return s[0]; } return { onAction: onAction, }; });
我正在尝试 return 生成的内部 ID 作为参数,以便我可以为案例记录中的记录创建 link。 我被卡住了,想弄清楚我将如何做到这一点? 有没有办法将查找的内部 ID 的值存储在案例记录中? (i.e.the 一个当前在调试日志中)?
我对 JS 和 Suitescript 还很陌生,所以我不确定在这个过程中的什么时候,这个值需要存储在支持案例记录中。
在这一刻。工作流操作脚本(与上述脚本相关的工作流的一部分)设置为在提交后触发
编辑:多亏了 Bknights,我有了一个可行的解决方案。
工作流程:
新改版脚本如下:
*@NApiVersion 2.x
*@NScriptType WorkflowActionScript
* @param {Object} context
*/
define(["N/search", "N/record"], function (search, record) {
function onAction(context) {
var recordObj = context.newRecord;
var oc_number = recordObj.getValue({ fieldId: "custevent_case_creation" });
var s = search
.create({
type: "salesorder",
filters: [
search.createFilter({
name: "tranid",
operator: search.Operator.IS,
values: [oc_number],
}),
],
columns: ["internalid"],
})
.run()
.getRange({
start: 0,
end: 1,
});
log.debug("result set", s[0].id);
return s[0].id;
}
return {
onAction: onAction,
};
});
在工作流操作脚本的脚本记录中,设置您期望的 return 类型。在这种情况下,它将是销售订单记录:
这将允许您使用 list/record 字段来存储来自脚本创建的 'search message' 工作流操作的值
结果
编辑 2:这个的变体
/**
*@NApiVersion 2.x
*@NScriptType WorkflowActionScript
* @param {Object} context
*/
define(["N/search", "N/record"], function (search, record) {
function onAction(context) {
try {
var recordObj = context.newRecord;
var oc_number = recordObj.getValue({
fieldId: "custevent_case_creation",
});
var s = search
.create({
type: "salesorder",
filters: [
search.createFilter({
name: "tranid",
operator: search.Operator.IS,
values: [oc_number],
}),
],
columns: ["internalid","department"],
})
.run()
.getRange({
start: 0,
end: 1,
});
log.debug("result set", s[0]);
recordObj.setValue({fieldId:'custevent_case_sales_order', value:s[0].id});
// return s[0]
} catch (error) {
log.debug(
error.name,
"recordObjId: " +
recordObj.id +
", oc_number:" +
oc_number +
", message: " +
error.message
);
}
}
return {
onAction: onAction,
};
});
根据您想对订单执行的操作 link,您可以做几件事。
如果您想从支持案例记录中引用销售订单记录,您需要添加自定义 List/Record 字段以支持引用交易的案例。 (例如 custevent_case_order
)
然后将此脚本移动到 beforeSubmit UserEvent 脚本,而不是 return 将其扩展为:
recordObj.setValue({fieldId:'custevent_case_order', value:s[0].id});
对于性能,您可能需要测试您是否处于 create/update 事件中以及自定义订单字段是否尚未填写。
如果这是更大工作流程的一部分,您可能仍想在用户事件脚本中查找销售订单,然后在填充该字段后启动您的工作流程。
如果您想保持工作流完整,您当前的代码可以 return s[0].id
到工作流或工作流操作自定义字段,然后将其应用到带有设置字段值操作的案例。