本文摘要
针对泛微 Ecology EC9 流程节点后附加 DML 动作,作者用存储过程实现案件收款录入流程向案件管理流程收款明细的跨流程数据同步:根据传入的案件名称、收款流程 ID 和核验标识,判断明细是否已存在,再分别执行插入两条记录或更新记录,最后通过 DML 语句在流程节点后调用。适合需要流程间数据回写的二次开发人员参考,文章标注尚未完工。

⚠️ 暂未完成

本篇博客暂未完工,但是丸子有点懒,不知道什么时候继续写~

由于泛微官方DML动作帮助文档不适合小白(至少不是很适合我…),所以,泛微DML动作丸子版诞生了~

故事背景

故事的序章,便由我来一一道来…

丸子在律师事务所工作,为更整合、优化案件处理过程,我们近日创建了一个“案件管理流程”,以点石成金,助推案件的全局流转及其管理;

然而,在这全链条中,我们需特别抽离的环节—“案件收款录入”,这源于收款事件的随机性,其相应的数据需有序而及时地反馈至“案件管理流程”中的收款明细上。鉴于流程转数据的操作无法达成此目的(以A流程去填补另一B流程的明细数据),于是丸子开始着手小小的研究DML动作。既然踏出此步,我们便准备坚持至最后——坚持完實這一切!

结果: 根据实际情况思考后决定采用DML存储过程实现以下内容: formtable_main_157_dt2为案件管理流程收款明细表 formtable_main_14为案件收款录入流程表

  1. 创建一个存储过程,接受参数 AJMCX(案件名称浏览框),SKLCID(收款流程ID),ISCHECK(是否核验)。
  2. 在该存储过程中,首先检查 formtable_main_157_dt2 表中是否存在 SKLCID。
  3. 如果SKLCID不存在:
    • 查询 formtable_main_14 表中的 sqr,sklx,bcsksj,bcskje,skqd,hkr 字段,查询条件为 formtable_main_14.id = SKLCID。如果查询结果为空,存储过程结束。
    • 向 formtable_main_157_dt2 表插入两条数据。其中一条数据的 mainid 字段的值从 formtable_main_157 表中查询得到,查询条件为 formtable_main_157.id = AJMCX。另一条数据的 mainid 字段的值为 SKLCID。
    • 插入的两条数据的其它字段值根据以下对应关系从 formtable_main_14 表查询得到:
      • formtable_main_14.sklx = formtable_main_157_dt2.sklx
      • formtable_main_14.bcsksj = formtable_main_157_dt2.bcsksj
      • formtable_main_14.bcskje = formtable_main_157_dt2.bcskje
      • formtable_main_14.skqd = formtable_main_157_dt2.skqd
      • formtable_main_14.hkr = formtable_main_157_dt2.hkr
      • formtable_main_14.glsklc = SKLCID
      • formtable_main_14.cwhszt = IDCHECK
  4. 如果SKLCID存在:
    • 查询 formtable_main_14 表中的 sqr,sklx,bcsksj,bcskje,skqd,hkr 字段,查询条件为 formtable_main_14.id = SKLCID。
    • 更新 formtable_main_157_dt2 表中的记录,更新的字段值根据以下对应关系从 formtable_main_14 表查询得到:
      • formtable_main_14.sklx = formtable_main_157_dt2.sklx
      • formtable_main_14.bcsksj = formtable_main_157_dt2.bcsksj
      • formtable_main_14.bcskje = formtable_main_157_dt2.bcskje
      • formtable_main_14.skqd = formtable_main_157_dt2.skqd
      • formtable_main_14.hkr = formtable_main_157_dt2.hkr
      • formtable_main_14.cwhszt = IDCHECK
    • 更新条件为 formtable_main_157_dt2.glsklc = SKLCID。

存储过程:

ALTER PROCEDURE SyncReceiptToCaseDetail
@AJMCX INT,
@SKLCID INT,
@ISCHECK INT
AS
BEGIN
-- 如果@AJMCX为空或0,直接返回
IF @AJMCX IS NULL OR @AJMCX = 0
BEGIN
PRINT '@AJMCX is NULL or 0'
RETURN
END
DECLARE @mainid INT, @sqr INT, @sklx INT, @bcsksj CHAR(10), @bcskje DECIMAL(38,2), @skqd INT, @hkr VARCHAR(100)
-- 检查是否存在SKLCID
IF NOT EXISTS (SELECT 1 FROM formtable_main_157_dt2 WHERE glsklc = @SKLCID)
BEGIN
PRINT '@SKLCID does not exist in formtable_main_157_dt2'
-- 查询formtable_main_14表
SELECT @sqr = sqr, @sklx = sklx, @bcsksj = bcsksj, @bcskje = bcskje, @skqd = skqd, @hkr = hkr
FROM formtable_main_14
WHERE requestId = @SKLCID
PRINT 'Value of @sqr is: ' + ISNULL(CAST(@sqr AS VARCHAR(10)), 'NULL')
IF @sqr IS NOT NULL
BEGIN
PRINT '@sqr is not NULL'
-- 向表formtable_main_157_dt2插入第一条数据 流程
SELECT @mainid = id FROM formtable_main_157 WHERE qqidcf = @AJMCX
PRINT 'Value of @mainid is: ' + ISNULL(CAST(@mainid AS VARCHAR(10)), 'NULL')
INSERT INTO formtable_main_157_dt2 (mainid, skr, sklx, bcsksj, bcskje, cwhszt, skqd, hkr, glsklc)
VALUES (@mainid, @sqr, @sklx, @bcsksj, @bcskje, @ISCHECK, @skqd, @hkr, @SKLCID)
-- 向表formtable_main_157_dt2插入第二条数据 建模
INSERT INTO formtable_main_157_dt2 (mainid, skr, sklx, bcsksj, bcskje, cwhszt, skqd, hkr, glsklc)
VALUES (@AJMCX, @sqr, @sklx, @bcsksj, @bcskje, @ISCHECK, @skqd, @hkr, @SKLCID)
END
END
ELSE
BEGIN
-- 查询formtable_main_14表
SELECT @sqr = sqr, @sklx = sklx, @bcsksj = bcsksj, @bcskje = bcskje, @skqd = skqd, @hkr = hkr
FROM formtable_main_14
WHERE requestId = @SKLCID
-- 更新formtable_main_157_dt2
UPDATE formtable_main_157_dt2
SET skr = @sqr, sklx = @sklx, bcsksj = @bcsksj, bcskje = @bcskje, cwhszt = @ISCHECK, skqd = @skqd, hkr = @hkr
WHERE glsklc = @SKLCID
END
END

DML语句:

EXEC SyncReceiptToCaseDetail @AJMCX = {?ajmcx}, @SKLCID = $requestid$, @ISCHECK = 0