BpmCommonWsSet.js 13 KB

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