跳转至

值存放缓存

值存放缓存示例代码,用于在用户私有空间中存储和获取缓存数据。

存放值到缓存

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 来清除

常见应用

  1. 数据共享: 在不同脚本之间共享数据
  2. 计算结果缓存: 缓存计算结果,避免重复计算
  3. 会话数据: 存储用户会话相关的临时数据
  4. 跨表单传递: 在不同表单之间传递数据
  5. 性能优化: 缓存频繁访问的数据,提高性能

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f4ah9t0k9cnt
文档更新时间: 2023-10-25 09:59 作者:john