如何在GeneXus中通过Procedure删除含子级的Transaction记录
问题:GeneXus中如何通过Procedure删除包含子级的Transaction记录
我尝试通过Procedure删除Repair Transaction中的记录时,因该Transaction包含名为Kind的子级,触发了SQL错误。我也尝试过先删除子级记录再删除主级记录,但GeneXus无法识别该对象为Transaction或Transaction层级。
解决方案
前置检查
首先确认你在GeneXus的事务定义中已经完成主从层级配置:Kind事务的主键必须包含Repair事务的主键字段,且在Repair事务的结构树中可以看到嵌套的Kind子级,否则GeneXus无法识别二者的关联关系,会触发外键约束类SQL错误。不要自己写原生SQL删除主/子级记录,否则GeneXus感知不到事务关联,也容易触发同类报错。
正确Procedure操作步骤
- 先定义主记录主键变量,比如
&TargetRepairId,赋值为你要删除的Repair记录的主键值 - 按照如下语法编写删除逻辑:
// 定位到要删除的主记录 FOR EACH Repair WHERE RepairId = &TargetRepairId // 自动删除当前主记录关联的所有子级Kind记录,无需额外加筛选条件 DELETE Kind // 子级全部删除后再删除主记录 DELETE Repair ENDFOR // 操作完成后必须提交事务 COMMIT
- 执行完成后可通过GeneXus自带的事务浏览工具验证主、子级记录是否都被正常清除
异常排查
如果按照上述步骤操作仍提示无法识别事务层级,先执行「重新生成所有关联对象」操作,清除GeneXus本地缓存后再重新编译部署即可解决。
内容的提问来源于stack exchange,提问作者John Russel Punio
相关产品推荐
相关产品推荐

