电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

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

来源:金蝶云社区作者:金蝶2024-09-221

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

# 单据归档扩展 ## 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.注意事项: - 如果重写了接口

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

# 单据归档扩展## 1.获取主单单据>默认实现: &emsp; 凭证或者固定资产卡片作为主单 >适用二开场景: &emsp; 需要归档除了凭...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信