ProcessExplorer.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. MWF.xDesktop.requireApp("process.ProcessManager", "Explorer", null, false);
  2. MWF.xApplication.process.ProcessManager.ProcessExplorer = new Class({
  3. Extends: MWF.xApplication.process.ProcessManager.Explorer,
  4. Implements: [Options, Events],
  5. options: {
  6. "name": 'process.ProcessExplorer'
  7. },
  8. keyCopy: function(e){
  9. if (this.selectMarkItems.length){
  10. var items = [];
  11. var i = 0;
  12. var checkItems = function(e){
  13. if (i>=this.selectMarkItems.length){
  14. if (items.length){
  15. var str = JSON.encode(items);
  16. if (e){
  17. e.clipboardData.setData('text/plain', str);
  18. }else {
  19. window.clipboardData.setData("Text", str);
  20. }
  21. this.app.notice(this.app.lp.copyed, "success");
  22. }
  23. }
  24. }.bind(this);
  25. this.selectMarkItems.each(function(item){
  26. this.app.restActions.getProcess(item.data.id, function(json){
  27. json.data.elementType = "process";
  28. items.push(json.data);
  29. i++;
  30. checkItems(e);
  31. }.bind(this), null, false)
  32. }.bind(this));
  33. if (e) e.preventDefault();
  34. }
  35. },
  36. keyPaste: function(e){
  37. var dataStr = "";
  38. if (e){
  39. dataStr = e.clipboardData.getData('text/plain');
  40. }else{
  41. dataStr = window.clipboardData.getData("Text");
  42. }
  43. var data = JSON.decode(dataStr);
  44. this.pasteItem(data, 0);
  45. // data.each(function(item){
  46. // if (item.elementType==="process"){
  47. // this.saveItemAs(this.app.options.application, item);
  48. // }
  49. // }.bind(this));
  50. },
  51. pasteItem: function(data, i){
  52. if (i<data.length){
  53. var item = data[i];
  54. if (item.elementType==="process"){
  55. this.saveItemAs(item, function(){
  56. i++;
  57. this.pasteItem(data, i);
  58. }.bind(this), function(){
  59. i++;
  60. this.pasteItem(data, i);
  61. }.bind(this), function(){
  62. this.reload();
  63. }.bind(this));
  64. }else{
  65. i++;
  66. this.pasteItem(data, i);
  67. }
  68. }else{
  69. this.reload();
  70. }
  71. },
  72. saveItemAs: function(data, success, failure, cancel){
  73. this.app.restActions.listProcess(this.app.options.application.id, function(dJson){
  74. var i=1;
  75. var someItems = dJson.data.filter(function(d){ return d.id===data.id });
  76. if (someItems.length){
  77. var someItem = someItems[0];
  78. var lp = this.app.lp;
  79. var _self = this;
  80. var d1 = new Date().parse(data.lastUpdateTime);
  81. var d2 = new Date().parse(someItem.lastUpdateTime);
  82. var html = "<div>"+lp.copyConfirmInfor+"</div>";
  83. html += "<div style='overflow: hidden; margin: 10px 0px; padding: 5px 10px; background-color: #ffffff; border-radius: 6px;'><div style='font-weight: bold; font-size:14px;'>"+lp.copySource+" "+someItem.name+"</div>";
  84. html += "<div style='font-size:12px; color: #666666; float: left'>"+someItem.lastUpdateTime+"</div>" +
  85. "<div style='font-size:12px; color: #666666; float: left; margin-left: 20px;'>"+MWF.name.cn(someItem.lastUpdatePerson)+"</div>" +
  86. "<div style='color: red; float: right;'>"+((d1>=d2) ? "": lp.copynew)+"</div></div>";
  87. html += "<div style='overflow: hidden; margin: 10px 0px; padding: 5px 10px; background-color: #ffffff; border-radius: 6px;'><div style='clear: both;font-weight: bold; font-size:14px;'>"+lp.copyTarget+" "+data.name+"</div>";
  88. html += "<div style='font-size:12px; color: #666666; float: left;'>"+data.lastUpdateTime+"</div>" +
  89. "<div style='font-size:12px; color: #666666; float: left; margin-left: 20px;'>"+MWF.name.cn(data.lastUpdatePerson)+"</div>" +
  90. "<div style='color: red; float: right;'>"+((d1<=d2) ? "": lp.copynew)+"</div></div>";
  91. // html += "<>"
  92. this.app.dlg("inofr", null, this.app.lp.copyConfirmTitle, {"html": html}, 500, 290, [
  93. {
  94. "text": lp.copyConfirm_overwrite,
  95. "action": function(){_self.saveItemAsUpdate(someItem, data, success, failure);this.close();}
  96. },
  97. {
  98. "text": lp.copyConfirm_new,
  99. "action": function(){_self.saveItemAsNew(dJson, data, success, failure);this.close();}
  100. },
  101. {
  102. "text": lp.copyConfirm_skip,
  103. "action": function(){/*nothing*/ this.close(); if (success) success();}
  104. },
  105. {
  106. "text": lp.copyConfirm_cancel,
  107. "action": function(){this.close(); if (cancel) cancel();}
  108. }
  109. ]);
  110. }else{
  111. this.saveItemAsNew(dJson, data, success, failure)
  112. }
  113. }.bind(this), function(){if (failure) failure();}.bind(this));
  114. },
  115. saveItemAsUpdate: function(someItem, process, success, failure){
  116. debugger;
  117. var isSameApp = process.application === someItem.application;
  118. process.id = someItem.id;
  119. process.name = someItem.name;
  120. process.alias = someItem.alias;
  121. process.category = someItem.category || "";
  122. process.application = someItem.application;
  123. process.applicationName = someItem.applicationName;
  124. process.isNewProcess = false;
  125. var checkActivity = function(a) {
  126. a.process = process.id;
  127. if(a.form && !isSameApp)a.form="";
  128. }
  129. if (process.begin) {
  130. process.begin.process = process.id;
  131. if(process.begin.form && !isSameApp)process.begin.form="";
  132. }
  133. if (process.endList) process.endList.each(function(a){ checkActivity(a); });
  134. if (process.agentList) process.agentList.each(function(a){ checkActivity(a); });
  135. if (process.manualList) process.manualList.each(function(a){ checkActivity(a); });
  136. if (process.conditionList) process.conditionList.each(function(a){ checkActivity(a); });
  137. if (process.choiceList) process.choiceList.each(function(a){ checkActivity(a); });
  138. if (process.parallelList) process.parallelList.each(function(a){ checkActivity(a); });
  139. if (process.splitList) process.splitList.each(function(a){ checkActivity(a); });
  140. if (process.mergeList) process.mergeList.each(function(a){ checkActivity(a); });
  141. if (process.embedList) process.embedList.each(function(a){ checkActivity(a); });
  142. if (process.publishList) process.publishList.each(function(a){ checkActivity(a); });
  143. if (process.invokeList) process.invokeList.each(function(a){ checkActivity(a); });
  144. if (process.cancelList) process.cancelList.each(function(a){ checkActivity(a); });
  145. if (process.delayList) process.delayList.each(function(a){ checkActivity(a); });
  146. if (process.messageList) process.messageList.each(function(a){ checkActivity(a); });
  147. if (process.serviceList) process.serviceList.each(function(a){ checkActivity(a); });
  148. if (process.routeList) process.routeList.each(function(a){ checkActivity(a); });
  149. this.app.restActions.saveProcess(process, function(){
  150. if (success) success();
  151. }.bind(this), function(){
  152. if (failure) failure();
  153. }.bind(this));
  154. },
  155. saveItemAsNew: function(processJson, process, success, failure){
  156. debugger;
  157. var item = this.app.options.application;
  158. var id = item.id;
  159. var name = item.name;
  160. var isSameApp = process.application === id;
  161. process.alias = "";
  162. var oldName = process.name;
  163. var i=1;
  164. while (processJson.data.some(function(d){ return d.name==process.name })){
  165. process.name = oldName+"_copy"+i;
  166. i++;
  167. }
  168. process.application = id;
  169. process.applicationName = name;
  170. var oldIds = [];
  171. oldIds.push(process.id);
  172. var checkActivity = function(a) {
  173. oldIds.push(a.id);
  174. if(a.form && !isSameApp)a.form="";
  175. };
  176. if (process.begin) {
  177. oldIds.push(process.begin.id);
  178. if(process.begin.form && !isSameApp)process.begin.form="";
  179. }
  180. if (process.endList) process.endList.each(function(a){ checkActivity(a); });
  181. if (process.agentList) process.agentList.each(function(a){ checkActivity(a); });
  182. if (process.manualList) process.manualList.each(function(a){ checkActivity(a); });
  183. if (process.conditionList) process.conditionList.each(function(a){ checkActivity(a); });
  184. if (process.choiceList) process.choiceList.each(function(a){ checkActivity(a); });
  185. if (process.parallelList) process.parallelList.each(function(a){ checkActivity(a); });
  186. if (process.splitList) process.splitList.each(function(a){ checkActivity(a); });
  187. if (process.mergeList) process.mergeList.each(function(a){ checkActivity(a); });
  188. if (process.embedList) process.embedList.each(function(a){ checkActivity(a); });
  189. if (process.publishList) process.publishList.each(function(a){ checkActivity(a); });
  190. if (process.invokeList) process.invokeList.each(function(a){ checkActivity(a); });
  191. if (process.cancelList) process.cancelList.each(function(a){ checkActivity(a); });
  192. if (process.delayList) process.delayList.each(function(a){ checkActivity(a); });
  193. if (process.messageList) process.messageList.each(function(a){ checkActivity(a); });
  194. if (process.serviceList) process.serviceList.each(function(a){ checkActivity(a); });
  195. if (process.routeList) process.routeList.each(function(a){ checkActivity(a); });
  196. if (!isSameApp){
  197. process.isNewProcess = true;
  198. this.app.restActions.saveProcess(process, function(){
  199. if (success) success();
  200. }.bind(this), function(){
  201. if (failure) failure();
  202. }.bind(this));
  203. }else{
  204. this.app.restActions.getId(oldIds.length, function(ids) {
  205. var checkUUIDs = ids.data;
  206. var processStr = JSON.encode(process);
  207. oldIds.each(function(oid, i){
  208. var reg = new RegExp(oid, "ig");
  209. processStr = processStr.replace(reg, checkUUIDs[i].id);
  210. }.bind(this));
  211. process = JSON.decode(processStr);
  212. process.isNewProcess = true;
  213. this.app.restActions.saveProcess(process, function(){
  214. if (success) success();
  215. }.bind(this), function(){
  216. if (failure) failure();
  217. }.bind(this));
  218. }.bind(this));
  219. }
  220. },
  221. // saveItemAs: function(item, process){
  222. // var id = item.id;
  223. // var name = item.name;
  224. //
  225. // process.alias = "";
  226. // var oldName = process.name;
  227. // this.app.restActions.listProcess(id, function(processJson){
  228. //
  229. // }.bind(this));
  230. // },
  231. _createElement: function(e){
  232. var createProcess = function(e, template){
  233. var options = {
  234. "template": template,
  235. "application":{
  236. "name": _self.app.options.application.name,
  237. "id": _self.app.options.application.id
  238. },
  239. "onQueryLoad": function(){
  240. this.actions = _self.app.restActions;
  241. this.application = _self.app.options.application;
  242. }
  243. };
  244. layout.desktop.openApplication(e, "process.ProcessDesigner", options);
  245. };
  246. var createTemplateMaskNode = new Element("div", {"styles": this.css.createTemplateMaskNode}).inject(this.app.content);
  247. var createTemplateAreaNode = new Element("div", {"styles": this.css.createTemplateAreaNode}).inject(this.app.content);
  248. createTemplateAreaNode.fade("in");
  249. var createTemplateScrollNode = new Element("div", {"styles": this.css.createTemplateScrollNode}).inject(createTemplateAreaNode);
  250. var createTemplateContentNode = new Element("div", {"styles": this.css.createTemplateContentNode}).inject(createTemplateScrollNode);
  251. MWF.require("MWF.widget.ScrollBar", function(){
  252. new MWF.widget.ScrollBar(createTemplateScrollNode, {"indent": false});
  253. }.bind(this));
  254. var _self = this;
  255. var url = "../x_component_process_ProcessDesigner/$Process/template/templates.json";
  256. MWF.getJSON(url, function(json){
  257. json.each(function(template){
  258. var templateNode = new Element("div", {"styles": this.css.templateNode}).inject(createTemplateContentNode);
  259. var templateIconNode = new Element("div", {"styles": this.css.templateIconNode}).inject(templateNode);
  260. var templateTitleNode = new Element("div", {"styles": this.css.templateTitleNode, "text": template.title}).inject(templateNode);
  261. templateNode.store("template", template.name);
  262. var templateIconImgNode = new Element("img", {"styles": this.css.templateIconImgNode}).inject(templateIconNode);
  263. templateIconImgNode.set("src", "../x_component_process_ProcessDesigner/$Process/template/"+template.icon);
  264. templateNode.addEvents({
  265. "mouseover": function(){this.setStyles(_self.css.templateNode_over)},
  266. "mouseout": function(){this.setStyles(_self.css.templateNode)},
  267. "mousedown": function(){this.setStyles(_self.css.templateNode_down)},
  268. "mouseup": function(){this.setStyles(_self.css.templateNode_over)},
  269. "click": function(e){
  270. createProcess(e, this.retrieve("template"));
  271. createTemplateAreaNode.destroy();
  272. createTemplateMaskNode.destroy();
  273. }
  274. });
  275. }.bind(this))
  276. }.bind(this));
  277. createTemplateMaskNode.addEvent("click", function(){
  278. createTemplateAreaNode.destroy();
  279. createTemplateMaskNode.destroy();
  280. });
  281. var size = this.app.content.getSize();
  282. var y = (size.y - 262)/2;
  283. var x = (size.x - 828)/2;
  284. if (y<0) y=0;
  285. if (x<0) x=0;
  286. createTemplateAreaNode.setStyles({
  287. "top": ""+y+"px",
  288. "left": ""+x+"px"
  289. });
  290. },
  291. _loadItemDataList: function(callback){
  292. this.app.restActions.listProcess(this.app.options.application.id,callback);
  293. },
  294. _getItemObject: function(item){
  295. return new MWF.xApplication.process.ProcessManager.ProcessExplorer.Process(this, item)
  296. },
  297. showDeleteAction: function(){
  298. if (!this.deleteItemsAction){
  299. this.deleteItemsAction = new Element("div", {
  300. "styles": this.css.deleteItemsAction,
  301. "text": this.app.lp.deleteItems
  302. }).inject(this.node);
  303. this.deleteItemsAction.fade("in");
  304. this.deleteItemsAction.position({
  305. relativeTo: this.elementContentListNode,
  306. position: 'centerTop',
  307. edge: 'centerTop',
  308. "offset": {"y": this.elementContentNode.getScroll().y}
  309. });
  310. this.deleteItemsAction.addEvent("click", function(){
  311. var _self = this;
  312. this.app.confirm("warn", this.deleteItemsAction, MWF.APPPM.LP.deleteProcessTitle, MWF.APPPM.LP.deleteProcess, 430, 120, function(){
  313. _self.deleteItems();
  314. this.close();
  315. }, function(){
  316. this.close();
  317. });
  318. }.bind(this));
  319. }
  320. },
  321. deleteItems: function(){
  322. this.hideDeleteAction();
  323. while (this.deleteMarkItems.length){
  324. var item = this.deleteMarkItems.shift();
  325. if (this.deleteMarkItems.length){
  326. item.deleteProcess();
  327. }else{
  328. item.deleteProcess(function(){
  329. // this.reloadItems();
  330. //this.hideDeleteAction();
  331. }.bind(this));
  332. }
  333. }
  334. }
  335. });
  336. MWF.xApplication.process.ProcessManager.ProcessExplorer.Process = new Class({
  337. Extends: MWF.xApplication.process.ProcessManager.Explorer.Item,
  338. _open: function(e){
  339. var _self = this;
  340. var options = {
  341. "appId": "process.ProcessDesigner"+_self.data.id,
  342. "id": _self.data.id,
  343. // "application": _self.explorer.app.options.application.id,
  344. "application":{
  345. "name": _self.explorer.app.options.application.name,
  346. "id": _self.explorer.app.options.application.id
  347. },
  348. "onQueryLoad": function(){
  349. this.actions = _self.explorer.actions;
  350. this.category = _self;
  351. this.options.id = _self.data.id;
  352. this.application = _self.explorer.app.options.application;
  353. }
  354. };
  355. this.explorer.app.desktop.openApplication(e, "process.ProcessDesigner", options);
  356. },
  357. _getIcon: function(){
  358. var x = (Math.random()*49).toInt();
  359. return "process_icon_"+x+".png";
  360. },
  361. _getLnkPar: function(){
  362. return {
  363. "icon": this.explorer.path+this.explorer.options.style+"/processIcon/lnk.png",
  364. "title": this.data.name,
  365. "par": "process.ProcessDesigner#{\"id\": \""+this.data.id+"\"}"
  366. };
  367. },
  368. // deleteItem: function(e){
  369. // var _self = this;
  370. // this.explorer.app.confirm("info", e, this.explorer.app.lp.process.deleteProcessTitle, this.explorer.app.lp.process.deleteProcess, 320, 110, function(){
  371. // _self.deleteProcess();
  372. // this.close();
  373. // },function(){
  374. // this.close();
  375. // });
  376. // },
  377. deleteProcess: function(callback){
  378. this.explorer.actions.deleteProcess(this.data.id, function(){
  379. this.node.destroy();
  380. if (callback) callback();
  381. }.bind(this));
  382. },
  383. saveas: function(){
  384. MWF.xDesktop.requireApp("Selector", "package", function(){
  385. var selector = new MWF.O2Selector(this.explorer.app.content, {
  386. "title": this.explorer.app.lp.copyto,
  387. "count": 1,
  388. "type": "Application",
  389. "values": [this.explorer.app.options.application],
  390. "onComplete": function(items){
  391. items.each(function(item){
  392. this.saveItemAs(item.data);
  393. }.bind(this));
  394. }.bind(this)
  395. });
  396. }.bind(this));
  397. },
  398. saveItemAs: function(item){
  399. var id = item.id;
  400. var name = item.name;
  401. this.explorer.app.restActions.getProcess(this.data.id, function(json){
  402. var process = json.data;
  403. process.alias = "";
  404. var oldName = process.name;
  405. this.explorer.app.restActions.listProcess(id, function(processJson){
  406. var i=1;
  407. while (processJson.data.some(function(d){ return d.name==process.name })){
  408. process.name = oldName+"_copy"+i;
  409. i++;
  410. }
  411. var isSameApp = process.application === id;
  412. process.application = id;
  413. process.applicationName = name;
  414. var oldIds = [];
  415. oldIds.push(process.id);
  416. var checkActivity = function(a) {
  417. oldIds.push(a.id);
  418. if(a.form && !isSameApp)a.form="";
  419. };
  420. if (process.begin) {
  421. oldIds.push(process.begin.id);
  422. if(process.begin.form && !isSameApp)process.begin.form="";
  423. }
  424. if (process.endList) process.endList.each(function(a){ checkActivity(a); });
  425. if (process.agentList) process.agentList.each(function(a){ checkActivity(a); });
  426. if (process.manualList) process.manualList.each(function(a){ checkActivity(a); });
  427. if (process.conditionList) process.conditionList.each(function(a){ checkActivity(a); });
  428. if (process.choiceList) process.choiceList.each(function(a){ checkActivity(a); });
  429. if (process.parallelList) process.parallelList.each(function(a){ checkActivity(a); });
  430. if (process.splitList) process.splitList.each(function(a){ checkActivity(a); });
  431. if (process.mergeList) process.mergeList.each(function(a){ checkActivity(a); });
  432. if (process.embedList) process.embedList.each(function(a){ checkActivity(a); });
  433. if (process.publishList) process.publishList.each(function(a){ checkActivity(a); });
  434. if (process.invokeList) process.invokeList.each(function(a){ checkActivity(a); });
  435. if (process.cancelList) process.cancelList.each(function(a){ checkActivity(a); });
  436. if (process.delayList) process.delayList.each(function(a){ checkActivity(a); });
  437. if (process.messageList) process.messageList.each(function(a){ checkActivity(a); });
  438. if (process.serviceList) process.serviceList.each(function(a){ checkActivity(a); });
  439. if (process.routeList) process.routeList.each(function(a){ checkActivity(a); });
  440. this.explorer.app.restActions.getId(oldIds.length, function(ids) {
  441. var checkUUIDs = ids.data;
  442. var processStr = JSON.encode(process);
  443. oldIds.each(function(oid, i){
  444. var reg = new RegExp(oid, "ig");
  445. processStr = processStr.replace(reg, checkUUIDs[i].id);
  446. }.bind(this));
  447. process = JSON.decode(processStr);
  448. process.isNewProcess = true;
  449. this.explorer.app.restActions.saveProcess(process, function(){
  450. if (id == this.explorer.app.options.application.id) this.explorer.reload();
  451. }.bind(this));
  452. }.bind(this));
  453. }.bind(this));
  454. }.bind(this));
  455. }
  456. });