在 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模块)

前提设置:

  1. 启用在子列表上显示 ID 字段

  2. 为每个自定义列表值分配唯一且有意义的脚本 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.jsSuiteScript/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 开发日记:如何管理多环境自定义列表值的更多相关文章

  1. 【Android开发日记】之入门篇(一)——开发环境的搭建

    写给自己的话:至此,大学的时光已经剩下一年的时光,下一年等毕业设计结束后就算是正式地踏入社会.自己学android也不过几个月的时间,为了更好管理文档,写点东西记录下自己曾经做过的点点滴滴是一个不错的 ...

  2. 【Android开发日记】之入门篇(十四)——Button控件+自定义Button控件

        好久不见,又是一个新的学期开始了,为什么我感觉好惆怅啊!这一周也发生了不少事情,节假日放了三天的假(好久没有这么悠闲过了),实习公司那边被组长半强制性的要求去解决一个后台登陆的问题,结果就是把 ...

  3. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  4. 【Android开发日记】之入门篇(七)——Android数据存储(上)

    在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...

  5. 【Android开发日记】之入门篇(六)——Android四大组件之Broadcast Receiver

    广播接受者是作为系统的监听者存在着的,它可以监听系统或系统中其他应用发生的事件来做出响应.如设备开机时,应用要检查数据的变化状况,此时就可以通过广播来把消息通知给用户.又如网络状态改变时,电量变化时都 ...

  6. 【Android开发日记】之入门篇(十二)——Android组件间的数据传输

    组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...

  7. 【Android开发日记】之入门篇(十三)——Android的控件解析

    Android的控件都派生自android.view.View类,在android.widget包中定义了大量的系统控件供开发者使用,开发者也可以从View类及其子类中,派生出自定义的控件. 一.An ...

  8. 【Android开发日记】之入门篇(十一)——Android的Intent机制

    继续我们的Android之路吧.今天我要介绍的是Android的Intent. 对于基于组件的应用开发而言,不仅需要构造和寻找符合需求的组件,更重要的是要将组件有机的连接起来,互联互通交换信息,才能够 ...

  9. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...

  10. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

随机推荐

  1. Nomad 系列-Nomad 挂载存储卷

    系列文章 Nomad 系列文章 概述 显然,如果 Nomad 要运行有状态存储,那么挂载存储卷就是必备功能. Nomad 允许用户通过多种方式将持久数据从本地或远程存储卷装载到任务环境中: 容器存储接 ...

  2. Solution -「HDU 3507」Print Article

    Description Link. 给出 \(N\) 个单词,每个单词有个非负权值 \(C_{i}\),现要将它们分成连续的若干段,每段的代价为此段单词的权值和,还要加一个常数 \(M\),即 \(( ...

  3. 【python爬虫】爬虫所需要的爬虫代理ip是什么?

    前言 在进行爬虫程序开发时,经常会遇到访问被限制的网站,这时就需要使用代理 IP 来进行访问.本文将介绍代理 IP 的概念及使用方法,帮助读者更好地应对爬虫程序中的访问限制问题.同时,本文还将提供一些 ...

  4. mpi转以太网连接200plc通信不上实际问题和解决方法

    西门子S7200plc通信不上实际问题和解决方法 现场通信的同学在现场调试的时候,现在特别是做项目改造的项目,西门子S7200plc通信面临淘汰,但是在改造的项目中还能经常看到他们的身影,下面我们就来 ...

  5. linux中的sar命令

    linux中的sar命令 sar命令的安装 [root@localhost test]# yum install sysstat 安装成功! sar命令说明 语法格式 sar [ 选项 ] [ < ...

  6. 算法打卡|Day3 链表part01

    Day3 链表part01 今日任务 ● 链表理论基础 ● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表 目录 Day3 链表part01 链表理论基础 Problem: 203. ...

  7. 02-Shell变量

    1.Shell变量 1.1 Shell变量的介绍 变量用于存储管理临时的数据, 这些数据都是在运行内存中的. 1.2 变量类型 系统环境变量 自定义变量 特殊符号变量 2.系统环境变量 2.1 介绍 ...

  8. Java开发面试--群面专区

    目录 一.群面背景 二.群面流程 三.群面角色 四.群面细节 五.群面礼仪 六.群面话术 七.个人演讲 八.群面题型 群面也称无领导小组~ 候选人们被要求在一个相对自由的环境中展示他们的能力,并在没有 ...

  9. 关于AI时代的程序架构的变化

    以ChatGPT为代表的AI出现,表示着AI的零点时刻已经突破.现在AI的使用已经不用再多说了,实际上是已经侵入到各行各业.所有人都在疯狂寻找本行业AI的使用场景,这样的盛景只在互联网刚出现的时候能感 ...

  10. P3870 [TJOI2009] 开关(线段树)

    P3870 [TJOI2009] 开关 思路:可以用线段树来维护区间中亮灯的个数,区间修改用加上懒标记就好 #include <bits/stdc++.h> #define LL long ...