![](/img/trans.png)
[英]Setting inline HTML field from Client Script in SuiteScript 2.0
[英]Error in running scheduled script from suitelet form script in Suitescript 2.0?
我是套件脚本的新手。 我制作了一个包含 3 个字段的 Suitelet 表单脚本,这些字段将作为预定脚本的过滤器。 从我保存的搜索中过滤了 suit let 脚本的 3 个值后,将 PDF 文件发送到某个 email 的预定脚本。 当我点击套件表单上的按钮时,输入字段后,预定的脚本会继续处理 1 小时,然后失败。 我认为我在预定脚本中加载我保存的搜索时放置了错误的过滤器。 保存的搜索 (customsearch_mx_itemsearch) 没有任何过滤器或条件。 如果有人知道,请帮忙。 谢谢
我的 Suitelet 表单脚本:
define(['N/ui/serverWidget', 'N/search', 'N/render', 'N/runtime', 'N/file', 'N/task'],
function (ui, search, render, runtime, file, task) {
/**
* main function for suitelet
* @param {object} ctx
*/
function onRequest(ctx) {
var req = ctx.request;
var res = ctx.response;
var param = req.parameters;
/**
* create form is creating the UI for report generation
*/
if (req.method === 'GET') {
// createForm(req, res, param);
createForm(req, res, param);
} else {
generateReport(req, res, param);
}
}
// R E Q U E S T
function createForm(req, res, param) {
if (req.method === 'GET') {
var form = ui.createForm({
title: 'Generate Item Report'
});
var item = form.addField({
id: 'custpage_selectitem',
type: ui.FieldType.SELECT,
label: 'Select Item',
source: 'item'
});
item.isMandatory = true;
var gender = form.addField({
id: 'custpage_selectgender',
type: ui.FieldType.SELECT,
label: 'Select Gender',
source: 'customrecord6'
});
gender.isMandatory = true;
var fromDate = form.addField({
id: 'custpage_selectdate',
// type: ui.FieldType.DATETIME,
type: ui.FieldType.DATE,
label: 'Select Date/Time',
});
form.addSubmitButton({
label: 'Generate Report'
});
res.writePage(form);
}
}
// R E S P O N C E
function generateReport(req, res, param) {
var param = req.parameters;
log.debug('parameters', param);
var script = runtime.getCurrentScript();
var filters = {
'isgender': param.custpage_selectgender,
'isItem': param.custpage_selectitem,
'fromDate': param.custpage_selectdate
};
log.debug('filters', filters);
var scriptTask = task.create({ taskType: task.TaskType.SCHEDULED_SCRIPT });
// scriptTask.scriptId = 3920;
scriptTask.scriptId = 'customscript_mx_itemreport_ss';
scriptTask.deploymentId = 'customdeploy_mx_itemreport_ss';
scriptTask.params = {
custscript_searchfilter_report: JSON.stringify(filters)
};
log.debug('workingtillhere');
var scriptTaskId = scriptTask.submit();
res.write("Your report is being generated. It will be emailed to you shortly.")
}
return {
onRequest: onRequest
};
});
我的预定脚本:
define(['N/ui/serverWidget', 'N/search', 'N/render', 'N/runtime', 'N/file', 'N/email'],
function (ui, search, render, runtime, file, email) {
function execute() {
try {
generateReport();
}
catch (e) {
log.error('generateReport ERROR', e);
}
}
function generateReport(req, res, param) {
var slfilters = runtime.getCurrentScript().getParameter({ name: 'custscript_searchfilter_report' });
log.debug('slfilters', slfilters);
if (!!slfilters) {
slfilters = JSON.parse(slfilters);
}
log.debug('slfilters2', slfilters);
var getUser = runtime.getCurrentUser();
var gender = slfilters.isgender
log.debug('gender', gender)
var item = slfilters.isItem
log.debug('item', item)
var item = getItems(item, gender);
log.debug('items table', item)
var xmlTemplateFile = file.load(3918);
var template = script.getParameter({ name: 'custscript_template' });
var renderer = render.create();
renderer.templateContent = xmlTemplateFile.getContents();
var customSources = {
alias: 'searchdata',
format: render.DataSource.JSON,
data: JSON.stringify({
value: item,
})
};
renderer.addCustomDataSource(customSources);
var xml = renderer.renderAsString();
var pdf = render.xmlToPdf({
"xmlString": xml
});
email.send({
author: 317,
recipients: 'aniswtf@gmail.com',
subject: 'Item Report',
body: 'Report Generated: ',
attachments: [pdf]
});
}
//
// ─── GET RESULTS ───────────────────────────────────────────────────
//
const getResults = function (set) {
var results = [];
var i = 0;
while (true) {
var result = set.getRange({
"start": i,
"end": i + 1000
});
if (!result) break;
results = results.concat(result);
if (result.length < 1000) break;
i += 1000;
}
return results;
};
//
// ─── GET ITEMS ───────────────────────────────────────────────────
//
function getItems(item, gender) {
try {
var itemSearch = search.load({
id: 'customsearch_mx_itemsearch'
});
var defaultFilters = itemSearch.filters;
var arrFilters = [];
arrFilters.push(search.createFilter({
name: 'custitem5',//gender
operator: 'anyof',
values: [gender]
}));
arrFilters.push(search.createFilter({
name: 'internalid',
operator: 'anyof',
values: [item]
}));
//defaultFilters.push(arrFilters)
defaultFilters = defaultFilters.concat(arrFilters);
var results = getResults(itemSearch.run()).map(function (x) {
return {
'category': x.getText({
name: "custitem10",
join: "parent"
}),
'season': x.getValue({
name: "custitem11",
join: "parent"
}),
'riselabel': x.getValue({
name: "custitem_itemriselabel",
join: "parent"
}),
'fit': x.getValue({
name: "custitem9",
join: "parent"
}),
'name': x.getValue({ //sku
name: "itemid",
join: "parent"
}),
'style': x.getValue({
name: "custitem8",
join: "parent"
}),
'inseam': x.getValue({
name: "custitem7",
join: "parent"
}),
'wash': x.getValue({
name: "custitem_washname",
join: "parent"
}),
};
});
return results;
} catch (e) {
log.error('error in getItems', e)
}
}
return {
execute: execute
};
});
您已经为generateReport()
定义了req
、 res
和param
arguments ,但是当您在execute()
中调用generateReport()
时,实际上并没有填充它们。 您将需要为这些参数传递值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.