表单相关

cap4常见实体介绍

FormBindAuthBean // 应用绑定对象 FormBean // 表单form对象 FormDataMasterBean // 表单数据对象 FormViewBean // 表单视图bean FormAuthViewBean // 表单视图权限bean FormRelationshipMapBean // 业务关联对象bean

cap4常用使用方法

formApi4Cap4.calcAll(formBean, dataMasterBean, formBean.getNewFormAuthViewBean(), false, false, true, true); //刷新计算公式
formApi4Cap4.insertOrUpdateMasterData(dataMasterBean); // 新建表单数据
getFormApi4Cap4().saveOrUpdateFormData(formDataMasterBean, cap4FormBean.getId(), true); //保存或更新表单数据
getFormApi4Cap4().putSessioMasterDataBean(formBean, formDataMasterBean, true, true); // 保存表单数据到session中
cap4FormManager.putMasterDataBean2Cache(cacheFormDataMasterBean.getId(), cacheFormDataMasterBean); // 保存表单数据到session中
// 触发
//关联触发 start
// 方法一 已使用,可以触发
                        if (AppContext.getCurrentUser() == null) {
                            V3xOrgMember member = orgManager.getMemberByLoginName(AppContext.getSystemProperty("storageOperationLog.informationWh"));
                            User user = new User();
                            user.setUserAgentFrom("pc");
                            user.setId(member.getId());
                            user.setLoginAccount(member.getOrgAccountId());
                            user.setAccountId(member.getOrgAccountId());
                            user.setLocale(Locale.SIMPLIFIED_CHINESE);
                            AppContext.putThreadContext("SESSION_CONTEXT_USERINFO_KEY", user);
                        }
                        formApi4Cap4.doTrigger(ModuleType.cap4UnflowForm.getKey(), formDataMasterBean.getId(), formBean.getId(), null);
// 方法二 未使用
cap4FormTriggerManager.doTrigger(formBean, affairs.get(0), ModuleType.collaboration.getKey(), Long.valueOf(summaryId),
        FormTriggerBean.TriggerPoint.FlowState_Finished, FormTriggerBean.TriggerEventSourceEnum.finish.getKey());
Map<String, FormBindAuthBean> bindAuthBeanMap = formBean.getBind().getUnFlowTemplateMap();
formDataMasterBean = formApi4Cap4.getSessioMasterDataBean(summaryId);  //从缓存中获取主表数据
if (formDataMasterBean==null){
	formDataMasterBean = formApi4Cap4.findDataById(Long.valueOf(summaryId), formBean, null);
}
@Inject
private CAP4FormDataDAO cap4FormDataDAO;
// 可直接使用的jdbc
List<Map> dataList = cap4FormDataDAO.selectDataBySql(sql.toString());

cap4 新增底表数据

 FormBean formBean = formApi4Cap4.getFormByFormCode("表单模板编号");
 HashMap<String, Object> map = new HashMap<>();
 FormFieldBean fieldBeanByDisplay = formBean.getFieldBeanByDisplay("表单字段域名");
 if (fieldBeanByDisplay != null){
  map.put(fieldBeanByDisplay.getName(),standardSerialNumber);
 }
 Long dataID = saveData(map, formBean, "关联表存储的信息");

 public Long saveData(Map<String, Object> map, FormBean form, String title) {
  try {
      Long uuid = UUIDLong.longUUID();
      map.put("id", uuid);
      map.put("start_date", new Date());
      map.put("approve_date", new Date());
      map.put("modify_date", new Date());
      map.put("state", "1");
      FormDataMasterBean formBean = new FormDataMasterBean(map, form.getMasterTableBean(), null);
      //计算公式的触发
      formApi4Cap4.calcAll(form, formBean, form.getNewFormAuthViewBean(), false, false, true, true);
      formApi4Cap4.saveOrUpdateFormData(formBean, form.getId(), true);
      CtpContentAll ca = new CtpContentAll();
      //建立数据与表单的关联
      ca.setContentDataId(uuid);
      ca.setModuleId(uuid);
      ca.setModuleTemplateId(form.getMasterTableBean().getId());
      ca.setNewId();
      ca.setModuleType(42);
      ca.setContentType(20);
      ca.setSort(0);
      ca.setModifyId(-1L);
      ca.setCreateDate(new Date());
      ca.setModifyDate(new Date());
      ca.setContentTemplateId(form.getMasterTableBean().getFormId());
      ca.setTitle(title);
      mainbodyManager.saveOrUpdateContentAll(ca);
      return uuid;
  } catch (Exception e) {
      log.error("保存数据出现异常-----hehaitao", e);
  }
  return null;
 }

 // ************ 方式二 *************
 FormBean formbean = formApi4Cap4.getFormByFormCode("模板编号");
 FormDataMasterBean dataMasterBean = new FormDataMasterBean(formbean.getMasterTableBean(), true);
 formApi4Cap4.calcAll(formbean, dataMasterBean, formBean.getNewFormAuthViewBean(), false, false, true, true);
 formApi4Cap4.insertOrUpdateMasterData(dataMasterBean);

cap4更新底表数据

/**
 * 新增或修改底表数据
 * @param data 主表数据
 * @param code 模板编号
 * @param masterid 判断是否是新增,-1L新增
 * @param subList 明细表数据
 * @return
 */
public static long saveOrUpdateMasterAndSubForm(Map<String, Object> data, String code, long masterid, List<Map<String, Object>> subList,String loginName)
    throws Exception {
    FormBean formBean = formApi4Cap4.getFormByFormCode(code);
    if(formBean == null){
        log.info("根据表单编号编号:"+code+" 未查询到对应底表模板信息:");
        return -1;
    }
    // 数据新增人员
	V3xOrgMember admin = orgManager.getMemberByLoginName(loginName);
    User currentUser = new User();
    currentUser.setId(admin.getId());
    currentUser.setName(admin.getName());
    currentUser.setAccountId(admin.getOrgAccountId());
    currentUser.setLoginAccount(admin.getOrgAccountId());
    currentUser.setDepartmentId(admin.getOrgDepartmentId());
    CurrentUser.set(currentUser);
    AppContext.putThreadContext(GlobalNames.SESSION_CONTEXT_USERINFO_KEY, currentUser);
    //处理主表数据
    Map<String, Object> mainDataMap = new LinkedHashMap<String, Object>();
    boolean flat = false;
    if (masterid == -1L) {
        masterid = UUIDLong.longUUID();
        flat = true;
    }
    FormTableBean masterTableBean = formBean.getMasterTableBean();
    FormDataMasterBean masterData = null;
    if (flat){
        // 新增情况
        for (String key : data.keySet()) {
            if (StringUtils.isNotBlank(key)) {
                FormFieldBean fieldBean = masterTableBean.getFieldBeanByDisplay(key);
                if (fieldBean == null) {
                    continue;
                }
                mainDataMap.put(fieldBean.getName(), data.get(key));
            }
        }
        mainDataMap.put("id", masterid);
        masterData = new FormDataMasterBean(mainDataMap, masterTableBean);
        masterData.setId(masterid);
    }else{
        // 更新情况
        masterData = formApi4Cap4.findDataById(masterid, formBean, null);
        for (String key : data.keySet()) {
            if (StringUtils.isNotBlank(key)) {
                FormFieldBean fieldBean = masterTableBean.getFieldBeanByDisplay(key);
                if (fieldBean == null) {
                    continue;
                }
                masterData.addFieldValue(fieldBean.getName(), data.get(key));
            }
        }
    }
    if (CollectionUtils.isNotEmpty(subList)) {
        List<FormTableBean> tableList = formBean.getSubTableBean();
        //循环该表单下所有重复表(子表)
        for (FormTableBean table : tableList) {
            String tableName = table.getTableName();
            // 这里先删除所有明细数据,再进行新增
            List<FormDataSubBean> subDataBean = masterData.getSubData(tableName);
            if (CollectionUtils.isNotEmpty(subDataBean)){
                // 每次变更明细表数据前,前清空明细表数据
                subDataBean.clear();
            }
            // 循环所有的底表数据
            for (Map<String, Object> map : subList) {
                Map<String, Object> subDataMap = null;
                for (String key : map.keySet()) {
                    FormFieldBean fieldBean = table.getFieldBeanByDisplay(key);
                    if (fieldBean == null) {
                        continue;
                    }
                    if (StringUtils.isNotBlank(map.get(key) + "")) {
                        if (subDataMap == null) {
                            subDataMap = new LinkedHashMap<String, Object>();
                        }
                        subDataMap.put(fieldBean.getName(), map.get(key));
                    }
                }
                if (subDataMap != null) {
                    subDataMap.put(Enums.SubTableField.formmain_id.getKey(), masterid);
                    FormDataSubBean subData = new FormDataSubBean(subDataMap, table, masterData);
                    masterData.addSubData(tableName, subData);
                }
            }
        }
    }
    masterData.setModifyDate(new Date());
    //计算公式触发
    formApi4Cap4.calcAll(form, formBean, form.getNewFormAuthViewBean(), false, false, true, true);
    formApi4Cap4.saveOrUpdateFormData(masterData, formBean.getId(), true);
    return masterid;
}

cap4建立对照表的一种示例

// 获取对照数据举例
public String getFileNameByStageAndType(String stage, String type, String fieldDisplayName) {
 try{
     FormBean formBean = formApi4Cap4.getFormByFormCode("附件显示名称对照表模板编号");
     if (formBean!=null) {
         // 查询 该条对照表数据对象
         StringBuilder sql = new StringBuilder("select id from " + formBean.getMasterTableBean().getTableName());
         Map<String, String> displayFiled = formBean.getAllFieldDisplayMap();
         sql.append(" where ")
             .append(displayFiled.get("当前阶段")).append(" = '").append(stage).append("'")
             .append(" and ")
             .append(displayFiled.get("项目类型")).append(" = '").append(type).append("'");
         Long dataId = -1l;
         try (JDBCAgent agent = new JDBCAgent(true, false)) {
             agent.execute(sql.toString());
             Map resultSetToMap = agent.resultSetToMap();
             if (MapUtils.isNotEmpty(resultSetToMap)){
                 dataId =  Long.valueOf(String.valueOf( resultSetToMap.get("id")));
             }
         }
         FormDataMasterBean formDataMasterBean = formApi4Cap4.getSessioMasterDataBean(dataId);  //从缓存中获取主表数据
         if (formDataMasterBean==null){
             formDataMasterBean = formApi4Cap4.findDataById(Long.valueOf(dataId), formBean, null);
         }
         if (formDataMasterBean!=null){
             List<FormDataSubBean> subDataList = getSubDataBeanBySubTableDisplay("字段映射", formDataMasterBean);
             if (CollectionUtils.isNotEmpty(subDataList)){
                 for (FormDataSubBean formDataSubBean : subDataList) {
                     Object attachmentDataDomainName = formDataSubBean.getFieldValue(displayFiled.get("附件数据域名"));
                     Object attachmentName = formDataSubBean.getFieldValue(displayFiled.get("对应显示附件名称"));
                     // 匹配上,返回附件名称
                     if (attachmentDataDomainName!=null
                         && attachmentDataDomainName.toString().equals(fieldDisplayName)){
                         return attachmentName!=null?attachmentName.toString():"";
                     }
                 }
             }
         }else {
             log.info("formDataMasterBean is null");
         }
     }
 }catch (Exception e){
     log.error("getFileNameByStageAndType Exception:"+e.getMessage(),e);
 }
 return "";
}

/**
 * 通过明细表名称获取数据
 * @param master
 * @param display
 * @return
 */
public static List<FormDataSubBean> getSubDataBeanBySubTableDisplay(String display, FormDataMasterBean master) {
    Map<String, List<FormDataSubBean>> subs = master.getSubTables();
    if(null == subs) {
        return null;
    }
    for(String key : subs.keySet()) {
        FormDataSubBean data = subs.get(key).get(0);
        if(display.equals(data.getFormTable().getDisplay())) {
            return subs.get(key);
        }
    }
    return null;
}

cap4获取底表某个应用绑定编辑链接

 @Override
 @AjaxAccess
 public String getAssociatedOpinionsUrl(String dataId) {
     try {
         // 配置表维护一个模板编号
         String templateCode = ConfigData.get("查看意见表单模板编号");
         // 应用绑定名称需要为:查看会议 时,此功能可用
         String bindAuthName = ConfigData.get("查看意见表单应用绑定名称");
         if (Strings.isNotBlank(dataId)){
             FormBean formBean = formApi4Cap4.getFormByFormCode(templateCode);
             FormBindAuthBean bindAuthBean = null;
             if (formBean!=null) {
                 Map<String, FormBindAuthBean> bindAuthBeanMap = formBean.getBind().getUnFlowTemplateMap();
                 for (Map.Entry<String, FormBindAuthBean> formBindEntry : bindAuthBeanMap.entrySet()) {
                     FormBindAuthBean bindAuth = formBindEntry.getValue();
                     if (bindAuth.getName().equals(bindAuthName)) {
                         bindAuthBean = bindAuth;
                         break;
                     }
                 }
                 String rightId = "";
                 String viewConditionId = "";
                 if (bindAuthBean!=null) {
                     Enums.ViewType viewType = Enums.ViewType.SeeyonForm;
                     List<Map<String, String>> toolbarButtons = bindAuthBean.getAllBtnListByBtnOrder(viewType, FormBindAuthBean.ShowPosition.ToolBar);
                     List<Map<String, String>> dataRowButtons = bindAuthBean.getAllBtnListByBtnOrder(viewType, FormBindAuthBean.ShowPosition.DataRow);
                     List<UnFlowButtonVO> buttons = new ArrayList<UnFlowButtonVO>();
                     buttons.addAll(capUnFlowButtonManager.getListButtons(UnFlowButtonVO.class, formBean, bindAuthBean, toolbarButtons, viewType, FormBindAuthBean.ShowPosition.ToolBar));
                     buttons.addAll(capUnFlowButtonManager.getListButtons(UnFlowButtonVO.class, formBean, bindAuthBean, dataRowButtons, viewType, FormBindAuthBean.ShowPosition.DataRow));
                     for (UnFlowButtonVO button : buttons) {
                         // 获取修改按钮的 视图id 以及 条件视图 id
                         if (button.getType().contains("update")) {
                             rightId = button.getRightId();
                             viewConditionId = button.getViewConditionId();
                             break;
                         }
                     }
                 }
                 FormDataMasterBean formDataMasterBean = formApi4Cap4.getSessioMasterDataBean(Long.valueOf(dataId));  //从缓存中获取主表数据
                 if (formDataMasterBean==null){
                     formDataMasterBean = formApi4Cap4.findDataById(Long.valueOf(dataId), formBean, null);
                 }
                 if (formDataMasterBean!=null){
                     return "/seeyon/cap4/businessTemplateController.do?method=formContent&type=edit&rightId="+rightId+"&moduleId="+formDataMasterBean.getId()+"&formTemplateId=" + bindAuthBean.getId() + "&viewConditionId="+viewConditionId+"&columnId="+bindAuthBean.getId()+"&moduleType=42";
                 }else {
                     log.info("a formDataMasterBean is null");
                 }
             }else {
                 log.info("a formBean is null");
             }
         }else {
             throw new Exception("standardSerialNumber or proposeTheTime is null");
         }
     } catch (Exception e) {
         log.error("#getAssociateAMeetingUrl#"+e.getMessage(),e);
     }
     return "";
 }

cap4获取底表某个应用绑定查看链接

@Override
@AjaxAccess
public String getAssociateAMeetingUrl(String uniqueID) {
    try {
        // 配置表维护一个模板编号
        String templateCode = ConfigData.get("查看会议表单模板编号");
        // 应用绑定名称需要为:查看会议 时,此功能可用
        String bindAuthName = ConfigData.get("查看会议表单应用绑定名称");
        if (Strings.isNotBlank(uniqueID)){
            FormBean formBean = formApi4Cap4.getFormByFormCode(templateCode);
            if (formBean == null) {
                throw new Exception("formBean is null by formCode");
            }
            FormFieldBean formFieldBean = formBean.getFieldBeanByDisplay("唯一ID");
            if (formFieldBean == null) {
                throw new Exception("formFieldBean is null by formBean");
            }
            StringBuilder sql = new StringBuilder("select id from " + formBean.getMasterTableBean().getTableName());
            sql.append(" where 1=1");
            sql.append(" and ").append(formFieldBean.getName()).append("='").append(uniqueID).append("'");

            List<Map<String, Object>> list = doQuery(sql.toString(), null);
            Long id = -1l;
            if(list!=null&&list.size()==1) {
                id = ParamUtil.getLong(list.get(0), "id");
            }else if (list!=null&&list.size()>1){
                log.info("检查底表,匹配数据出现了多条,现在取第一条数据");
                id = ParamUtil.getLong(list.get(0), "id");
            }
            FormBindAuthBean bindAuthBean = null;
            if (formBean!=null) {
                Map<String, FormBindAuthBean> bindAuthBeanMap = formBean.getBind().getUnFlowTemplateMap();
                for (Map.Entry<String, FormBindAuthBean> formBindEntry : bindAuthBeanMap.entrySet()) {
                    FormBindAuthBean bindAuth = formBindEntry.getValue();
                    if (bindAuth.getName().equals(bindAuthName)) {
                        bindAuthBean = bindAuth;
                        break;
                    }
                }
                String rightId = "";
                String currentRightId = "";
                if (bindAuthBean!=null) {
                    //视图查看权限
                    String showAuth = bindAuthBean.getShowFormAuth();
                    if (Strings.isNotBlank(showAuth)) {
                        if ("|".equals(showAuth.substring(showAuth.length() - 1, showAuth.length()))) {
                            showAuth = showAuth.substring(0, showAuth.length() - 1);
                        }
                    }
                    rightId = showAuth.split("[|]")[0];
                    if (rightId.indexOf(".") != -1) {
                        currentRightId = rightId.split("[.]")[1];
                    }
                }
                FormDataMasterBean formDataMasterBean = formApi4Cap4.getSessioMasterDataBean(id);  //从缓存中获取主表数据
                if (formDataMasterBean==null){
                    formDataMasterBean = formApi4Cap4.findDataById(Long.valueOf(id), formBean, null);
                }
                if (formDataMasterBean!=null){
                    String url = "/seeyon/cap4/businessTemplateController.do?method=formContent&type=browse&moduleId=" + formDataMasterBean.getId()
                        + "&formTemplateId=" + bindAuthBean.getId() + "&viewConditionId=&columnId=" + bindAuthBean.getId()
                        + "&moduleType=42&currentRightId=" + currentRightId + "&rightId=" + rightId;
                    return url;
                }else {
                    log.info("a formDataMasterBean is null");
                }
            }else {
                log.info("a formBean is null");
            }
        }else {
            throw new Exception("standardSerialNumber or proposeTheTime is null");
        }
    } catch (Exception e) {
        log.error("#getAssociateAMeetingUrl#"+e.getMessage(),e);
    }
    return "";
}

cap4 根据条件查询 无流程表单数据

List<String> columnlist=new ArrayList<String>();
for(Map.Entry<String, String> entry : priorityDictionary.entrySet()){
    String mapValue = entry.getValue();
    columnlist.add(mapValue);
}
Map<String,Object> querymap=new HashMap<String, Object>();
querymap.put(priorityDictionary.get("单位"), comp);//单位
String[] columns= columnlist.toArray(new String[columnlist.size()]);
List<FormDataMasterBean> list=this.getFormApi4Cap4().findMasterDataList(new FlipInfo(),priorityformBean.getId(),columns,querymap);

cap4 无流程底表 查询某个应用绑定下的筛选数据

Map<String, FormBindAuthBean> bindAuthBeanMap = formBean.getBind().getUnFlowTemplateMap();
for (Map.Entry<String, FormBindAuthBean> formBindEntry : bindAuthBeanMap.entrySet()) {
    FormBindAuthBean bindAuth = formBindEntry.getValue();
    if (bindAuth.getName().equals("标准提案-T")) {//根据名称匹配底表的某个应用
        formBindAuthBeanId = bindAuth.getId();
    }
}
// 调用无流程应用绑定接口
FormDataListParamBean formDataListParamBean = new FormDataListParamBean();
formDataListParamBean.setInit("0");// 默认0,v5门户栏目配置不需要初始化内容
formDataListParamBean.setFormTemplateId(formBindAuthBeanId);
formDataListParamBean.setFormId(formBean.getId());
formDataListParamBean.setPageSize(pageSize);//数据条数
UnFlowListVO unFlowListVO = capUnFlowManager.getList(formDataListParamBean);

cap4批量查询 无流程表单数据

2d8746ef-6556-4299-b920-4977ca16cafb.png

cap3常用方法


 cap3底表查询入口 FormDataDaoImpl 类的 selectMasterDataList 方法

 cap3流程表和底表保存字段核心方法 FormMainbodyHandler类的 handleContentSaveOrUpdate方法

 cap3流程表和底表保存字段核心方法 FormMainbodyHandler类的 dealFormContent方法
 

cap3打开表单

f4cc2c92-7278-4fcc-9bd2-8bd2f23574e9.png