后台事务自动提交工作流实现方案分享:可以实现集成平台生成的单据自动进入工作流处理

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

后台事务自动提交工作流实现方案分享:可以实现集成平台生成的单据自动进入工作流处理

# 一、需求背景 引用旧文:《[金蝶EAS与异构系统银企直连付款方案](金蝶EAS与异构系统银企直连付款方案)》,按照之前的实现方案,已经可以达到异构系统的付款信息集成。 通过集成平台实现付款信息自动生成,但是系统生成了付款单后,出纳用户需要在金蝶EAS中不断去刷新来查看是否有需要处理的付款单,如果有待处理的付款单再去手动提交付款单,这时就耽误了出纳的其他工作。如果系统可以将待处理的付款单推送到出纳面前,则可以省去出纳刷新付款单的时间,让出纳的工作更加“完整”。 集成平台生成的其他单据其实也需要用户去不断的刷新检查单据是否生成,通过该方案的应用都可以实现集成平台生成的单据自动进行流程处理提高处理效率。 # 二、实现思路 在金蝶BOS设计一张自动处理的单据,单据主要实现调用单据本身的提交方法。单据提交以后进入工作流,在工作流中设计不同的流程分支去调用单据转换规则生成目标单据,利用目标单据的工作流去实现业务的处理。最后再将自己定义的方法在金蝶EAS客户端中配置相应事务,实现业务的持续处理。 ## 2.1 基本实现步骤 1. 在金蝶BOS开发工具开发设计一张自定义单据 2. 在金蝶BOS自定义单据中创建自动提交的功能,并实现相关逻辑 3. 在金蝶BOS中设置付款单提交的工作流 4. 在金蝶EAS中设置后台事务 ## 2.2 环境基本信息 1. 金蝶BOS开发工具 2. 适用环境:金蝶EAS 8.5(其他环境未测试,预计可以使用) # 三、实现过程 为了更加具体的展示整个方案实现的过程,接下来相关内容都以实现金蝶EAS8.5自动付款为例。 ### 步骤一:金蝶BOS导入解决方案(解决方案导入详细步骤,可以参考《[金蝶EAS BOS解决方案导入或更新(3)](https://wenku.my7c.com/article/197060767651745536?productLineId=8)》) ![image.webp](/download/0100922165d4bf554d4e8ee790c2bbfde75c.webp) ### 步骤二:设计单据(单据设计详细步骤,可以参考《金蝶EAS BOS端创建单据(4)》链接:https://wenku.my7c.com/article/197497418420598016?productLineId=8) 单据设计重点说明: 单据主要包含以下字段:付款公司、付款账户、付款金额、未付金额、已付金额、收款人名称、收款银行、收款账户、收款银行省、收款市县、收款银行行号、单据状态,主要增加付款金额、未付金额、已付金额字段,以应对后续拆分付款的场景。 ![image.webp](/download/0100fb58adcdd1914fee9f6e8e50c51e273f.webp) ![image.webp](/download/0100e2b6a1e53ec9437abf5e43a4d79332ee.webp) ![image.webp](/download/0100c78e9b79e8044eaf87a3803542b4e38a.webp) ![image.webp](/download/01002d7872c8a5d34cb98ee77309d7f74baf.webp) ![image.webp](/download/0100bbbe86e307204b498a6d577bae522fd8.webp) ### 步骤三:增加自动提交到工作流的方法 ![image.webp](/download/0100e67f8f7046894fa7b94a1bb73f097f31.webp) ![image.webp](/download/01000362cb264a284f20b4711ed445840ed3.webp) ### 步骤四:发布业务单元 ![image.webp](/download/010079eaebd17d7041b29661f09d5334950c.webp) ![image.webp](/download/0100afc4d498ba19477d872258b251468bb9.webp) ### 步骤五:实现流程自动提交的逻辑代码(切换到java视图下) ![image.webp](/download/0100bc87e337df794b7babb1817081eaf71b.webp) *代码内容(系统try catch给出的异常类型要更换为Exception,若按照默认的异常类型无法捕获异常,会导致循环提前结束):* ```java package com.kingdee.eas.custom.mytestbill.app; import org.apache.log4j.Logger; import javax.ejb.*; import java.rmi.RemoteException; import com.kingdee.bos.*; import com.kingdee.bos.util.BOSObjectType; import com.kingdee.bos.workflow.event.WfEventListener; import com.kingdee.bos.metadata.IMetaDataPK; import com.kingdee.bos.metadata.rule.RuleExecutor; import com.kingdee.bos.metadata.MetaDataPK; //import com.kingdee.bos.metadata.entity.EntityViewInfo; import com.kingdee.bos.framework.ejb.AbstractEntityControllerBean; import com.kingdee.bos.framework.ejb.AbstractBizControllerBean; //import com.kingdee.bos.dao.IObjectPK; import com.kingdee.bos.dao.IObjectValue; import com.kingdee.bos.dao.IObjectCollection; import com.kingdee.bos.service.ServiceContext; import com.kingdee.bos.service.IServiceContext; import com.kingdee.eas.framework.app.CoreBillBaseControllerBean; import com.kingdee.eas.framework.ObjectBaseCollection; import com.kingdee.bos.dao.IObjectPK; import com.kingdee.bos.dao.ormapping.ObjectUuidPK; import com.kingdee.bos.metadata.entity.EntityViewInfo; import java.lang.String; import com.kingdee.eas.framework.CoreBaseInfo; import com.kingdee.eas.framework.CoreBaseCollection; import com.kingdee.eas.framework.CoreBillBaseCollection; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.custom.mytestbill.AutoProcessBillFactory; import com.kingdee.eas.custom.mytestbill.AutoProcessBillInfo; import com.kingdee.eas.custom.mytestbill.AutoProcessBillCollection; import com.kingdee.eas.custom.mytestbill.IAutoProcessBill; import com.kingdee.bos.metadata.entity.SelectorItemCollection; import com.kingdee.bos.metadata.function.WfEventListenerStateManager; public class AutoProcessBillControllerBeanEx extends com.kingdee.eas.custom.mytestbill.app.AutoProcessBillControllerBean { private static Logger logger = Logger.getLogger("com.kingdee.eas.custom.mytestbill.app.AutoProcessBillControllerBeanEx"); protected void _autoSubmit(Context ctx, IObjectValue model)throws BOSException { //设置提交人 String commitUser = "dIoxZ2skQriLlVkWVfVPpBO33n8="; ctx.setCaller(new ObjectUuidPK(commitUser)); //获取提交单据 IAutoProcessBill autoProcessBill = AutoProcessBillFactory.getLocalInstance(ctx); //获取后台事务是否支持提交工作流 boolean b = WfEventListenerStateManager.getInstance().isEnable(); //开启工作流事务 WfEventListenerStateManager.getInstance().enableEventListener(); AutoProcessBillCollection autoBillCollection = autoProcessBill.getAutoProcessBillCollection("where state = '保存' "); for(int i = 0; i < autoBillCollection.size(); i++){ try { autoProcessBill.submit(autoBillCollection.get(i)); } catch (Exception e) { // TODO Auto-generated catch block logger.info(e); } } //如果本来工作流服务状态不是关的,将它关掉 if(!b)WfEventListenerStateManager.getInstance().disableEventListener(); super._autoSubmit(ctx, model); } } ``` ### 步骤六:将开发内容导出为私包。 在java视图中将src目录下内容导出为jar包: ![image.webp](/download/01004eaae77b72a14a30b32b5e3166f520ed.webp) 在BOS设计视图下metadata内容导出为jar包: ![image.webp](/download/0100aa508801802641cda110032f31c8147b.webp) 将导出的mate结尾的jar包使用压缩软件打开,然后将matadata目录下的com目录移动到最上级目录,然后将matedata文件夹删除。 ![image.webp](/download/01005e09c32f2e9f4e098b4520126531ed20.webp) 将Project_0\deployed_metas目录下的entity_pkmapping.properties和facade_pkmapping.properties使用压缩软件移动到mate结尾的jar里。 ![image.webp](/download/01005f17520626cb440793e6e121515112f2.webp) 然后配置金蝶EAS服务器子系统树: 使用文本编辑工具打开EAS服务端:eas/server/properties/SubSystem_eas.xml,在最后增加 <row fullname="com.kingdee.eas.custom.mytestbill" name="AutoProcessBill" alias_l1="AutoProcessBill" alias_l2="自动处理单据" alias_l3="自动处理单据" isleaf="1" parent="com.kingdee.eas.custom" /> ![image.webp](/download/01003d1ce057353b45569bb468effb5ba04a.webp) 将私包文件部署到金蝶EAS服务器中: ![image.webp](/download/0100549d5416e1a44b04b6a30c3e9b51f617.webp) ![image.webp](/download/0100a8e314c53e8345f59a4247a54c829999.webp) 生成子系统树,大约用时20-30分钟,建议晚上去生成。 ![image.webp](/download/0100cdd96fecfb8947b3baecb35389792625.webp) ### 步骤七:使用金蝶BOS设置工作流,在工作流中设置付款单单据自动提交、自动提交付款单及其他处理逻辑。 ![image.webp](/download/01005931815bad3f435a80e05cfa68e23651.webp) 流程图概览(提交银企的后续单据判断及生成凭证等,可以参考:《金蝶EAS与异构系统银企直连付款方案》,链接:https://wenku.my7c.com/article/246009329696650496?productLineId=8 ![image.webp](/download/0100790d30139e234ffbaee524c613ec69f1.webp) #### 关键节点设置说明:提交节点 ![image.webp](/download/0100009544a274e94543af57cb5076ebe50e.webp) #### 关键节点设置说明:更新单据状态脚本(**FLASTUPDATETIME = SYSDATE适用于Oracle数据库**) ![image.webp](/download/0100671d805bcd524ab092cf2418de69383d.webp) ```java t3StrSql = new StringBuffer ( ) ; t3StrSql . append ( " UPDATE ct_myt_autoProcessbill SET CFSTATE='审批通过',FLASTUPDATETIME = SYSDATE " ) ; t3StrSql . append ( " WHERE FID = '" + AutoProcessBill.id +"'" ) ; com . kingdee . jdbc . rowset . IRowSet rowSet = com . kingdee . eas . util . app . DbUtil . execute ( __bosContext , t3StrSql . toString ( ) ) ; ``` #### 关键节点设置说明:单据转换 ![image.webp](/download/010004d1a1ce1f2e4a7f9057230ad64c9208.webp) ![image.webp](/download/0100769b223a752e44d98ea8491a6f325b47.webp) #### 关键节点设置说明:付款单提交节点 ![image.webp](/download/0100fd14abf4911348c0be0165a543df3474.webp) #### 关键节点设置说明:付款单自动提交银企节点 ![image.webp](/download/01003cb22ebfe04547c8a03d9b5cbeade2aa.webp) ### 步骤七:在动态扩展平台中引入自动处理单据(便于后期查看,非必须) ![image.webp](/download/0100f7fa0088137747599da84b8df0d88f0e.webp) ![image.webp](/download/0100e1b616c10a094f44a6e4ba512a726a55.webp) ![image.webp](/download/0100ca17912af2034cb294c3c2f6a2604294.webp) ### 步骤八:设置后台事务并发布 ![image.webp](/download/010089262698c89b4e5f9f0e956883b79e25.webp) ![image.webp](/download/0100277f9865173a4eb584b7e7bca7fbd08d.webp) ### 步骤九:功能测试 测试前: ![image.webp](/download/01003d71927ebf774c668198e876b127760b.webp) 执行测试后: ![image.webp](/download/01003172e3dc55fb499681240c914902f976.webp) # 四、应用小结 通过以上案例,已经基本实现了使用定时任务自动提交单据进入工作流,使用BOTP生成付款单的功能。另外,如果是做一些大额对公的支付,还应当考虑银行的大额付款时间,如果需要进行付款拆分的话,也可以在工作流里进行功能实现。自动处理单据状态和提交人,建议开发成灵活可以配置的方式,以应对后续的一些提交人变更等变化。其他需要的处理场景也可以更根据以上内容进行相关修改。 整体上来说,本方案的优点是需要使用金蝶BOS编写的代码比较少,大部分都可以通过工作流、DEP和BOTP进行实现,后续系统升级更新影响小,同时也便于后期实施人员进行功能修改。 # 五、文章中的附件 1、自动处理单据业务单元.zip(导入金蝶BOS即可使用) 2、src.zip代码文件: 3、工作流文件.zip(导入金蝶BOS即可使用) 4、转换规则.zip # 六、其他知识 1. [金蝶EAS工作流审批人跳过的处理办法](https://wenku.my7c.com/article/303650135056205056?productLineId=8) 2. [使用DEP开发可以被工作流调用的审核、反审核方法](https://wenku.my7c.com/article/255482561441264384?productLineId=8) 3. [集成平台数据Sql Server时获取数据提示编码不一致处理办法](https://wenku.my7c.com/article/226860063020147712?productLineId=8) 4. [金蝶EAS BOS端创建单据(4)](https://wenku.my7c.com/article/197497418420598016?productLineId=8) 5. [金蝶EAS Client单据简单开发教程(1)](https://wenku.my7c.com/article/197021413318743808?productLineId=8) 6. [EAS集成平台注意事项](https://wenku.my7c.com/article/143426840932135680?productLineId=8) 7. [BOS元数据简介-1](https://wenku.my7c.com/school/43439145696690176?productLineId=8) 8. [BOS工具开发部署-1](https://wenku.my7c.com/school/43439145428254720?productLineId=8)

附件.zip


太给力了


这篇文章写的很详细。但是应该突出重点是在-->步骤五:实现流程自动提交的逻辑代码.

同时步骤5中 开启和关闭流程服务的代码应该用try finally代码段包裹。

总体上可以看出作者对流程了解的很深了



后台事务自动提交工作流实现方案分享:可以实现集成平台生成的单据自动进入工作流处理

# 一、需求背景 引用旧文:《[金蝶EAS与异构系统银企直连付款方案](金蝶EAS与异构系统银企直连付款方案)》,按照之前的实现方案,已经...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息