NetSuite 开发日记 —— 估价单(Estimate)新建项目(Project)自动填入项目字段
Background
- 用户在估价单(Estimate)点击「项目」字段旁边
+
按钮新建项目(Project),在项目的自定义字段中自动填入估价单ID - 用户在项目记录存在切换自定义表格行为
Analysis
- 查看页面跳转时请求 URL 是否会带有估价单 internal ID,结论:不会带上估价单 internal ID
- 进一步查看页面跳转时请求头信息中是否带有估价单 internal id,结论:请求头
referer
字段存在估价单 internal id - 用户在切换自定义表格后,页面会刷新,本次刷新请求的请求头中不存在估价单 internal id
Solution
- 在项目的 User Event 脚本的 beforeLoad() 方法中,获取请求头中的估价单 internal ID,并填入项目的自定义字段
- 用户在切换自定义表格前,在项目的 Client 脚本中使用
sessionStorage
存储第1步中的估价单 internal ID - 在切换自定义表格刷新时在项目自定义字段中填入
sessionStorage
存储的估价单 ID
Code Example
// User Event脚本
function beforeLoad(context) {
log.debug('context.type', context.type);
if (context.type == 'create') {
log.debug('context.request', context.request);
var ref = context.request.headers.referer;
var isFromEstimate = /estimate/g.test(ref);
if (isFromEstimate) {
var idReg = /(\d)+/g;
var matchRes = ref.match(idReg) || [];
var estimateId = matchRes[matchRes.length - 1];
log.debug('estimateId', estimateId);
if (estimateId) {
context.newRecord.setValue('custentity_project_from', estimateId);
}
}
}
}
// Client脚本
var ESTIMATE_SESSION_ITEM_NAME = 'estimate_id';
function pageInit(context) {
if (context.mode == 'create') {
var estimateId = context.currentRecord.getValue('custentity_project_from') || sessionStorage.getItem(ESTIMATE_SESSION_ITEM_NAME);
log.debug('estimateId', estimateId);
if (estimateId) {
sessionStorage.setItem(ESTIMATE_SESSION_ITEM_NAME, estimateId);
context.currentRecord.setValue('custentity_project_from', estimateId);
}
}
}
本文来自博客园,作者:橙噫i,转载请注明原文链接:https://www.cnblogs.com/zhangchenyi/p/estimate_to_project.html