表单相关
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¤tRightId=" + 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批量查询 无流程表单数据

cap3常用方法
cap3底表查询入口 FormDataDaoImpl 类的 selectMasterDataList 方法
cap3流程表和底表保存字段核心方法 FormMainbodyHandler类的 handleContentSaveOrUpdate方法
cap3流程表和底表保存字段核心方法 FormMainbodyHandler类的 dealFormContent方法
cap3打开表单
