泛微8.0动态获取表单字段ID

  • 说明
    • 前端代码
      • 前端调用代码
      • 前端jslabel.js文件方法
    • 后端代码
      • 后端getjsLabel.jsp文件
    • 查询字段基础数据SQL

说明

这个功能是基于泛微8.0平台,以js文件引用,调用后端jsp动态获取表单字段id。可供表单前端js代码动态获取字段id,有利于前端代码直接上线,减少测试系统和正式系统字段id不一致导致的工作量。

前端代码

前端调用代码

<script type='text/javascript' src='/interface/jslabel/jslabel.js'></script>
<script type="text/javascript">var isNotFunRuning = false; //不让触发事件var userAgent = navigator.userAgent; //当前浏览器类型var mainMap = getDetailLabelMap("0");var dtMap1 = getDetailLabelMap("1");var sqlIdfield = mainMap.get("jbr"); //申请人IDvar sqrqFL = mainMap.get("jbrq"); //申请日期jQuery(document).ready(function() {alert("打印动态获取的字段id值:"+sqlIdfield );});
</script>

前端jslabel.js文件方法

/*** */
Array.prototype.remove = function(s) {for (var i = 0; i < this.length; i++) {if (s == this[i])this.splice(i, 1);}
}function Map() {/** 存放键的数组(遍历用到) */this.keys = new Array();/** 存放数据 */this.data = new Object();/*** 放入一个键值对* * @param {String}*            key* @param {Object}*            value*/this.put = function(key, value) {if (this.data[key] == null) {this.keys.push(key);}this.data[key] = value;};/*** 获取某键对应的值* * @param {String}*            key* @return {Object} value*/this.get = function(key) {return this.data[key];};/*** 删除一个键值对* * @param {String}*            key*/this.remove = function(key) {this.keys.remove(key);this.data[key] = null;};this.clear = function() {var len = this.keys.length;for (var i = 0; i < len; i++) {var k = this.keys[i];this.keys.remove(k);this.data[k] = null;}}/*** 遍历Map,执行处理函数* * @param {Function}*            回调函数 function(key,value,index){..}*/this.each = function(fn) {if (typeof fn != 'function') {return;}var len = this.keys.length;for (var i = 0; i < len; i++) {var k = this.keys[i];fn(k, this.data[k], i);}};/*** 获取键值数组(类似Java的entrySet())* * @return 键值对象{key,value}的数组*/this.entrys = function() {var len = this.keys.length;var entrys = new Array(len);for (var i = 0; i < len; i++) {entrys[i] = {key : this.keys[i],value : this.data[i]};}return entrys;};/*** 判断Map是否为空*/this.isEmpty = function() {return this.keys.length == 0;};/*** 获取键值对数量*/this.size = function() {return this.keys.length;};/*** 重写toString*/this.toString = function() {var s = "{";for (var i = 0; i < this.keys.length; i++, s += ',') {var k = this.keys[i];s += k + "=" + this.data[k];}s += "}";return s;};
}/*** 获取url参数值* * @param name* @returns*/
function getQueryString(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");var r = window.location.search.substr(1).match(reg);if (r != null)return unescape(r[2]);return null;
}
function GetRequest() {var url = location.search; // 获取url中"?"符后的字串var theRequest = new Object();if (url.indexOf("?") != -1) {var str = url.substr(1);strs = str.split("&");for (var i = 0; i < strs.length; i++) {theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);}}return theRequest;
}/*** 获取所有表单字段名称对应的fieldid* @returns {Map}*/
function getLabelMap() {return getDetailLabelMap(0);
}
function getMainLabelMap() {return getDetailLabelMap(0);
}
function getDetailLabelMap(num) {var mapTemp = new Map();var workflowid = getQueryString('workflowid');//获取requestid,手机端为detailidvar requestid = getQueryString('detailid')==null?getQueryString('requestid'):getQueryString('detailid');jQuery.ajaxSetup({async : false});jQuery.get("/interface/jslabel/getjsLabel.jsp?workflowid=" + workflowid+ "&requestid=" + requestid + "&num=" + num, function(data,textStatus, req) {var objTemp = jQuery.parseJSON(data);for ( var kTemp in objTemp) {mapTemp.put(kTemp, 'field' + objTemp[kTemp]);}});return mapTemp;
}

后端代码

后端getjsLabel.jsp文件

<%@page import="weaver.hrm.User"%>
<%@page import="weaver.hrm.HrmUserVarify"%>
<%@page import="com.alibaba.fastjson.JSONObject"%>
<%@page import="weaver.general.Util"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="weaver.conn.RecordSet"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%!
RecordSet rs = new RecordSet();
public Map<String,String> getLabelMap(int formid,String num){Map<String,String> array = new HashMap<String,String>();formid = Math.abs(formid);String sql = "select b.id,fieldname,detailtable from workflow_billfield b ,workflow_base a where b.billid=-"+ formid + " and a.formid=b.billid";if ("0".equals(num) || "".equals(num)) {sql = "select b.id,fieldname,detailtable from workflow_billfield b ,workflow_base a where b.billid=-"+ formid + " and a.formid=b.billid and (detailtable='' or detailtable is null)";} else {sql = "select b.id,fieldname,detailtable from workflow_billfield b ,workflow_base a where b.billid=-"+ formid+ " and a.formid=b.billid and detailtable='formtable_main_"+ formid + "_dt" + num + "'";}rs.execute(sql);while (rs.next()) {array.put(Util.null2String(rs.getString("fieldname")).toLowerCase(),Util.null2String(rs.getString("id")));}return array;
}
public int getFormid(String workflowid,String requestid){int formid = 0;Map<String,String> array = new HashMap<String,String>();if(!"".equals(workflowid) && !"null".equals(workflowid)){rs.executeSql("SELECT FORMID FROM WORKFLOW_BASE WHERE ID='"+workflowid+"'");if(rs.next()){formid = -Util.getIntValue(rs.getString("FORMID"));}}else{if(!"".equals(requestid) && !"null".equals(requestid)){rs.executeSql("SELECT FORMID FROM WORKFLOW_BASE WHERE ID=(SELECT WORKFLOWID FROM WORKFLOW_REQUESTBASE WHERE REQUESTID='"+requestid+"')");if(rs.next()){formid = -Util.getIntValue(rs.getString("FORMID"));}}}return formid;
}
public String getNodeId(String workflowid,String requestid,int userid){String nodeid = "";String sql = "select nodeid from workflow_flownode a,workflow_nodebase b where a.nodeid=b.id and b.isstart=1 and a.workflowid='"+workflowid+"'";if(!"".equals(requestid)){sql = "select nodeid from workflow_currentoperator where requestid='"+requestid+"' and userid='"+userid+"'";}rs.executeSql(sql);if(rs.next()){nodeid = Util.null2String(rs.getString("nodeid"));}return nodeid;
}
public Map<String,String> getFieldType(int formid){Map<String,String> array = new HashMap<String,String>();formid = Math.abs(formid);String sql = "select fieldhtmltype,fieldname,type from workflow_billfield where billid=-"+ formid;rs.execute(sql);while (rs.next()) {//单据字段页面类型 : 1:单行文本框 、2:多行文本框、3:浏览按钮、4:Check框、5:选择框、6:附件上传String fieldhtmltype = Util.null2String(rs.getString("fieldhtmltype"));String fieldname = Util.null2String(rs.getString("fieldname")).toLowerCase();String type = Util.null2String(rs.getString("type"));}return array;
}public Map<String,String> getViewType(String nodeid){String sql = "select a.*,b.fieldname as fieldname from workflow_nodeform a,workflow_billfield b where a.fieldid=b.id and a.nodeid='"+nodeid+"'";Map<String,String> array = new HashMap<String,String>();rs.executeSql(sql);while(rs.next()){String isview = Util.null2String(rs.getString("isview"));// 可见(当前节点是否显示出来)String isedit = Util.null2String(rs.getString("isedit"));// 编辑String ismandatory = Util.null2String(rs.getString("ismandatory")); // 必填String fieldname = Util.null2String(rs.getString("fieldname")).toLowerCase();String type = "";if("1".equals(ismandatory)){type = "bt"; //必填}else{if("1".equals(isedit)){type = "bj"; //编辑}else{if("1".equals(isview)){type = "zd"; //只读}}}if(!"".equals(type)) array.put(fieldname, type);}return array;
}
%>
<%String num = Util.null2String(request.getParameter("num"));String workflowid = Util.null2String(request.getParameter("workflowid"));String requestid = Util.null2String(request.getParameter("requestid"));int formid = Util.getIntValue(request.getParameter("formid"),0);String nodeid = Util.null2String(request.getParameter("nodeid"));String getOpe = Util.null2String(request.getParameter("get_ope")); //选择获取的数据Map<String,String> array = new HashMap<String,String>();if("viewtype".equals(getOpe)){User user = HrmUserVarify.getUser(request, response);nodeid = getNodeId(workflowid, requestid, user.getUID());if("".equals(nodeid)){out.clear();out.print(JSONObject.toJSONString(array));return;}array = getViewType(nodeid);}else if("fieldtype".equals(getOpe)){formid = getFormid(workflowid, requestid);if(formid == 0){out.clear();out.print(JSONObject.toJSONString(array));return;}array = getFieldType(formid);}else{formid = getFormid(workflowid, requestid);if(formid == 0){out.clear();out.print(JSONObject.toJSONString(array));return;}array = getLabelMap(formid,num);}out.clear();out.print(JSONObject.toJSONString(array));
%>

查询字段基础数据SQL

----------根据workflowid查询表单字段及显示名-------------------
select  t.fieldname n ,t.id  ,h.labelname h, t.fielddbtype d,
(case when t.detailtable is null then 'main' else substr(t.detailtable,length(t.detailtable)-2,3)  end ) tab
from  workflow_billfield t,workflow_base w,HtmlLabelInfo hwhere w.formid = t.billid and t.fieldlabel = h.indexid and h.languageid = 7
and w.id = 5868order by tab,t.id--------查询下拉框的值对应的显示名--------------------------------select a.selectname from WORKFLOW_SELECTITEM a LEFT JOIN WORKFLOW_BILLFIELD b on b.id=a.fieldid ,WORKFLOW_BASE cwhere b.billid=c.formid and b.fieldhtmltype=5 and b.fieldname='"+code+"' and a.selectvalue='"+value+"'  and c.id='"+workflowId+"'";----------根据workflowid查询表单字段及显示名-------------------
select a.id wokflowid , 'field'||b.id fieldid , b.fieldname , c.labelname , d.indexdesc , a.workflowname
from workflow_base a,workflow_billfield b,htmllabelinfo c,htmllabelindex d
where a.formid=b.billid and b.fieldlabel=c.indexid and b.fieldlabel=d.id and c.languageid=7
and c.labelname <> d.indexdesc
--and a.id=2702
order by a.id,b.id----------根据requestId查询表单名称-------------------
select tablename from workflow_bill t1,workflow_base t2, workflow_requestbase t3 where t1.id=t2.formid and t2.id=t3.workflowid and t3.requestid=187048

泛微动态获取表单字段ID相关推荐

  1. 泛微OA流程表单验证附加验证条件-js代码块

    身份证号 验证18位 对应字段名 field10762  数据字段名sfzh 上代码 jQuery(document).ready(function() {var value1= "fiel ...

  2. ajax 泛微oa表单js_泛微oa流程表单二次开发新人注意事项,

    泛微oa流程表单二次开发新人注意事项, 1.泛微的PC端和手机端使用的jQuery代码通用吗? 答:根据实际操作情况,泛微的PC端和手机端使用的jQuery代码并不是通用的,pc端的代码有些不能在手机 ...

  3. 泛微html模板与表单分离,泛微eteams业务表单,自动生成数据和报表

    原标题:泛微eteams业务表单,自动生成数据和报表 eteams业务表单用数据重新定义协作,台帐记录.数据汇报.外部调研收集一并搞定.彻底告别传统纸笔数据收集方式,实时完成数据提交,自动生成数据和报 ...

  4. 泛微oa流程表单之明细表字段通过文本输入内容使另外一个字段必填

    //明细表字段通过文本输入内容使另外一个字段必填 jQuery("#detailDiv_0").delegate("input[id^='field10247_']&qu ...

  5. 泛微oa流程表单之开始时间与结束时间限制在本周且不能跨月

    本次是主表中开始时间和结束时间限制在本周且不能跨月. 如果出现跨月会弹出一个"出现跨月"的提示,并且清空当前所选日期 <script type="text/java ...

  6. 【泛微ecology】表单建模批量操作发起指定流程,对选中的行引入流程明细表单

    在建模模块中新建页面扩展, 扩展用途:查询列表(批量操作) 检查是否勾选记录:选中 链接目标来源:手动输入 链接目标地址如下 效果:在建模查询界面增加批量操作按钮,对选中的行操作 javascript ...

  7. 泛微oa流程表单之请假单(判断请假结束时间不能小于等于请假开始时间)

    <!-- script代码,如果需要引用js文件,请使用与HTML中相同的方式. --> <script type="text/javascript">/* ...

  8. 泛微oa流程表单之check框至少勾选一个

    <script> jQuery(document).ready(function(){checkCustomize = function (){if((jQuery("#fiel ...

  9. 泛微oa流程表单之意见栏字数限制

    <script type="text/javascript">checkCustomize = function() {var remarkHtml = Ckedito ...

最新文章

  1. [Spring mvc 深度解析(二)] Tomcat分析
  2. 独家 | 送你5本机器学习必备的免费电子书!(附链接)
  3. P2924 [USACO08DEC]大栅栏Largest Fence
  4. aspose.pdf for java_Java 开发者最困惑的四件事
  5. 字符串去掉空格 trim()方法
  6. 史上最全!近千篇机器学习自然语言处理论文!都这儿了
  7. 禅道 11.4.1 版本发布,主要优化细节
  8. C++学习笔记之对文件的操作1
  9. python37.dll可能与您正在运行_模块可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86或x64...
  10. 阅文集团副总裁傅徐军:最佳技术架构选型方法论
  11. 第二章:Improving On User Commands--22.显示不同时区的时间
  12. linux2019内核版本发布,新兴的桌面发行版 Septor Linux 发布 2019 版
  13. python运维模块_Python 运维常用模块
  14. 晨风机器人回复词库_机器人自动回复问答
  15. python 拼图验证码
  16. DAS、NAS、SAN三种高端存储技术分析
  17. 可以进行论文降重吗?
  18. c语言设计计算器的意义,C语言结课设计之计算器功能
  19. SI,SIS,SIR,SEIRD模型
  20. 【蓝桥杯选拔赛真题22】python输出数据 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

热门文章

  1. Schnorr签名介绍
  2. 卷积层(convolutional layer)
  3. 【算法:求组合物体的重心】
  4. nodejs+vue+elementui数字化家谱网站管理系统express
  5. 基于ssm的网上银行管理系统的设计与实现
  6. 计算机英语报告,计算机英语论文英文版
  7. 2020年全国职业院校技能大赛改革试点赛样卷二
  8. 读《游戏之旅-我的编程感悟》
  9. 如何查看github趋势榜
  10. 点评苹果侵权事件:网络时代的著作权保护