在 Suitelet 上单击按钮时触发客户端脚本?
Trigger a client script on a button clicked on a Suitelet?
我正在尝试根据在 suitelet 上单击的按钮更新自定义记录上的值
这将有 3 或 4 个不同的按钮。
点击按钮只能加载一个设置页面。
例如,'recurring'在suitelet上被点击。这将加载自定义记录页面并设置参数。
如果单击 'fortnightly invoice' 按钮,这也会加载相同的自定义记录页面并设置参数。
我被卡住的地方:我有一个带有按钮的套件,这些按钮旨在通过调用客户端脚本函数来加载自定义记录
相反,一旦 suitelet 加载,自定义记录页面就会加载并卡在无限循环中,一次又一次地重新加载
这是我的 suitelet 脚本:
/**
*@NApiVersion 2.x
*@NScriptType Suitelet
*/
define(["N/ui/serverWidget"], function (ui) {
var exports = {};
function onRequest(context) {
if (context.request.method === "GET") {
var form = ui.createForm({
title: "Consolidated Invoicing Type",
});
// form.clientScriptModulePath =
// "SuiteScripts/sdf_ignore/Consolidated Invoice Client Script.js";
form.clientScriptFileId = 2659;
form.addButton({
id: "recurring",
label: "Recurring",
functionName: "pageInit",
});
context.response.writePage(form);
} else if ((context.response.method = "POST")) {
log.debug({
title: "request method type",
details: "suitelet is posting",
});
}
}
exports.onRequest = onRequest;
return exports;
});
这是客户端脚本:
/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define(["N/record", "N/runtime", "N/url"], function (
record,
runtime,
url
) {
/**
* @param {ClientScriptContext.pageInit} context
*/
function pageInit(context) {
var scriptObj = runtime.getCurrentScript();
var recordType = scriptObj.getParameter("custscript_ci_suitelet_record");
var pageUrl =
"https://tstdrv.app.netsuite.com/app/common/custom/custrecordentry.nl?rectype=143&id=1&e=T";
var url = new URL(pageUrl);
window.location.href = url;
}
return {
pageInit: pageInit,
};
});
我是否需要使用其他脚本类型来设置自定义记录的值? (即不是客户端脚本)
我如何 link suitelet 的 userevent 脚本,以便在单击按钮时触发它?
如果客户端脚本应该绑定到表单上的按钮,为什么会在加载 suitelet 页面时自动启动?
谢谢
页面不断重新加载,因为客户端脚本中的“pageInit”函数将由 Netsuite 自动执行,因为“pageInit”是默认的 Netsuite 入口函数。如果您只是重命名您的函数,它将起作用:
小套房:
form.addButton({
id: "recurring",
label: "Recurring",
functionName: "executeRecurring",
});
在客户端脚本上:
/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define(["N/record", "N/runtime", "N/url"], function (
record,
runtime,
url
) {
/**
* @param {ClientScriptContext.pageInit} context
*/
function executeRecurring() {
var scriptObj = runtime.getCurrentScript();
var recordType = scriptObj.getParameter("custscript_ci_suitelet_record");
var pageUrl =
"https://tstdrv.app.netsuite.com/app/common/custom/custrecordentry.nl?rectype=143&id=1&e=T";
var url = new URL(pageUrl);
window.location.href = url;
}
function pageInit(context) { // you need to keep at least one Netsuite Entry function, otherwise you will get an error
}
return {
pageInit: pageInit,
executeRecurring: executeRecurring
};
});
另外如果参数custscript_ci_suitelet_record是Suitelet脚本中的参数,那么你将无法在客户端脚本中得到它的值,你必须获取 Suitelet 脚本的值并在按钮调用期间将其作为参数传递:
套房:
/**
*@NApiVersion 2.x
*@NScriptType Suitelet
*/
define(["N/ui/serverWidget", "N/runtime"], function (ui, runtime) {
var exports = {};
function onRequest(context) {
if (context.request.method === "GET") {
var form = ui.createForm({
title: "Consolidated Invoicing Type",
});
// form.clientScriptModulePath =
// "SuiteScripts/sdf_ignore/Consolidated Invoice Client Script.js";
form.clientScriptFileId = 2659;
var recordType = runtime.getCurrentScript().getParameter("custscript_ci_suitelet_record");
form.addButton({
id: "recurring",
label: "Recurring",
functionName: "executeRecurring('" + recordType + "')",
});
context.response.writePage(form);
} else if ((context.response.method = "POST")) {
log.debug({
title: "request method type",
details: "suitelet is posting",
});
}
}
exports.onRequest = onRequest;
return exports;
});
客户端脚本:
/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define(["N/record", "N/runtime", "N/url"], function (
record,
runtime,
url
) {
/**
* @param {ClientScriptContext.pageInit} context
*/
function executeRecurring(recType) {
var pageUrl =
"https://tstdrv.app.netsuite.com/app/common/custom/custrecordentry.nl?rectype=" + recType + "&id=1&e=T";
var url = new URL(pageUrl);
window.location.href = url;
}
function pageInit(context) { // you need to keep at least one Netsuite Entry function, otherwise you will get an error
}
return {
pageInit: pageInit,
executeRecurring: executeRecurring
};
});
我正在尝试根据在 suitelet 上单击的按钮更新自定义记录上的值
这将有 3 或 4 个不同的按钮。
点击按钮只能加载一个设置页面。
例如,'recurring'在suitelet上被点击。这将加载自定义记录页面并设置参数。 如果单击 'fortnightly invoice' 按钮,这也会加载相同的自定义记录页面并设置参数。
我被卡住的地方:我有一个带有按钮的套件,这些按钮旨在通过调用客户端脚本函数来加载自定义记录
相反,一旦 suitelet 加载,自定义记录页面就会加载并卡在无限循环中,一次又一次地重新加载
这是我的 suitelet 脚本:
/**
*@NApiVersion 2.x
*@NScriptType Suitelet
*/
define(["N/ui/serverWidget"], function (ui) {
var exports = {};
function onRequest(context) {
if (context.request.method === "GET") {
var form = ui.createForm({
title: "Consolidated Invoicing Type",
});
// form.clientScriptModulePath =
// "SuiteScripts/sdf_ignore/Consolidated Invoice Client Script.js";
form.clientScriptFileId = 2659;
form.addButton({
id: "recurring",
label: "Recurring",
functionName: "pageInit",
});
context.response.writePage(form);
} else if ((context.response.method = "POST")) {
log.debug({
title: "request method type",
details: "suitelet is posting",
});
}
}
exports.onRequest = onRequest;
return exports;
});
这是客户端脚本:
/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define(["N/record", "N/runtime", "N/url"], function (
record,
runtime,
url
) {
/**
* @param {ClientScriptContext.pageInit} context
*/
function pageInit(context) {
var scriptObj = runtime.getCurrentScript();
var recordType = scriptObj.getParameter("custscript_ci_suitelet_record");
var pageUrl =
"https://tstdrv.app.netsuite.com/app/common/custom/custrecordentry.nl?rectype=143&id=1&e=T";
var url = new URL(pageUrl);
window.location.href = url;
}
return {
pageInit: pageInit,
};
});
我是否需要使用其他脚本类型来设置自定义记录的值? (即不是客户端脚本)
我如何 link suitelet 的 userevent 脚本,以便在单击按钮时触发它?
如果客户端脚本应该绑定到表单上的按钮,为什么会在加载 suitelet 页面时自动启动?
谢谢
页面不断重新加载,因为客户端脚本中的“pageInit”函数将由 Netsuite 自动执行,因为“pageInit”是默认的 Netsuite 入口函数。如果您只是重命名您的函数,它将起作用:
小套房:
form.addButton({
id: "recurring",
label: "Recurring",
functionName: "executeRecurring",
});
在客户端脚本上:
/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define(["N/record", "N/runtime", "N/url"], function (
record,
runtime,
url
) {
/**
* @param {ClientScriptContext.pageInit} context
*/
function executeRecurring() {
var scriptObj = runtime.getCurrentScript();
var recordType = scriptObj.getParameter("custscript_ci_suitelet_record");
var pageUrl =
"https://tstdrv.app.netsuite.com/app/common/custom/custrecordentry.nl?rectype=143&id=1&e=T";
var url = new URL(pageUrl);
window.location.href = url;
}
function pageInit(context) { // you need to keep at least one Netsuite Entry function, otherwise you will get an error
}
return {
pageInit: pageInit,
executeRecurring: executeRecurring
};
});
另外如果参数custscript_ci_suitelet_record是Suitelet脚本中的参数,那么你将无法在客户端脚本中得到它的值,你必须获取 Suitelet 脚本的值并在按钮调用期间将其作为参数传递:
套房:
/**
*@NApiVersion 2.x
*@NScriptType Suitelet
*/
define(["N/ui/serverWidget", "N/runtime"], function (ui, runtime) {
var exports = {};
function onRequest(context) {
if (context.request.method === "GET") {
var form = ui.createForm({
title: "Consolidated Invoicing Type",
});
// form.clientScriptModulePath =
// "SuiteScripts/sdf_ignore/Consolidated Invoice Client Script.js";
form.clientScriptFileId = 2659;
var recordType = runtime.getCurrentScript().getParameter("custscript_ci_suitelet_record");
form.addButton({
id: "recurring",
label: "Recurring",
functionName: "executeRecurring('" + recordType + "')",
});
context.response.writePage(form);
} else if ((context.response.method = "POST")) {
log.debug({
title: "request method type",
details: "suitelet is posting",
});
}
}
exports.onRequest = onRequest;
return exports;
});
客户端脚本:
/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define(["N/record", "N/runtime", "N/url"], function (
record,
runtime,
url
) {
/**
* @param {ClientScriptContext.pageInit} context
*/
function executeRecurring(recType) {
var pageUrl =
"https://tstdrv.app.netsuite.com/app/common/custom/custrecordentry.nl?rectype=" + recType + "&id=1&e=T";
var url = new URL(pageUrl);
window.location.href = url;
}
function pageInit(context) { // you need to keep at least one Netsuite Entry function, otherwise you will get an error
}
return {
pageInit: pageInit,
executeRecurring: executeRecurring
};
});