RCP之分类操作

背景

已知分类ID,获取分类属性、分类节点对应的实例、实例对应的分类属性值

TCSession session = (TCSession) AIFUtility.getCurrentApplication().getSession();
TCClassificationService tccs=session.getClassificationService();

G4MUserAppContext context = new G4MUserAppContext(new ClassificationService(), "ICM");
ICSApplicationObject icsObject = context.getICSApplicationObject();

1、获取分类属性

如下图,已知分类节点ID为ICM0103,需要获取该分类节点的类属性

       /**

        * 获取分类属性

        * @param classId 分类节点ID

        */

       public static List<ICSPropertyDescription> getICSProperties(String classId){

              List<ICSPropertyDescription> icsPropertyDescriptions = new ArrayList<>();

              try {

                     ICSHierarchyNodeDescriptor descriptor = tccs.describeNode(classId, 0);

                     if (descriptor.isClass()) {

                            icsObject.setView("Base", descriptor.getId());

                            ICSPropertyDescription[] propertyDescriptions = icsObject.getView().getPropertyDescriptions();

                            for (ICSPropertyDescription icsPropertyDescription : propertyDescriptions)

                            {

System.out.println(icsPropertyDescription.getName()+"---"+icsPropertyDescription.getId());

                                   icsPropertyDescriptions.add(icsPropertyDescription);

                            }

                     }

              } catch (Exception e) {

                     e.printStackTrace();

              }

              return icsPropertyDescriptions;

       }

2、获取分类节点对应的实例

如下图,已知分类节点ID为ICM0103,需要获取该分类节点对应的实例,图中只有2个

       /**

        * search Icos by classId

        * @param classId

        * @return

        */

       public static TCComponent[] findICOsByClassId(String classId) {

              ICSAdminClass adminClass = null;

              try {

                     adminClass = tccs.newICSAdminClass();

                     adminClass.load(classId);

              } catch (TCException e) {

                     e.printStackTrace();

                     return new TCComponent[0];

              }

              Vector<TCComponent> componentVector = new Vector<TCComponent>();

              try {

                     ICSSearchResult[] searchResults = tccs.searchICOs(classId, null, 1);

                     for (ICSSearchResult result : searchResults) {

                            TCComponent component = session.stringToComponent(result.getWsoUid());

                            if (component != null) {

                                   componentVector.add(component);

                            }

                     }

              } catch (TCException e) {

                     e.printStackTrace();

              }

              return componentVector.toArray(new TCComponent[componentVector.size()]);

       }

获取出来的是2个版本对象,后续取属性(除了分类属性)按正常方式取就行

3、通过获取出来的分类实例获取其分类属性的值

如下图,已经获取到该分类节点上的实例对象,现在需要获取对象上的分类属性(长度、类型)的值

类型是个KeyLov,要获取到显示值需要转换一下

    /**

        * 根据查出来的分类实例获取该实例的分类属性id和值

        * @param rev

        * @return 分类属性id和值

        */

       public static Map<String, String> getIcoPropertyIdAndValue(TCComponentItemRevision rev){

              Map<String, String> propertyMap = new HashMap<>();

              try {

                     ICSApplicationObject appObject = tccs.newICSApplicationObject("ICM");

                     // ItemRevision分类

                     String item_id = rev.getProperty("item_id");

                     String item_rid = rev.getProperty("item_revision_id");

                     String uid = rev.getUid();

                     int ICOCount = appObject.searchById(item_id + "/" + item_rid, uid);

                     System.out.println("ICOCOUNT =" + ICOCount);

                     if (ICOCount > 0) {

                            appObject.read(1);

                     } else if (ICOCount <= 0) {

                            appObject.create(item_id + "/" + item_rid, uid);

                     }

                     String classId = appObject.getClassId();

                     System.out.println("classId:"+classId);

                     appObject.setView("Base", classId);

                     ICSPropertyDescription[] ppDesc = appObject.getView().getPropertyDescriptions();

                     // 分类属性是lov的,key为属性idvalue为属性真实值和显示值的map

                     Map<String, Map<String, String>> lovPropertyMap = new HashMap<String, Map<String,String>>();

                     for (ICSPropertyDescription icsPropertyDescription : ppDesc) {

                            ICSFormat format = icsPropertyDescription.getFormat();

                            if (format.isList()) {

                                   Map<String, String> realDisplayValueMap=

getICSPropertyRealDisplayValueMap(icsPropertyDescription);

                                   lovPropertyMap.put(icsPropertyDescription.getId()+"", realDisplayValueMap);

                            }

                     }

                     ICSProperty[] properties = appObject.getProperties();

                     for (ICSProperty icsProperty : properties) {

                            String id = icsProperty.getId()+"";

                            String value = icsProperty.getValue();

                            if (lovPropertyMap.containsKey(id)) {

                                   value = lovPropertyMap.get(id).get(icsProperty.getValue());

                            }

                            propertyMap.put(id, value);

                     }

              } catch (Exception e) {

                     e.printStackTrace();

              }

              return propertyMap;

       }

    /**

        * keyLov的分类属性的属性id和属性显示名称

        * @param icsPropertyDescription

        */

       public static Map<String, String> getICSPropertyRealDisplayValueMap(ICSPropertyDescription icsPropertyDescription)

       {

              Map<String, String> map = new HashMap<>();

              ICSFormat icsFormat = icsPropertyDescription.getFormat();

              if (icsFormat.isList())

              {

                     ICSKeyLov icsKeyLov = icsPropertyDescription.getKeyLov();

                     String[] keys = icsKeyLov.getKeys();

                     String[] keyValues = icsKeyLov.getValues();

                     for (int i = 0; i < keys.length; i++)

                     {

                            map.put(keys[i], keyValues[i]);

                     }

              }

              return map;

       }

获取结果:

长度对应的属性ID-----1

类型对应的属性ID-----手机

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值