日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(一)

發(fā)布時(shí)間:2023/11/30 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


題外話:

? ? ? ?最近在忙公司的云項(xiàng)目空閑時(shí)間不是很多,所以很久沒來更新,今天補(bǔ)上一篇!

回顧:

? ? ? ?前幾篇介紹了一下設(shè)計(jì)器的界面和Draw2d基礎(chǔ)知識,這篇講解一下本設(shè)計(jì)器如何擴(kuò)展Draw2d。

?

進(jìn)入主題:

? ? ? ?先看一下擴(kuò)展的類圖:

?其中有顏色標(biāo)注的類即是擴(kuò)展類,其中Node、Port、InputPort、OutputPort是Draw2d提供的類,其余都是擴(kuò)展類。

?這里重點(diǎn)介紹幾個(gè)核心類以及相關(guān)重要的方法,如下:


上圖中黃色部分負(fù)責(zé)生成Activiti流程文件中Task對應(yīng)的XML片段,所以對于不同類型Task需要實(shí)現(xiàn)的方法,例如UserTask,代碼如下:

?

Js代碼 ?
  • draw2d.UserTask=function(configPropCallback){??
  • ????draw2d.Task.call(this,configPropCallback);??
  • ????this.performerType=null;??
  • ????this.dueDate=null;??
  • ????this.priority=null;??
  • ????this.formKey?=?null;??
  • ????this.expression=null;??
  • ????this.isUseExpression=null;??
  • ????this.assignee=null;??
  • ????this.candidateUsers=new?draw2d.ArrayList();??
  • ????this.candidateGroups=new?draw2d.ArrayList();??
  • ????this.formProperties=new?draw2d.ArrayList();??
  • ????this.taskListeners=new?draw2d.ArrayList();??
  • ????this.setTitle("User?Task");??
  • };??
  • draw2d.UserTask.prototype=new?draw2d.Task();??
  • draw2d.UserTask.prototype.type="draw2d.UserTask";??
  • draw2d.UserTask.newInstance=function(userTaskXMLNode){??
  • ????var?task?=?new?draw2d.UserTask();??
  • ????task.id=userTaskXMLNode.attr('id');??
  • ????task.taskId=userTaskXMLNode.attr('id');??
  • ????task.taskName=userTaskXMLNode.attr('name');??
  • ????task.setContent(userTaskXMLNode.attr('name'));??
  • ????return?task;??
  • };??
  • draw2d.UserTask.prototype.getIconClassName?=?function(){??
  • ????return?"user-task-icon";??
  • };??
  • draw2d.UserTask.prototype.getStartElementXML=function(){??
  • ????var?xml='<userTask?';??
  • ????xml=xml+this.getGeneralXML();??
  • ????xml=xml+this.getPerformersXML();??
  • ????xml=xml+'>\n';??
  • ????return?xml;??
  • };??
  • draw2d.UserTask.prototype.getEndElementXML=function(){??
  • ????var?xml?=?'</userTask>\n';??
  • ????return?xml;??
  • };??
  • draw2d.UserTask.prototype.getDocumentationXML=function(){??
  • ????if(this.documentation==null||this.documentation=='')return?'';??
  • ????var?xml='<documentation>';??
  • ????xml=xml+this.documentation;??
  • ????xml=xml+'</documentation>';??
  • ????return?xml;??
  • };??
  • draw2d.UserTask.prototype.getPerformersXML=function(){??
  • ????var?xml='';??
  • ????if(this.isUseExpression){??
  • ????????if(this.expression!=null&&this.expression!=''){??
  • ????????????if(this.performerType=='assignee'){??
  • ????????????????xml=xml+'activiti:assignee="'+this.expression+'"?';??
  • ????????????}else?if(this.performerType=='candidateUsers'){??
  • ????????????????xml=xml+'activiti:candidateUsers="'+this.expression+'"?';??
  • ????????????}else?if(this.performerType=='candidateGroups'){??
  • ????????????????xml=xml+'activiti:candidateGroups="'+this.expression+'"?';??
  • ????????????}??
  • ????????}??
  • ????}else{??
  • ????????if(this.performerType=='assignee'){??
  • ????????????if(this.assignee!=null&&this.assignee!='')??
  • ????????????????xml=xml+this.assignee;??
  • ????????}else?if(this.performerType=='candidateUsers'){??
  • ????????????for(var?i=0;i<this.candidateUsers.getSize();i++){??
  • ????????????????var?user?=?this.candidateUsers.get(i);??
  • ????????????????xml=xml+user.sso+',';??
  • ????????????}??
  • ????????}else?if(this.performerType=='candidateGroups'){??
  • ????????????for(var?i=0;i<this.candidateGroups.getSize();i++){??
  • ????????????????var?group?=?this.candidateGroups.get(i);??
  • ????????????????xml=xml+group+',';??
  • ????????????}??
  • ????????}??
  • ????}??
  • ????if(this.dueDate!=null&&this.dueDate!=''){??
  • ????????xml=xml+'activiti:dueDate="'+this.dueDate+'"?'??
  • ????}??
  • ????if(this.formKey?!=?null?&&?this.formKey?!=?""){??
  • ????????xml=xml+'activiti:formKey="'+this.formKey+'"?';??
  • ????}??
  • ????if(this.priority!=null&&this.priority!=''){??
  • ????????xml=xml+'activiti:priority="'+this.priority+'"?'??
  • ????}??
  • ??????
  • ????return?xml;??
  • };??
  • draw2d.UserTask.prototype.getExtensionElementsXML=function(){??
  • ????if(this.listeners.getSize()==0&&this.formProperties.getSize()==0)return?'';??
  • ????var?xml?=?'<extensionElements>\n';??
  • ????xml=xml+this.getFormPropertiesXML();??
  • ????xml=xml+this.getListenersXML();??
  • ????xml=xml+'</extensionElements>\n';??
  • ????return?xml;??
  • };??
  • draw2d.UserTask.prototype.getListenersXML=function(){??
  • ????var?xml?=?draw2d.Task.prototype.getListenersXML.call(this);??
  • ????for(var?i=0;i<this.taskListeners.getSize();i++){??
  • ????????var?listener?=?this.taskListeners.get(i);??
  • ????????xml=xml+listener.toXML();??
  • ????}??
  • ????return?xml;??
  • };??
  • draw2d.UserTask.prototype.getFormPropertiesXML=function(){??
  • ????var?xml?=?'';??
  • ????for(var?i=0;i<this.formProperties.getSize();i++){??
  • ????????var?formProperty?=?this.formProperties.get(i);??
  • ????????xml=xml+formProperty.toXML();??
  • ????}??
  • ????return?xml;??
  • };??
  • draw2d.UserTask.prototype.toXML=function(){??
  • ????var?xml=this.getStartElementXML();??
  • ????xml=xml+this.getDocumentationXML();??
  • ????xml=xml+this.getExtensionElementsXML();??
  • ????xml=xml+this.getMultiInstanceXML();??
  • ????xml=xml+this.getEndElementXML();??
  • ????return?xml;??
  • }??
  • draw2d.UserTask.prototype.getCandidateUser=function(sso){??
  • ????for(var?i=0;i<this.candidateUsers.getSize();i++){??
  • ????????var?candidate?=?this.candidateUsers.get(i);??
  • ????????if(candidate.sso===sso){??
  • ????????????return?candidate;??
  • ????????}??
  • ????}??
  • ????return?null;??
  • };??
  • draw2d.UserTask.prototype.deleteCandidateUser=function(sso){??
  • ????var?candidate?=?this.getCandidateUser(sso);??
  • ????this.candidateUsers.remove(candidate);??
  • };??
  • draw2d.UserTask.prototype.addCandidateUser=function(user){??
  • ????if(this.getCandidateUser(user.sso)==null)??
  • ????????this.candidateUsers.add(user);??
  • };??
  • draw2d.UserTask.prototype.getCandidateGroup=function(name){??
  • ????for(var?i=0;i<this.candidateGroups.getSize();i++){??
  • ????????var?candidate?=?this.candidateGroups.get(i);??
  • ????????if(candidate===name){??
  • ????????????return?candidate;??
  • ????????}??
  • ????}??
  • ????return?null;??
  • };??
  • draw2d.UserTask.prototype.deleteCandidateGroup=function(name){??
  • ????var?candidate?=?this.getCandidateGroup(name);??
  • ????this.candidateGroups.remove(candidate);??
  • };??
  • draw2d.UserTask.prototype.addCandidateGroup=function(name){??
  • ????if(!this.candidateGroups.contains(name))??
  • ????????this.candidateGroups.add(name);??
  • };??
  • draw2d.UserTask.prototype.getTaskListener=function(id){??
  • ????for(var?i=0;i<this.taskListeners.getSize();i++){??
  • ????????var?listener?=?this.taskListeners.get(i);??
  • ????????if(listener.getId()===?id){??
  • ????????????return?listener;??
  • ????????}??
  • ????}??
  • };??
  • draw2d.UserTask.prototype.deleteTaskListener=function(id){??
  • ????var?listener?=?this.getTaskListener(id);??
  • ????this.taskListeners.remove(listener);??
  • };??
  • draw2d.UserTask.prototype.addTaskListener=function(listener){??
  • ????this.taskListeners.add(listener);??
  • };??
  • draw2d.UserTask.prototype.setTaskListeners=function(listeners){??
  • ????this.taskListeners?=?listeners;??
  • };??
  • draw2d.UserTask.prototype.getFormProperties=function(id){??
  • ????for(var?i=0;i<this.formProperties.getSize();i++){??
  • ????????var?prop?=?this.formProperties.get(i);??
  • ????????if(prop.id==?id){??
  • ????????????return?prop;??
  • ????????}??
  • ????}??
  • };??
  • draw2d.UserTask.prototype.deleteFormProperties=function(id){??
  • ????var?prop?=?this.getFormProperties(id);??
  • ????this.formProperties.remove(prop);??
  • };??
  • draw2d.UserTask.prototype.addFormProperties=function(prop){??
  • ????this.formProperties.add(prop);??
  • };??
  • draw2d.UserTask.prototype.setFormProperties=function(props){??
  • ????this.formProperties?=?props;??
  • };??
  • draw2d.UserTask=function(configPropCallback){draw2d.Task.call(this,configPropCallback);this.performerType=null;this.dueDate=null;this.priority=null;this.formKey = null;this.expression=null;this.isUseExpression=null;this.assignee=null;this.candidateUsers=new draw2d.ArrayList();this.candidateGroups=new draw2d.ArrayList();this.formProperties=new draw2d.ArrayList();this.taskListeners=new draw2d.ArrayList();this.setTitle("User Task"); }; draw2d.UserTask.prototype=new draw2d.Task(); draw2d.UserTask.prototype.type="draw2d.UserTask"; draw2d.UserTask.newInstance=function(userTaskXMLNode){var task = new draw2d.UserTask();task.id=userTaskXMLNode.attr('id');task.taskId=userTaskXMLNode.attr('id');task.taskName=userTaskXMLNode.attr('name');task.setContent(userTaskXMLNode.attr('name'));return task; }; draw2d.UserTask.prototype.getIconClassName = function(){return "user-task-icon"; }; draw2d.UserTask.prototype.getStartElementXML=function(){var xml='<userTask ';xml=xml+this.getGeneralXML();xml=xml+this.getPerformersXML();xml=xml+'>\n';return xml; }; draw2d.UserTask.prototype.getEndElementXML=function(){var xml = '</userTask>\n';return xml; }; draw2d.UserTask.prototype.getDocumentationXML=function(){if(this.documentation==null||this.documentation=='')return '';var xml='<documentation>';xml=xml+this.documentation;xml=xml+'</documentation>';return xml; }; draw2d.UserTask.prototype.getPerformersXML=function(){var xml='';if(this.isUseExpression){if(this.expression!=null&&this.expression!=''){if(this.performerType=='assignee'){xml=xml+'activiti:assignee="'+this.expression+'" ';}else if(this.performerType=='candidateUsers'){xml=xml+'activiti:candidateUsers="'+this.expression+'" ';}else if(this.performerType=='candidateGroups'){xml=xml+'activiti:candidateGroups="'+this.expression+'" ';}}}else{if(this.performerType=='assignee'){if(this.assignee!=null&&this.assignee!='')xml=xml+this.assignee;}else if(this.performerType=='candidateUsers'){for(var i=0;i<this.candidateUsers.getSize();i++){var user = this.candidateUsers.get(i);xml=xml+user.sso+',';}}else if(this.performerType=='candidateGroups'){for(var i=0;i<this.candidateGroups.getSize();i++){var group = this.candidateGroups.get(i);xml=xml+group+',';}}}if(this.dueDate!=null&&this.dueDate!=''){xml=xml+'activiti:dueDate="'+this.dueDate+'" '}if(this.formKey != null && this.formKey != ""){xml=xml+'activiti:formKey="'+this.formKey+'" ';}if(this.priority!=null&&this.priority!=''){xml=xml+'activiti:priority="'+this.priority+'" '}return xml; }; draw2d.UserTask.prototype.getExtensionElementsXML=function(){if(this.listeners.getSize()==0&&this.formProperties.getSize()==0)return '';var xml = '<extensionElements>\n';xml=xml+this.getFormPropertiesXML();xml=xml+this.getListenersXML();xml=xml+'</extensionElements>\n';return xml; }; draw2d.UserTask.prototype.getListenersXML=function(){var xml = draw2d.Task.prototype.getListenersXML.call(this);for(var i=0;i<this.taskListeners.getSize();i++){var listener = this.taskListeners.get(i);xml=xml+listener.toXML();}return xml; }; draw2d.UserTask.prototype.getFormPropertiesXML=function(){var xml = '';for(var i=0;i<this.formProperties.getSize();i++){var formProperty = this.formProperties.get(i);xml=xml+formProperty.toXML();}return xml; }; draw2d.UserTask.prototype.toXML=function(){var xml=this.getStartElementXML();xml=xml+this.getDocumentationXML();xml=xml+this.getExtensionElementsXML();xml=xml+this.getMultiInstanceXML();xml=xml+this.getEndElementXML();return xml; } draw2d.UserTask.prototype.getCandidateUser=function(sso){for(var i=0;i<this.candidateUsers.getSize();i++){var candidate = this.candidateUsers.get(i);if(candidate.sso===sso){return candidate;}}return null; }; draw2d.UserTask.prototype.deleteCandidateUser=function(sso){var candidate = this.getCandidateUser(sso);this.candidateUsers.remove(candidate); }; draw2d.UserTask.prototype.addCandidateUser=function(user){if(this.getCandidateUser(user.sso)==null)this.candidateUsers.add(user); }; draw2d.UserTask.prototype.getCandidateGroup=function(name){for(var i=0;i<this.candidateGroups.getSize();i++){var candidate = this.candidateGroups.get(i);if(candidate===name){return candidate;}}return null; }; draw2d.UserTask.prototype.deleteCandidateGroup=function(name){var candidate = this.getCandidateGroup(name);this.candidateGroups.remove(candidate); }; draw2d.UserTask.prototype.addCandidateGroup=function(name){if(!this.candidateGroups.contains(name))this.candidateGroups.add(name); }; draw2d.UserTask.prototype.getTaskListener=function(id){for(var i=0;i<this.taskListeners.getSize();i++){var listener = this.taskListeners.get(i);if(listener.getId()=== id){return listener;}} }; draw2d.UserTask.prototype.deleteTaskListener=function(id){var listener = this.getTaskListener(id);this.taskListeners.remove(listener); }; draw2d.UserTask.prototype.addTaskListener=function(listener){this.taskListeners.add(listener); }; draw2d.UserTask.prototype.setTaskListeners=function(listeners){this.taskListeners = listeners; }; draw2d.UserTask.prototype.getFormProperties=function(id){for(var i=0;i<this.formProperties.getSize();i++){var prop = this.formProperties.get(i);if(prop.id== id){return prop;}} }; draw2d.UserTask.prototype.deleteFormProperties=function(id){var prop = this.getFormProperties(id);this.formProperties.remove(prop); }; draw2d.UserTask.prototype.addFormProperties=function(prop){this.formProperties.add(prop); }; draw2d.UserTask.prototype.setFormProperties=function(props){this.formProperties = props; };

    ?
    ?請注意代碼中toXML方法,這個(gè)方法負(fù)責(zé)產(chǎn)生UserTask節(jié)點(diǎn)的XML代碼片段,它調(diào)用了其他幾個(gè)方法:getStartElementXML、getDocumentationXML、getExtensionElementsXML、getMultiInstanceXML、getEndElementXML,不同類型的Task可能不需要調(diào)用所以這些方法,可以根據(jù)需要選擇性調(diào)用(當(dāng)然這取決于Activiti流程文件的規(guī)范),當(dāng)然對于不同類型的Task你也可以添加一些自定義的方法,如:生成操作人的方法(代碼中getPerformersXML方法)等等。

    由于Activiti設(shè)計(jì)的Task類型比較多,這里就不一一介紹了有興趣可以去查看一下源代碼還是很好理解的,有問題可以給我留言!

    時(shí)間有限就先寫到這吧!下一篇介紹一下其他擴(kuò)展類,敬請關(guān)注。。。。。

    ?

    總結(jié)

    以上是生活随笔為你收集整理的基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。