
# 一、需求背景
引用旧文:《[金蝶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)》)

### 步骤二:设计单据(单据设计详细步骤,可以参考《金蝶EAS BOS端创建单据(4)》链接:https://wenku.my7c.com/article/197497418420598016?productLineId=8)
单据设计重点说明:
单据主要包含以下字段:付款公司、付款账户、付款金额、未付金额、已付金额、收款人名称、收款银行、收款账户、收款银行省、收款市县、收款银行行号、单据状态,主要增加付款金额、未付金额、已付金额字段,以应对后续拆分付款的场景。





### 步骤三:增加自动提交到工作流的方法


### 步骤四:发布业务单元


### 步骤五:实现流程自动提交的逻辑代码(切换到java视图下)

*代码内容(系统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包:

在BOS设计视图下metadata内容导出为jar包:

将导出的mate结尾的jar包使用压缩软件打开,然后将matadata目录下的com目录移动到最上级目录,然后将matedata文件夹删除。

将Project_0\deployed_metas目录下的entity_pkmapping.properties和facade_pkmapping.properties使用压缩软件移动到mate结尾的jar里。
![image.webp](/download/010