Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
BPMN 2.0
 
×÷ÕߣºÀîÑô ËïÖÐÁ¼ À´Ô´£º51CTO ·¢²¼ÓÚ 2015-9-7
  3825  次浏览      30
 

3.1. BPMN 2.0ÊÇÊ²Ã´ÄØ£¿

ÒµÎñÁ÷³ÌÄ£ÐÍ×¢½â£¨Business Process Modeling Notation - BPMN£©ÊÇ ÒµÎñÁ÷³ÌÄ£Ð͵ÄÒ»ÖÖ±ê׼ͼÐÎ×¢½â¡£Õâ¸ö±ê×¼ ÊÇÓɶÔÏó¹ÜÀí×飨Object Management Group - OMG£©Î¬»¤µÄ¡£

»ù±¾ÉÏ£¬BPMN¹æ·¶¶¨ÒåÁËÈÎÎñ¿´ÆðÀ´ÔõÑùµÄ£¬ÄÄЩ½á¹¹¿ÉÒÔ ÓëÆäËû½øÐÐÁ¬½Ó£¬µÈµÈ¡£Õâ¾ÍÒâζ×Å Òâ˼²»»á±»Îó½â¡£

±ê×¼µÄÔçÆÚ°æ±¾£¨1.2°æÒÔ¼°Ö®Ç°£©½ö½öÏÞÖÆÔÚÄ£ÐÍÉÏ£¬ Ä¿±êÊÇÔÚËùÓеÄÀûÒæÏà¹ØÕßÖ®¼äÐγÉͨÓõÄÀí½â£¬ ÔÚÎĵµ£¬ÌÖÂÛºÍʵÏÖÒµÎñÁ÷³ÌÖ®ÉÏ¡£ BPMN±ê×¼Ö¤Ã÷ÁËËü×Ô¼º£¬ÏÖÔÚÊг¡ÉÏÐí¶à½¨Ä£¹¤¾ß ¶¼Ê¹ÓÃÁËBPMN±ê×¼ÖеÄÔªËØºÍ½á¹¹¡£ ʵ¼ÊÉÏ£¬ÏÖÔÚµÄjPDLÉè¼ÆÆ÷ҲʹÓÃÁË BPMNÔªËØ¡£

BPMN¹æ·¶µÄ2.0°æ±¾£¬µ±Ç°ÒѾ­´¦ÓÚ×îÖÕ½×¶ÎÁË£¬ ÒѾ­¼Æ»®²»¾Í¾Í»áÍê³É£¬ÔÊÐíÌí¼Ó¾«È·µÄ¼¼Êõϸ½Ú ÔÚBPMNµÄͼÐκÍÔªËØÖУ¬ Í¬Ê±ÖÆ¶¨BPMNÔªËØµÄÖ´ÐÐÓï·¨¡£ ͨ¹ýʹÓÃXMLÓïÑÔÀ´Ö¸¶¨ÒµÎñÁ÷³ÌµÄ¿ÉÖ´ÐÐÓï·¨£¬ BPMN¹æ·¶ÒѾ­ÑݱäΪҵÎñÁ÷³ÌµÄÓïÑÔ£¬ ¿ÉÒÔÖ´ÐÐÔÚÈκμæÈÝBPMN2µÄÁ÷³ÌÒýÇæÖУ¬ ͬʱÒÀÈ»¿ÉÒÔʹÓÃÇ¿´óµÄͼÐÎ×¢½â¡£

3.2. ÀúÊ·ºÍÄ¿±ê

jBPM BPMN2µÄʵÏÖÊÇÔÚjBPM 4.0·¢²¼Ö®ºó ÔÚ2009Äê8Ô£¬ÔÚÓëÉçÇø½øÐÐÁ˽ôÃÜЭ×÷Ö®ºóÆô¶¯µÄ¡£ ¶øºó£¬ÎÒÃǾö¶¨Á˵ÚÒ»¸ö·¢²¼°æ£¨±ÈÈ磬Îĵµ/QA£© Éæ¼°Ò»²¿·ÖBPMN2¹æ·¶£¬½«ÔÚjBPM 4.3·¢²¼¡£

ÎÒÃǵÄÄ¿±êÊǽ¨Á¢Ò»¸öÔ­ÉúBPMN2ÔËÐÐÒýÇæ £¨»òÕß˵ʵÏÖ'¿ÉÖ´ÐеÄBPMN2'£©»ùÓÚÁ÷³ÌÐéÄâ»ú £¨Process Virtual Machine - PVM£©¡£ ×¢Ò⣬Õâ¸ö°æ±¾µÄÖ÷ҪĿ±êÊÇÔ­Éú¿ÉÖ´ÐУ¬ ²»ÊÇͼÐÎ×¢½â - µ«ÊÇÎÒÃÇÇå³þ ¶ÔÓÚδÀ´µÄ°æ±¾ÊǺÜÖØÒªµÄ¡£

Èç¹ûÓû§ÒѾ­Á˽âÁËjBPM£¬¾Í»á·¢ÏÖ

ÅäÖýṹ±£³Ö²»±ä

APIÓëÒѾ­´æÔÚµÄÍêȫһÑù»òÕߺÜÀàËÆ

²âÊÔBPMN2Á÷³ÌÒ²¿ÉÒÔʹÓó£ÓõÄjava²âÊÔ¿ò¼Ü

Êý¾Ý¿â±í½á¹¹±£³Ö²»±ä

ËùÒÔ£¬×ÜÌåÀ´Ëµ£¬ÎÒÃǵÄÖ÷ҪĿ±êÊDZ£³ÖËùÓÐÔÚjBPMÉϺõÄÊÂÇ飬 ¼ÓÇ¿ËüÃÇ£¬Ê¹ÓÃÒ»¸ö±ê×¼µÄÁ÷³ÌÓïÑÔ¡£

3.3. JPDL vs BPMN 2.0

µÚÒ»¸öÎÊÌâ¿ÉÄÜÊÇ£¬ºÜÕýµ±µÄ£¬Ó³ÈëÄÔº£µÄÊÇ£¬ ΪʲôÒѾ­ÓÐÁËjPDL»¹ÒªÊµÏÖBPMN2¡£ËüÃÇÁ½¸öÓïÑÔ µÄÄ¿±ê¶¼ÊǶ¨Òå¿ÉÖ´ÐеÄÒµÎñÁ÷³Ì¡£´Ó¸ß²ã´ÎÀ´¿´£¬ Á½¸öÓïÑÔÊǵÈЧµÄ¡£Ö÷ÒªµÄÇø±ðÊÇ BPMN2ÊÇ¡°³§ÉÌÖÐÁ¢¡±µÄ£¬Äã¿ÉÒÔʹÓñê×¼£¬ ¶øjPDLÊǰó¶¨ÔÚjBPMÉϵģ¨ËäÈ»»áÓÐһЩÕùÂÛ °ó¶¨ÔÚ¿ªÔ´ÓïÑÔ³§É̱ÈÈçjPDL ºÍ°ó¶¨ÔÚ±ÕÔ´²úÆ·£©¡£

ÔÚjBPMÖУ¬Á½¸öÓïÑÔʵÏÖ¶¼Êǽ¨Á¢ÔÚjBPMÁ÷³ÌÐéÄâ»úÉ쵀 £¨PVM£©¡£ÕâÒâζ×ÅÁ½¸öÓïÑÔ¹²ÏíͨÓù¦ÄÜ £¨³Ö¾Ã»¯£¬ÊÂÎñ£¬ÅäÖã¬Ò²Óлù±¾Á÷³Ì½á¹¹£¬µÈµÈ£©¡£ ½á¹û¾ÍÊÇ£¬¶ÔjBPMºËÐĵÄÓÅ»¯ »á¶ÔÁ½¸öÓïÑÔÓÐÒæ¡£ÒÀ¿¿PVM£¬BPMN2ʵÏÖ ½¨Á¢ÔÚ»ù´¡ÉÏ£¬ÒѾ­ÔÚ¹ýÈ¥Ö¤Ã÷ÁËËü×Ô¼º£¬ ²¢ÓµÓÐÁ˺ܴóµÄ×îÖÕÓû§ÉçÇø¡£

µ±Ö´ÐÐÓïÑÔ£¬°ÑËüÃÇÏ໥±È½ÏµÄʱºò£¬ ÏÂÃæ¼¸µã±ØÐëÄÉÈ뿼ÂÇ£º

BPMN2ÊÇ»ùÓÚ±»BPM¹¤Òµ½ÓÊܵÄÒ»¸ö±ê×¼¡£

BPMN2ÊÇÓëʵÏÖÎ޹صġ£ÕâÒ»µãµÄȱµãÊǼ¯³Éjava¼¼Êõ jPDL×Ü»á¸üÔç¡£ ËùÒÔ£¬´Ójava¿ª·¢ÕߵĽǶȣ¬jPDL¸ü¼òµ¥£¬¸Ð¾õ¸ü×ÔÈ» £¨Ò»Ð©BPEL/WSDLµÄ¡°²ã´Î¡±Ò²ÔÚBPMNÖУ©¡£

jPDLµÄÒ»¸öÄ¿±êÊÇXML¿É¶Á£¬BPMN2Á÷³ÌÔÚ Ò»¶¨³Ì¶ÈÉÏÒ²ÊǿɶÁµÄ£¬µ«Êǹ¤¾ßºÍ¸ü¶à¹æ·¶µÄϸ½Ú »áÒªÇóʵÏÖͬµÈ¼¶µÄ Éú²úÁ¦¡£

java¿ª·¢Õß¿ÉÒԺܿìѧ»ájPDL£¬ÒòΪËûÃǺÜÁ˽âjPDLÓïÑÔ£¬ »á·¢ÏÖʵÓù¤¾ßÓÐʱºòºÜÂé·³£¬ ÓïÑÔ±¾ÉíÒ²¹ýÓÚ¸´ÔÓÁË¡£

BPMN2°üº¬Ò»¸öºÜ´óµÄÃèÊö½á¹¹µÄ¼¯ºÏ£¬Ôڹ淶ÖС£ È»¶ø£¬¶Ô½Ó¿Ú´úÂëµÄ°ó¶¨Ôڹ淶ÖÐÊÇ¿ª·ÅµÄ £¨ÓëXPDLÏà±È£©£¬¼´Ê¹WSDLͨ³£»á±»Ä¬ÈÏʹÓᣠÕâÒâζ×ÅÁ÷³ÌµÄ¿ÉÒÆÖ²ÐÔɥʧÁË£¬ µ±ÎÒÃǰÑÁ÷³ÌÒÆÖ²µ½Ò»¸öÒýÇæÉÏ£¬¶øÕâ¸öÒýÇæ²»Ö§³ÖͬÑùµÄ°ó¶¨»úÖÆ¡£ ±ÈÈ磬µ÷ÓÃjavaÀàͨ³£ÊÇjBPMµÄĬÈÏʵÏÖ µÄ°ó¶¨·½Ê½¡£

ºÜ×ÔÈ»µÄ£¬ÒòΪÕþÖÎÔ­Òò£¬BPMN2¹æ·¶·¢Õ¹µÄ»á±È½ÏÂý¡£ jPDL¾Í¿ÉÒÔ¿ìËٱ仯£¬ºÍм¼Êõ½øÐм¯³É£¬ µ±ËûÃÇ·¢²¼µÄʱºò£¬ ÓëBPMN2Ïà±È¿ÉÒÔ¼Ó¿ì²½·¥½øÐÐÑÝ»¯¡£ µ±È»£¬ÒòΪÁ½¸ö¶¼½¨Á¢ÔÚͬһ¸öPVMÉÏ£¬jPDLÖеÄÂß¼­ Ò²¿ÉÒÔÒ»Ö±µ½BPMN2ÉÏ£¬ ×÷Ϊһ¸öÀ©Õ¹£¬²»»á³öÏֺܶàÂé·³¡£

3.4. Bpmn 2.0 Ö´ÐÐ

BPMN2¹æ·¶¶¨ÒåÁ˷dz£·á¸»µÄÓïÑÔ£¬Îª½¨Ä£ºÍÖ´ÐÐÒµÎñÁ÷³Ì¡£ È»¶ø£¬Ò²Òâζ×ÅËü·Ç³£À§ÄÑ×ÜÀÀBPMN2¿ÉÄÜÊÇÔõÑù ΪÁ˼ò»¯ÕâÖÖÇé¿ö£¬ÎÒÃǾö¶¨°Ñ BPMN2½á¹¹·ÖΪÈý¸öµÈ¼¶¡£ Çø·ÖµÄ·½Ê½Ö÷Òª»ùÓÚBruce SilverдµÄ 'BPMN method and Style'Õâ±¾Êé(http://www.bpmnstyle.com/)£¬ Dr. Jim ArlowµÄÅàѵ×ÊÁÏ( http://www.slideshare.net/jimarlow/introductiontobpmn005)£¬ 'How much BPMN do you need'( http://www.bpm-research.com/2008/03/03/how-much-bpmn-do-you-need/)£¬ ºÍÎÒÃÇ×Ô¼ºµÄ¾­Ñé¡£

ÎÒÃǶ¨ÒåÁËÈýÖÖBPMN2½á¹¹·ÖÀࣺ

»ù±¾£ºÕâ¸ö·ÖÀàµÄ½á¹¹ºÜÖ±½Ó ²¢ÇÒÈÝÒ×Á˽⡣Õâ¸ö·ÖÀàµÄ½á¹¹¿ÉÒÔÓÃÀ´Îª ¼òµ¥µÄÒµÎñÁ÷³Ì½¨Ä£¡£

¸ß¼¶£º°üº¬¸üÇ¿´ó»ò¸ü¸´ÔӵĽṹ£¬ ÕâЩ¶¼Ìá¸ßÁ˽¨Ä£ºÍÖ´ÐÐÓï·¨µÄѧϰÇúÏß¡£ ÒµÎñÁ÷³ÌµÄÖ÷ҪĿ±êÊÇʹÓÃÕâ¸ö ºÍ֮ǰµÄ·ÖÀàÀ´ÊµÏֽṹ¡£

¸´ÔÓ£ºÕâ¸ö·ÖÀàµÄ½á¹¹ÓÃÀ´ÊµÏÖº±¼ûµÄÇé¿ö£¬ »òÕßËüÃǵÄÓï·¨ÄÑÒÔÀí½â¡£

3.5. ÅäÖÃ

ÔÚÄãµÄÓ¦ÓÃÖÐʹÓÃBPMN 2.0ÊǺܼòµ¥µÄ£ºÖ»Òª°ÑÏÂÃæÒ»ÐÐ ¼ÓÈëjbpm.cfg.xmlÎļþ¡£

<import resource="jbpm.bpmn.cfg.xml" />

ÕâÀïµÄÒýÓûáÆôÓÃBPMN 2.0µÄÁ÷³Ì·¢²¼£¬Í¨¹ý°ÑBPMN 2.0·¢²¼Æ÷°²×°µ½Á÷³ÌÒýÇæÖС£ ×¢ÒâÁ÷³ÌÒýÇæ¿ÉÒÔͬʱʹÓÃjPDLºÍBPMN 2.0Á÷³Ì¡£ ÕâÒâζ×ÅÔÚÄãµÄÓ¦ÓÃÀһЩÁ÷³Ì¿ÉÄÜÊÇjPDL£¬ ÆäËûµÄ¿ÉÄÜÊÇBPMN 2.0¡£

Á÷³ÌÒýÇæÊǸù¾Ý¶¨ÒåÎļþµÄºó׺À´Çø·ÖÁ÷³Ì¶¨ÒåµÄ¡£ ¶ÔÓÚBPMN 2.0£¬Ê¹ÓÃ*.bpmn.xmlºó׺ £¨jPDLʹÓÃ*.jpdl.xmlºó׺£©¡£

3.6. ʵÀý

·¢²¼Öаüº¬µÄÀý×ÓÒ²°üº¬ÁËÏÂÃæÕ½ÚÖÐ ÌÖÂÛµÄÿ¸ö½á¹¹µÄʵÀý¡£²é¿´BPMN 2.0µÄÁ÷³ÌʵÀý ºÍ²âÊÔÓÃÀý£¬ ÔÚorg.jbpm.examples.bpmn.* °üÏ¡£

²Î¿¼Óû§Ö¸ÄÏ£¬µÚ¶þÕ£¨°²×°£©£¬Ñо¿Ò»ÏÂÈçºÎµ¼ÈëʵÀý¡£ ²é¿´Õ½Ú'µ¼ÈëʵÀý'¡£

3.7. Á÷³Ì¸ùÔªËØ

Ò»¸öBPMN 2.0 XMLÁ÷³ÌµÄ¸ùÊÇdefinitionsÔªËØ¡£ ÔÚÃüÃû״̬£¬×ÓÔªËØ»á°üº¬ÕæÕýµÄÒµÎñÁ÷³Ì¶¨Òå¡£ ÿ¸öprocess×ÓÔªËØ ¿ÉÒÔÓµÓÐÒ»¸öidºÍ name¡£Ò»¸ö¿ÕµÄBPMN 2.0ÒµÎñÁ÷³Ì ¿´ÆðÀ´ÏñÏÂÃæÕâÑù¡£Ò²Òª×¢Òâ°ÑBPMN2.xsd·ÅÔÚclasspathÏ£¬ À´ÆôÓÃXML×Ô¶¯²¹È«¡£

<definitions id="myProcesses"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
xmlns="http://schema.omg.org/spec/BPMN/2.0"
typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://jbpm.org/example/bpmn2">

<process id="myBusinessProcess" name="My business processs">

...

</process>
<definitions

Èç¹ûÒ»¸öprocessÔªËØ¶¨ÒåÁËid£¬Ëü»á×÷ΪҵÎñÁ÷³ÌµÄkeyʹÓà £¨±ÈÈ磬Æô¶¯Á÷³Ì¿ÉÒÔͨ¹ýµ÷ÓÃexecutionService.startProcessInstanceByKey("myBusinessProcess")£¬ ·ñÔòjBPMÒýÇæ»á´´½¨Ò»¸öΨһÁ÷³Ìkey£¨ÓëjPDLÏàͬ£©¡£

3.8. »ù±¾½á¹¹

3.8.1. ʼþ

Óë»î¶¯ºÍÍø¹ØÒ»Æð£¬Ê¼þÓÃÀ´ÔÚʵ¼ÊµÄÿ¸öÒµÎñÁ÷³ÌÖС£ ʼþÈÃÒµÎñ½¨Ä£¹¤¾ßÓúÜ×ÔÈ»µÄ·½Ê½ÃèÊöÒµÎñÁ÷³Ì£¬±ÈÈç 'µ±ÎÒ½ÓÊÕµ½¿Í»§µÄ¶©µ¥£¬Õâ¸öÁ÷³Ì¾ÍÆô¶¯'£¬ 'Èç¹ûÁ½ÌìÄÚÈÎÎñû½áÊø£¬¾ÍÖÕÖ¹Á÷³Ì' »òÕß'µ±ÎÒÊÕµ½Ò»·âÈ¡ÏûÓʼþ£¬µ±Á÷³ÌÔÚÔËÐÐʱ£¬ ʹÓÃ×ÓÁ÷³Ì´¦ÀíÓʼþ'¡£×¢ÒâµäÐ͵ÄÒµÎñ ͨ³£Ê¹ÓÃÕâÖÖʼþÇý¶¯µÄ·½Ê½¡£ÈËÃDz»»áÓ²±àÂë˳Ðò´´½¨£¬ µ«ÊÇËûÃÇÇãÏòÓÚʹÓÃÔÚËûÃǵĻ·¾³Öз¢ÉúµÄÊÂÇ飨±ÈÈ磬ʼþ£©¡£ ÔÚBPMN¹æ·¶ÖУ¬ÃèÊöÁ˺ܶàʼþÀàÐÍ£¬ÎªÁ˸²¸Ç¿ÉÄܵÄÊÂÇ飬 ÔÚÒµÎñ»·¾³ÖпÉÄܳöÏÖµÄÇé¿ö¡£

3.8.2. ʼþ£º¿ÕÆô¶¯Ê¼þ

Ò»¸öÆô¶¯Ê¼þ˵Ã÷ÁËÁ÷³ÌµÄ¿ªÊ¼£¨»ò×ÓÁ÷³Ì£©¡£Í¼ÐÎÐÎʽ£¬Ëü¿´ÆðÀ´ ÊÇÒ»¸öÔ²£¨¿ÉÄÜ£©ÄÚ²¿ÓÐÒ»¸öСͼ±ê¡£Í¼±êÖ¸¶¨ÁËʼþµÄʵ¼ÊÀàÐÍ »áÔÚÁ÷³ÌʵÀý´´½¨Ê±±»´¥·¢¡£

¿ÕÆô¶¯Ê¼þ»­³öÀ´ÊÇÒ»¸öÔ²£¬ÄÚ²¿Ã»ÓÐͼ±ê£¬Òâ˼ÊÇ Õâ¸ö´¥·¢Æ÷ÊÇδ֪»òÕßδָ¶¨µÄ¡£jPDLµÄ¿ªÊ¼»î¶¯»ù±¾ÊÇÒ»ÑùµÄÓï·¨¡£ Á÷³ÌʵÀýµÄÁ÷³Ì¶¨Òå°üº¬Ò»¸ö¿ÕÆô¶¯Ê¼þ£¬ ¿ÉÒÔʹÓÃexecutionServiceµÄAPIµ÷Óô´½¨¡£

Ò»¸ö¿Õ¿ªÊ¼Ê¼þÏñÏÂÃæÕâÑù¶¨Òå¡£idÊDZØÌîµÄ£¬nameÊÇ¿ÉÑ¡µÄ¡£

<startEvent id="start"  name="myStart" />

3.8.3. ʼþ£º¿Õ½áÊøÊ¼þ

½áÊøÊ¼þÖ¸¶¨ÁËÁ÷³ÌʵÀýÖÐÒ»¸öÁ÷³Ì·¾¶µÄ½áÊø¡£ ͼÐÎÉÏ£¬Ëü¿´ÆðÀ´¾ÍÊÇÒ»¸öÔ² ÓµÓкñ±ß¿ò£¨¿ÉÄÜ£© ÄÚ²¿ÓÐСͼ±ê¡£ ͼ±êÖ¸¶¨Á˽áÊøµÄʱºò »áÖ´ÐÐÄÄÖÖ²Ù×÷¡£

¿Õ½áÊøÊ¼þ»­³öÀ´ÊÇÒ»¸öÔ²£¬ÓµÓкñ±ß¿ò£¬ÄÚ²¿Ã»ÓÐͼ±ê£¬ ÕâÒâζ×ŵ±Á÷³Ìµ½´ïʼþʱ£¬²»»áÅ׳öÈκÎÐźš£ jPDLÖеĽáÊøÊ¼þÓë¿Õ½áÊøÊ¼þÓïÒåÏàͬ¡£

¿Õ½áÊøÊ¼þ¿ÉÒÔÏñÏÂÃæÒ»Ñù¶¨Ò壬idÊDZØÌîµÄ£¬nameÊÇ¿ÉÑ¡µÄ¡£

<endEvent id="end" name="myEnd" />

ÏÂÃæµÄÀý×ÓÏÔʾÁËֻʹÓÿտªÊ¼ºÍ½áÊøÊ¼þµÄÁ÷³Ì£º

Õâ¸öÁ÷³Ì¶ÔÓ¦µÄ¿ÉÖ´ÐÐXMLÏñÕâÑù £¨ºöÂÔÉùÃ÷ÓõÄdefinitions¸ùÔªËØ£©

<process id="noneStartEndEvent" name="BPMN2 Example none start and end event">

<startEvent id="start" />

<sequenceFlow id="flow1" name="fromStartToEnd"
sourceRef="start" targetRef="end" />

<endEvent id="end" name="End" />

</process>

ÏÖÔÚ¿ÉÒÔͨ¹ýµ÷ÓÃstartProcessInstanceXXX²Ù×÷£¬ ´´½¨Ò»¸öÁ÷³ÌʵÀý¡£

ProcessInstance processInstance = executionService.startProcessInstanceByKey("noneStartEndEvent");

3.8.4. ʼþ£ºÖÕÖ¹½áÊøÊ¼þ

ÖÕÖ¹ºÍ¿Õ½áÊøÊ¼þµÄÇø±ðÊÇ Êµ¼ÊÖÐÁ÷³ÌµÄ·¾¶ÊÇÈçºÎ´¦ÀíµÄ£¨»òÕßʹÓÃBPMN 2.0µÄÊõÓï½Ð×ötoken£©¡£ ÖÕÖ¹½áÊøÊ¼þ»á½áÊøÕû¸öÁ÷³ÌʵÀý£¬¶ø¿Õ½áÊøÊ¼þÖ»»á½áÊøµ±Ç°Á÷³Ì·¾¶¡£ ËûÃǶ¼²»»áÅ׳öÈκÎÊÂÇé µ±µ½´ï½áÊøÊ¼þµÄʱºò¡£

Ò»¸öÖÕÖ¹½áÊøÊ¼þ¿ÉÒÔÏñÏÂÃæ¶¨Òå¡£idÊDZØÌîµÄ£¬nameÊÇ¿ÉÑ¡µÄ¡£

<endEvent id="terminateEnd" name="myTerminateEnd">
<terminateEventDefinition/>
</endEvent>

ÖÕÖ¹½áÊøÊ¼þ±»Ãè»æ³É½áÊøÊ¼þÒ»Ñù£¨Ô²£¬ºñ±ß¿ò£©£¬ ÄÚ²¿Í¼±êʱһ¸öÍêÕûµÄÔ²¡£ÔÚÏÂÃæµÄÀý×ÓÖУ¬Íê³Étask1 »á½áÊøÁ÷³ÌʵÀý£¬µ±Íê³Étask2ʱֻ»á½áÊøµ½´ï½áÊøÊ¼þ µÄÁ÷³Ì·¾¶£¬Ö»Ê£ÏÂtask1´ò¿ª¡£

²Î¿¼jBPM·¢²¼°üÖеÄʵÀý£¬ µ¥Ôª²âÊÔºÍÒµÎñÁ÷³Ì¶ÔÓ¦XML¡£

3.8.5. ˳ÐòÁ÷

˳ÐòÁ÷ÊÇʼþ£¬»î¶¯ºÍÍø¹ØÖ®¼äµÄÁ¬Ïߣ¬ÏÔʾΪһÌõʵÏß ´øÓмýÍ·£¬ÔÚBPMNͼÐÎÖУ¨jPDLÖеÈЧµÄÊÇtransition£©¡£ ÿ¸ö˳ÐòÁ÷¶¼ÓÐÒ»¸öÔ´Í·ºÍÒ»¸ö Ä¿±êÒýÓ㬰üº¬ÁË »î¶¯£¬Ê¼þ»òÍø¹ØµÄid¡£

<sequenceFlow id="myFlow" name="My Flow"
sourceRef="sourceId" targetRef="targetId" />

ÓëjPDLµÄÒ»¸öÖØÒªÇø±ðÊǶàÍâÏò˳ÐòÁ÷µÄÐÐΪ¡£ ÔÚjPDLÖУ¬Ö»ÓÐÒ»¸ö×ªÒÆ»á³ÉΪÍâÏò×ªÒÆ£¬³ý·Ç»î¶¯ÊÇfork £¨»ò×Ô¶¨Òå»î¶¯ÓµÓÐforkÐÐΪ£©¡£È»¶ø£¬ÔÚBPMNÖУ¬ ¶àÍâÏò˳ÐòÁ÷µÄĬÈÏÐÐΪÊÇÇзֽøÈëµÄtoken£¨jBPMÖÐÊõÓï½Ð×öexecution£© ·Ö³Étoken¼¯ºÏ£¬Ã¿¸ö˳ÐòÁ÷Ò»¸ö¡£ÔÚÏÂÃæÇé¿öÖУ¬ ÔÚÍê³ÉµÚÒ»¸öÈÎÎñ£¬¾Í»á¼¤»îÈý¸öÈÎÎñ¡£

ΪÁ˱ÜÃâʹÓÃÒ»¸ö˳ÐòÁ÷£¬±ØÐëÌí¼ÓconditionÌõ¼þµ½Ë³ÐòÁ÷ÖС£ ÔÚÔËÐÐʱ£¬Ö»Óе±conditionÌõ¼þ½á¹ûΪtrue£¬ ˳ÐòÁ÷²Å»á±»Ö´ÐС£

ΪÁ˸øË³ÐòÁ÷Ìí¼ÓconditionÌõ¼þ£¬Ìí¼ÓÒ»¸öconditionExpression ÔªËØµ½Ë³ÐòÁ÷ÖС£Ìõ¼þ¿ÉÒÔ·ÅÔÚ ${}ÖС£

<sequenceFlow id=....>
<conditionExpression xsi:type="tFormalExpression">${amount >= 500}</conditionExpression>
</sequenceFlow>

×¢Ò⣬µ±Ç°±ØÐë°Ñ xsi:type="tFormalExpression"Ìí¼Óµ½ conditionExpressionÖС£ÔÚδÀ´µÄ°æ±¾ÖпÉÄÜ»áÐ޸ġ£

»î¶¯£¨±ÈÈçÓû§ÈÎÎñ£©ºÍÍø¹Ø£¨±ÈÈçÎ¨Ò»Íø¹Ø£©¿ÉÒÔÓû§Ä¬ÈÏ˳ÐòÁ÷¡£ ĬÈÏ˳ÐòÁ÷Ö»»áÔڻ»òÍø¹ØµÄ ËùÓÐÆäËûÍâÏò˳ÐòÁ÷µÄconditionÌõ¼þΪfalseʱ²Å»áʹÓᣠĬÈÏ˳ÐòÁ÷ͼÐÎÏñÊÇ˳ÐòÁ÷¶àÁËÒ»¸öбÏß±ê¼Ç¡£

ĬÈÏ˳ÐòÁ÷ͨ¹ýÖ¸¶¨»î¶¯»òÍø¹ØµÄ 'default' ÊôÐÔ À´Ê¹Óá£

ҲҪעÒ⣬ĬÈÏ˳ÐòÁ÷Éϵıí´ïʽ»á±»ºöÂÔ¡£

3.8.6. Íø¹Ø

BPMNÖеÄÍø¹ØÊÇÓÃÀ´¿ØÖÆÁ÷³ÌÖеÄÁ÷ÏòµÄ¡£¸üÈ·ÇеÄÊÇ£¬ µ±Ò»¸ötoken£¨BPMN 2.0ÖÐexecutionµÄ¸ÅÄî×¢½â£©µ½´ïÒ»¸öÍø¹Ø£¬ Ëü»á¸ù¾ÝÍø¹ØµÄÀàÐͽøÐкϲ¢»òÇз֡£

Íø¹ØÃè»æ³ÉÒ»¸öÁâÐΣ¬Ê¹ÓÃÒ»¸öÄÚ²¿Í¼±êÀ´Ö¸¶¨ÀàÐÍ £¨Î¨Ò»£¬¹ã·º£¬ÆäËû£©¡£

ËùÓÐÍø¹ØÀàÐÍ£¬¶¼¿ÉÒÔÉèÖÃgatewayDirection¡£ ÏÂÃæµÄÖµ¿ÉÒÔʹÓãº

unspecificed (ĬÈÏ)£ºÍø¹Ø¿ÉÄÜÓµÓжà¸ö ½øÈëºÍÍâ³ö˳ÐòÁ÷¡£

mixed£ºÍø¹Ø±ØÐëÓµÓжà¸ö ½øÈëºÍÍâ³ö˳ÐòÁ÷¡£

converging£ºÍø¹Ø±ØÐëÓµÓжà¸ö½øÈë˳ÐòÁ÷£¬ µ«ÊÇÖ»ÄÜÓÐÒ»¸öÍâ³ö˳ÐòÁ÷¡£

diverging£ºÍø¹Ø±ØÐëÓµÓÐÒ»¸ö½øÈë˳ÐòÁ÷£¬ ºÍ¶à¸öÍâ³ö˳ÐòÁ÷¡£

±ÈÈçÏÂÃæµÄÀý×Ó£º²¢ÐÐÍø¹ØµÄgatewayDirectionÊôÐÔΪ'converging'£¬ »áÓµÓÐjsonÐÐΪ¡£

<parallelGateway id="myJoin" name="My synchronizing join" gatewayDirection="converging" />

×¢Ò⣺gatewayDirectionÊôÐÔ¸ù¾Ý¹æ·¶ÊÇ¿ÉÑ¡µÄ¡£ ÕâÒâζ×ÅÎÒÃDz»ÄÜͨ¹ýÕâ¸öÊôÐÔÀ´ ÔÚÔËÐÐʱ֪µÀÒ»¸öÍø¹ØµÄÐÐΪ£¨±ÈÈ磬һ¸ö²¢ÐÐÍø¹Ø£¬ Èç¹ûÎÒÃÇÓù»Çзֺͺϲ¢ÐÐΪ£©¡£È»¶ø£¬gatewayDirectionÊôÐÔÓÃÔÚ½âÎöʱ ×÷ÎªÔ¼ÊøÌõ¼þ¶Ô½øÈë¡¢Íâ³ö˳ÐòÁ÷¡£ËùÒÔʹÓÃÕâ¸öÊôÐÔ »á¼õµÍ³ö´íµÄ»ú»á£¬µ±ÒýÓÃ˳ÐòÁ÷ʱ£¬ µ«²»ÊDZØÌîµÄ¡£

3.8.7. Íø¹Ø£ºÎ¨Ò»Íø¹Ø

Î¨Ò»Íø¹Ø±í´ïÁËÒ»¸öÁ÷³ÌÖеÄΨһ¾ö²ß¡£ »áÓÐÒ»¸öÍâÏò˳ÐòÁ÷±»Ê¹Ó㬸ù¾Ý¶¨ÒåÔÚ Ë³ÐòÁ÷ÖеÄÌõ¼þ¡£

¶ÔÓ¦µÄjPDL½á¹¹£¬ÏàͬµÄÓï·¨ÊÇ decision»î¶¯¡£Î¨Ò»Íø¹ØµÄ ÍêÈ«¼¼ÊõÃû³ÆÊÇ'»ùÓÚÊý¾ÝµÄÎ¨Ò»Íø¹Ø'£¬ µ«ÊÇÒ²¾­³£³ÆÎªXOR Íø¹Ø¡£ XORÍø¹Ø±»Ãè»æÎªÒ»¸öÁâÐΣ¬ÄÚ²¿ÓÐÒ»¸ö'X'£¬ Ò»¸ö¿ÕµÄÁâÐΣ¬Ã»ÓÐÍø¹ØÒ²ÏóÕ÷×ÅÎ¨Ò»Íø¹Ø¡£

ÏÂÃæÍ¼ÐÎÏÔʾÁËÎ¨Ò»Íø¹ØµÄÓ÷¨£º¸ù¾Ýamount±äÁ¿µÄÖµ£¬ »áÑ¡ÔñÎ¨Ò»Íø¹ØÍâÏòµÄÈý¸öÍâÏò˳ÐòÁ÷ ÖеÄÒ»¸ö¡£

Õâ¸öÁ÷³Ì¶ÔÓ¦µÄ¿ÉÖ´ÐÐXML¿´ÆðÀ´ÏñÏÂÃæÕâÑù¡£ ×¢ÒⶨÒåÔÚ˳ÐòÁ÷ÖеÄÌõ¼þ¡£Î¨Ò»Íø¹Ø»áÑ¡ÔñÒ»¸ö˳ÐòÁ÷£¬ Èç¹ûÌõ¼þÖ´ÐÐΪtrue¡£Èç¹û¶à¸öÌõ¼þ Ö´ÐÐΪtrue£¬µÚÒ»¸öÓöµ½µÄ¾Í»á±»Ê¹Óà £¨ÈÕÖ¾ÐÅÏ¢»áÏÔʾÕâÖÖÇé¿ö£©¡£

<process id="exclusiveGateway" name="BPMN2 Example exclusive gateway">

<startEvent id="start" />

<sequenceFlow id="flow1" name="fromStartToExclusiveGateway"
sourceRef="start" targetRef="decideBasedOnAmountGateway" />

<exclusiveGateway id="decideBasedOnAmountGateway" name="decideBasedOnAmount" />

<sequenceFlow id="flow2" name="fromGatewayToEndNotEnough"
sourceRef="decideBasedOnAmountGateway" targetRef="endNotEnough">
<conditionExpression xsi:type="tFormalExpression">
${amount < 100}
</conditionExpression>
</sequenceFlow>

<sequenceFlow id="flow3" name="fromGatewayToEnEnough"
sourceRef="decideBasedOnAmountGateway" targetRef="endEnough">
<conditionExpression xsi:type="tFormalExpression">
${amount <= 500 && amount >= 100}
</conditionExpression>
</sequenceFlow>

<sequenceFlow id="flow4" name="fromGatewayToMoreThanEnough"
sourceRef="decideBasedOnAmountGateway" targetRef="endMoreThanEnough">
<conditionExpression xsi:type="tFormalExpression">
${amount > 500}
</conditionExpression>
</sequenceFlow>

<endEvent id="endNotEnough" name="not enough" />

<endEvent id="endEnough" name="enough" />

<endEvent id="endMoreThanEnough" name="more than enough" />

</process>

Õâ¸öÁ÷³ÌÐèÒªÒ»¸ö±äÁ¿£¬ÕâÑù±í´ïʽ¾Í¿ÉÒÔÔÚÔËÐÐÆÚ¼äÖ´ÐС£ ±äÁ¿¿ÉÒÔ±»Ìṩ£¬µ±Á÷³ÌʵÀýÖ´ÐеÄʱºò£¨ÀàËÆjPDL£©¡£

Map<String, Object> vars = new HashMap<String, Object>();
vars.put("amount", amount);
ProcessInstance processInstance = executionService.startProcessInstanceByKey("exclusiveGateway", vars);

Î¨Ò»Íø¹ØÐèÒªËùÓÐÍâÏò˳ÐòÁ÷É϶¼¶¨ÒåÌõ¼þ¡£ ¶ÔÕâÖÖ¹æÔòÒ»ÖÖÀýÍâÊÇĬÈÏ˳ÐòÁ÷¡£ ʹÓÃdefault ÊôÐÔÀ´ÒýÓÃÒ»¸öÒÑ´æÔÚµÄ Ë³ÐòÁ÷µÄid¡£Õâ¸ö˳ÐòÁ÷»á±»Ê¹Óà µ±ÆäËûÍâÏò˳ÐòÁ÷µÄÌõ¼þ¶¼Ö´ÐÐΪfalseʱ¡£

<exclusiveGateway id="decision" name="decideBasedOnAmountAndBankType" default="myFlow"/>

<sequenceFlow id="myFlow" name="fromGatewayToStandard"
sourceRef="decision" targetRef="standard">
</sequenceFlow>

3.8.8. Íø¹Ø£º²¢ÐÐÍø¹Ø

²¢ÐÐÍø¹ØÓÃÀ´Çзֻòͬ²½Ïà¹ØµÄ½øÈë»òÍâ³ö ˳ÐòÁ÷¡£

²¢ÐÐÍø¹ØÓµÓÐÒ»¸ö½øÈë˳ÐòÁ÷µÄºÍ¶àÓÚÒ»¸öµÄÍâ³ö˳ÐòÁ÷ ½Ð×ö'²¢ÐÐÇзֻò 'AND-split'¡£ËùÓÐÍâ³ö˳ÐòÁ÷¶¼»á ±»²¢ÐÐʹÓá£×¢Ò⣺Ïñ¹æ·¶Öж¨ÒåµÄÄÇÑù£¬ Íâ³ö˳ÐòÁ÷ÖеÄÌõ¼þ¶¼»á±»ºöÂÔ¡£

²¢ÐÐÍø¹ØÓµÓжà¸ö½øÈë˳ÐòÁ÷ºÍÒ»¸öÍâ³ö˳ÐòÁ÷ ½Ð×ö'²¢Ðй鲢'»ò AND-join¡£ËùÓнøÈë˳ÐòÁ÷ÐèÒª µ½´ïÕâ¸ö²¢Ðй鲢£¬ÔÚÍâÏò˳ÐòÁ÷ʹÓÃ֮ǰ¡£

²¢ÐÐÍø¹ØÏñÏÂÃæÕâÑù¶¨Ò壺

<parallelGateway id="myParallelGateway" name="My Parallel Gateway" />

×¢Ò⣬gatewayDirectionÊôÐÔ¿ÉÒÔ±»Ê¹Ó㬠ÒÑ»ñµÃ½¨Ä£´íÎó£¬ÔÚ½âÎö½×¶Î£¨²Î¿¼ÉÏÃæ£©¡£

ÏÂÃæµÄͼÐÎÏÔʾÁËÒ»¸ö²¢ÐÐÍø¹Ø¿ÉÒÔÈçºÎʹÓá£ÔÚÁ÷³ÌÆô¶¯ºó£¬ 'prepare shipment' ºÍ 'bill customer'Óû§ÈÎÎñ¶¼»á±»¼¤»î¡£ ²¢ÐÐÍø¹Ø±»Ãè»æÎªÒ»¸öÁâÐΣ¬ÄÚ²¿Í¼±êÊÇÒ»¸öÊ®×Ö£¬ ¶ÔÇзֺ͹鲢ÐÐΪ¶¼ÊÇÒ»Ñù¡£

ͼÐζÔÓ¦µÄXMLÈçÏÂËùʾ£º

 <process id="parallelGateway" name="BPMN2 example parallel gatewar">

<startEvent id="Start" />

<sequenceFlow id="flow1" name="fromStartToSplit"
sourceRef="Start"
targetRef="parallelGatewaySplit" />

<parallelGateway id="parallelGatewaySplit" name="Split"
gatewayDirection="diverging"/>

<sequenceFlow id="flow2a" name="Leg 1"
sourceRef="parallelGatewaySplit"
targetRef="prepareShipment" />

<userTask id="prepareShipment" name="Prepare shipment"
implementation="other" />

<sequenceFlow id="flow2b" name="fromPrepareShipmentToJoin"
sourceRef="prepareShipment"
targetRef="parallelGatewayJoin" />

<sequenceFlow id="flow3a" name="Leg 2"
sourceRef="parallelGatewaySplit"
targetRef="billCustomer" />

<userTask id="billCustomer" name="Bill customer"
implementation="other" />

<sequenceFlow id="flow3b" name="fromLeg2ToJoin"
sourceRef="billCustomer"
targetRef="parallelGatewayJoin" />

<parallelGateway id="parallelGatewayJoin" name="Join"
gatewayDirection="converging"/>

<sequenceFlow id="flow4"
sourceRef="parallelGatewayJoin"
targetRef="End">
</sequenceFlow>

<endEvent id="End" name="End" />

</process>

3.8.9. ÈÎÎñ

Ò»¸öÈÎÎñ±íʾ¹¤×÷ÐèÒª±»ÍⲿʵÌåÍê³É£¬ ±ÈÈçÈ˹¤»ò×Ô¶¯·þÎñ¡£

ÖØÒªµÄÊÇ×¢ÒâBPMNÓï·¨µÄ'task'ÓëjPDLÓï·¨µÄÇø±ð¡£ ÔÚjPDLÖУ¬'task'µÄ¸ÅÄî×ÜÊÇÓÃÔÚÈ˹¤×öһЩÊÂÇéµÄ»·¾³¡£ µÄÄǸöÁ÷³ÌÒýÇæÓöµ½jPDLÖеÄtask£¬Ëü»á´´½¨Ò»¸ötask£¬ ½»¸øÒ»Ð©È˵ÄÈÎÎñÁÐ±í£¬È»ºóËü»á½øÈëµÈ´ý״̬¡£È»¶øÔÚBPMN 2.0ÖУ¬ ÕâÀïÓкܶàÈÎÎñÀàÐÍ£¬Ò»Ð©±íʾµÈ´ý״̬£¨±ÈÈ磬User Task һЩ±íʾ×Ô¶¯»î¶¯£¨±ÈÈ磬Service Task¡£ ËùÒÔСÐIJ»Òª»ìÏýÁËÈÎÎñµÄ¸ÅÄÔÚÇл»ÓïÑÔµÄʱºò¡£

ÈÎÎñ±»Ãè»æ³ÉÒ»¸öÔ²½Ç¾ØÐΣ¬Ò»°ãÄÚ²¿°üº¬ÎÄ×Ö¡£ ÈÎÎñµÄÀàÐÍ£¨Óû§ÈÎÎñ£¬·þÎñÈÎÎñ£¬½Å±¾ÈÎÎñ£¬µÈµÈ£©ÏÔʾÔÚ¾ØÐεÄ×óÉϽǣ¬ÓÃСͼ±êÇø±ð¡£ ¸ù¾ÝÈÎÎñµÄÀàÐÍ£¬ ÒýÇæ»áÖ´Ðв»Í¬µÄ¹¦ÄÜ¡£

3.8.10. ÈÎÎñ£ºÈ˹¤ÈÎÎñ

user taskÊǵäÐ͵Ä'È˹¤ÈÎÎñ'£¬ ʵ¼ÊÖеÄÿ¸öworkflow»òBPMNÈí¼þÖж¼¿ÉÒÔÕÒµ½¡£µ±Á÷³ÌÖ´Ðе½´ïÕâÑùÒ»¸öuser taskʱ£¬ Ò»¸öÐÂÈ˹¤ÈÎÎñ¾Í»á±»´´½¨£¬½»¸øÓû§µÄÈÎÎñÁÐ±í¡£

ºÍmanual taskµÄÖ÷񻂿±ðÊÇ £¨Ò²ÓëÈ˹¤¹¤×÷¶ÔÓ¦£©ÊÇÁ÷³ÌÒýÇæÁ˽âÈÎÎñ¡£ ÒýÇæ¿ÉÒÔ¸ú×Ù¾ºÕù£¬·ÖÅ䣬ʱ¼ä£¬ÆäËû£¬ÕâЩ²»ÊÇmanual taskµÄÇé¿ö¡£

user taskÃè»æÎªÒ»¸öÔ²½Ç¾ØÐΣ¬ÔÚ×óÉϽÇÊÇÒ»¸öСÓû§Í¼±ê¡£

user task±»¶¨ÒåΪÏÂÃæµÄBPMN 2.0 XML£º

<userTask id="myTask" name="My task" />

¸ù¾Ý¹æ·¶£¬¿ÉÒÔʹÓöàÖÖʵÏÖ£¨WebService, WS-humantask£¬µÈµÈ£©¡£ ͨ¹ýʹÓÃimplementationÊôÐÔ¡£ µ±Ç°£¬Ö»Óбê×¼µÄjBPMÈÎÎñ»úÖÆ²Å¿ÉÒÔÓã¬ËùÒÔÕâÀ»¹£©Ã»ÓÐ ¶¨Òå'implementation'ÊôÐԵŦÄÜ¡£

BPMN 2.0¹æ·¶°üº¬ÁËһЩ·½·¨°ÑÈÎÎñ·ÖÅ䏸Óû§£¬×飬½ÇÉ«µÈµÈ¡£ µ±Ç°µÄBPMN 2.0 jBPMʵÏÖÔÊÐíʹÓÃÒ»¸ö resourceAssignmentExpressionÀ´·ÖÅäÈÎÎñ£¬ ½áºÏhumanPerformer or PotentialOwner½á¹¹¡£ Õⲿ·ÖÏ£ÍûÔÚδÀ´µÄ°æ±¾ÀïÄܹ»½øÒ»²½ÑÝ»¯¡£

potentialOwnerÓÃÀ´ÔÚÄãÏ£ÍûÈ·¶¨Óû§£¬×飬½ÇÉ«µÄʱºò¡£ ÕâÊÇÒ»¸ötaskµÄºòÑ¡ÈË¡£ ²Î¿¼ÏÂÃæµÄÀý×Ó¡£ÕâÀïµÄ'My task'ÈÎÎñµÄºòÑ¡ÈË×éÊÇ'management'Óû§×é¡£ ҲҪעÒ⣬ÐèÒªÔÚÁ÷³ÌÍⲿ¶¨ÒåÒ»¸ö×ÊÔ´£¬ ÕâÑùÈÎÎñ·ÖÅäÆ÷¿ÉÒÔÒýÓõ½Õâ¸ö×ÊÔ´¡£ ʵ¼ÊÉÏ£¬Èκλ¶¼¿ÉÒÔÒýÓÃÒ»¸ö»ò¶à¸ö×ÊÔ´ÔªËØ¡£ Ŀǰ£¬Ö»ÐèÒª¶¨ÒåÕâ¸ö×ÊÔ´¾Í¿ÉÒÔÁË£¨ÒòΪËüÊǹ淶ÖеÄÒ»¸ö±ØÐëµÄÔªËØ£©£¬ µ«ÊÇÔÚÒÔºóµÄ·¢²¼ÖÐ»á½øÐмÓÇ¿£¨±ÈÈ磬×ÊÔ´¿ÉÒÔÓµÓÐÔËÐÐʱ²ÎÊý£©¡£

<resource id="manager" name="manager" />

<process ...>

...

<userTask id="myTask" name="My task">
<potentialOwner resourceRef="manager" jbpm:type="group">
<resourceAssignmentExpression>
<formalExpression>management</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>

×¢Ò⣬ÎÒÃÇʹÓÃÁËÒ»¸öÌØ¶¨µÄºó׺ (jbpm:type="group")£¬À´¶¨ÒåÕâÊÇÒ»¸öÓû§×éµÄ·ÖÅ䷽ʽ¡£ Èç¹ûɾ³ýÁËÕâ¸öÊôÐÔ£¬¾Í»áĬÈÏʹÓÃÓû§×éµÄÓï·¨ £¨ÔÚÕâ¸öÀý×ÓÖÐÒ²ÊÇûÎÊÌâµÄ£©¡£ ÏÖÔÚ¼ÙÉèPeterºÍMaryÊÇmanagement×éµÄ³ÉÔ± (ÕâÀïʹÓÃĬÈϵÄÉí·Ý·þÎñ)£º

identityService.createGroup("management");

identityService.createUser("peter", "Peter", "Pan");
identityService.createMembership("peter", "management");

identityService.createUser("mary", "Mary", "Littlelamb");
identityService.createMembership("mary", "management");

PeterºÍMary¶¼¿ÉÒÔÔÚËûÃǵÄÈÎÎñÁбíÖп´µ½ÕâÌõÈÎÎñ £¨´úÂëÀ´×ÔʵÀýµ¥Ôª²âÊÔ£©£º

// Peter and Mary are both part of management, so they both should see the task
List<Task> tasks = taskService.findGroupTasks("peter");
assertEquals(1, tasks.size());
tasks = taskService.findGroupTasks("mary");
assertEquals(1, tasks.size());

// Mary claims the task
Task task = tasks.get(0);
taskService.takeTask(task.getId(), "mary");
assertNull(taskService.createTaskQuery().candidate("peter").uniqueResult());

taskService.completeTask(task.getId());
assertProcessInstanceEnded(processInstance);

µ±·ÖÅ䷽ʽӦ¸ÃÊǺòÑ¡Óû§Ê±£¬ Ö»ÐèҪʹÓÃjbpm:type="user"ÊôÐÔ¡£

<userTask id="myTask" name="My User task">
<potentialOwner resourceRef="employee" jbpm:type="user">
<resourceAssignmentExpression>
<formalExpression>peter</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>

ÔÚÕâ¸öÀý×ÓÀPeter½«¿ÉÒÔ¿´µ½ÈÎÎñ£¬ÒòΪËûÊÇÕâ¸öÈÎÎñµÄºòÑ¡Óû§¡£

List<Task> tasks = taskService.createTaskQuery().candidate("peter").list();

human performerÓÃÀ´£¬µ±ÄãÏë°ÑÒ»¸öÈÎÎñÖ±½Ó·ÖÅä¸øÒ»¸öÈË£¬ ×飬½Çɫʱ¡£Õâ¸ö·½·¨µÄʹÓ÷½Ê½ ¿´ÆðÀ´ºÍpotential ownerºÜÏñ¡£

<resource id="employee" name="employee" />

<process ...>

...

<userTask id="myTask" name="My User task">
<humanPerformer resourceRef="employee">
<resourceAssignmentExpression>
<formalExpression>mary</formalExpression>
</resourceAssignmentExpression>
</humanPerformer>
</userTask>

ÔÚÕâ¸öÀý×ÓÖУ¬ÈÎÎñ»áÖ±½Ó·ÖÅ䏸Mary¡£ Ëý¿ÉÒÔÔÚ×Ô¼ºµÄÈÎÎñÁбíÖп´µ½Õâ¸öÈÎÎñ£º

List<Task> tasks = taskService.findPersonalTasks("mary");

ÒòΪÈÎÎñ·ÖÅäÒѾ­Íê³É£¬Í¨¹ýʹÓà formalExpression£¬ËüÒ²¿ÉÒÔ¶¨Òå±í´ïʽ ÔÚÔËÐÐÆÚ½âÎö¡£±í´ïʽ±¾ÉíÐèÒª·ÅÔÚ ${}ÖУ¬ÕâºÍjBPMÒ»Ñù¡£ ±ÈÈ磬Èç¹ûÁ÷³Ì±äÁ¿'user'±»¶¨ÒåÁË£¬È»ºó£¬Ëü¿ÉÒÔÓÃÔÚ±í´ïʽÖС£ µ±È»Ò²¿ÉÒÔʹÓøü¸´Ôӵıí´ïʽ¡£

<userTask id="myTask" name="My User task">
<humanPerformer resourceRef="employee">
<resourceAssignmentExpression>
<formalExpression>${user}</formalExpression>
</resourceAssignmentExpression>
</humanPerformer>
</userTask>

×¢Òâ²»ÐèÒªÔÚhumanPerformerÔªËØÖÐʹÓÃ'jbpm:type'£¬ÒòΪֻÄܽøÐÐ Ö±½ÓÓû§·ÖÅä¡£Èç¹ûÈÎÎñÐèÒª±»·ÖÅä¸øÒ»¸ö½ÇÉ«»òÒ»¸ö×飬 ʹÓÃpotentialOwnerºÍgroupÀàÐÍ£¨µ±Äã°ÑÈÎÎñ·ÖÅä¸øÒ»¸ö×éʱ£¬ ×éÖеÄËùÓгÉÔ±¶¼»á³ÉΪºòÑ¡Óû§ - ²Î¿¼potentialOwnerµÄÓ÷¨£©¡£

   
3825 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

DevOpsתÐÍÈÚÈëµ½ÆóÒµÎÄ»¯
DevOps ÄÜÁ¦Ä£ÐÍ¡¢Ñݽø¼°°¸ÀýÆÊÎö
»ùÓÚ DevOps ÀíÄîµÄ˽ÓÐ PaaS ƽ̨ʵ¼ù
΢Èí¿ª·¢ÍŶӵÄDevOpsʵ¼ùÆôʾ
Ïà¹ØÎĵµ

DevOpsÇý¶¯Ó¦ÓÃÔËά±ä¸ïÓë´´ÐÂ
ÔËά¹ÜÀí¹æ»®
ÈçºÎʵÏÖÆóÒµÓ¦Óò¿Êð×Ô¶¯»¯
ÔËά×Ô¶¯»¯Êµ¼ù֮·
Ïà¹Ø¿Î³Ì

×Ô¶¯»¯ÔËά¹¤¾ß£¨»ùÓÚDevOps£©
»¥ÁªÍøÔËάÓëDevOps
MySQLÐÔÄÜÓÅ»¯¼°ÔËάÅàѵ
ITϵͳÔËά¹ÜÀí
×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]

itilÎå´óÁ÷³Ìͼ
ITILÁ÷³Ì¹ÜÀíÁù²½×ß
ʹÓÃITIL V3×÷SOAÖÎÀíµÄ»ùʯ
IT·þÎñ¹ÜÀíµÄʵ¼ùÓë×ܽá
½è¼øITIL¼Ü¹¹ÀíÄîÌáÉýÐÅÏ¢»¯
ITILÁ÷³Ì×ܽá


»ùÓÚITILµÄIT·þÎñ¹ÜÀí
ITILÈÏÖ¤
ITSM/ITIL»ù´¡
IT¹æ»®¹ÜÀí
ITÍâ°ü¹ÜÀí
IT³É±¾¹ÜÀí

ÖйúÒÆ¶¯Í¨ÐÅ ÍøÂç¹æ»®Óë¹ÜÀí
ijº½¿Õ¹«Ë¾ IT¹æ»®ÓëÆóÒµ¼Ü¹¹
ij½ðÈÚ¹«Ë¾ IT·þÎñ¹ÜÀí£¨ITIL V3£©
ÖйúÁªÍ¨¼¯ÍÅ ITÇ°ÑØÖªÊ¶¸ÅÊö
Öк£ÓÍ ÆóÒµIT¼Ü¹¹Éè¼Æ