You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ICN条目模板缓存致唯一案例编号重复问题求助

解决方案:ICN模板插件重复生成案例编号问题

我之前处理过好几起类似的ICN自定义插件缓存问题,咱们直接切入核心来解决:

问题根源

这个现象几乎可以肯定是插件的初始化逻辑只执行了一次,而ICN的客户端会缓存插件的状态和变量值。当你第一次打开模板时,插件生成了案例编号并填充;但第二次打开时,插件没有重新触发编号生成逻辑,直接复用了之前缓存的变量值,导致编号重复。

具体修复步骤

  • 绑定正确的事件触发点:别把案例编号生成逻辑写在插件的initialize方法里(这个方法只在插件加载时跑一次),而是绑定到模板每次打开的事件上,比如ICN的onTemplateOpened或者onDocumentNew事件。每次打开模板时,这个事件都会触发,确保重新执行填充逻辑。
  • 重置内部变量:如果插件里有存储上次生成编号的变量(比如cachedCaseNumber),每次触发模板打开事件时,先把这个变量清空或者重新调用生成方法,避免复用旧值。
  • 实时获取上下文数据:用户邮箱可以通过ICN的getCurrentUser()API实时获取(虽然邮箱一般不会变,但养成实时获取的习惯能避免其他缓存问题);案例编号如果是前端生成,建议用「时间戳+随机数+用户ID」的组合保证唯一性,如果需要全局唯一,最好调用后端接口生成(前端生成有重复风险)。
  • 可选:禁用模板客户端缓存:如果上述方法都不生效,可以尝试在模板配置里禁用客户端缓存(注意会影响性能,作为最后手段),或者在插件加载模板时添加no-cache请求头。

代码示例参考

// 插件中正确的事件绑定写法
this.subscribeEvent("onTemplateOpened", function(eventData) {
    // 实时获取登录用户邮箱
    const currentUser = icnAPI.getCurrentUser();
    const userEmail = currentUser.getEmail();
    
    // 重新生成唯一案例编号(这里替换成你的生成逻辑)
    const uniqueCaseNumber = `${currentUser.getId()}-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
    
    // 填充到对应的表单字段
    const emailField = document.querySelector("[name='emailField']");
    const caseNumberField = document.querySelector("[name='caseNumberField']");
    if (emailField) emailField.value = userEmail;
    if (caseNumberField) caseNumberField.value = uniqueCaseNumber;
});

关键提醒

一定要避免把需要动态生成的内容放在插件的初始化阶段,因为ICN的插件生命周期是加载一次后就常驻内存,除非刷新页面或清除缓存,否则初始化逻辑不会重复执行。绑定到模板打开的事件上,才能保证每次打开模板都触发新的生成逻辑。

内容的提问来源于stack exchange,提问作者bajji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:33:23