NetSuite 开发日记:如何管理多环境自定义列表值
在 NetSuite 中可以创建自定义列表,列表可用于为其他(自定义)记录上的下拉选项列表值。
var rec = record.create({
type: 'customrecord_xx'
});
rec.setValue({
fieldId: 'custrecord_xx_fld',
value: '1'
});
rec.save();
我们设置自定义列表值,需要使用该值的内部 ID。但是,内部 ID 是特定于环境的。这意味着,对于相同的自定义列表值,生产中的内部 ID 可能与沙盒中的内部 ID 不同。

那么,我们如何管理多个环境中同一自定义列表的内部 ID 不同的情况呢?
方式一:使用SuiteScript查询(N/search模块、N/query模块)
前提设置:
- 启用在子列表上显示 ID 字段

- 为每个自定义列表值分配唯一且有意义的脚本 ID

function getListValueId(list, listValueScriptId) {
var listValueId = null;
search.create({
type: list,
columns: [
'internalid',
'scriptid'
]
}).run().each(function(result) {
// Note: From tests, the script ID from the search results are always uppercase.
if (result.getValue("scriptid") === listValueScriptId.toUpperCase()) {
listValueId = result.getValue('internalid');
}
// Stop iterating when we find the target ID.
return (listValueId === null);
});
return listValueId;
}
function getListValueId(listType, listValueScriptId) {
var listValueId;
const sql = "SELECT ID FROM ? WHERE scriptid = ?";
var resultSet = query.runSuiteQL({ query: sql, params: [listType, listValueScriptId.toUpperCase()] }).asMappedResults();
return listValueId = (resultSet.length === 1 ? resultSet[0].id : null);
}
但这种方式有个显而易见的缺点,查询需要消耗Usage(Usage是NetSuite管理API的一种方式)
方式二:将自定义列表值配置在javaScript文件
SuiteScript
└─ src
├─ constant
│ ├─ 123456
│ │ └─ const.js
│ ├─ 123456_SB1
│ │ └─ const.js
│ └─ const.js
└─ suitelet
└─ test_sl.js
SuiteScript/src/constant/123456/const.js或SuiteScript/src/constant/123456_SB1/const.js文件内容
// 123456/const.js
define([], function () {
return {
TASK_LEVEL: {
LOW: 1,
Medium: 2,
High: 3
}
};
});
// 123456_SB1/const.js
define([], function () {
return {
TASK_LEVEL: {
LOW: 4,
Medium: 5,
High: 6
}
};
});
SuiteScript/src/constant/const.js文件内容
/**
* @NApiVersion 2.x
*/
define(['N/runtime', './123456/const', './123456_SB1/const'], function (runtime, prodConst, sandboxConst) {
var constJSON = {};
var accountId = runtime.accountId;
switch (accountId) {
case '123456':
// 生产环境
constJSON = prodConst;
break;
case '123456_SB1':
// 沙盒环境
constJSON = sandboxConst;
break;
}
return constJSON;
});
SuiteScript/src/client/test_cs.js文件内容
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
define(['../constant/const'], function (cuxConst) {
/**
* Definition of the Suitelet script trigger point.
* @param {Object} context
* @param {ServerRequest} context.request - Encapsulation of the incoming request
* @param {ServerResponse} context.response - Encapsulation of the Suitelet response
* @Since 2015.2
*/
function onRequest(context) {
var response = context.response;
response.wirte(cuxConst.TASK_LEVEL.LOW);
}
return {
onRequest: onRequest
};
});
NetSuite 开发日记:如何管理多环境自定义列表值的更多相关文章
- 【Android开发日记】之入门篇(一)——开发环境的搭建
写给自己的话:至此,大学的时光已经剩下一年的时光,下一年等毕业设计结束后就算是正式地踏入社会.自己学android也不过几个月的时间,为了更好管理文档,写点东西记录下自己曾经做过的点点滴滴是一个不错的 ...
- 【Android开发日记】之入门篇(十四)——Button控件+自定义Button控件
好久不见,又是一个新的学期开始了,为什么我感觉好惆怅啊!这一周也发生了不少事情,节假日放了三天的假(好久没有这么悠闲过了),实习公司那边被组长半强制性的要求去解决一个后台登陆的问题,结果就是把 ...
- 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权
原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...
- 【Android开发日记】之入门篇(七)——Android数据存储(上)
在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...
- 【Android开发日记】之入门篇(六)——Android四大组件之Broadcast Receiver
广播接受者是作为系统的监听者存在着的,它可以监听系统或系统中其他应用发生的事件来做出响应.如设备开机时,应用要检查数据的变化状况,此时就可以通过广播来把消息通知给用户.又如网络状态改变时,电量变化时都 ...
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...
- 【Android开发日记】之入门篇(十三)——Android的控件解析
Android的控件都派生自android.view.View类,在android.widget包中定义了大量的系统控件供开发者使用,开发者也可以从View类及其子类中,派生出自定义的控件. 一.An ...
- 【Android开发日记】之入门篇(十一)——Android的Intent机制
继续我们的Android之路吧.今天我要介绍的是Android的Intent. 对于基于组件的应用开发而言,不仅需要构造和寻找符合需求的组件,更重要的是要将组件有机的连接起来,互联互通交换信息,才能够 ...
- Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解
返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...
随机推荐
- 钉钉旧版服务端SDK支持异步方法的升级改造
最近项目中需要对接钉钉,有些钉钉 API 的访问需要使用旧版服务端 SDK 才能搞定,但是这个 SDK 使用的还是 .NET Framework 2.0 框架,不能跨平台部署,也不支持 async\a ...
- docker bridge网络类型研究
bridge模式是docker的默认网络模式,使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能.可以使用iptables -t nat -vnL ...
- HashMap底层源码分析
HashMap底层原理实现 1.HashMap初始化 jdk1.8版本之后:数组+链表+红黑树实现,先去观看HashMap的构造方法: 构造方法: public HashMap() { this.lo ...
- xftp 7必须更新最新版本怎么解决
下载可以查看16进制的软件: Sublime Text 运行XFTP7 双击打开是:这样的 解决方案 用Sublime Text进行打开nslicense.dll, 打开之后查找"0f88 ...
- Python面向对象——Mixin机制、重载、多态与鸭子类型、绑定与非绑定方法、Python常见的内置函数
文章目录 内容回顾 Mixin机制 1.什么是Mixin 2.Mixin来源 3.定义及优点 4.在python中的应用 5.在Django项目中的应用 重载(在子类派生的新方法中如何重用父类的功能) ...
- Rethinking Point Cloud Registration as Masking and Reconstruction论文阅读
Rethinking Point Cloud Registration as Masking and Reconstruction 2023 ICCV *Guangyan Chen, Meiling ...
- 创建Oracle数据库实例、配置PLSQL连接数据库实例
方法一:仅安装Oracle即时客户端: 1.安装Oracle即时客户端Instant Client Setup.exe,配置环境变量 2.安装PLSQL工具,配置Oracle主目录名和OCI库 3.配 ...
- RK3588平台产测之ArmSoM产品高温环境测试
1. 简介专栏总目录 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行严苛的多次全方位的功能测试以及性能压力测试才能够 ...
- 数据结构与算法(LeetCode) 第二节 链表结构、栈、队列、递归行为、哈希表和有序表
一.链表结构 1.单向链表节点结构 public class Node{ public int value; public Node next; public Node(int data){ valu ...
- 通过.NET Core CLI 来创建并运行ASP.NET CORE应用程序
说明: .NET Core 命令行接口 (CLI) 工具是用于开发.生成.运行和发布 .NET Core 应用程序的跨平台工具链. .NET Core CLI 包含在 .NET Core SDK 中. ...