【苍穹开发】查询某个业务对象引用的所有基础资料字段信息原创
金蝶云社区-_哇哈哈
_哇哈哈
1人赞赏了该文章 1,106次浏览 未经作者许可,禁止转载编辑于2021年12月13日 09:53:14

通过插件获取某个表单上所有基础资料类型的字段及其实体标识


场景:

查询某个业务对象引用的所有基础资料字段信息


【扩展】

可以将基础资料类型修改不同字段类型,比如长整型


代码示例如下:

package kdps.demo;

import kd.bos.dataentity.metadata.IDataEntityProperty;
import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.property.BasedataProp;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;

import java.util.*;

public class MetaServiceHelper {
    /**
     * 获取某个业务对象所有应用的基础资料字段,包含基础资料引用的基础资料
     *
     * @param relBaseDataFieldMap
     * @param formId
     */
    public static void getRelBaseDataKeyByObj(Map<String, String> relBaseDataFieldMap, String formId) {
        Map<String, BasedataProp> relBaseDataMap = getRelBaseDataByObj(formId);
        //字段标识,引用基础资料标识
        if (relBaseDataFieldMap == null) {
            relBaseDataFieldMap = new HashMap<>();
        }
        for (Map.Entry<String, BasedataProp> relBdEntry : relBaseDataMap.entrySet()) {
            String bdFieldKey = relBdEntry.getKey();
            BasedataProp bdProp = relBdEntry.getValue();
            if (relBaseDataFieldMap.containsKey(bdFieldKey)) {
                continue;
            }
            String refEntityKey = bdProp.getBaseEntityId();
            relBaseDataFieldMap.put(bdFieldKey, refEntityKey);

            getRelBaseDataKeyByObj(relBaseDataFieldMap, refEntityKey);
        }
    }

    /**
     * 获取业务对象的所有基础资料字段
     *
     * @param formId
     * @return
     */
    public static Map<String, BasedataProp> getRelBaseDataByObj(String formId) {
        Map<String, BasedataProp> baseDataFieldMap = new HashMap<>();
        Map<String, IDataEntityProperty> allFieldProp = getAllFieldProp(formId);
        if (allFieldProp == null) {
            return baseDataFieldMap;
        }
        for (Map.Entry<String, IDataEntityProperty> fieldPropEntry : allFieldProp.entrySet()) {
            IDataEntityProperty fieldProp = fieldPropEntry.getValue();
            String fieldKey = fieldPropEntry.getKey();
            if (fieldProp instanceof BasedataProp && !baseDataFieldMap.containsKey(fieldKey)) {
                BasedataProp bdProp = (BasedataProp) fieldProp;
                baseDataFieldMap.put(fieldKey, bdProp);
            }
        }
        return baseDataFieldMap;
    }

    /**
     * 根据业务对象获取所有字段属性
     *
     * @param formId
     * @return
     */
    public static Map<String, IDataEntityProperty> getAllFieldProp(String formId) {
        if (formId == null || formId.isEmpty()) {
            return null;
        }
        QFilter filter = new QFilter("number", QCP.equals, formId);
        boolean isExist = QueryServiceHelper.exists("bos_formmeta", new QFilter[]{filter});
        if (!isExist) {
            return null;
        }
        MainEntityType dataEntityType = EntityMetadataCache.getDataEntityType(formId);
        if (dataEntityType == null) {
            return null;
        }
        return dataEntityType.getAllFields();
    }
}


如有建议或不足,请联系指正。

图标赞 1
1人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!