电子档案二次开发详细文档
一、 单据归档扩展
二、 报表归档扩展
一、单据归档扩展
1.获取主单单据
默认实现:
凭证或者固定资产卡片作为主单适用二开场景:
需要归档除了凭证、固定资产卡片以外的单据为主单的数据
1.1.接口定义:
/** * @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.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getMainBills方法
将二开类插入表t_sys_checkers中
例:insert into t_sys_checkers (FBosType, FInterface, FChecker)
values (单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径)归档内容中把附属单据选项勾选去掉
1.3.代码示例:
参考 凭证主单类:com.kingdee.eas.el.rec.tool.VoucherBillHandler#getMainBills方法
1.4.注意事项:
主单的number编码字段必须要有数据,否则会导致归档失败
2.获取主单对应的附属单据
默认实现:
根据BOTP关系获取主单所有上游的附属单据(包括间接附属单据)适用二开场景:
主单和附属单据的关系不在BOTP中维护的
2.1.接口定义:
/** * @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.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getAllRelationBill方法
将二开类插入表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.注意事项:
如果没有附属单据,返回空List对象,不要返回null
3.获取主单对应的附属单据(附属单据扩展)
和接口2区别:
1.此接口是在接口2基础上的扩展接口,即既要归档有BOTP关系的单据,又要归档其他关系的单据
2.此接口是针对某个附属单据去关联主单;接口2是根据主单信息主动去获取对应的附属单据,针对多个附属单据默认实现:
无适用二开场景:
需要在BOTP关系的基础上,再归档某一种与主单没有关系的附属单据
B单据与主单没有直接BOTP关系,例:A -> 主单、A -> B,归档主单的时候需要归档B单据
3.1.接口定义:
/** * @param ctx 上下文 * @param destObjId 主单单据id * @return 附属单据id List */ public ArrayList<String> getRefBillInfo(Context ctx, String destObjId);
3.2.具体步骤:
实现接口:com.kingdee.eas.el.rec.tool.IRefBillHandler,重写getRefBillInfo方法
将二开类全路径填写到对应单据的归档内容 -> 单据设置 -> 关联方式:自定义 -> 自定义关联实现类
3.3.代码示例:
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.注意事项:
二开类中只能返回归档内容对应的附属单据id,不可以返回不同类型的单据id
例:假设二开类配置在付款单的归档内容上,那二开类只能返回付款单的id,不能是其他单据的id
4.获取单据信息
默认实现:
根据传过来的EntityViewInfo参数查询适用二开场景:
需要添加查询字段,或者添加过滤条件
4.1.接口定义:
/** * @param ctx 上下文 * @param bosType 单据BOSTYPE * @param viewInfo 默认的查询对象 * @return 查询出来的对象 * @throws Exception */ public IObjectCollection getObjectCollection(Context ctx, BOSObjectType bosType, EntityViewInfo viewInfo) throws Exception;
4.2.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getObjectCollection方法
将二开类插入表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.接口定义:
/** * @param ctx 上下文 * @param billId 单据id * @return 布尔值 * @throws BOSException */ public boolean existsBill(Context ctx, String billId) throws BOSException;
5.2.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写existsBill方法
将二开类插入表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.接口定义:
/** * @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.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写setXmlBaseProperties方法
将二开类插入表t_sys_checkers中
例:insert into t_sys_checkers (FBosType, FInterface, FChecker)
values (单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径)
6.3.代码示例:
参考类 com.kingdee.eas.el.rec.tool.DefaultBillHandler#setXmlBaseProperties方法
ArchInfo info = (ArchInfo) xmlBase; String bosType = content.getBillType().getBosType(); //设置附件(包括单据本身的套打PDF) ArchUtils.setAttatchInfo(ctx, info, bosType, index); //设置影像信息 ArchUtils.setImageInfo(ctx, info, bosType); //设置发票信息 ArchUtils.setInvoiceInfo(ctx,info,content.isInvoice());
6.4.注意事项:
如果重写了接口7或者接口8,必须要重写这个接口,在xml上设置对应的信息。
例:如果单据还有附件在其他系统(不是通过EAS上传),需要归档到档案系统。这时候需要重写此接口和接口8,接口8负责获取附件文件流,此接口负责设置xml元数据信息,以便档案系统解析。接口7作用类似
7.获取单据的套打文件流
默认实现:
根据归档内容上的套打模板、套打数据源,调用套打接口生成的文件流适用二开场景:
需要自己实现单据本身文件流的生成
7.1.接口定义:
/** * @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.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getBillPdfIs方法
将二开类插入表t_sys_checkers中
例:insert into t_sys_checkers (FBosType, FInterface, FChecker)
values (单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径)
7.3.代码示例:
参考类 com.kingdee.eas.el.rec.tool.DefaultBillHandler#getBillPdfIs方法
InputStream is = ArchCloudUtil.getFileStream(ctx, info, content, fileInfo.getName());
7.4.注意事项:
与接口6配合二开使用
可以返回null,表示没有套打文件
8.获取单据附件文件流
默认实现
在当前EAS中获取单据的附件适用二开场景:
需要添加其他附件(非EAS标准附件功能上传的附件)
8.1.接口定义:
/** * @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.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写getBillAttachmentIs方法
将二开类插入表t_sys_checkers中
例:insert into t_sys_checkers (FBosType, FInterface, FChecker)
values (单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径)
8.3.代码示例:
参考类 com.kingdee.eas.el.rec.tool.DefaultBillHandler#getBillAttachmentIs方法
new com.kingdee.eas.el.rec.tool.AttachmentDownloadServer().downloadFile1(ctx, attachmentId);
8.4.注意事项:
与接口6配合二开使用
可以返回null,表示没有附件
9.判断是否可以归档
默认实现
无适用二开场景:
需要添加判断某个期间+组织是否可以归档的条件
9.1.接口定义:
/** * @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.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写canArch方法
将二开类插入表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.接口定义:
/** * @param ctx 上下文 * @param info 归档记录 * @return * @throws Exception */ public void revokeArch(Context ctx, ArcRecordInfo info) throws Exception;
10.2.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.DefaultBillHandler,重写canArch方法
将二开类插入表t_sys_checkers中
例:insert into t_sys_checkers (FBosType, FInterface, FChecker)
values (单据的bostype,'com.kingdee.eas.el.rec.tool.IBillHandler',二开类的全路径)
10.3.代码示例:
无
10.4.注意事项:
无
二、报表归档扩展
默认实现
总账类报表:com.kingdee.eas.el.rec.tool.engine.gl.GLReportParsingEngineUtil
资金类报表:com.kingdee.eas.el.rec.tool.engine.cas.CASReportParsingEngineUtil
固定资产类报表:com.kingdee.eas.el.rec.tool.engine.assets.AssetsReportParsingEngineUtil
应收应付类报表:com.kingdee.eas.el.rec.tool.engine.arap.ArApReportParsingEngineUtil适用二开场景:
需要归档非标准报表
1.获取报表信息
1.1.接口定义:
/** * @param ctx 上下文 * @param info 报表对象(包括归档记录、组织、期间等信息) * @return IXmlSrcObj 报表数据源 * @throws Exception */ public IXmlSrcObj getReportDataSources(Context ctx, ReportFilter info) throws Exception;
1.2.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.engine.ReportParsingEngineUtil,重写getReportDataSources方法
将二开类全路径填写到对应报表的归档内容 -> 基本信息 -> 数据采集引擎类名
1.3.代码示例:
参考默认实现类,构造IXmlSrcObj数据源对象
返回值:IXmlSrcObj数据参考 com.kingdee.eas.el.rec.tool.engine.WithoutEntityReportParsingEngineUtil.WithoutEntityXmlSrcobj,里面标注了需要返回内容的具体含义
1.4.注意事项:
如果要修改报表文件名称,需要设置报表数据源内reportName和reportSrcName属性
XmlSrcObj.put("reportName","新文件名");
XmlSrcObj.put("reportSrcName","原始文件名");
2.获取报表文件流
2.1.接口定义:
/** * @param ctx 上下文 * @param com.kingdee.eas.el.rec.model.IXmlSrcObj iXmlSrcObj 报表数据源 * @return 文件流数组(PDF、XLSX、XLS等) * @throws Exception */ public InputStream[] getFileISArray(Context ctx, IXmlSrcObj iXmlSrcObj) throws Exception;
2.2.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.engine.ReportParsingEngineUtil,重写getFileISArray方法
将二开类全路径填写到对应报表的归档内容 -> 基本信息 -> 数据采集引擎类名
2.3.代码示例:
参考默认实现类,从参数iXmlSrcObj中获取/转换为文件流
2.4.注意事项:
无
3.反归档后续操作
默认实现
无适用二开场景:
需要添加触发标准反归档操作后的动作,例:通知归档人,发送邮件消息等
3.1.接口定义:
/** * @param ctx 上下文 * @param filterList 报表归档记录 * @return * @throws Exception */ public List<ReverseReportMsgInfo> revokeArch(Context ctx,List<ReportFilter> filterList) throws Exception;
3.2.具体步骤:
继承类:com.kingdee.eas.el.rec.tool.engine.ReportParsingEngineUtil,重写revokeArch方法
将二开类全路径填写到对应报表的归档内容 -> 基本信息 -> 数据采集引擎类名
3.3.代码示例:
无
3.4.注意事项:
无
电子档案二次开发详细文档
本文2024-09-16 22:08:05发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-46144.html