PageEnvironment.js 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084
  1. MWF.xScript = MWF.xScript || {};
  2. MWF.xScript.PageEnvironment = function(ev){
  3. var _data = ev.data;
  4. var _form = ev.form;
  5. var _forms = ev.forms;
  6. this.library = COMMON;
  7. //this.library.version = "4.0";
  8. //data
  9. var getJSONData = function(jData){
  10. return new MWF.xScript.JSONData(jData, function(data, key, _self){
  11. var p = {"getKey": function(){return key;}, "getParent": function(){return _self;}};
  12. while (p && !_forms[p.getKey()]) p = p.getParent();
  13. if (p) if (p.getKey()) if (_forms[p.getKey()]) _forms[p.getKey()].resetData();
  14. });
  15. };
  16. this.setData = function(data){
  17. this.data = getJSONData(data);
  18. this.data.save = function(callback){
  19. form.workAction.saveData(function(json){if (callback) callback();}.bind(this), null, work.id, jData);
  20. }
  21. };
  22. this.setData(_data);
  23. //workContext
  24. this.workContext = {
  25. "getTask": function(){return ev.task;},
  26. "getWork": function(){return ev.work || ev.workCompleted;},
  27. "getActivity": function(){return ev.activity;},
  28. "getTaskList": function(){return ev.taskList;},
  29. "getControl": function(){return ev.control;},
  30. "getWorkLogList": function(){return ev.workLogList;},
  31. "getAttachmentList": function(){return ev.attachmentList;},
  32. "getRouteList": function(){return (ev.task) ? ev.task.routeNameList: null;},
  33. "getInquiredRouteList": function(){return null;},
  34. "setTitle": function(title){
  35. //if (!this.workAction){
  36. // MWF.require("MWF.xScript.Actions.WorkActions", null, false);
  37. // this.workAction = new MWF.xScript.Actions.WorkActions();
  38. //}
  39. //this.workAction.setTitle(ev.work.id, {"title": title});
  40. }
  41. };
  42. var _redefineWorkProperties = function(work){
  43. if (work){
  44. work.creatorPersonDn = work.creatorPerson;
  45. work.creatorUnitDn = work.creatorUnit;
  46. work.creatorUnitDnList = work.creatorUnitList;
  47. work.creatorIdentityDn = work.creatorIdentity;
  48. var o = {
  49. "creatorPerson": {"get": function(){return this.creatorPersonDn.substring(0, this.creatorPersonDn.indexOf("@"));}},
  50. "creatorUnit": {"get": function(){return this.creatorUnitDn.substring(0, this.creatorUnitDn.indexOf("@"));}},
  51. "creatorDepartment": {"get": function(){return this.creatorUnitDn.substring(0, this.creatorUnitDn.indexOf("@"));}},
  52. "creatorIdentity": {"get": function(){return this.creatorIdentityDn.substring(0, this.creatorIdentityDn.indexOf("@"));}},
  53. "creatorUnitList": {
  54. "get": function(){
  55. var v = [];
  56. this.creatorUnitDnList.each(function(dn){
  57. v.push(dn.substring(0, dn.indexOf("@")))
  58. });
  59. return v;
  60. }
  61. },
  62. "creatorCompany": {"get": function(){return this.creatorUnitList[0]}}
  63. };
  64. MWF.defineProperties(work, o);
  65. }
  66. return work;
  67. };
  68. var _redefineTaskProperties = function(task){
  69. if (task){
  70. task.personDn = task.person;
  71. task.unitDn = task.unit;
  72. task.unitDnList = task.unitList;
  73. task.identityDn = task.identity;
  74. var o = {
  75. "person": {"get": function(){return this.personDn.substring(0, this.personDn.indexOf("@"));}},
  76. "unit": {"get": function(){return this.unitDn.substring(0, this.unitDn.indexOf("@"));}},
  77. "department": {"get": function(){return this.unitDn.substring(0, this.unitDn.indexOf("@"));}},
  78. "identity": {"get": function(){return this.identityDn.substring(0, this.identityDn.indexOf("@"));}},
  79. "unitList": {
  80. "get": function(){
  81. var v = [];
  82. this.unitDnList.each(function(dn){
  83. v.push(dn.substring(0, dn.indexOf("@")))
  84. });
  85. return v;
  86. }
  87. },
  88. "company": {"get": function(){return this.unitList[0];}}
  89. };
  90. MWF.defineProperties(task, o);
  91. }
  92. return task;
  93. };
  94. _redefineWorkProperties(this.workContext.getWork());
  95. _redefineTaskProperties(_redefineWorkProperties(this.workContext.getTask()));
  96. //dict
  97. this.Dict = MWF.xScript.createDict(_form.json.application);
  98. //org
  99. var orgActions = null;
  100. var getOrgActions = function(){
  101. if (!orgActions){
  102. MWF.require("MWF.xScript.Actions.UnitActions", null, false);
  103. orgActions = new MWF.xScript.Actions.UnitActions();
  104. }
  105. };
  106. var getNameFlag = function(name){
  107. var t = typeOf(name);
  108. if (t==="array"){
  109. var v = [];
  110. name.each(function(id){
  111. v.push((typeOf(id)==="object") ? (id.distinguishedName || id.id || id.unique || id.name) : id);
  112. });
  113. return v;
  114. }else{
  115. return [(t==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name];
  116. }
  117. };
  118. this.org = {
  119. //群组***************
  120. //获取群组--返回群组的对象数组
  121. getGroup: function(name){
  122. getOrgActions();
  123. var data = {"groupList": getNameFlag(name)};
  124. var v = null;
  125. orgActions.listGroup(data, function(json){v = json.data;}, null, false);
  126. return (v && v.length===1) ? v[0] : v;
  127. },
  128. //查询下级群组--返回群组的对象数组
  129. //nested 布尔 true嵌套下级;false直接下级;默认false;
  130. listSubGroup: function(name, nested){
  131. getOrgActions();
  132. var data = {"groupList": getNameFlag(name)};
  133. var v = null;
  134. if (nested){
  135. orgActions.listSubGroupNested(data, function(json){v = json.data;}, null, false);
  136. }else{
  137. orgActions.listSubGroupDirect(data, function(json){v = json.data;}, null, false);
  138. }
  139. return v;
  140. },
  141. //查询上级群组--返回群组的对象数组
  142. //nested 布尔 true嵌套上级;false直接上级;默认false;
  143. listSupGroup:function(name, nested){
  144. getOrgActions();
  145. var data = {"groupList": getNameFlag(name)};
  146. var v = null;
  147. if (nested){
  148. orgActions.listSupGroupNested(data, function(json){v = json.data;}, null, false);
  149. }else{
  150. orgActions.listSupGroupDirect(data, function(json){v = json.data;}, null, false);
  151. }
  152. return v;
  153. },
  154. //人员所在群组(嵌套)--返回群组的对象数组
  155. listGroupWithPerson:function(name){
  156. getOrgActions();
  157. var data = {"personList": getNameFlag(name)};
  158. var v = null;
  159. orgActions.listGroupWithPerson(data, function(json){v = json.data;}, null, false);
  160. return v;
  161. },
  162. //群组是否拥有角色--返回true, false
  163. groupHasRole: function(name, role){
  164. getOrgActions();
  165. nameFlag = (typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name;
  166. var data = {"group":nameFlag,"roleList":getNameFlag(role)};
  167. var v = false;
  168. orgActions.groupHasRole(data, function(json){v = json.data.value;}, null, false);
  169. return v;
  170. },
  171. //角色***************
  172. //获取角色--返回角色的对象数组
  173. getRole: function(name){
  174. getOrgActions();
  175. var data = {"roleList": getNameFlag(name)};
  176. var v = null;
  177. orgActions.listRole(data, function(json){v = json.data;}, null, false);
  178. return (v && v.length===1) ? v[0] : v;
  179. },
  180. //人员所有角色(嵌套)--返回角色的对象数组
  181. listRoleWithPerson:function(name){
  182. getOrgActions();
  183. var data = {"personList": getNameFlag(name)};
  184. var v = null;
  185. orgActions.listRoleWithPerson(data, function(json){v = json.data;}, null, false);
  186. return v;
  187. },
  188. //人员***************
  189. //人员是否拥有角色--返回true, false
  190. personHasRole: function(name, role){
  191. getOrgActions();
  192. nameFlag = (typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name;
  193. var data = {"person":nameFlag,"roleList":getNameFlag(role)};
  194. var v = false;
  195. orgActions.personHasRole(data, function(json){v = json.data.value;}, null, false);
  196. return v;
  197. },
  198. //获取人员--返回人员的对象数组
  199. getPerson: function(name){
  200. getOrgActions();
  201. var data = {"personList": getNameFlag(name)};
  202. var v = null;
  203. orgActions.listPerson(data, function(json){v = json.data;}, null, false);
  204. return (v && v.length===1) ? v[0] : v;
  205. },
  206. //查询下级人员--返回人员的对象数组
  207. //nested 布尔 true嵌套下级;false直接下级;默认false;
  208. listSubPerson: function(name, nested){
  209. getOrgActions();
  210. var data = {"personList": getNameFlag(name)};
  211. var v = null;
  212. if (nested){
  213. orgActions.listPersonSubNested(data, function(json){v = json.data;}, null, false);
  214. }else{
  215. orgActions.listPersonSubDirect(data, function(json){v = json.data;}, null, false);
  216. }
  217. return v;
  218. },
  219. //查询上级人员--返回人员的对象数组
  220. //nested 布尔 true嵌套上级;false直接上级;默认false;
  221. listSupPerson: function(name, nested){
  222. getOrgActions();
  223. var data = {"personList": getNameFlag(name)};
  224. var v = null;
  225. if (nested){
  226. orgActions.listPersonSupNested(data, function(json){v = json.data;}, null, false);
  227. }else{
  228. orgActions.listPersonSupDirect(data, function(json){v = json.data;}, null, false);
  229. }
  230. return v;
  231. },
  232. //获取群组的所有人员--返回人员的对象数组
  233. listPersonWithGroup: function(name){
  234. getOrgActions();
  235. var data = {"groupList": getNameFlag(name)};
  236. var v = null;
  237. orgActions.listPersonWithGroup(data, function(json){v = json.data;}, null, false);
  238. return v;
  239. },
  240. //获取角色的所有人员--返回人员的对象数组
  241. listPersonWithRole: function(name){
  242. getOrgActions();
  243. var data = {"roleList": getNameFlag(name)};
  244. var v = null;
  245. orgActions.listPersonWithRole(data, function(json){v = json.data;}, null, false);
  246. return v;
  247. },
  248. //获取身份的所有人员--返回人员的对象数组
  249. listPersonWithIdentity: function(name){
  250. getOrgActions();
  251. var data = {"identityList": getNameFlag(name)};
  252. var v = null;
  253. orgActions.listPersonWithIdentity(data, function(json){v = json.data;}, null, false);
  254. return v;
  255. },
  256. //查询组织成员的人员--返回人员的对象数组
  257. //nested 布尔 true嵌套的所有成员;false直接成员;默认false;
  258. listPersonWithUnit: function(name, nested){
  259. getOrgActions();
  260. var data = {"unitList": getNameFlag(name)};
  261. var v = null;
  262. if (nested){
  263. orgActions.listPersonWithUnitNested(data, function(json){v = json.data;}, null, false);
  264. }else{
  265. orgActions.listPersonWithUnitDirect(data, function(json){v = json.data;}, null, false);
  266. }
  267. return v;
  268. },
  269. //根据属性查询人员--返回人员的对象数组
  270. //name string 属性名
  271. //value string 属性值
  272. listPersonWithAttribute: function(name, value){
  273. getOrgActions();
  274. var data = {"name": name, "attribute": value};
  275. var v = null;
  276. orgActions.listPersonWithAttribute(data, function(json){v = json.data;}, null, false);
  277. return v;
  278. },
  279. //根据属性查询人员--返回人员的全称数组
  280. //name string 属性名
  281. //value string 属性值
  282. listPersonNameWithAttribute: function(name, value){
  283. getOrgActions();
  284. var data = {"name": name, "attribute": value};
  285. var v = null;
  286. orgActions.listPersonWithAttributeValue(data, function(json){v = json.data.personList;}, null, false);
  287. return v;
  288. },
  289. //人员属性************
  290. //添加人员属性值(在属性中添加values值,如果没有此属性,则创建一个)
  291. appendPersonAttribute: function(person, attr, values, success, failure){
  292. getOrgActions();
  293. var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
  294. var data = {"attributeList":values,"name":attr,"person":personFlag};
  295. orgActions.appendPersonAttribute(data, function(json){
  296. if (json.data.value){
  297. if (success) success();
  298. }else{
  299. if (failure) failure(null, "", "append values failed");
  300. }
  301. }, function(xhr, text, error){
  302. if (failure) failure(xhr, text, error);
  303. }, false);
  304. },
  305. //设置人员属性值(将属性值修改为values,如果没有此属性,则创建一个)
  306. setPersonAttribute: function(person, attr, values, success, failure){
  307. getOrgActions();
  308. var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
  309. var data = {"attributeList":values,"name":attr,"person":personFlag};
  310. orgActions.setPersonAttribute(data, function(json){
  311. if (json.data.value){
  312. if (success) success();
  313. }else{
  314. if (failure) failure(null, "", "append values failed");
  315. }
  316. }, function(xhr, text, error){
  317. if (failure) failure(xhr, text, error);
  318. }, false);
  319. },
  320. //获取人员属性值
  321. getPersonAttribute: function(person, attr){
  322. getOrgActions();
  323. var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
  324. var data = {"name":attr,"person":personFlag};
  325. var v = null;
  326. orgActions.getPersonAttribute(data, function(json){v = json.data.attributeList;}, null, false);
  327. return v;
  328. },
  329. //列出人员所有属性的名称
  330. listPersonAttributeName: function(name){
  331. getOrgActions();
  332. var data = {"personList":getNameFlag(name)};
  333. var v = null;
  334. orgActions.listPersonAttributeName(data, function(json){v = json.data.nameList;}, null, false);
  335. return v;
  336. },
  337. //列出人员的所有属性
  338. listPersonAllAttribute: function(name){
  339. getOrgActions();
  340. var data = {"personList":getNameFlag(name)};
  341. var v = null;
  342. orgActions.listPersonAllAttribute(data, function(json){v = json.data;}, null, false);
  343. return v;
  344. },
  345. //身份**********
  346. //获取身份
  347. getIdentity: function(name){
  348. getOrgActions();
  349. var data = {"identityList":getNameFlag(name)};
  350. var v = null;
  351. orgActions.listIdentity(data, function(json){v = json.data;}, null, false);
  352. return (v && v.length===1) ? v[0] : v;
  353. },
  354. //列出人员的身份
  355. listIdentityWithPerson: function(name){
  356. getOrgActions();
  357. var data = {"personList":getNameFlag(name)};
  358. var v = null;
  359. orgActions.listIdentityWithPerson(data, function(json){v = json.data;}, null, false);
  360. return v;
  361. },
  362. //查询组织成员身份--返回身份的对象数组
  363. //nested 布尔 true嵌套的所有成员;false直接成员;默认false;
  364. listIdentityWithUnit: function(name, nested){
  365. getOrgActions();
  366. var data = {"unitList": getNameFlag(name)};
  367. var v = null;
  368. if (nested){
  369. orgActions.listIdentityWithUnitNested(data, function(json){v = json.data;}, null, false);
  370. }else{
  371. orgActions.listIdentityWithUnitDirect(data, function(json){v = json.data;}, null, false);
  372. }
  373. return v;
  374. },
  375. //组织**********
  376. //获取组织
  377. getUnit: function(name){
  378. getOrgActions();
  379. var data = {"unitList":getNameFlag(name)};
  380. var v = null;
  381. orgActions.listUnit(data, function(json){v = json.data;}, null, false);
  382. return (v && v.length===1) ? v[0] : v;
  383. },
  384. //查询组织的下级--返回组织的对象数组
  385. //nested 布尔 true嵌套下级;false直接下级;默认false;
  386. listSubUnit: function(name, nested){
  387. getOrgActions();
  388. var data = {"unitList": getNameFlag(name)};
  389. var v = null;
  390. if (nested){
  391. orgActions.listUnitSubNested(data, function(json){v = json.data;}, null, false);
  392. }else{
  393. orgActions.listUnitSubDirect(data, function(json){v = json.data;}, null, false);
  394. }
  395. return v;
  396. },
  397. //查询组织的上级--返回组织的对象数组
  398. //nested 布尔 true嵌套上级;false直接上级;默认false;
  399. listSupUnit: function(name, nested){
  400. getOrgActions();
  401. var data = {"unitList": getNameFlag(name)};
  402. var v = null;
  403. if (nested){
  404. orgActions.listUnitSupNested(data, function(json){v = json.data;}, null, false);
  405. }else{
  406. orgActions.listUnitSupDirect(data, function(json){v = json.data;}, null, false);
  407. }
  408. return v;
  409. },
  410. //根据个人身份获取组织
  411. //flag 数字 表示获取第几层的组织
  412. // 字符串 表示获取指定类型的组织
  413. // 空 表示获取直接所在的组织
  414. getUnitByIdentity: function(name, flag){
  415. getOrgActions();
  416. var getUnitMethod = "current";
  417. var v;
  418. if (flag){
  419. if (typeOf(flag)==="string") getUnitMethod = "type";
  420. if (typeOf(flag)==="number") getUnitMethod = "level";
  421. }
  422. switch (getUnitMethod){
  423. case "current":
  424. var data = {"identityList":getNameFlag(name)};
  425. orgActions.listUnitWithIdentity(data, function(json){ v = json.data; v=(v&&v.length===1) ? v[0] : v }, null, false);
  426. break;
  427. case "type":
  428. var data = {"identity":(typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name,"type":flag};
  429. orgActions.getUnitWithIdentityAndType(data, function(json){ v = json.data; }, null, false);
  430. break;
  431. case "level":
  432. var data = {"identity":(typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name,"level":flag};
  433. orgActions.getUnitWithIdentityAndLevel(data, function(json){ v = json.data; }, null, false);
  434. break;
  435. }
  436. return v;
  437. },
  438. //列出身份所在组织的所有上级组织
  439. listAllSupUnitWithIdentity: function(name){
  440. getOrgActions();
  441. var data = {"identityList":getNameFlag(name)};
  442. var v = null;
  443. orgActions.listUnitSupNestedWithIdentity(data, function(json){v = json.data;}, null, false);
  444. return v;
  445. },
  446. //获取人员所在的所有组织
  447. listUnitWithPerson: function(name){
  448. getOrgActions();
  449. var data = {"personList":getNameFlag(name)};
  450. var v = null;
  451. orgActions.listUnitWithPerson(data, function(json){v = json.data;}, null, false);
  452. return v;
  453. },
  454. //列出身份所在组织的所有上级组织
  455. listAllSupUnitWithPerson: function(name){
  456. getOrgActions();
  457. var data = {"personList":getNameFlag(name)};
  458. var v = null;
  459. orgActions.listUnitSupNestedWithPerson(data, function(json){v = json.data;}, null, false);
  460. return v;
  461. },
  462. //根据组织属性,获取所有符合的组织
  463. listUnitWithAttribute: function(name, attribute){
  464. getOrgActions();
  465. var data = {"name":name,"attribute":attribute};
  466. var v = null;
  467. orgActions.listUnitWithAttribute(data, function(json){v = json.data;}, null, false);
  468. return v;
  469. },
  470. //根据组织职务,获取所有符合的组织
  471. listUnitWithDuty: function(name, id){
  472. getOrgActions();
  473. var data = {"name":"","identity":(typeOf(id)==="object") ? (id.distinguishedName || id.id || id.unique || id.name) : id};
  474. var v = null;
  475. orgActions.listUnitWithDuty(data, function(json){v = json.data;}, null, false);
  476. return v;
  477. },
  478. //列出顶层组织
  479. listTopUnit: function(){
  480. var action = MWF.Actions.get("x_organization_assemble_control");
  481. var v = null;
  482. action.listTopUnit(function(json){
  483. v = json.data;
  484. }, null, false);
  485. return v;
  486. },
  487. //组织职务***********
  488. //获取指定的组织职务的身份
  489. getDuty: function(duty, id){
  490. getOrgActions();
  491. var data = {"name":duty,"unit":(typeOf(id)==="object") ? (id.distinguishedName || id.id || id.unique || id.name) : id};
  492. var v = null;
  493. orgActions.getDuty(data, function(json){v = json.data;}, null, false);
  494. return v;
  495. },
  496. //获取身份的所有职务名称
  497. listDutyNameWithIdentity: function(name){
  498. getOrgActions();
  499. var data = {"identityList":getNameFlag(name)};
  500. var v = null;
  501. orgActions.listDutyNameWithIdentity(data, function(json){v = json.data.nameList;}, null, false);
  502. return v;
  503. },
  504. //获取组织的所有职务名称
  505. listDutyNameWithUnit: function(name){
  506. getOrgActions();
  507. var data = {"unitList":getNameFlag(name)};
  508. var v = null;
  509. orgActions.listDutyNameWithUnit(data, function(json){v = json.data.nameList;}, null, false);
  510. return v;
  511. },
  512. //获取组织的所有职务
  513. listUnitAllDuty: function(name){
  514. getOrgActions();
  515. var data = {"unitList":getNameFlag(name)};
  516. var v = null;
  517. orgActions.listUnitAllDuty(data, function(json){v = json.data;}, null, false);
  518. return v;
  519. },
  520. //组织属性**************
  521. //添加组织属性值(在属性中添加values值,如果没有此属性,则创建一个)
  522. appendUnitAttribute: function(unit, attr, values, success, failure){
  523. getOrgActions();
  524. var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
  525. var data = {"attributeList":values,"name":attr,"unit":unitFlag};
  526. orgActions.appendUnitAttribute(data, function(json){
  527. if (json.data.value){
  528. if (success) success();
  529. }else{
  530. if (failure) failure(null, "", "append values failed");
  531. }
  532. }, function(xhr, text, error){
  533. if (failure) failure(xhr, text, error);
  534. }, false);
  535. },
  536. //设置组织属性值(将属性值修改为values,如果没有此属性,则创建一个)
  537. setUnitAttribute: function(unit, attr, values, success, failure){
  538. getOrgActions();
  539. var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
  540. var data = {"attributeList":values,"name":attr,"unit":unitFlag};
  541. orgActions.setUnitAttribute(data, function(json){
  542. if (json.data.value){
  543. if (success) success();
  544. }else{
  545. if (failure) failure(null, "", "append values failed");
  546. }
  547. }, function(xhr, text, error){
  548. if (failure) failure(xhr, text, error);
  549. }, false);
  550. },
  551. //获取组织属性值
  552. getUnitAttribute: function(unit, attr){
  553. getOrgActions();
  554. var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
  555. var data = {"name":attr,"unit":unitFlag};
  556. var v = null;
  557. orgActions.getUnitAttribute(data, function(json){v = json.data.attributeList;}, null, false);
  558. return v;
  559. },
  560. //列出组织所有属性的名称
  561. listUnitAttributeName: function(name){
  562. getOrgActions();
  563. var data = {"unitList":getNameFlag(name)};
  564. var v = null;
  565. orgActions.listUnitAttributeName(data, function(json){v = json.data.nameList;}, null, false);
  566. return v;
  567. },
  568. //列出组织的所有属性
  569. listUnitAllAttribute: function(name){
  570. getOrgActions();
  571. var data = {"unitList":getNameFlag(name)};
  572. var v = null;
  573. orgActions.listUnitAllAttribute(data, function(json){v = json.data;}, null, false);
  574. return v;
  575. }
  576. };
  577. this.Action = (function(){
  578. var actions = [];
  579. return function(root, json){
  580. var action = actions[root] || (actions[root] = new MWF.xDesktop.Actions.RestActions("", root, ""));
  581. action.getActions = function(callback){
  582. if (!this.actions) this.actions = {};
  583. Object.merge(this.actions, json);
  584. if (callback) callback();
  585. };
  586. this.invoke = function(option){
  587. action.invoke(option)
  588. }
  589. }
  590. })();
  591. this.service = {
  592. "jaxwsClient": {},
  593. "jaxrsClient":{}
  594. };
  595. var lookupAction = null;
  596. var getLookupAction = function(callback){
  597. if (!lookupAction){
  598. MWF.require("MWF.xDesktop.Actions.RestActions", function(){
  599. lookupAction = new MWF.xDesktop.Actions.RestActions("", "x_processplatform_assemble_surface", "");
  600. lookupAction.getActions = function(actionCallback){
  601. this.actions = {
  602. //"lookup": {"uri": "/jaxrs/view/flag/{view}/application/flag/{application}"},
  603. //"getView": {"uri": "/jaxrs/view/{id}/design"}
  604. "lookup": {"uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}/execute", "method":"PUT"},
  605. "getView": {"uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}"}
  606. };
  607. if (actionCallback) actionCallback();
  608. }
  609. if (callback) callback();
  610. });
  611. }else{
  612. if (callback) callback();
  613. }
  614. };
  615. this.view = {
  616. "lookup": function(view, callback, async){
  617. var filterList = {"filterList": (view.filter || null)};
  618. MWF.Actions.get("x_query_assemble_surface").loadView(view.view, view.application, filterList, function(json){
  619. var data = {
  620. "grid": json.data.grid || json.data.groupGrid,
  621. "groupGrid": json.data.groupGrid
  622. };
  623. if (callback) callback(data);
  624. }, null, async);
  625. },
  626. "lookupV1": function(view, callback){
  627. getLookupAction(function(){
  628. lookupAction.invoke({"name": "lookup","async": true, "parameter": {"view": view.view, "application": view.application},"success": function(json){
  629. var data = {
  630. "grid": json.data.grid,
  631. "groupGrid": json.data.groupGrid
  632. };
  633. if (callback) callback(data);
  634. }.bind(this)});
  635. }.bind(this));
  636. },
  637. "select": function(view, callback, options){
  638. if (view.view){
  639. var viewJson = {
  640. "application": view.application || _form.json.application,
  641. "viewName": view.view || "",
  642. "isTitle": (view.isTitle===false) ? "no" : "yes",
  643. "select": (view.isMulti===false) ? "single" : "multi",
  644. "filter": view.filter
  645. };
  646. if (!options) options = {};
  647. options.width = view.width;
  648. options.height = view.height;
  649. options.title = view.caption;
  650. var width = options.width || "700";
  651. var height = options.height || "400";
  652. if (layout.mobile){
  653. var size = document.body.getSize();
  654. width = size.x;
  655. height = size.y;
  656. options.style = "viewmobile";
  657. }
  658. width = width.toInt();
  659. height = height.toInt();
  660. var size = _form.app.content.getSize();
  661. var x = (size.x-width)/2;
  662. var y = (size.y-height)/2;
  663. if (x<0) x = 0;
  664. if (y<0) y = 0;
  665. if (layout.mobile){
  666. x = 20;
  667. y = 0;
  668. }
  669. var _self = this;
  670. MWF.require("MWF.xDesktop.Dialog", function(){
  671. var dlg = new MWF.xDesktop.Dialog({
  672. "title": options.title || "select view",
  673. "style": options.style || "view",
  674. "top": y,
  675. "left": x-20,
  676. "fromTop":y,
  677. "fromLeft": x-20,
  678. "width": width,
  679. "height": height,
  680. "html": "<div style='height: 100%;'></div>",
  681. "maskNode": _form.app.content,
  682. "container": _form.app.content,
  683. "buttonList": [
  684. {
  685. "text": MWF.LP.process.button.ok,
  686. "action": function(){
  687. //if (callback) callback(_self.view.selectedItems);
  688. if (callback) callback(_self.view.getData());
  689. this.close();
  690. }
  691. },
  692. {
  693. "text": MWF.LP.process.button.cancel,
  694. "action": function(){this.close();}
  695. }
  696. ]
  697. });
  698. dlg.show();
  699. if (layout.mobile){
  700. var backAction = dlg.node.getElement(".MWF_dialod_Action_back");
  701. var okAction = dlg.node.getElement(".MWF_dialod_Action_ok");
  702. if (backAction) backAction.addEvent("click", function(e){
  703. dlg.close();
  704. }.bind(this));
  705. if (okAction) okAction.addEvent("click", function(e){
  706. //if (callback) callback(this.view.selectedItems);
  707. if (callback) callback(this.view.getData());
  708. dlg.close();
  709. }.bind(this));
  710. }
  711. MWF.xDesktop.requireApp("query.Query", "Viewer", function(){
  712. this.view = new MWF.xApplication.query.Query.Viewer(dlg.content.getFirst(), viewJson, {"style": "select"});
  713. }.bind(this));
  714. }.bind(this));
  715. }
  716. }
  717. };
  718. //include 引用脚本
  719. //optionsOrName : {
  720. // type : "", 默认为portal, 可以为 portal process cms
  721. // application : "", 门户/流程/CMS的名称/别名/id, 默认为当前应用
  722. // name : "" // 脚本名称/别名/id
  723. //}
  724. //或者name: "" // 脚本名称/别名/id
  725. if( !window.includedScripts ){
  726. var includedScripts = window.includedScripts = [];
  727. }else{
  728. var includedScripts = window.includedScripts;
  729. }
  730. this.include = function( optionsOrName , callback ){
  731. var options = optionsOrName;
  732. if( typeOf( options ) == "string" ){
  733. options = { name : options };
  734. }
  735. var name = options.name;
  736. var type = ( options.type && options.application ) ? options.type : "portal";
  737. var application = options.application || _form.json.application;
  738. if (includedScripts.indexOf( name )> -1){
  739. if (callback) callback.apply(this);
  740. return;
  741. }
  742. var scriptAction;
  743. switch ( type ){
  744. case "portal" :
  745. if( this.scriptActionPortal ){
  746. scriptAction = this.scriptActionPortal;
  747. }else{
  748. MWF.require("MWF.xScript.Actions.PortalScriptActions", null, false);
  749. scriptAction = this.scriptActionPortal = new MWF.xScript.Actions.PortalScriptActions();
  750. }
  751. break;
  752. case "process" :
  753. if( this.scriptActionProcess ){
  754. scriptAction = this.scriptActionProcess;
  755. }else{
  756. MWF.require("MWF.xScript.Actions.ScriptActions", null, false);
  757. scriptAction = this.scriptActionProcess = new MWF.xScript.Actions.ScriptActions();
  758. }
  759. break;
  760. case "cms" :
  761. if( this.scriptActionCMS ){
  762. scriptAction = this.scriptActionCMS;
  763. }else{
  764. MWF.require("MWF.xScript.Actions.CMSScriptActions", null, false);
  765. scriptAction = this.scriptActionCMS = new MWF.xScript.Actions.CMSScriptActions();
  766. }
  767. break;
  768. }
  769. scriptAction.getScriptByName( application, name, includedScripts, function(json){
  770. if (json.data){
  771. includedScripts = includedScripts.concat(json.data.importedList);
  772. MWF.Macro.exec(json.data.text, this);
  773. if (callback) callback.apply(this);
  774. }else{
  775. if (callback) callback.apply(this);
  776. }
  777. }.bind(this), null, false);
  778. };
  779. //var includedScripts = [];
  780. //this.include = function(name, callback){
  781. // if (includedScripts.indexOf(name)==-1){
  782. // if (!this.scriptAction){
  783. // MWF.require("MWF.xScript.Actions.PortalScriptActions", null, false);
  784. // this.scriptAction = new MWF.xScript.Actions.PortalScriptActions();
  785. // }
  786. // this.scriptAction.getScriptByName(_form.json.application, name, includedScripts, function(json){
  787. // if (json.data){
  788. // includedScripts = includedScripts.concat(json.data.importedList);
  789. // MWF.Macro.exec(json.data.text, this);
  790. // if (callback) callback.apply(this);
  791. // }else{
  792. // if (callback) callback.apply(this);
  793. // }
  794. // }.bind(this), null, false);
  795. // }else{
  796. // if (callback) callback.apply(this);
  797. // }
  798. //}.bind(this);
  799. this.define = function(name, fun, overwrite){
  800. var over = true;
  801. if (overwrite===false) over = false;
  802. var o = {};
  803. o[name] = {"value": fun, "configurable": over};
  804. MWF.defineProperties(this, o);
  805. }.bind(this);
  806. //仅前台对象-----------------------------------------
  807. //form
  808. this.page = this.form = {
  809. "getInfor": function(){return ev.pageInfor;},
  810. "infor": ev.pageInfor,
  811. "getApp": function(){return _form.app;},
  812. "app": _form.app,
  813. "node": function(){return _form.node;},
  814. //"readonly": _form.options.readonly,
  815. "get": function(name){return (_form.all) ? _form.all[name] : null;},
  816. "getWidgetModule": function(widget, moduleName){
  817. if( !_form.widgetModules || !_form.widgetModules[widget] )return null;
  818. var module = _form.widgetModules[widget][moduleName];
  819. return module || null;
  820. },
  821. "getField": function(name){return _forms[name];},
  822. "getAction": function(){return _form.workAction},
  823. "getDesktop": function(){return _form.app.desktop},
  824. "getData": function(){return new MWF.xScript.JSONData(_form.getData());},
  825. //"save": function(callback){_form.saveWork(callback);},
  826. "close": function(){_form.closeWork();},
  827. "print": function(application, form){
  828. _form.printWork(application, form);
  829. },
  830. "confirm": function(type, title, text, width, height, ok, cancel, callback, mask, style){
  831. var p = MWF.getCenter({"x": width, "y": height});
  832. e = {"event": {"clientX": p.x,"x": p.x,"clientY": p.y,"y": p.y}};
  833. _form.confirm(type, e, title, text, width, height, ok, cancel, callback, mask, style);
  834. },
  835. "notice": function(content, type, target, where, offset, option){
  836. _form.notice(content, type, target, where, offset, option);
  837. },
  838. "addEvent": function(e, f){_form.addEvent(e, f);},
  839. "openWindow": function(form, app){
  840. _form.openWindow(form, app);
  841. },
  842. "toPage": function(name, par){
  843. _form.app.toPage(name, par);
  844. },
  845. "toPortal": function(portal, page, par){
  846. _form.app.toPortal(portal, page, par);
  847. },
  848. "openWork": function(id, completedId, title, options){
  849. var op = options || {};
  850. op.workId = id;
  851. op.workCompletedId = completedId;
  852. op.docTitle = title;
  853. op.appId = "process.Work"+(op.workId || op.workCompletedId);
  854. return layout.desktop.openApplication(this.event, "process.Work", op);
  855. },
  856. "openJob": function(id, choice, options){
  857. var workData = null;
  858. o2.Actions.get("x_processplatform_assemble_surface").listWorkByJob(id, function(json){
  859. if (json.data) workData = json.data;
  860. }.bind(this), null, false);
  861. if (workData){
  862. var len = workData.workList.length + workData.workCompletedList.length;
  863. if (len){
  864. if (len>1 && choice){
  865. }else{
  866. if (workData.workList.length){
  867. var work = workData.workList[0];
  868. return this.openWork(work.id, null, work.title, options);
  869. }else{
  870. var work = workData.workCompletedList[0];
  871. return this.openWork(null, work.id, work.title, options);
  872. }
  873. }
  874. }
  875. }
  876. },
  877. "openDocument": function(id, title, options){
  878. var op = options || {};
  879. op.documentId = id;
  880. op.docTitle = title || "";
  881. layout.desktop.openApplication(this.event, "cms.Document", op);
  882. },
  883. "openPortal": function(name, page, par){
  884. var action = MWF.Actions.get("x_portal_assemble_surface");
  885. action.getApplication(name, function(json){
  886. if (json.data){
  887. if (page){
  888. action.getPageByName(page, json.data.id, function(pageJson){
  889. layout.desktop.openApplication(null, "portal.Portal", {
  890. "portalId": json.data.id,
  891. "pageId": (pageJson.data) ? pageJson.data.id : "",
  892. "parameters": par,
  893. "appId": "portal.Portal"+json.data.id
  894. })
  895. });
  896. }else{
  897. layout.desktop.openApplication(null, "portal.Portal", {
  898. "portalId": json.data.id,
  899. "parameters": par,
  900. "appId": "portal.Portal"+json.data.id
  901. })
  902. }
  903. }
  904. });
  905. },
  906. "openCMS": function(name){
  907. var action = MWF.Actions.get("x_cms_assemble_control");
  908. action.getColumn(name, function(json){
  909. if (json.data){
  910. layout.desktop.openApplication(null, "cms.Module", {
  911. "columnId": json.data.id,
  912. "appId": "cms.Module"+json.data.id
  913. });
  914. }
  915. });
  916. },
  917. "openProcess": function(name){
  918. var action = MWF.Actions.get("x_processplatform_assemble_surface");
  919. action.getApplication(name, function(json){
  920. if (json.data){
  921. layout.desktop.openApplication(null, "process.Application", {
  922. "id": json.data.id,
  923. "appId": "process.Application"+json.data.id
  924. });
  925. }
  926. });
  927. },
  928. "openApplication":function(name, options){
  929. layout.desktop.openApplication(null, name, options);
  930. },
  931. "createDocument" : function(columnOrOptions, category, data, identity, callback, target, latest, selectColumnEnable, ignoreTitle){
  932. var column = columnOrOptions;
  933. if( typeOf( columnOrOptions ) == "object" ){
  934. column = columnOrOptions.column;
  935. category = columnOrOptions.category;
  936. data = columnOrOptions.data;
  937. identity = columnOrOptions.identity;
  938. callback = columnOrOptions.callback;
  939. target = columnOrOptions.target;
  940. latest = columnOrOptions.latest;
  941. selectColumnEnable = columnOrOptions.selectColumnEnable;
  942. ignoreTitle = columnOrOptions.ignoreTitle;
  943. }
  944. if (target){
  945. if (layout.app && layout.app.inBrowser){
  946. layout.app.content.empty();
  947. layout.app = null;
  948. }
  949. }
  950. MWF.xDesktop.requireApp("cms.Index", "Newer", function(){
  951. var starter = new MWF.xApplication.cms.Index.Newer(null, null, _form.app, null, {
  952. "documentData": data,
  953. "identity": identity,
  954. "ignoreTitle" : ignoreTitle === true,
  955. "ignoreDrafted" : latest === false,
  956. "selectColumnEnable" : !category || selectColumnEnable === true,
  957. "restrictToColumn" : !!category && selectColumnEnable !== true,
  958. "categoryFlag" : category, //category id or name
  959. "columnFlag" : column, //column id or name,
  960. "onStarted" : function( documentId, data ){
  961. if(callback)callback();
  962. },
  963. "onPostLoad" : function(){
  964. },
  965. "onPostPublish" : function(){
  966. }
  967. });
  968. starter.load();
  969. })
  970. },
  971. "startProcess": function(app, process, data, identity, callback, target, latest){
  972. if (arguments.length>2){
  973. for (var i=2; i<arguments.length; i++){
  974. if (typeOf(arguments[i])=="boolean"){
  975. target = arguments[i];
  976. break;
  977. }
  978. }
  979. }
  980. if (target){
  981. if (layout.app && layout.app.inBrowser){
  982. layout.app.content.empty();
  983. layout.app = null;
  984. }
  985. }
  986. var action = MWF.Actions.get("x_processplatform_assemble_surface").getProcessByName(process, app, function(json){
  987. if (json.data){
  988. MWF.xDesktop.requireApp("process.TaskCenter", "ProcessStarter", function(){
  989. var starter = new MWF.xApplication.process.TaskCenter.ProcessStarter(json.data, _form.app, {
  990. "workData": data,
  991. "identity": identity,
  992. "latest": latest,
  993. "onStarted": function(data, title, processName){
  994. var currentTask = [];
  995. data.each(function(work){
  996. if (work.currentTaskIndex != -1) currentTask.push(work.taskList[work.currentTaskIndex].work);
  997. }.bind(this));
  998. if (currentTask.length==1){
  999. var options = {"workId": currentTask[0], "appId": currentTask[0]};
  1000. layout.desktop.openApplication(null, "process.Work", options);
  1001. }else{}
  1002. if (callback) callback(data);
  1003. }.bind(this)
  1004. });
  1005. starter.load();
  1006. }.bind(this));
  1007. }
  1008. });
  1009. },
  1010. "parameters": _form.options.parameters,
  1011. "getWidgetPrameters" : function(){
  1012. if( !this.target )return null;
  1013. if( !this.target.widget )return null;
  1014. if( !this.widgetParameters )return null;
  1015. var pageId = this.target.widget.json.id;
  1016. return this.widgetParameters[pageId];
  1017. }.bind(this)
  1018. //"app": _form.app
  1019. };
  1020. this.form.currentRouteName = _form.json.currentRouteName;
  1021. this.form.opinion = _form.json.opinion;
  1022. this.target = ev.target;
  1023. this.event = ev.event;
  1024. this.status = ev.status;
  1025. this.session = layout.desktop.session;
  1026. this.Actions = o2.Actions;
  1027. this.query = function(option){
  1028. // options = {
  1029. // "name": "statementName",
  1030. // "data": "json data",
  1031. // "firstResult": 1,
  1032. // "maxResults": 100,
  1033. // "success": function(){},
  1034. // "error": function(){},
  1035. // "async": true or false, default is true
  1036. // }
  1037. if (option){
  1038. var json = (option.data) || {};
  1039. if (option.firstResult) json.firstResult = option.firstResult.toInt();
  1040. if (option.maxResults) json.maxResults = option.maxResults.toInt();
  1041. o2.Actions.get("x_query_assemble_surface").executeStatement(option.name, json, success, error, options.async);
  1042. }
  1043. };
  1044. this.Table = MWF.xScript.createTable();
  1045. };