凭证单据归档二次开发详细文档

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

凭证单据归档二次开发详细文档

# 单据归档扩展 ## 1.获取主单单据 >默认实现:   凭证或者固定资产卡片作为主单 >适用二开场景:   需要归档除了凭证、固定资产卡片以外的单据为主单的数据 #### 1.1.接口定义 ```java /** @param ctx 上下文 @param bosType 单据BOSTYPE @param com.kingdee.eas.basedata.assistant.PeriodInfo period 期间信息 @param com.kingdee.eas.basedata.org.CompanyOrgUnitInfo org 组织信息 @return key:单据id,value:单据对象info @throws Exception */ public Map<String,IObjectValue> getMainBills(Context ctx, String bosType,PeriodInfo period,CompanyOrgUnitInfo org) throws Exception; ``` #### 1.2.具体步骤 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getMainBills方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) 6. 归档内容中把附属单据选项勾选去掉 #### 1.3.代码示例 参考 凭证主单类:com.kingdee.eas.el.rec.tool.VoucherBillHandler#getMainBills方法 #### 1.4.注意事项 主单的number编码字段必须要有数据,否则会导致归档失败 ------ ## 2.获取主单对应的附属单据 >默认实现:   根据BOTP关系获取主单所有上游的附属单据(包括间接附属单据) >适用二开场景: >  主单和附属单据的关系不在BOTP中维护的 #### 2.1.接口定义: ```java /** @param ctx 上下文 @param destObjId 主单单据id @param contents 归档内容集合--key:单据BOSTYPE,value:归档内容 @return 附属单据id List @throws Exception */ public ArrayList<String> getAllRelationBill(Context ctx, String destObjId, Map<String, RecordBaseInfo> contents) throws Exception; ``` #### 2.2.具体步骤: 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getAllRelationBill方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) #### 2.3.代码示例: 参考 凭证主单类:com.kingdee.eas.el.rec.tool.VoucherBillHandler#getAllRelationBill方法 #### 2.4.注意事项: 1. 如果没有附属单据,返回空List对象,不允许返回null 2. 返回的附属单据id必须是参数contents包含的单据 例:contents里包含了费用报销单、付款单两个归档内容。返回的附属单据里只能包含这两种单据的id,不要包含其他单据的id ---------- ## 3.获取主单对应的附属单据(在附属单据归档内容上扩展) >和接口2区别: 1.此接口是针对某个附属单据去关联主单;接口2是根据主单信息主动去获取对应的附属单据,针对多个附属单据 >默认实现:   无 >适用二开场景: > > - B单与主单没有直接BOTP关系,归档主单的时候需要归档B单,这时需要B单主动关联主单。例:A单生成主单、A单生成B单 #### 3.1.接口定义: ```java /** * @param ctx 上下文 * @param destObjId 主单单据id(默认是凭证id) * @return 附属单据id List */ public ArrayList<String> getRefBillInfo(Context ctx, String destObjId); ``` #### 3.2.具体步骤: 1. 实现接口:com.kingdee.eas.el.rec.tool.IRefBillHandler,重写getRefBillInfo方法 2. 将二开类全路径填写到对应单据的归档内容 -> 单据设置 -> 关联方式:自定义 -> 自定义关联实现类 #### 3.3.代码示例: ```java public class RefBillHandlerXX implements IRefBillHandler { @Override public ArrayList<String> getRefBillInfo(Context ctx, String destObjId) { ArrayList<String> list = new ArrayList<String>(); try { // 根据destObjId找到对应的附属单据id,放入list中 return list; } catch (Exception e) { return new ArrayList<String>(); } } } ``` #### 3.4.注意事项: 1. 二开类中只能返回归档内容对应的附属单据id,不可以返回其他单据的id 例:假设二开类配置在付款单的归档内容上,那二开类只能返回付款单的id,不能是其他单据的id ---------- ## 4.获取单据信息 >默认实现:   根据传过来的EntityViewInfo参数查询 >适用二开场景:  需要添加查询字段,或者添加过滤条件 #### 4.1.接口定义: ```java /** * @param ctx 上下文 * @param bosType 单据BOSTYPE * @param viewInfo 默认的查询对象 * @return 查询出来的对象 * @throws Exception */ public IObjectCollection getObjectCollection(Context ctx, BOSObjectType bosType, EntityViewInfo viewInfo) throws Exception; ``` #### 4.2.具体步骤: 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getObjectCollection方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) #### 4.3.代码示例: 参考 凭证主单类:com.kingdee.eas.el.rec.tool.VoucherBillHandler#getObjectCollection方法 #### 4.4.注意事项: - 不要返回null - 增量增加查询条件和查询字段,默认Selector对象和Filter条件不要删除或替换(如果已经存在Selector和Filter属性) ---------- ## 5.判断主单是否存在 >默认实现:   根据传过来的单据id参数查询id是否在表里存在 >适用二开场景:  需要添加其他判断是否存在的条件 #### 5.1.接口定义: ```java /** * @param ctx 上下文 * @param billId 单据id * @return 布尔值 * @throws BOSException */ public boolean existsBill(Context ctx, String billId) throws BOSException; ``` #### 5.2.具体步骤: 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写existsBill方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) #### 5.3.代码示例: 参考 凭证主单类:com.kingdee.eas.el.rec.tool.VoucherBillHandler#existsBill方法 #### 5.4.注意事项: 无 ---------- ## 6.设置xml里的附件和影像信息 >默认实现:   获取单据对应的EAS附件信息、影像信息、发票信息,设置到xml元数据中,供档案系统解析 >适用二开场景:  需要添加其他信息到xml元数据 #### 6.1.接口定义: ```java /** * @param ctx 上下文 * @param com.kingdee.eas.el.rec.model.XmlBase xmlBase 单据信息 * @param com.kingdee.eas.el.rec.RecordBaseInfo content 归档内容 * @param index 序号 * @return * @throws Exception */ public void setXmlBaseProperties(Context ctx, XmlBase xmlBase, RecordBaseInfo content, int index) throws Exception; ``` #### 6.2.具体步骤: 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写setXmlBaseProperties方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) #### 6.3.代码示例:(过滤不需要归档的附件) ```java public class DefaultBillHandlerEx extends DefaultBillHandler{ @Override public void setXmlBaseProperties(final Context ctx, final XmlBase xmlBase, final RecordBaseInfo content, final int index) throws Exception { super.setXmlBaseProperties(ctx, xmlBase, content, index); ArchInfo info = (ArchInfo) xmlBase; BillTypeInfo billType = content.getBillType(); // 业务单据类型 Set<FileInfo> fileInfos = info.getFileInfos(); // 附件信息 CompanyOrgUnitInfo org = content.getOrg(); // 归档组织信息 Iterator<FileInfo> iterator = fileInfos.iterator(); while (iterator.hasNext()){ String id = iterator.next().getId();// 附件的id // todo 判断,remove不需要的附件 } } } ``` #### 6.4.注意事项: - 如果重写了接口7或者接口8,必须要重写这个接口,在xml上设置对应的信息。 例:如果单据还有附件在其他系统(不是通过EAS上传),需要归档到档案系统。这时候需要重写此接口和接口8,接口8负责获取附件文件流,此接口负责设置xml元数据信息,以便档案系统解析。接口7作用类似 ---------- ## 7.获取单据的套打文件流 >默认实现:   根据归档内容上的套打模板、套打数据源,调用套打接口生成的单据PDF文件流 >适用二开场景:  需要自己实现单据本身文件流的生成 #### 7.1.接口定义: ```java /** * @param ctx 上下文 * @param com.kingdee.eas.el.rec.RecordBaseInfo content 归档内容 * @param com.kingdee.eas.el.rec.model.ArchInfo info 单据信息 * @param com.kingdee.eas.el.rec.model.FileInfo fileInfo 单据附件信息 * @return 文件流 * @throws Exception */ public InputStream getBillPdfIs(Context ctx, RecordBaseInfo content, ArchInfo info, FileInfo fileInfo) throws Exception; ``` #### 7.2.具体步骤: 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getBillPdfIs方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) #### 7.3.代码示例: ```java public class DefaultBillHandlerEx extends DefaultBillHandler{ @Override public InputStream getBillPdfIs(final Context ctx, final RecordBaseInfo content, final ArchInfo info, final FileInfo fileInfo) throws Exception { String billId = info.getBillId(); // 单据id // todo 根据单据id获取单据文件流 } } ``` #### 7.4.注意事项: - 返回null,表示没有套打文件 ---------- ## 8.获取单据附件文件流 >默认实现   在当前EAS中获取单据的附件 >适用二开场景:  需要添加其他附件(非EAS标准附件功能上传的附件) #### 8.1.接口定义: ```java /** * @param ctx 上下文 * @param com.kingdee.eas.el.rec.model.ArchInfo archInfo 单据信息 * @param com.kingdee.eas.el.rec.model.FileInfo fileInfo 附件信息 * @return 文件流 * @throws Exception */ public InputStream getBillAttachmentIs(Context ctx, ArchInfo archInfo, FileInfo fileInfo) throws Exception; ``` #### 8.2.具体步骤: 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getBillAttachmentIs方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) #### 8.3.代码示例: ```java public class DefaultBillHandlerEx extends DefaultBillHandler{ @Override public InputStream getBillAttachmentIs(final Context ctx, final ArchInfo archInfo, final FileInfo fileInfo) throws Exception { String attachmentId = fileInfo.getId();// 文件id // todo 根据文件id获取单据文件流 } } ``` #### 8.4.注意事项: - 必须与接口6配合二开使用,FileInfo 参数是在接口6中设置 - 可以返回null,表示没有附件 ---------- ## 9.判断是否可以归档 >默认实现   无 >适用二开场景:  需要添加判断某个期间+组织是否可以归档的条件 #### 9.1.接口定义: ```java /** * @param ctx 上下文 * @param bosType 单据BOSTYPE * @param com.kingdee.eas.basedata.assistant.PeriodInfo period 期间信息 * @param com.kingdee.eas.basedata.org.CompanyOrgUnitInfo org 组织信息 * @return 布尔值 * @throws BOSException */ public Boolean canArch(Context ctx, String bosType,PeriodInfo period,CompanyOrgUnitInfo org)throws BOSException; ``` #### 9.2.具体步骤: 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写canArch方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) #### 9.3.代码示例: 无 #### 9.4.注意事项: 无 ---------- ## 10.反归档后续操作 >默认实现   无 >适用二开场景:  需要添加触发标准反归档操作后的动作,例:通知归档人,发送邮件消息等 #### 10.1.接口定义: ```java /** * @param ctx 上下文 * @param info 归档记录 * @return * @throws Exception */ public void revokeArch(Context ctx, ArcRecordInfo info) throws Exception; ``` #### 10.2.具体步骤: 1. 继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写revokeArch方法 2. 查询分析器执行:select * from t\_sys\_checkers where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 3. 如果第2步没有结果,执行第5步,如果有结果,执行第4步 4. 执行:update t\_sys\_checkers set FChecker = 二开类的全路径 where FInterface = 'com.kingdee.eas.el.rec.tool.IBillHandler' and FBosType = '主单单据的bostype' 5. 将二开类插入表t\_sys\_checkers中 例:insert into t\_sys\_checkers (FBosType, FInterface, FChecker) values (主单单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径) #### 10.3.代码示例: 无 #### 10.4.注意事项:

凭证单据归档二次开发详细文档

# 单据归档扩展## 1.获取主单单据>默认实现: &emsp; 凭证或者固定资产卡片作为主单 >适用二开场景: &emsp; 需要归档除了凭...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息