因为很多朋友的企业已经有ERP系统或者OA系统,所以在使用快表的时候又不能直接放弃原来的系统,所以企业版有引用外部数据的功能,但是任务工作流还是得从快表操作,经过一段时间的查找资料与自己试验,做了直接从数据库方面操作的方法,下面放代码- ALTER PROCEDURE [dbo].[插入YTG采购单工作流程-1]
- AS
- BEGIN
- INSERT INTO SYS_FLOWDETAIL(ID,WFID,NT,UUID,TUID,PUID,RID,RRID,NID,NN,PID,SDATE,TDATE,DP,LUID,ISLOCK,ISUNDO,ISBACK,ISREDO,ISMAIL,EXECMODE,BACKREMARK,VALIDDAY,TRANSFERDATA,AUID,AUNAME,ISJK,SIGNED)
- SELECT
- NEWID(),-- ID
- '2dd9a113-87eb-4e97-bcf7-c5347301b310' ,-- WFID 流程ID
- '2',--NT
- '09b5705e-7bbe-44a7-8ead-11f7f1a0c71e,',--UUID 发起人ID
- '09b5705e-7bbe-44a7-8ead-11f7f1a0c71e',--TUID 提交人ID
- '',--PUID
- '17804991-d315-4f38-8d55-ad2d77cf5a66',--RID 模版ID
- ID,--RRID 主表记录ID SELECT ID FROM T_395
- '3cf0e156-364e-466c-8434-dc5d172cffec',--NID 节点ID
- 'YTG采购单-建立单据',--NN 节点名称
- '起始',--PID
- GETDATE(),--SDATE
- GETDATE(),--TDATE
- '',--DP 流程简介
- '09b5705e-7bbe-44a7-8ead-11f7f1a0c71e',--LUID
- '0',--ISLOCK
- '1',--ISUNDO
- '1',--ISBACK
- '1',--ISREDO
- '1',--ISMAIL
- NULL,--EXECMODE
- NULL,--BACKREMARK
- NULL,--VALIDDAY
- '',--TRANSFERDATA
- '',--AUID
- '',--AUNAME
- '1',--ISJK
- '1'--SIGNED
- FROM T_427
- WHERE ID NOT IN (SELECT RRID FROM SYS_FLOWDETAIL GROUP BY RRID)
- END
复制代码 这个是第一步,就是工作流发起的那一步,原理就是将工作流数据插入到系统的工作流的数据表中
- ALTER PROCEDURE [dbo].[插入YTG采购单工作流程-3]
- AS
- BEGIN
- INSERT INTO SYS_FLOWDETAIL(ID,WFID,NT,UUID,TUID,PUID,RID,RRID,NID,NN,PID,SDATE,TDATE,DP,LUID,ISLOCK,ISUNDO,ISBACK,ISREDO,ISMAIL,EXECMODE,BACKREMARK,VALIDDAY,TRANSFERDATA,AUID,AUNAME,ISJK,SIGNED)
- select NEWID()
- ,'2dd9a113-87eb-4e97-bcf7-c5347301b310'--WFID
- ,'0'--NT
- ,'e4de1407-14f6-439d-b013-f8d909e8fc50,'--UUID 节点发起人ID
- ,''--TUID
- ,'09b5705e-7bbe-44a7-8ead-11f7f1a0c71e'--PUID
- ,'17804991-d315-4f38-8d55-ad2d77cf5a66'--RID 模版ID
- ,RRID--RRID
- ,'e466011f-531f-409d-8635-f6b58f875874'--NID 节点ID
- ,'YTG采购单-核准'--NN
- ,ID--PID
- ,GETDATE()
- ,NULL
- ,DP1
- ,''
- ,'0'
- ,'1'
- ,'1'
- ,'1'
- ,'1'
- ,'并列'
- ,NULL
- ,'0'
- ,''
- ,''
- ,''
- ,'1'
- ,NULL
- from
- (
- select (b.F_5583+','+b.F_5579+','+F_5585+','+F_5587) as DP1,a.* from SYS_FLOWDETAIL a LEFT JOIN T_427 b on a.RRID = b.ID
- where RRID in (select RRID from SYS_FLOWDETAIL group by RRID having count(2)=2)
- ) as b
- WHERE PID NOT IN (SELECT ID FROM SYS_FLOWDETAIL GROUP BY ID)
- END
复制代码 这个是第二步,是工作流的第二节点的步骤,如果是并列,有几个用户处理,就得插入多少条数据,相对应的字段也得更改,如果是抢先,则一条即可。
将这两段代码,分别做成SQL脚本,然后让代理工具执行即可。
做好之后,PC端能接收到任务通知,也能办理任务,但是邮件,端口(企业微信,钉钉)等无法接收任务提醒,所以,还得做下面的任务提醒的功能
- ALTER PROCEDURE [dbo].[插入单据核准]
- AS
- BEGIN
- SET IDENTITY_INSERT SYS_AGENT ON--插入核准
- INSERT INTO SYS_AGENT(ID,FDID,DEST,TYPE,SUBJECT,RETRY,SEQ,STATUS,MAILTITLE,GENERATETIME,SENDTIME,URL)
- SELECT NEWID(),
- ID,--任务工作流的ID
- 'yujianding',--办理人的微信帐号
- '3',--端口,邮件或者其他的方式,自行更改
- NN +char(10)+ DP,--任务通知信息
- '0',
- '1',--随便填
- '0',--这个是关键,填0是发送失败,填1是发送成功,必须填0,插入数据是插入发送失败的消息,目的是让代理工具自动重新发送任务提醒
- '',
- GETDATE(),
- GETDATE(),
- 'index/create/dataupdate/id/'+RRID+'/rid/'+RID+'/nid/'+NID+'/fdid/'+ID+'/nt/0/flowtype/Handle' --发送地址
- FROM SYS_FLOWDETAIL
- WHERE UUID='e4de1407-14f6-439d-b013-f8d909e8fc50,' AND (NN +char(10)+ DP) NOT IN (SELECT SUBJECT FROM SYS_AGENT GROUP BY SUBJECT)
- SET IDENTITY_INSERT SYS_AGENT OFF
- END
复制代码 同样将此代码做成SQL脚本,用代理工具执行即可。
以上的代码,请将对应代码换成自己数据库中的字段代码。
以上方法,只适用于企业版,其他版本未试验,不做评价!
|
|
yujianding