应该并不困难呀
想象一下这个插件的执行和开发过程:
1. 插件UI部分增加 一个checkbox来标识是否启用级联删除子表,如果选定则出现 子表选择,目标表的关联字段 和 子表的关联字段。如下图:
PS 目标表关联字段 和子表的关联字段就是指父表和子表是通过各自的那个字段产生关联。
2. 这时更新记录有三个选择:当前行,特定行和选定行,不管哪个选项,我想活字格的最终操作机制都是将其转化成SQL语句的where部分,
当前行:也许活字格是得到当前行的id值,比如3,然后拼出的where语句就是 id=3;
特定行:这个比较明显,是根据选择的条件配置,拼出的sql的条件部分
选定行:这个猜测是通过js先得到选择行的id,拼接成例如id in (1,2,3) 这样的条件语句。
总之,不管怎么样,可以得到删除主表的sql语句:如 DELETE FROM tableMaster where id in (1,2,3) ,仅仅可得到,不执行,因为要先删除子表,再回过头删除主表
3. 如果选择级联删除子表,假设子表名是tableDetail,父表的关联字段是:pNo,子表对应的关联字段是mNo。 则应先拼出子表的删除语句:
DELETE FROM tableDetail WHERE mNo IN (SELECT pNo FROM tableMaster WHERE id IN (1,2,3))
PS 注意以上示例中WHERE id IN (1,2,3)的部分来自主表删除条件拼出的sql片段。如第二条所说。 其余的所有变量信息均取自UI的设置。
4.然后再执行主表的删除语句 DELETE FROM tableMaster where id in (1,2,3)
5.当然,为了事务安全,把这两个语句可以封装到事务中。
似乎就搞定了。。。。。。
|