NetSuite 开发日记 —— 估价单(Estimate)新建项目(Project)自动填入项目字段

Background

  1. 用户在估价单(Estimate)点击「项目」字段旁边+按钮新建项目(Project),在项目的自定义字段中自动填入估价单ID
  2. 用户在项目记录存在切换自定义表格行为

Analysis

  1. 查看页面跳转时请求 URL 是否会带有估价单 internal ID,结论:不会带上估价单 internal ID
  2. 进一步查看页面跳转时请求头信息中是否带有估价单 internal id,结论:请求头referer字段存在估价单 internal id
  3. 用户在切换自定义表格后,页面会刷新,本次刷新请求的请求头中不存在估价单 internal id

Solution

  1. 在项目的 User Event 脚本的 beforeLoad() 方法中,获取请求头中的估价单 internal ID,并填入项目的自定义字段
  2. 用户在切换自定义表格前,在项目的 Client 脚本中使用sessionStorage存储第1步中的估价单 internal ID
  3. 在切换自定义表格刷新时在项目自定义字段中填入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);
		}
	}
}
posted @ 2022-12-26 14:15  橙噫i  阅读(54)  评论(0编辑  收藏  举报