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

如何在2sxc DNN模块模态窗口中获取当前编辑实体的id、guid数据

2sxc自定义字段获取当前编辑实体ID/GUID/类型的正确方法

不要通过爬DOM、解析iframe地址、读取内部未暴露全局对象的方式取值,这些方式要么取值不准,要么跨版本会失效。2sxc自定义字段的标准运行时上下文已经自带所有你需要的实体信息,直接取用即可:

方法1:初始化时从入参获取上下文

2sxc加载你的自定义字段JS时,会自动向初始化方法注入完整的运行上下文,这是官方推荐的最稳定的取值方式:

  • 编辑已有实体时,返回的是当前实际打开编辑的实体数据,哪怕是嵌套在应用设置等非页面实体编辑场景下,取值也和外层iframe传参无关,完全准确
  • 新建实体时,实体ID为0(保存后才会生成正式ID),但GUID会在初始化阶段预生成,可正常使用
  • 返回的实体类型是系统静态名称,不是UI上可自定义的多语言显示标签

示例代码:

// 你的自定义字段入口文件 /system/field-string-my-custom-field/index.js
export function init(context) {
  // 核心实体数据
  const currentEntityId = context.entity.id;
  const currentEntityGuid = context.entity.guid;
  const currentEntityTypeName = context.entity.type.name;

  // 以下写你的字段业务逻辑即可
}

方法2:运行时从字段DOM节点取上下文

如果你的代码结构没有在初始化阶段保存上下文对象,也可以直接从自定义字段对应的DOM节点上读取绑定的上下文,不需要查找全局的formBuilderRef对象:

// 替换为你的自定义字段对应的DOM容器选择器
const fieldWrap = document.querySelector('[data-field-group="你的字段系统名"]');
// 2sxc渲染字段时会自动将上下文绑定到DOM节点的该属性上
const fieldContext = fieldWrap.__2sxcFieldContext;

// 取值和初始化入参完全一致
const { id, guid, type: { name: typeName } } = fieldContext.entity;

避坑提醒

  • 禁止从iframe的src解析EntityId参数:该参数是弹窗首次打开时的外层上下文ID,当你在编辑界面嵌套打开其他实体(比如应用配置、关联子实体编辑弹窗)时,该参数不会更新,取值完全不匹配
  • 禁止解析弹窗顶部标题获取实体类型:标题是支持多语言、自定义修改的显示文本,和实体系统类型名没有固定对应关系
  • 禁止直接依赖全局formBuilderRef对象:该对象是2sxc内部未对外暴露的实现细节,版本迭代时属性名、挂载位置随时可能调整,没有兼容性保障

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:15:28