值存放缓存¶
值存放缓存示例代码,用于在用户私有空间中存储和获取缓存数据。
存放值到缓存¶
new Packages.cn.myapps.common.util.cache.MemoryCacheUtil().putToPrivateSpace("key", "value", getWebUser());
从缓存获取值¶
var type = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil().getFromPrivateSpace("key", getWebUser());
type;
脚本说明¶
该脚本使用内存缓存工具类在用户的私有空间中存储和获取数据。缓存数据存储在内存中,与当前用户关联,可以在同一会话的不同脚本中共享使用。
脚本功能¶
存放值到缓存¶
- 使用
putToPrivateSpace()方法将数据存储到用户私有空间 - 数据以键值对的形式存储
- 缓存与当前用户关联
从缓存获取值¶
- 使用
getFromPrivateSpace()方法从用户私有空间获取数据 - 通过键(key)获取对应的值(value)
- 如果键不存在,返回 null
使用场景¶
- 在不同脚本之间共享数据
- 临时存储计算结果
- 存储用户会话数据
- 避免重复计算
- 跨表单数据传递
扩展示例¶
示例1:存储和获取字符串¶
// 存储
(function(){
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
cacheUtil.putToPrivateSpace("username", "张三", getWebUser());
cacheUtil.putToPrivateSpace("department", "技术部", getWebUser());
})();
// 获取
(function(){
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
var username = cacheUtil.getFromPrivateSpace("username", getWebUser());
var department = cacheUtil.getFromPrivateSpace("department", getWebUser());
return "用户名:" + username + ",部门:" + department;
})();
示例2:存储和获取对象¶
// 存储对象
(function(){
var doc = getCurrentDocument();
var docId = doc.getId();
var docData = {
id: docId,
name: doc.getItemValueAsString("名称"),
amount: doc.getItemValueAsDouble("金额")
};
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
cacheUtil.putToPrivateSpace("docData", docData, getWebUser());
})();
// 获取对象
(function(){
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
var docData = cacheUtil.getFromPrivateSpace("docData", getWebUser());
if(docData != null){
return "文档ID:" + docData.id;
}
return "缓存中没有数据";
})();
示例3:存储计算结果¶
// 计算并存储
(function(){
var doc = getCurrentDocument();
var amount1 = doc.getItemValueAsDouble("金额1");
var amount2 = doc.getItemValueAsDouble("金额2");
var total = amount1 + amount2;
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
cacheUtil.putToPrivateSpace("totalAmount", total, getWebUser());
return total;
})();
// 获取计算结果
(function(){
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
var total = cacheUtil.getFromPrivateSpace("totalAmount", getWebUser());
return total != null ? total : 0;
})();
示例4:判断缓存是否存在¶
(function(){
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
var value = cacheUtil.getFromPrivateSpace("key", getWebUser());
if(value == null){
// 缓存不存在,执行初始化
cacheUtil.putToPrivateSpace("key", "初始值", getWebUser());
return "已初始化缓存";
}else{
// 缓存存在,使用缓存值
return "使用缓存值:" + value;
}
})();
示例5:清除缓存¶
(function(){
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
// 通过设置为null来清除缓存
cacheUtil.putToPrivateSpace("key", null, getWebUser());
// 或者重新获取,如果返回null则表示已清除
var value = cacheUtil.getFromPrivateSpace("key", getWebUser());
return value == null ? "缓存已清除" : "缓存值:" + value;
})();
示例6:跨表单数据传递¶
// 在表单A中存储数据
(function(){
var doc = getCurrentDocument();
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
cacheUtil.putToPrivateSpace("formA_data", doc.getItemValueAsString("字段1"), getWebUser());
})();
// 在表单B中获取数据
(function(){
var cacheUtil = new Packages.cn.myapps.common.util.cache.MemoryCacheUtil();
var formA_data = cacheUtil.getFromPrivateSpace("formA_data", getWebUser());
if(formA_data != null){
var doc = getCurrentDocument();
doc.findItem("字段1").setValue(formA_data);
}
})();
关键函数说明¶
存放值到缓存¶
new Packages.cn.myapps.common.util.cache.MemoryCacheUtil(): 创建内存缓存工具类实例putToPrivateSpace("key", "value", user): 将值存储到用户私有空间- 参数1: 键(key),字符串类型
- 参数2: 值(value),可以是字符串、数字、对象等
- 参数3: 用户对象,使用
getWebUser()获取
从缓存获取值¶
getFromPrivateSpace("key", user): 从用户私有空间获取值- 参数1: 键(key),字符串类型
- 参数2: 用户对象,使用
getWebUser()获取 - 返回值: 对应的值,如果不存在返回 null
缓存特性¶
- 用户私有: 每个用户的缓存数据是独立的,不会相互干扰
- 内存存储: 数据存储在内存中,速度快但会随会话结束而清除
- 键值对: 使用键值对的方式存储和获取数据
- 类型灵活: 可以存储字符串、数字、对象等不同类型的数据
注意事项¶
- ⚠️ 缓存是临时的: 缓存数据存储在内存中,会话结束后会自动清除
- ⚠️ 键名要唯一: 使用有意义的键名,避免与其他缓存数据冲突
- ⚠️ 用户关联: 缓存与用户关联,不同用户的数据是独立的
- ⚠️ 空值处理: 获取缓存时可能返回 null,需要判断
- 缓存数据不会持久化到数据库,重启服务后会丢失
- 建议使用有意义的键名,便于维护和调试
- 避免存储大量数据,影响内存使用
- 缓存的生命周期与用户会话相关
缓存生命周期¶
- 创建: 使用
putToPrivateSpace()时创建 - 存在: 在用户会话期间一直存在
- 清除: 会话结束或服务重启时自动清除
- 手动清除: 可以通过设置为 null 来清除
常见应用¶
- 数据共享: 在不同脚本之间共享数据
- 计算结果缓存: 缓存计算结果,避免重复计算
- 会话数据: 存储用户会话相关的临时数据
- 跨表单传递: 在不同表单之间传递数据
- 性能优化: 缓存频繁访问的数据,提高性能
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f4ah9t0k9cnt
文档更新时间: 2023-10-25 09:59 作者:john