如何获取2sxc应用模块最近变更的关联用户及变更信息
DNN门户2sxc模块变更记录查询实现指南
核心逻辑基础
2sxc会自动跟踪所有内容实体、模块配置的修改操作,关联用户信息直接存储在内置元数据表的修改人字段中,无需自行记录操作日志。
方案1:数据库关联查询(适配现有轮询通知逻辑)
适合已适配其他模块的批量查询场景,直接关联DNN原生表和2sxc内置表即可获取全量变更数据:
涉及核心表
ToSIC_SexyContent_Entity:2sxc核心实体表,存储所有内容项的元数据,包含ModifiedByID(修改人ID)、ModifiedOn(修改时间)字段ToSIC_SexyContent_App:2sxc应用表,关联实体到所属的2sxc应用Modules:DNN原生模块表,关联2sxc应用到具体页面上的部署实例Users:DNN原生用户表,关联用户ID获取账号、显示名等信息
示例查询SQL
SELECT M.ModuleID, M.ModuleTitle, A.AppName, E.ModifiedOn, U.UserID, U.Username, U.DisplayName AS ModifiedUserName FROM ToSIC_SexyContent_Entity E INNER JOIN ToSIC_SexyContent_App A ON E.AppID = A.AppID INNER JOIN Modules M ON E.ModuleID = M.ModuleID INNER JOIN Users U ON E.ModifiedByID = U.UserID WHERE A.PortalID = @当前站点ID AND E.ModifiedOn >= @变更起始时间 ORDER BY E.ModifiedOn DESC
注意事项
- 所有草稿编辑、已发布内容修改、删除操作都会写入实体表的
Modified字段,无需额外过滤版本即可捕获全量变更 - 匿名用户提交的表单内容会关联2sxc应用配置的默认匿名用户ID,可在2sxc应用的常规设置页查询该ID对应关系
- 表结构适配2sxc v10及以上主流版本,v9及更早版本的实体相关表名存在差异,可通过站点2sxc配置的系统信息页核对当前版本的表结构
- 如果需要监控2sxc模块本身的配置变更(而非内容项变更),直接关联
ToSIC_SexyContent_Views、ToSIC_SexyContent_App表的ModifiedByID、ModifiedOn字段即可
方案2:内置API事件订阅(适配实时触发通知逻辑)
如果不需要批量轮询,可直接订阅2sxc的内置实体事件,在变更操作发生的瞬间直接触发通知,避免轮询延迟:
- 在通知模块的依赖注入配置中订阅
ToSic.Eav.Entities.IEntityEvents接口的EntityUpdated、EntityCreated、EntityDeleted事件 - 事件回调会直接返回变更实体的所属模块ID、修改人ID、修改时间等结构化数据,直接传入现有通知模块的触发逻辑即可
- 可根据需要过滤指定的2sxc模块ID,或全量放行所有2sxc模块的变更事件
方案优势
- 无需额外编写SQL关联逻辑,数据直接通过接口返回
- 实时触发,不存在轮询间隔导致的通知漏发问题
- 不需要开放2sxc表的数据库权限
内容的提问来源于stack exchange,提问作者Ufoloko
相关产品推荐
相关产品推荐

