NetSuite API|Cache模块的基本使用

373 阅读4分钟

一、模块概述

临时存储短期数据,适用于所有服务器脚本类型。

二、cache模块

1、模块方法

cache.getCache(options) 方法

检索指定名称的cache对象,如果cache对象存在,则此方法返回cache对象,否则系统将创建新的cache对象 返回值:cahce.Cache对象 支持脚本类型:服务器脚本 用量:无

参数类型必需/可选描述
options.namestring必需要检索或要创建的cache对象的名称,该名称的最大大小为1 KB。
options.scopestring可选设置缓存的可用性。
使用cache.Scope设置此值,默认值为cache.Scope.PRIVATE
var myCache = cache.getCache({
    name: 'temporaryCache',
    scope: cache.Scope.PRIVATE
});

2、模块属性

cache.Scope

描述cache对象可用性的字符串值

描述
PRIVATEcache对象仅适用于当前脚本,默认值
PROTECTEDcache对象仅对某些脚本可用:如果脚本是bundle的一部分,则缓存可用于同一bundle中的所有脚本。如果脚本不在bundle中,则缓存可用于不在任何bundle中的所有脚本
PUBLICcache对象可用于NetSuite帐户中的所有服务器脚本

三、cache.Cache对象

1、对象方法

Cache.put(options)方法

将值放入到cache对象中 返回值:void 支持脚本类型:服务器脚本 用量:1个单位 建议使用Cache.get()方法的options.loader参数将值放入到cache对象中

范围类型必需/可选描述
options.keystring必需的从cache对象中检索到的值的标识符。该值不能为空。
options.valuestring必需的放置在缓存中的值。如果该值不是字符串,则系统将使用JSON.stringify()转换该值,然后再将其放入缓存中。该值的最大大小为500KB。
options.ttlnumber可选的该值可以保留在cache对象中的最大持续时间(以秒为单位)。请注意,在ttl达到限制之前,可能会删除该值。最小值是300(五分钟),没有最大值。默认ttl值为无限制。不能保证缓存的值在ttl值的整个持续时间内都保留在缓存中。该ttl值表示可以存储缓存的值的最长时间。缓存的数据不是持久性数据,建议将Cache.get(options) 方法与options.loader参数一起使用以设置和检索数据
var myCache = cache.getCache({
    name: 'temporaryCache',
    scope: cache.Scope.PRIVATE
});
myCache.put({
    key: 'keyText',
    value: 'valueText',
    ttl: 300
});

Cache.get(options) 方法

从cache对象中检索一个字符串值,该字符串值由options.key参数标识。如果cache对象中存在该标识的值则返回该值,否则调用options.loader参数设置的用户自定义方法 返回值:string/null 支持脚本类型:服务器脚本 用量: 如果值已经存在于cache对象中,用量为1个单位 如果使用了loader参数中的方法,用量为2个单位

参数类型必需/可选描述
options.keystring必需的从cache对象中检索值的标识符,该值不能为空。
options.loaderfunction可选,但强烈建议加载用户自定义方法,如果cache对象中不存在所请求的值,它将调用用户自定义方法。当用户自定义方法获取到一个值时,系统会自动将该值放入cache对象中。因此,NetSuite建议使用loader作为填充cache对象的主要方法。如果加载的其它程序返回的值不是字符串,则系统将使用JSON.stringify()转换该值,然后再将其放入cache对象并返回值。可以放入缓存的值的最大大小为500KB。如果未指定加载其它程序的方法,并且cache对象中缺少值,则将返回null。
options.ttlnumber可选的由loader设置的用户程序检索到的值可以保留在高速缓存中的最大持续时间(以秒为单位)。请注意,可能会在ttl达到限制之前从缓存中删除该值。最小值是300(五分钟),没有最大值。默认ttl值为无限制。注意:不能保证缓存。
var myCache = cache.getCache({
    name: 'temporaryCache',
    scope: cache.Scope.PRIVATE
});
myCache.get({
    key: 'temporaryCache',
    loader: function() {
        return file.load({
          path: 'src/res/balance_sheet/' 
        }).getContents();
    },
    ttl:300
})

Cache.remove(options) 方法

从cache对象中删除一个值 返回值:void 支持脚本类型:服务器脚本 用量:1个单位

参数类型必需/可选描述
options.keystring必需的要删除的值的标识符。
var myCache = cache.getCache({
    name: 'temporaryCache',
    scope: cache.Scope.PRIVATE
});
myCache.remove({
    key: 'keyText'
});

四、示例代码

var myPeriod = runtime.getCurrentScript().getParameter('custscript_mcds_period');
var myCache = cache.getCache({
  name : 'global_enddate_value_mtrl'
});
// 从cache中获取期间结束日期
var periodEndDate = myCache.get({
  key : 'gPeriodEndDate_mtrl',
  loader:function(){
    return search.lookupFields({
      type : 'accountingperiod',
      id : myPeriod,
      columns : [ 'enddate' ]
    }).enddate;
  }
});
// 获取货品数据
var endInvValue = getItemInvValue(item, periodEndDate);