为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

谷允金_如何根据档案编码查询档案最新版本ID

2017-09-25 4页 doc 16KB 6阅读

用户头像

is_792768

暂无简介

举报
谷允金_如何根据档案编码查询档案最新版本ID谷允金_如何根据档案编码查询档案最新版本ID NC供应链文档 如何根据档案编码查询档案最新版本ID 谷允金 2012-05-29 关键词:档案,编码 1. 使用场景 一般情况下,在单据中输入或选择档案编码,会自动加载出档案相关属性。但是,如果编码是从外部导入的,需要根据档案的最新版本id(多版本的档案存在版本id,以下简称vid)加载相关属性。这时,我们就需要根据档案的编码查询出该编码对应的vid。本文就是讲述如何根据档案的编码查询档案对应的id。 2. 根据档案编码查询id 档案可以分为基础档案和自定义档案。区别...
谷允金_如何根据档案编码查询档案最新版本ID
谷允金_如何根据档案编码查询档案最新版本ID NC供应链文档 如何根据档案编码查询档案最新版本ID 谷允金 2012-05-29 关键词:档案,编码 1. 使用场景 一般情况下,在单据中输入或选择档案编码,会自动加载出档案相关属性。但是,如果编码是从外部导入的,需要根据档案的最新版本id(多版本的档案存在版本id,以下简称vid)加载相关属性。这时,我们就需要根据档案的编码查询出该编码对应的vid。本文就是讲述如何根据档案的编码查询档案对应的id。 2. 根据档案编码查询id 档案可以分为基础档案和自定义档案。区别就是前者是已经定义好的,后者具有不确定性。我们分别对两种情况进行分析。 2.1. 基础档案的查询思路 如何根据档案编码查询档案id呢, uap中IAccessorQueryService类里有这样一个方法: public Map loadBDDataByFieldValues(IBean bean, String pk_org, String pk_group, String attrName, Object[] attrValues) throws BusinessException; 根据档案的元数据,组织,集团,指定字段(编码对应的字段),编码值数组,就可以查到对应档案的数据,返回值是一个Map类型,key是档案的主键,value是档案数据。 首先需要注意一下,如果档案是多版本的,这里只支持最新版本的档案查询。因为多版本档案在数据库同一个档案会对应多个vid。所以,元数据要用最新版本的,而不是多版本的。 以物料为例,讲一下如何根据物料编码获取物料vid。组织、集团的值如何获取就不讲了,元数据可以根据物料的元数据ID来获取。IBDMetaDataIDConst中定义了物料基本信息元数据的ID,如下: public static final String MATERIAL = "eae040f4-3c88-413d-abc9-b15774463d46"; 然后可以根据ID获取元数据: 第 1 页 共 3 页 NC供应链文档 IBean bean = MDBaseQueryFacade.getInstance().getBeanByID(beanId); 物料编码在数据库中对应的列名为“code”,即:attrName=“code”。根据相应的编码,用上面讲的loadBDDataByFieldValues方法,就可以查到对应物料的相关数据,然后用getPK()方法就可以获取id了。需要注意的是,物料最新版本对应的数据库中的表的主键是oid,所以getPK()方法获取的是oid,还需要根据oid查询最新vid。 2.2. 自定义档案的查询思路 上面讲的是基础档案的获取方式,还有一种档案类型,是不确定的,如档案类型的自由辅助属性。也就是说不一定是哪种档案,有可能是客户,也有可能是项目,还有可能是其他档案类型。那么如何获取元数据和编码对应的字段呢, 这就要用到当前的BillItem: BillItem item = this.util.getBodyItem(key); String beanId = item.getMetaDataProperty().getRefBusinessEntity().getID(); 获取到元数据ID之后,就可以根据上面讲过的内容,获取元数据。 还有一个难点,就是在档案编码对应的字段不确定的情况下,如何根据档案编码获取对应的vid,即便是直接查数据库,也要知道档案编码对应数据库的列名才能查询。 好在我们档案类型元数据实现了IDBObject接口,可以利用元数据的业务接口的映射关系来获取: Map name_attr_map = ((IBusinessEntity) bean).getBizInterfaceMapInfo(IBDObject.class .getName()); String codeAttrName = name_attr_map.get("code"); codeAttrName就是我们要获取的编码对应的字段。有了codeAttrName,再获取档案的vid,方法跟上面的一样,就不再重复了。 2.3. 实际使用的查询方法 上面介绍的是查询的思路,其实,实际使用的时候要简单的多。因为UAP帮我们提供了接口IGeneralAccessor,里面有个方法: public IBDData[] getDocByCodes(String pk_org, String[] docCodes); 其中,pk_org是组织id,docCodes是编码数组。我们只要获取对应的访问器,把这两个参数传进去,就OK了。 以供应链为例,在SCMPUB项目中的 第 2 页 共 3 页 NC供应链文档 nc.itf.scmpub.reference.uap.bd.accesor包里有很多已经写好的访问器,比如MaterialAccessor是物料的访问器,ProjectAccessor是项目访问器。考虑到有自定义档案类型的存在,我又封装了一个档案类型通用访问器BdAccessor。需要多传一个参数beanId,即该档案的元数据Id: public static Map getDocMapByCodes(String[] docCodes, String beanId, String pk_org) { IBDData[] bddata = BdAccessor.getAccessor(beanId).getDocByCodes(pk_org, docCodes); Map map = new HashMap(); if (bddata != null) { for (IBDData data : bddata) { if (data != null) { map.put(data.getCode(), data); } } } return map; } 3. 总结 其实,基础档案的查询属于自定义档案查询一种,所以都可以用通用档案的查询方法来查。对于档案类型,只要是元数据实现了IDBObject接口,就可以用上面的方法通过档案编码查询到档案的id。只不过在查询多版本的档案时,注意元数据id的选取。 第 3 页 共 3 页
/
本文档为【谷允金_如何根据档案编码查询档案最新版本ID】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索