【苍穹开发】根据应用及分组编码查询业务对象集合原创
金蝶云社区-_哇哈哈
_哇哈哈
3人赞赏了该文章 721次浏览 未经作者许可,禁止转载编辑于2021年12月10日 16:11:12

苍穹开发中, 如果想从插件中获取应用信息及其表单,可以结合应用元数据帮助类查询。

具体场景:

根据应用编码和应用分组编码获取其下所有业务对象编码


代码示例如下:

package kdps.demo;

import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.devportal.AppFunctionPacketElement;
import kd.bos.metadata.devportal.AppMetadata;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.servicehelper.devportal.AppMetaServiceHelper;

import java.util.*;
import java.util.stream.Collectors;

public class MetaServiceHelper {
    /**
     * 根据应用编码获取应用元数据
     *
     * @param appNumber
     * @return
     */
    public static AppMetadata getAppMetadata(String appNumber) {
        QFilter qFilter = new QFilter("number", QCP.equals, appNumber);
        DynamicObject appObj = QueryServiceHelper.queryOne("bos_devportal_bizapp", "id", new QFilter[]{qFilter});
        String id = appObj.getString("id");
        AppMetadata metadata = AppMetaServiceHelper.loadAppMetadataById(id);
        return metadata;
    }

    /**
     * 根据应用编码和分组编码获取应用下的功能分组id
     *
     * @param appNumber
     * @return
     */
    public static String getAppGroupOfEntity(String appNumber, String groupNumber) {
        AppMetadata appMetadata = getAppMetadata(appNumber);
        if (appMetadata == null) {
            return null;
        }
        List<AppFunctionPacketElement> appFunctionPackets = appMetadata.getAppFunctionPackets();
        Optional<String> groupIdOp = appFunctionPackets.stream().filter(t -> groupNumber.equals(t.getNumber())).map(t -> t.getId()).findFirst();
        if (groupIdOp.isPresent()) {
            return groupIdOp.get();
        }
        return null;
    }

    /**
     * 根据应用编码和功能分组编码获取其下所有业务对象编码
     *
     * @param appNumber
     * @param groupNumber
     * @return
     */
    public static Set<String> getEntityByAppGroup(String appNumber, String groupNumber) {
        String groupId = getAppGroupOfEntity(appNumber, groupNumber);
        //功能分组-业务对象
        QFilter qFilter = new QFilter("bizunit", QCP.equals, groupId);
        DynamicObjectCollection formIdObjs = QueryServiceHelper.query("bos_devportal_unitrelform", "form", new QFilter[]{qFilter});
        List<String> formIdLst = formIdObjs.stream().map(t -> t.getString("form")).collect(Collectors.toList());
        if (formIdLst.isEmpty()) {
            return new HashSet<>();
        }
        //业务对象内码-编码
        QFilter filter = new QFilter("id", QCP.in, formIdLst);
        DynamicObjectCollection formNumberObjs = QueryServiceHelper.query("bos_formmeta", "number", new QFilter[]{filter});
        Set<String> entityKeyLst = formNumberObjs.stream().map(t -> t.getString("number")).collect(Collectors.toSet());
        return entityKeyLst;
    }
}


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

赞 3