实现较复杂的自动编号的脚本
脚本类型: Workflow Action
作用:根据传入参数生成编号,配合工作流可实现较复杂的自动编号功能
使用步骤:
- 将脚本部署在需要编号的记录上

- 随意配置下标准的自动编号功能,勾选允许覆盖

- 新建一个工作流

- 新建一个自定义Action



Action参数
- Renumber String, 使用公式:{baserecordtype} || TO_CHAR({today}, ‘YYYY-MM-DD’) || {custrecord_option},这个参数里的内容不同时,流水号将重新从1开始,脚本可能会应用在不同记录上,建议都加上baserecordtype.此公式表示每天或者字段custrecord_option不同时,都重新编号
- Prefix, 使用公式: {custrecord_option} || ‘-’, 前缀
- Suffix, 使用公式:’-’ || TO_CHAR({today}, ‘YYYY/MM/DD#’) || {id},后缀
- Max Digits, 6,流水号最小位数,不够时在数字前加0.
使用以上参数得到的编号

代码
/*** @NApiVersion 2.1* @NScriptType workflowactionscript*/
//ccy_auto_numbers_wa.js
define(['N/search', 'N/record', 'N/runtime'],function(search, record, runtime) {/*** Definition of the Suitelet script trigger point.** @param {Object} scriptContext* @param {Record} scriptContext.newRecord - New record* @param {Record} scriptContext.oldRecord - Old record* @Since 2016.1*/function onAction(scriptContext) {let renumber_string = get_script_param('custscript_ccy_renumber_string');let prefix = get_script_param('custscript_ccy_prefix');let suffix = get_script_param('custscript_ccy_suffix');let max_digits = get_script_param('custscript_ccy_max_digits');let cur_number = get_current_number(renumber_string);return prefix + add_prefix_zero(cur_number, max_digits) + suffix;}function add_prefix_zero(num, digits){let zero_count = digits - String(num).length;if(zero_count < 0) zero_count = 0;return '0'.repeat(zero_count) + String(num);}function get_current_number(renumber_string){let auto_number_record_id = get_auto_number_record_id(renumber_string);const max_retries = 10;for(let i = 0; i < max_retries; i++){try{let rec = record.load({type: 'customrecord_ccy_auto_number_record', id: auto_number_record_id});let cur_number = rec.getValue({fieldId: 'custrecord_ccy_anr_cur_number'});let next_number = Number(cur_number) + 1;rec.setValue({fieldId: 'custrecord_ccy_anr_cur_number', value: next_number});rec.save();return cur_number;}catch(e){log.error('error' + e.name, e);}}throw '同时生成号码过多,请稍后再试.';}function get_auto_number_record_id(renumber_string){const max_retries = 10;for(let i = 0; i < max_retries; i++){try{let filexp = ['externalid', 'anyof', renumber_string];let asearch = search.create({type: 'customrecord_ccy_auto_number_record', filters: filexp});let res = asearch.run().getRange({start: 0, end: 1});if(res.length > 0){return res[0].id;}else{let rec = record.create({type: 'customrecord_ccy_auto_number_record'});rec.setValue({fieldId: 'externalid', value: renumber_string});rec.setValue({fieldId: 'custrecord_ccy_anr_cur_number', value: 1});let anrid = rec.save();return anrid;}}catch(e){log.error('error' + e.name, e);}}throw '同时生成号码过多,请稍后再试.';}function get_script_param(name){return runtime.getCurrentScript().getParameter({name: name});}return {onAction : onAction};});
SDF项目
点此下载
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
