BpmNodeWebServiceEdit.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  1. var wsTree,
  2. menu,
  3. menu_root,
  4. wsHeight,
  5. varHeight,
  6. varTree,
  7. _seq = 1;// 当前页面的ID随机种子
  8. $(function() {
  9. // 布局
  10. $("#webLayout").ligerLayout({
  11. leftWidth : 350,
  12. height : '100%',
  13. allowLeftResize : false
  14. });
  15. // wsdl查询框
  16. $('#wsdlTxt').bind('focus', function(event) {
  17. var defaultVal = '请输入地址查询';
  18. $('#wsdlTxt')[0].defaultValue = defaultVal;
  19. if($('#wsdlTxt').val()==defaultVal)
  20. $('#wsdlTxt').val('');
  21. }).bind('blur', function() {
  22. var txtValue = $('#wsdlTxt').val();
  23. if ($.trim(txtValue).length < 1) {
  24. $('#wsdlTxt').val($('#wsdlTxt')[0].defaultValue);
  25. }
  26. });
  27. // 流程变量树
  28. varHeight = $('#varLayout').height();
  29. loadVarTree();
  30. //拖拽变量树上的字段到输入、输出字段上
  31. $(".drag-span").dragspan({buddy : 'varTree',treeDropHandler:function(t,n){
  32. t = $(t);
  33. t.text(n.varKey);
  34. t.attr("varId",n.id);
  35. t.closest("tr").next().find("td").html(n.type);
  36. }});
  37. //为选择绑定类型的下拉框设置处理
  38. $('.table-detail').delegate("select[name=bindingType]","change",function() {
  39. var table = $(this).closest("table");
  40. $('tr[bingdingType]',table).hide();
  41. $('tr[bingdingType=' + $(this).val() + ']',table).show('fast');
  42. });
  43. // 保存
  44. $("#dataFormSave").click(function(){saveWebserviceSet();});
  45. //如果数据库中已有该节点的映射记录,则解析到界面上
  46. if(bpmNodeWebServiceDocument)
  47. parseNodeWebservice(bpmNodeWebServiceDocument);
  48. });
  49. //加载变量树
  50. function loadVarTree(){
  51. var setting = {
  52. async: {enable: false},
  53. view: {
  54. selectedMulti: false
  55. },
  56. edit: {
  57. drag: {
  58. prev: true,inner: true,next: true,isMove:true
  59. },
  60. enable: true,
  61. showRemoveBtn: false,
  62. showRenameBtn: false
  63. }
  64. };
  65. var url=__ctx + "/platform/bpm/bpmDefVar/getTree.ht";
  66. var params={defId:defId};
  67. $.post(url,params,function(result){
  68. var json = eval('(' + result + ')');
  69. varStruTree=$.fn.zTree.init($("#varTree"), setting,json);
  70. varStruTree.expandAll(true);
  71. $("#varTree").height(varHeight-20);
  72. });
  73. };
  74. //数据库中已经有设置的记录了,此时需要回显到页面
  75. function parseNodeWebservice(v){
  76. var v = eval("("+v+")");
  77. for(var i=0,c;c=v[i++];){
  78. addMethodNode(c,true);
  79. }
  80. };
  81. //保存的处理
  82. function saveWebserviceSet(){
  83. var json = [];
  84. $("fieldset[zone=method]").each(function(){
  85. var me = $(this),
  86. methodInfo = me.data("methodInfo"),
  87. inputDiv = $("div[var=inputTreeEdit]",me),
  88. ouputDIv = $("div[var=outputTreeEdit]",me),
  89. inputTable = $(".table-detail[zone=binding]",inputDiv),
  90. outputTable = $(".table-detail[zone=binding]",ouputDIv)
  91. obj = {};
  92. if(methodInfo){
  93. obj.inputParams = methodInfo.inputParams.children;
  94. obj.outputParams = methodInfo.outputParams.children;
  95. }
  96. obj.url = $("input[var=invokeUrl]",me).val();
  97. if(!obj.url)return true;
  98. obj.serviceName = $("input[var=serviceName]",me).val();
  99. obj.soapaction = $("input[var=soapaction]",me).val();
  100. obj.method = $("td[var=method]",me).text();
  101. obj.namespace = $("td[var=namespace]",me).text();
  102. obj.inputs = [];
  103. //遍历所有的入参设定
  104. for(var i=0,c;c=inputTable[i++];){
  105. var param = {};
  106. param.name = $("span[var=name]",c).text();
  107. param.fullpath = $("input[var=fullpath]",c).val();
  108. param.soapType = $("td[var=type]",c).text();
  109. param.bindingType = $("select[name=bindingType]",c).val();
  110. var binding = $("[name='defValue" + param.bindingType +"']",c);
  111. param.bindingVal = binding.val()?binding.val():binding.text();
  112. param.bindingVal = param.bindingVal.jsonEscape();
  113. param.javaType = javaType = $("[name=javaType]",c).text();
  114. obj.inputs.push(param);
  115. }
  116. obj.outputs = [];
  117. //遍历所有的出参设定
  118. for(var i=0,c;c=outputTable[i++];){
  119. var param = {};
  120. param.name = $("span[var=name]",c).text();
  121. param.fullpath = $("input[var=fullpath]",c).val();
  122. param.soapType = $("td[var=type]",c).text();
  123. param.bindingType = $("select[name=bindingType]",c).val();
  124. var binding = $("[name='defValue" + param.bindingType +"']",c);
  125. param.bindingVal = binding.val()?binding.val():binding.text();
  126. param.bindingVal = param.bindingVal.jsonEscape();
  127. param.javaType = javaType = $("[name=javaType]",c).text();
  128. obj.outputs.push(param);
  129. }
  130. json.push(obj);
  131. });
  132. json = JSON2.stringify(json);
  133. var url = __ctx + "/platform/bpm/bpmNodeWebService/save.ht";
  134. $.post(url,{setId:bpmNodeWebServiceSetId,json:json,nodeId:nodeId,actDefId:actDefId},function(d){
  135. var result = eval("("+d+")");
  136. if(result.success)
  137. $.ligerDialog.success(result.msg,"提示信息",function(){
  138. window.close();
  139. });
  140. else
  141. $.ligerDialog.error(result.msg,"出错了");
  142. });
  143. };
  144. // 添加
  145. var addMethodNode = function(t,depParse) {
  146. var params = {
  147. wsdlUrl : t.url,
  148. nodeName : t.method,
  149. serviceName : t.serviceName
  150. };
  151. var setting = {
  152. view : {
  153. addDiyDom : function(treeId, treeNode) {
  154. var type = treeNode.type;
  155. var aObj = $("#" + treeNode.tId + "_a");
  156. aObj.append('<span style="margin-left:5px;">(' + type+ ')</span>');
  157. },
  158. selectedMulti : false
  159. },
  160. check : {
  161. enable : true,
  162. chkboxType : {
  163. "Y" : "",
  164. "N" : ""
  165. }
  166. },
  167. callback : {
  168. beforeCheck : function(treeId, treeNode) {
  169. if (!treeNode.type) {
  170. return true;
  171. }
  172. if (treeNode.checked) {
  173. if (confirm("是否取消当前参数[" + treeNode.name + "]的绑定配置?")) {
  174. var $div = $('#' + treeId + "-edit");
  175. if ($div.length < 1) {
  176. return;
  177. }
  178. $("#" + treeNode.name + "_" + rep_list(treeNode.type) +"-edit", $div).remove();
  179. return true;
  180. } else {
  181. return false;
  182. }
  183. }
  184. return true;
  185. },
  186. onCheck : function(event, treeId, treeNode) {// 选中事件
  187. var $div = $('#' + treeId + "-edit");
  188. if ($div.length < 1) {
  189. return;
  190. }
  191. if (!treeNode.type) {
  192. return;
  193. }
  194. if (treeNode.checked) {// 选中
  195. $('#' + treeNode.tId + '_a').click();
  196. } else {
  197. var $editTable = $("#" + treeNode.tId + "-edit", $div);
  198. $editTable.remove();
  199. }
  200. },
  201. onClick : function(event, treeId, treeNode) {// 单击事件
  202. // 没有选中,则不需要处理
  203. if (!treeNode.checked) {
  204. return;
  205. }
  206. var $div = $('#' + treeId + "-edit");
  207. cloneBindingTable(treeNode,$div);
  208. }
  209. }
  210. };
  211. $.ajax({
  212. type : "POST",
  213. url : __ctx + "/platform/bpm/bpmNodeWebService/get.ht",
  214. data : params,
  215. dataType : "json",
  216. success : function(result) {
  217. var json = eval('(' + result + ')');
  218. if (!json.success) {
  219. $.ligerDialog.warn(json.msg,"提示信息");
  220. return false;
  221. }
  222. var operatorField = $("#editField [zone=method]").clone(true, true);// 深度克隆
  223. $(operatorField).data("methodInfo",json);
  224. $("[var=wsdl]", operatorField).html(json.wsdl);
  225. $("[var=method]", operatorField).html(json.method);
  226. $("[var=namespace]", operatorField).html(json.namespace);
  227. $("[var=soapaction]", operatorField).val(json.soapaction);
  228. $("[var=invokeUrl]", operatorField).val(json.invokeUrl);
  229. $("[var=serviceName]",operatorField).val(params.serviceName);
  230. $("[var=del]", operatorField).unbind();// 删除所有事件
  231. $("[var=del]", operatorField).click(function(e) {
  232. $.ligerDialog.confirm("删除当前方法[" + json.method
  233. + "]?","提示信息", function(rtn) {
  234. if (rtn) {
  235. operatorField.fadeOut(500, function() {
  236. $(this).remove();
  237. });
  238. }
  239. });
  240. });
  241. var $inputTreeUl = $("[var=inputTree]", operatorField);
  242. $inputTreeUl.attr("id", "inputtree" + (_seq++));
  243. // 对应的编辑处理div
  244. $("[var=inputTreeEdit]", operatorField).attr("id",$inputTreeUl.attr("id") + "-edit");
  245. var inputParamsTree = $.fn.zTree.init($inputTreeUl, setting,json.inputParams);
  246. var $outputTreeUl = $("[var=outputTree]", operatorField);
  247. $outputTreeUl.attr("id", "outputtree" + (_seq++));
  248. // 对应的编辑处理div
  249. $("[var=outputTreeEdit]", operatorField).attr("id",$outputTreeUl.attr("id") + "-edit");
  250. var outputParamsTree = $.fn.zTree.init($outputTreeUl, setting,json.outputParams);
  251. operatorField.hide();
  252. $("#webservice").prepend(operatorField);
  253. operatorField.fadeIn();// 弄点效果提醒一下
  254. // 展开树
  255. inputParamsTree.expandAll(true);
  256. outputParamsTree.expandAll(true);
  257. setTimeout(function(){
  258. //是否深度解析(当从数据库中取出有映射设置时,解析出来显示在界面上)
  259. if(depParse){
  260. var inputs = t.inputs,
  261. outputs = t.outputs;
  262. //解析输入参数绑定
  263. for(var i=0,c;c=inputs[i++];){
  264. cloneBindingTable(c,$("[var=inputTreeEdit]", operatorField),1);
  265. }
  266. //解析输出参数绑定
  267. for(var i=0,c;c=outputs[i++];){
  268. cloneBindingTable(c,$("[var=outputTreeEdit]", operatorField),1);
  269. }
  270. }
  271. },200);
  272. },
  273. error : function(msg) {
  274. $.ligerDialog.error("出错了!","提示信息");
  275. return;
  276. }
  277. });
  278. };
  279. //获取参数名的全路径
  280. function getFullPath(node){
  281. if(node.fullpath)return node.fullpath;
  282. var level = node.level,
  283. pathAry = [node.name];
  284. while(level>1){
  285. node = node.getParentNode();
  286. level = node.level;
  287. pathAry.push(node.name);
  288. }
  289. var path,
  290. newPathAry = [];
  291. while(path=pathAry.pop()){
  292. newPathAry.push(path);
  293. }
  294. return newPathAry.join('.');
  295. };
  296. function rep_list(t){
  297. if(!t)return t;
  298. return t.replace(/[\{|\}]/g,'_');
  299. };
  300. //克隆绑定映射表
  301. function cloneBindingTable(t,d,depParse){
  302. if (d.length < 1) {
  303. return;
  304. }
  305. $('table', d).hide();// 所有table隐藏
  306. if (!t.type&&!t.soapType) {
  307. return;
  308. }
  309. var $editTable = $("#" + t.name + "_" + rep_list(t.type) +"-edit", d),
  310. divType = d.attr("var");
  311. if ($editTable.length < 1) {
  312. $editTable = $("#editField [zone=binding]").clone(true,true);// 深度克隆
  313. $('input[var=fullpath]', $editTable).val(getFullPath(t));
  314. $('span[var=name]', $editTable).text(t.name);
  315. //是否从数据库中取出的数据显示到界面上
  316. if(depParse){
  317. $('[var=type]', $editTable).html(t.soapType);
  318. $("select[name=bindingType]",$editTable).val(t.bindingType);
  319. $editTable.attr("id", t.name + "_" + rep_list(t.soapType) + "-edit");
  320. }
  321. else{
  322. $('[var=type]', $editTable).html(t.type);
  323. $editTable.attr("id", t.name + "_" + rep_list(t.type) + "-edit");
  324. }
  325. //如果是输出参数,则移除固定值的选项
  326. if("outputTreeEdit"==divType){
  327. $("a.tipinfo",$editTable).removeClass("hidden");
  328. $("select[name=bindingType]",$editTable).find("option").each(function(){
  329. if($(this).val()=="1")
  330. $(this).remove();
  331. });
  332. }
  333. d.append($editTable);
  334. $editTable.hide();
  335. }
  336. $editTable.fadeIn(function(){
  337. if(depParse){
  338. $("select[name=bindingType]",$editTable).trigger("change");
  339. setTimeout(function(){
  340. var bindingVal = $("[name='defValue"+t.bindingType+"']",$editTable);
  341. if(t.bindingType==1)
  342. bindingVal.val(t.bindingVal);
  343. else
  344. bindingVal.text(t.bindingVal.jsonUnescape());
  345. $("[name=javaType]",$editTable).text(t.javaType);
  346. var treeId = $("ul",d.siblings()).attr("id"),
  347. paramTree = $.fn.zTree.getZTreeObj(treeId);
  348. if(paramTree){
  349. var filter = function(node) {
  350. return (node.name == t.name && node.type == t.soapType);
  351. };
  352. var curNode =paramTree.getNodesByFilter(filter, true);
  353. if(curNode)
  354. paramTree.checkNode(curNode, true, true);
  355. }
  356. },200);
  357. }
  358. });
  359. };
  360. // 通过WSDL地址查找数据
  361. function getByWsdlUrl() {
  362. var wsdlUrl = $('#wsdlTxt').val();
  363. if ($.trim(wsdlUrl).length < 1 || $('#wsdlTxt')[0].defaultValue == wsdlUrl) {
  364. $.ligerDialog.warn("还没有填写webService地址!","提示信息");
  365. return;
  366. }
  367. wsHeight = $('#wsLayout').height();
  368. $("#treeReFresh").click(function() {
  369. loadWsTree();
  370. });
  371. $("#treeExpand").click(function() {
  372. wsTree.expandAll(true);
  373. });
  374. $("#treeCollapse").click(function() {
  375. wsTree.expandAll(false);
  376. });
  377. // 菜单
  378. // getMenu();
  379. // 加载树
  380. loadWsTree();
  381. $("#wsTree").height(wsHeight - 65);
  382. }
  383. // 加载webservice树
  384. function loadWsTree() {
  385. var setting = {
  386. data : {
  387. key : {
  388. name : "name",
  389. wsdlUrl : "wsdlUrl"
  390. }
  391. },
  392. view : {
  393. selectedMulti : false
  394. },
  395. callback : {
  396. onDblClick : zTreeOnDblClick
  397. }
  398. };
  399. $.ligerDialog.waitting('正在查询中,请稍候...');
  400. $.ajax({
  401. type : "POST",
  402. url : __ctx + "/platform/bpm/bpmNodeWebService/getTreeData.ht",
  403. data : {
  404. 'wsdlUrl' : $('#wsdlTxt').val()
  405. },
  406. dataType : "json",
  407. success : function(result) {
  408. $.ligerDialog.closeWaitting();
  409. var json = eval('(' + result + ')');
  410. wsTree = $.fn.zTree.init($("#wsTree"), setting, json);
  411. wsTree.expandAll(true);
  412. },
  413. error : function(msg) {
  414. $.ligerDialog.closeWaitting();
  415. $.ligerDialog.error("输入WebService地址是否错误或者链接异常,请检查!","提示信息");
  416. return;
  417. }
  418. });
  419. };
  420. /**
  421. * 双击webservice事件
  422. *
  423. * @param {}
  424. * e
  425. * @param {}
  426. * treeId
  427. * @param {}
  428. * treeNode
  429. */
  430. function zTreeOnDblClick(e, treeId, treeNode) {
  431. wsTree.selectNode(treeNode);
  432. if (treeNode.level == 0) {
  433. return;
  434. } else {
  435. if (wsTree == null) {
  436. $.ligerDialog.warn("请先查询出webservice的方法","提示信息");
  437. return;
  438. }
  439. var treeNode = getSelectNode();
  440. if (treeNode && treeNode.level == 0) {
  441. $.ligerDialog.warn("请选择webservice的方法","提示信息");
  442. return;
  443. }
  444. treeNode.serviceName = treeNode.getParentNode().name;
  445. treeNode.url = treeNode.getParentNode().wsdlUrl;
  446. treeNode.method = treeNode.name;
  447. addMethodNode(treeNode);
  448. }
  449. }
  450. // 选中的节点
  451. function getSelectNode() {
  452. wsTree = $.fn.zTree.getZTreeObj("wsTree");
  453. var nodes = wsTree.getSelectedNodes();
  454. return nodes[0];
  455. }
  456. // 关闭窗口
  457. function closeWin() {
  458. $.ligerDialog.confirm("是否关闭当前窗口?","提示信息", function(rtn) {
  459. if (rtn) {
  460. window.close();
  461. }
  462. });
  463. }