Ò»¡¢Ç°ÑÔ
ÉÏһƪÎÒ¸ø´ó¼Ò½éÉÜÁËÎҵŤ×÷Á÷µÄÄ£Ðͺͻù±¾µÄÉè¼Æ£¬ÕâÆªÎÒÏëÏêϸ˵Ã÷ÏÂÎÒÕâ¿î¹¤×÷Á÷µÄ¹¦Äܼ°Ê¹ÓÃʾÀý¡£Õâ¿î¹¤×÷Á÷Ö÷ÒªÊÇÃæÏò¿ª·¢ÕßÉè¼ÆµÄ£¬ÎªÁËÏÈÈôó¼ÒÓиöÈ«¾ÖµÄÈÏʶ£¬¾Ö²¿¹¦ÄܵÄÉè¼ÆÊµÏ־Ͳ»Ï¸ËµÁË£¬ºóÐøÓÐʱ¼äÎÒ»á¼ÌÐøÐ´ÎÄÕÂÏò´ó¼Ò½éÉÜ¡£
¶þ¡¢¹¦ÄÜÏê½â¼°Ê¹ÓÃʾÀý´úÂë
1¡¢ÅäÖÃÁ÷³ÌÒýÇæ£¬Ò»°ãÔÚ³ÌÐòÆô¶¯¹ý³ÌÖе÷Óã¨Global.asax.csÖУ©
//³õʼ»¯Á÷³ÌÒýÇæ BpmConfiguration .Instance() .Config(@"C:\Configration\BpmConfig.xml") .Start(); |
Èç¹û²»Ö¸¶¨ÅäÖÃÎļþ£¬ÔòĬÈÏ´Óapp.config»òweb.configÖжÁÈ¡Á÷³ÌÅäÖÃ
//³õʼ»¯Á÷³ÌÒýÇæ BpmConfiguration .Instance() .Start(); |
µ±È»»¹Ö§³ÖͬʱÆô¶¯¶à¸öÁ÷³ÌÒýÇæ£¬ÒÔÌṩSAAS³ÌÐòµÄÖ§³Ö¡£
//A×â»§ÒýÇæÅäÖà BpmConfiguration .Instance("TenantA") .Config(@"C:\BpmConfigA.xml") .Start()
//B×â»§ÒýÇæÅäÖà BpmConfiguration .Instance("TenantB") .Config(@"C:\BpmConfigB.xml") .Start();;
|
XMLÖеÄÅäÖðüÀ¨£ºÊý¾Ý¿âÁ¬½Ó¡¢ÈÕÖ¾ÅäÖÃÎļþ¡¢ÈÎÎñ¼Æ»®Æô¶¯ÑÓʱ¡¢ÈÎÎñ¼Æ»®Ö´ÐÐÖÜÆÚ¡¢Óû§¹ØÏµ½á¹¹µÄÓ³Éä¡¢Á÷³ÌÖбäÁ¿ÀàÐ͵ÄÍØÕ¹µÈ¡£
2¡¢È¡µÃ¹¤×÷Á÷ÉÏÏÂÎÄ£¬¼´¹¤×÷Á÷µÄÈë¿Ú£¬ËùÓеŦÄܶ¼¼¯ÖÐÔÚÕâ¸öÈë¿ÚÉÏ¡£
var bpm = new BpmContext() .UseTransaction(true) .SetActor("ÏôÇØ"); |
µ±Ç°¶ÔÓÚ²»Í¬µÄÒýÇæÊµÀý£¬ÆäÉÏÏÂÎÄÊDz»Í¬µÄ
var bpm = new BpmContext("TenantA"); var bpm = new BpmContext("TenantB"); |
²»´«¹¹Ôì²ÎÊýʱ£¬·µ»ØµÄÊÇĬÈÏʵÀý¡£
3¡¢ÊÂÎñÖ§³Ö£¬ÊÇ·ñ¿ªÆôÊÂÎñ¡¢Ìá½»¡¢»Ø¹ö¡£
bpm.UseTransaction(true); bpm.Commit(); bpm.Rollback(); |
4¡¢Á÷³Ì¶¨Òå
//ÐÂÔöÁ÷³Ì¶¨Òå bpm.NewProcessDefinition("Çë¼ÙÁ÷³Ì") .SetXmlFile(@"C:\Definition\demo1.xml") .SetCategory("·ÖÀà1") .SetEffectDate(DateTime.Now) .SetExpireDate(DateTime.Now.AddDays(180)) .SetMemo("memo1") .Create() //´´½¨Á÷³Ì¶¨Òå .Parse() //½âÎöxml |
Á÷³Ì´´½¨Ê±£¬°æ±¾ºÅÊÇ×Ô¶¯Éú³ÉµÄ£¬Ä¬ÈÏ´Ó1.0¿ªÊ¼£¬µ±Á÷³ÌÃû³ÆÏàͬʱ£¬¾Í»áÉú³É²»Í¬°æ±¾¡£
ÔÚxmlÖпɶ¨Ò岻ͬµÄÈÎÎñ½Úµã£º¿ªÊ¼½Úµã¡¢×Ô¶¯½Úµã¡¢È˹¤½Úµã¡¢¾ö²ß½Úµã¡¢·¢É¢½Úµã¡¢¾ÛºÏ½Úµã¡¢×ÓÁ÷³Ì½Úµã¡¢»áÇ©½Úµã¡¢µÈ´ý½Úµã¡¢½áÊø½Úµã¡£
¼°Á¬½ÓÈÎÎñ½ÚµãµÄ·ÓÉ¡¢ÈËÔ±·ÖÅäÇé¿ö¡¢±äÁ¿¶¨Ò塢ʼþ¶¯×÷µÈÐÅÏ¢£¬¿É²ÎÕÕÎÒÉÏÆªÎÄÕÂÖеÄxml¶¨Òå
//¼ÓÔØÁ÷³Ì¶¨Òå var processDefinition = bpm.LoadProcessDefiniton("1"); processDefinition.Deploy(); //·¢²¼Á÷³Ì¶¨Òå processDefinition.Revoke(); //ÕÙ»ØÁ÷³Ì¶¨Òå processDefinition.Delete(); //ɾ³ýÁ÷³Ì¶¨Òå |
5¡¢Á÷³ÌʵÀý
//·¢ÆðÁ÷³ÌʵÀý var process = bpm.NewProcessIntance("Çë¼ÙÁ÷³Ì","ÏôÇØ"); process.SetVariable("project_id", 1399); //±£´æÁ÷³Ì±äÁ¿ process.Start(); //Æô¶¯ process.Suspend(); //¹ÒÆð process.Resume(); //»Ö¸´ process.Cancel(); //³·Ïú process.End(); //½áÊø |
ÕâÀïNewProcessInstanceÕâ¸ö·½·¨ÊµÀýÉÏÓÐÈý¸ö²ÎÊý£¬µÚÒ»¸öÊÇÁ÷³Ì¶¨ÒåID£¬µÚ¶þ¸öÊÇÆô¶¯µÄÒµÎñID£¬µÚÈý¸öÊÇ×ÓÁ÷³ÌµÄ·µ»ØÕ»µãID£¬·Ç×ÓÁ÷³Ì¿ÉÒÔºöÂÔ¡£
//Æô¶¯Á÷³Ì var startTask = process.Start(); startTask.SetRecord("SO20150903001"); //±£´æ±íµ¥Êý¾Ý£¨¹ØÁª£© startTask.SetAttach("01", "02"); //±£´æ¸½¼þÐÅÏ¢£¨¹ØÁª£©,¿É¶à¸ö startTask.SetVariable("var1", "value1"); //±£´æÈÎÎñ±äÁ¿ startTask.Signal(); //ת½»ÏÂÒ»²½ |
task.SetRecordÓÃÓÚ±£´æµ±Ç°±íµ¥Êý¾Ýid£¬Êý¾Ý±¾Éí±£´æÔÚÒµÎñ±íÖÐ
task.SetAttachÓÃÓÚ±£´æµ±Ç°½ÚµãµÄ¸½¼þid£¬¸½¼þÐÅÏ¢Ôò±£´æÔÚ¸½¼þ¹ÜÀí±íÖÐ
task.SignalÁ÷³ÌÁ÷תµÄ¹Ø¼ü·½·¨£¬¸ù¾ÝÁ÷³Ì¶¨Òå´¥·¢tokenÁîÅÆÀ뿪¶¯×÷
//ÉóÅúÈÎÎñ var task = bpm.LoadTaskInstance("00"); task.SetOpinion(SignResult.Passed, "ÎÒͬÒâ"); //ÉèÖÃÉóÅúÒâ¼û task.SetReceiver("ÑÕ¾Àí"); //ÉèÖÃÏÂÒ»²½µÄÉóÅúÈË task.Signal(); //ת½»ÏÂÒ»²½ |
ÕâÀïÌṩÁËSetReceiverµÄ·½·¨ÉèÖÃÏÂÒ»²½µÄÉóÅúÈË£¬Õý³£Çé¿öÏÂÁ÷³Ì¶¨ÒåÖÐÒѾ¶¨ÒåºÃÁË£¬ÊDz»ÐèÒªÔÙ½øÐÐÉèÖõ쬵«ÊÇ¿¼ÂÇÔÚʵ¼ÊÓ¦ÓÃÖпÉÄÜ»áÓаÑÈÎÎñ¸øÖ¸¶¨Áìµ¼ÉóÅúµÄÇé¿ö£¬ÔÚͨ´ïOAÖÐÒ²ÊÇ¿ÉÒÔÉèÖÃÏÂÒ»²½ÉóÅúÈË£¬¹ÊÌí¼ÓÁË´Ë·½·¨£¬ÐèҪʱ¿ÉÒÔµ÷Óã¬×¢ÒâÓ¦Óô˷½·¨»á¸²¸Ç¶¨ÒåÖжԹ¤×÷ÏîownerÊôÐÔµÄÉèÖá£
//ÈÎÎñίÅÉ var task1 = bpm.LoadTaskInstance("01"); task1.AssignCandidate("С֣,Сºú"); //Ìí¼ÓÈÎÎñºòÑ¡ÈË task1.AssignCandidate("saler", ActorType.Role); //Ìí¼ÓÈÎÎñºòÑ¡ÈË task1.AssignTo("ÀîËÄ"); //°ÑÈÎÎñ·ÖÅ䏸ÀîËÄ |
ÎҵŤ×÷Á÷ÖУ¬¶ÔÓÚ¹¤×÷ÈÎÎñÖ»ÄÜÓÐÒ»¸öËùÓÐÕߣ¨owner£©£¬Ò»¸öʵ¼Ê²Ù×÷Õߣ¨actor£©£¬µ«¿ÉÒÔÓµÓжà¸öºòÑ¡ÈË£¨candidate£©¡£
ºòÑ¡ÈËÊǵ±Ç°¹¤×÷¿É·ÖÅäµÄÒ»·¶Î§ÏÞÖÆ»òÈËÔ±ÁÐ±í£¬ownerÊÇÈÎÎñµÄÓµÓÐÕߣ¬actorÊÇowner¿¼ÂǸ´ÔÓί°ì¹ØÏµºó¼ÆËã³öµÄ²Ù×÷Õß¡£
task.AssignCandidateÕâ¸ö·½·¨ÓÃÓÚÌí¼ÓÈÎÎñºòÑ¡ÈË£¬µÚ¶þ¸ö²ÎÊýÊǶÔÏóÀàÐÍ£¬¿ÉÒÔÖ±½ÓÌí¼ÓÒ»¸ö½ÇÉ«¡¢»ú¹¹¡¢Óû§×éµÈ¡£
task.AssignTo¼´·ÖÅäÈÎÎñ£¬ÈÎÎñµÄ·ÖÅä״̬°üÀ¨ÒÔϼ¸¸ö״̬
public enum AssignStatus { //δ¾ö Pending,
//ÈÏÁ죬 Óû§ÈÏÁìÈÎÎñ²¢½ÓÊÕÈÎÎñÊäÈëÊý¾Ý
Claim,
//ί°ì£¬ ίÅɸøÁíÒ»¸öÈË£¨ÀýÈ磬¾Àí£©ÒÔ´úÌæËû»òËýÖ´ÐÐÈÎÎñ
Depute,
//µ½ÆÚ£¬ ûÓÐÔÚÖ¸¶¨µÄʱ¼ä¶ÎÄÚ´¦ÀíÅú×¼ÈÎÎñ
Expire,
//Ðø¶©£¬ ûÓÐÔÚ¸ø¶¨µÄʱ¼ä·¶Î§ÄÚ´¦Àí´ËÈÎÎñ£¬Ôò¸ÃÈÎÎñ½«±»Ðø¶©£¬ÒÔ±ãÔÚÁíһʱ¼ä¶ÎÄÚÖ´ÐÐ
Renew
} |
Èç¹ûÁ÷³Ì¿¨µ½Ä³¸ö½ÚµãºÜ¾Ã£¬ÎÒÃÇ¿ÉÒÔ·¢´ß°ìÏûÏ¢
Èç¹ûÒ»¸öÁ÷³Ì½ÚµãµÄÈ·ÐèÒªºÜ¾Ã²ÅÄÜÍê³É£¬ÎÒÉè¼ÆÁËÒ»¸öµ±Ç°¹¤×÷½ø¶È»ã±¨½Ó¿Ú
//¹¤×÷´ß°ì task.Urge("ºÜ¼±£¬Çë¾Àí¾¡¿ì´¦Àí£¬ÔÚÏߵȣ¡");
//»ã±¨µ±Ç°¹¤×÷½ø¶È
task.Report(0.6, "Ô¤¼ÆÕâ¸öÐÇÆÚ¾ÍÄÜÍê³É"); |
task.Urge»áÏòÈÎÎñʵ¼ÊÓµÓÐÕß·¢ËÍÒ»Ìõ´ß°ì֪ͨ£¬²¢Éú³É´ß°ìÀúÊ·¡£
task.Report»áÏòÈÎÎñµÄ¶©ÔÄÕߣ¨ËùÓйØ×¢µ±Ç°Á÷³ÌÈÎÎñµÄÈË£©·¢ËÍÒ»Ìõ½ø¶È±¨¸æ¡£
//²éѯ±äÁ¿ var var0 = process.GetVariable("project_id"); var var1 = task1.GetVariable("var1"); var var2 = task1.GetVariable<DateTime>("var2"); var var3 = task1.GetVariableObject("var3"); |
±äÁ¿·ÖΪÈýÖÖ£º
Á÷³Ì±äÁ¿ »á³Ö¾Ã»¯£¬´æÔÚÓÚÕû¸öµÄÁ÷³ÌÖÜÆÚÄÚ
ÈÎÎñ±äÁ¿ »á³Ö¾Ã»¯£¬´æÔÚÔÚµ±Ç°µÄÈÎÎñÖÐ
ÁÙʱ±äÁ¿ ²»»á³Ö¾Ã»¯µ½Êý¾Ý¿âÖУ¬Ö»´æÔÚÓÚµ±Ç°Ö´ÐÐÉÏÏÂÎÄÖУ¨executionContext£©¡£
ÉèÖñäÁ¿SetVariable »ñÈ¡±äÁ¿GetVariable
Ö§³ÖÈÎÒâÊý¾ÝÀàÐÍ
6¡¢ÖйúÌØÉ«ÉóÅú·½Ê½£¬Ö÷Òª°üÀ¨»áÇ©¡¢¼ÓÇ©£¨Ç°¼ÓÇ©¡¢ºó¼ÓÇ©¡¢²¢¼ÓÇ©£©¡¢¼õÇ©¡¢×ÔÓÉÁ÷
»áÇ©£ºÒ»¸öÈÎÎñÓɶà¸öÈ˲ÎÓ빲ͬ×ö¾ö²ß
¼ÓÇ©£ºÕâ¸öÈÎÎñÎÒ×Ô¼º¾õµÃûÓаÑÎÕ£¬Ïë¼ÓÈëÒ»¸öÈË»ò¶à¸öÈ˸úÎÒ¹²Í¬¾ö²ß£¨ÔÚǰ¼Óǩ˳ÐòÔÚµ±Ç°¾ö²ßÕß֮ǰ£¬ºó¼Óǩ˳ÐòÔÚµ±Ç°¾ö²ßÕßÖ®ºó,²¢¼ÓÇ©²»·Ö˳Ðò²¢Ðд¦Àí£©
¼õÇ©£º¸ú¼ÓÇ©Ïà·´£¬È¡ÏûijÈ˲ÎÓë¾ö²ßµÄ×ʸñ
×ÔÓÉÁ÷£ºÁ÷³Ì¶¨ÒåÖÐûÓУ¬ÁÙʱÌí¼ÓµÄ¶¯Ì¬Â·ÓÉÖ±½Ó°Ñµ±Ç°¹¤×÷·¢Ë͵½Ö¸¶¨µÄ½ÚµãÉóÅú¡£
ת»áÇ©£ºÓɵ¥È˾ö²ßµÄÆÕͨÉóÅú½Úµãת³É¶àÈ˹²Í¬¾ö²ßµÄ»áÇ©½Úµã£¬Ö§³ÖµÝ¹é»áÇ©£¬¼´»áÇ©×Ó½Úµã¿ÉÒÔ¼ÌÐø×ª»áÇ©½Úµã
¡£
תÉóÅú£ºÓɶàÈ˹²Í¬¾ö²ßµÄ»áÇ©½Úµãת³Éµ¥È˾ö²ßµÄÆÕͨÉóÅú½Úµã
ÔÚÎÒÔÚ¹¤×÷Á÷ÖУ¬»áÇ©Éè¼ÆÁËÒÔϼ¸¸ö²ÎÊý£º
a ÔËÐÐģʽ£¬²¢ÐÐʱÈ緢ɢ½Úµã£¬½øÈë»áÇ©½Úµãʱ»áͬʱ¼¤»îËùÓвÎÓëÈ˵Ť×÷ÈÎÎñ£¬´®ÐÐʱÔòÓÐÏȺó˳Ðò£¬ËùÒÔ²ÅÓÐÁËǰ¼ÓÇ©ºÍºó¼ÓÇ©
public enum RunMode { //´®ÐÐ Serial,
//²¢ÐÐ
Parallel
} |
b ¾ö²ßģʽ£¬¸ù¾Ý×Ó½ÚµãµÄ½á¹ûÈçºÎÈ¥¾ö²ß»áÇ©½Úµã
public enum DecisionMode { //Ö÷°ìÈËģʽ Sponsor, //ͶƱģʽ Vote, //һƱͨ¹ý OnePass, //һƱ·ñ¾ö OneVeto } |
Ö÷°ìÈËģʽ£ºÐèÒªÉèÖÃÒ»¸öÖ÷°ìÈË£¬½á¹ûÒÔÖ÷°ìÈ˵ľö²ßΪ׼£¬ÆäËüÈ˵ľö²ßÖ»ÊÇÌṩ²Î¿¼
ͶƱģʽ£º¼´ÉèÖÃÒ»¸öͨ¹ýµÄ±ÈÀý£¬ÓÉ´ó¼ÒͶƱ¾ö¶¨¡£Ö§³ÖÉèÖÃÿ¸öÈ˵ÄÍ¶Æ±È¨ÖØ¡£
һƱͨ¹ý£ºÆäʵ¿ÉÒÔ¿´×÷ÊÇͶƱģʽͨ¹ýÂÊÉèÖôóÓÚ0%µÄÒ»ÖÖ¡£
һƱ·ñ¾ö£º¿ÉÒÔ¿´×÷ͶƱģʽͨ¹ýÂÊÉèÖÃ100%µÄÒ»ÖÖ¡£
µ±È»ÕâÀïÖ»ÊÇÎҰѳ£Óõļ¸ÖÖģʽÁгöÀ´ÁË£¬»¹¿ÉÒÔ×Ô¼ºÍØÕ¹¾ö²ßģʽ£¬Ö»ÐèÒª¼Ì³ÐʵÏÖÎÒ¶¨ÒåµÄ³éÏóÀàDecision¼´¿É¡£
c ÊÇ·ñµÈ´ý£¬¼´»¹ÓÐÈËδ±í¾ö£¬µ«Ä¿Ç°Òѱí¾öµÄÇé¿öÒѾ¿ÉÒÔÈ·¶¨»áÇ©½á¹ûµÄÇé¿öÏ£¬Ðè²»ÐèÒªµÈ´ýÆäËüÈ˱í¾öÍê³Éºó²Å¼ÌÐø×ª½»ÏÂÒ»²½¡£
»áÇ©·ÖÁ½ÖÖ£¬Ò»ÖÖÊÇÁ÷³Ì¶¨ÒåÖж¨ÒåºÃµÄ»áÇ©£¬Ò»ÖÖÊÇÆÕͨÉóÅú½ÚµãÁÙʱת³É»áÇ©µÄ¡£Êµ¼ÊÉÏÖйúʽÉóÅúÆäʵ¾ÍÊÇÒªÁé»î£¬Èç¹ûÔÚÁ÷³Ì¶¨ÒåÖж¨ÒåºÃµÄ£¬Æäʵ¿ÉÒÔ²»ÓûáÇ©½Úµã£¬Óöà¸öÆÕͨ½ÚµãÒ²¿ÉÒÔȥʵÏÖ¡£»áÇ©½ÚµãµÄÉè¼ÆÖ÷ÒªÊÇΪÁËת»áÇ©Õâ¸ö³¡¾°£º¾ÍÊǵ±Ç°ÆÕͨÉóÅú½ÚµãµÄÉóÅúÈ˾õµÃ×Ô¼ºÃ»ÓаÑÎÕ»òÕß²»Ïëµ£ÔðÈΣ¬¿ÉÒÔ¼ÓÈëÉϼ¶Áìµ¼»òÆäËü¸ü¶àµÄÈËÒ»ÆðÀ´¾ö²ß»òÌṩ²Î¿¼Òâ¼û¡£
ʾÀý£ºÆÕͨÉóÅúת»áÇ© ÔËÐÐģʽÉèÖÃΪ²¢ÐУ¬¾ö²ßģʽÊÇÈ¨ÖØÍ¶Æ±£¬ÐèÒªµÈ´ýËùÓÐÈ˶¼Í¶Æ±£¬Í¨¹ýÏßΪ65%
//ת»áÇ© var task2 = bpm.LoadTaskInstance("02"); task2.ToCountersign(RunMode.Parallel, DecisionMode.Vote, true, 0.65M); task2.CountersignAdd(new Countersigner() { actor_id = "ÕÅÈý", vote_weight = 1 }); task2.CountersignAdd(new Countersigner() { actor_id = "ÀîËÄ", vote_weight = 0.5 }); task2.CountersignAdd(new Countersigner() { actor_id = "СÎå", vote_weight = 2 }); |
²¢ÐÐģʽ¼´Îª²¢¼ÓÇ©£¬Ç°¼ÓÇ©¡¢ºó¼ÓÇ©µÄǰÌáÊÇ´®ÐÐģʽ£¬¼ÙÉètask2Ϊ´®ÐС¢Ö÷°ìÈËģʽ¡¢ÔÉóÅúÈËΪÏôÇØ
//ǰ¼ÓÇ© task2.CountersignAddBefore("ÏôÇØ", new Countersigner() { actor_id = "ÕÅÈý"});
//ºó¼ÓÇ©
task2.CountersignAddAfter("ÏôÇØ", new
Countersigner() { actor_id = "ÀîËÄ", is_sponsor
= true}); |
¼õÇ©ÔòÏà¶Ô±È½Ï¼òµ¥ÁË
//¼õÇ© task2.CountersignRemove("ÍõÎå"); |
»áÇ©½ÚµãתÆÕͨÉóÅú,Ö±½ÓÈÃÒ»¸öÈ˾ö²ß
//תÉóÅú task2.ToSinglesign("¸ô±ÚÀÏÍõ"); |
×ÔÓÉÁ÷ģʽ£¬´´½¨ÁÙʱ·ֱ½ÓÌø×ªµ½Ö¸¶¨½Úµã½øÐÐÉóÅú
//×ÔÓÉÁ÷ var task3 = bpm.LoadTaskInstance("03"); task3.SetFreeRedirect("×ܾÀíÉóÅú"); task3.Signal(); |
7¡¢»ØÍË»úÖÆ
Á÷³Ì»ØÍ˵½Ö¸¶¨½Úµã
//Á÷³ÌʵÀýÖ¸¶¨ÈÎÒâ½Úµã»ØÍË var process2 = bpm.LoadProcessInstance("02"); process2.Rollback("ÌîдÇë¼Ùµ¥"); |
ÈÎÎñʵÀý»ØÍ˵½ÉÏÒ»²½
//µ±Ç°¹¤×÷ÈÎÎñ»ØÍ˵½ÉÏÒ»¸öÉóÅú½Úµã var task4 = bpm.LoadTaskInstance("04"); task4.Rollback(); |
8¡¢¹¤×÷ί°ì
ÕÅÈý°Ñij¸öÈÎÎñÖ±½ÓίÍиøÀîËİìÀí£¬Ö§³ÖµÝ¹éί°ì¹ØÏµ£¬¼´ÕÅÈýίÍиøÀîËÄ£¬ÀîËÄÔÙίÍиøÍõÎ壬ÍõÎåÔÚίÍиøÕÔÁù¡
bpm.NewDeputeService("ÕÅÈý", "ÀîËÄ") .ForTaskInstance("ÈÎÎñʵÀýID") .Depute(); |
°ÑÕû¸öÁ÷³ÌʵÀýίÍиøÀîËÄ£¬¼´´ËÁ÷³ÌʵÀýÏÂËùÓеÄÕÅÈýµÄÈÎÎñ¶¼»áίÍиøÀîËÄ
bpm.NewDeputeService("ÕÅÈý", "ÀîËÄ") .ForProcessInstance("Á÷³ÌʵÀýID") .Depute(); |
°Ñij¸öÁ÷³Ì¶¨ÒåÖеÄÒ»¸öÈÎÎñ½ÚµãίÍиøÀîËÄ£¬¼´ËùÓеÄÕâ¸ö½Úµã´´½¨µÄËùÓÐÈÎÎñʵÀýÈç¹ûÊÇÕÅÈýµÄÈÎÎñ¶¼»áίÍиøÀîËÄ
bpm.NewDeputeService("ÕÅÈý", "ÀîËÄ") .ForTaskDefinition("ÈÎÎñ¶¨ÒåID") .Depute(); |
°Ñij¸öÁ÷³Ì¶¨ÒåίÍиøÀîËÄ£¬¼´Õâ¸öÁ÷³ÌÖд´½¨µÄËùÓеÄÈÎÎñʵÀý£¬Èç¹ûÊÇÕÅÈýµÄÈÎÎñ£¬ÔÚÉèÖõÄÉúЧÆÚ¼äÖж¼»áίÍиøÀîËÄ
bpm.NewDeputeService("ÕÅÈý", "ÀîËÄ") .ForProcessDefinition("Á÷³Ì¶¨ÒåID") .SetDateRange(DateTime.Now, DateTime.Now.AddDays(30)) //ÉúЧÆÚ¼ä .SetMemo("Õâ¸öÔ³ö²î,Õâ¸öÁ÷³Ì¶¼Î¯ÍиøÀîËÄ´ú°ì") //ίÍÐ˵Ã÷ .Depute(); |
ÊÕ»ØÎ¯ÍйØÏµ£¬Ö»Òª½«RevokeÌæ»»Depute¶¯×÷¼´¿É
//ÊÕ»ØÎ¯°ì¹¤×÷ bpm.NewDeputeService("ÕÅÈý", "ÀîËÄ") .ForProcessInstance("Á÷³ÌʵÀýID") .Revoke(); |
9¡¢¹Ø×¢¶©ÔÄ
Õâ¸ö¹¦ÄܸúίÍÐÏàËÆ£¬¶©Ôĺó»áÊÕµ½Á÷³Ì¶¯Ì¬»òÈÎÎñ¶¯Ì¬ÏûÏ¢ÌáÐÑ£¬È磺Á÷³ÌÒÑ´´½¨¡¢Æô¶¯¡¢¹ÒÆð¡£¬ÈÎÎñÒÑ´´½¨¡¢·ÖÅä¸øË¡¢½ø¶È»ã±¨¡¢ÈÎÎñÍê³ÉµÈµÈ
//¹Ø×¢¶©ÔÄ bpm.NewSubscribeService("ÕÅÈý") .ForTaskInstance("ÈÎÎñʵÀýID") .Subscribe();
bpm.NewSubscribeService("ÕÅÈý")
.ForProcessInstance("Á÷³ÌʵÀýID")
.Subscribe();
bpm.NewSubscribeService("ÕÅÈý")
.ForProcessDefinition("Á÷³Ì¶¨ÒåID")
.Subscribe();
bpm.NewSubscribeService("ÕÅÈý","ÀîËÄ","ÍõÎå")
.ForTaskDefinition("ÈÎÎñ¶¨ÒåID")
.Subscribe(); |
È¡Ïû¶©ÔÄ£¬Ò»ÑùÖ»ÐèÒª°ÑSubscribe¸ÄΪUnsubscribe¼´¿É
//È¡Ïû¶©ÔÄ bpm.NewSubscribeService("ÀîËÄ") .ForProcessDefinition("²É¹ºÁ÷³Ì") .Unsubscribe(); |
10¡¢Êý¾Ý²éѯ
²éѯÎÒûÓÐÌṩ½Ó¿Ú£¬Ö±½Ó¿ª·ÅÊý¾Ý¿â²éѯ±ÈÎÒÌṩµÄ½Ó¿Ú»á¸ü¼ÓÁé»î£¬±ÈÈ磺
a ²éѯÒÑ·¢²¼µÄÁ÷³Ì¶¨Òå
select * from bpm_definition_process where state = 'Deploy' |
Á÷³Ì¶¨Òå״̬°üÀ¨
public enum ProcessDefinitionState { //´´½¨ Create,
//½âÎö
Parse,
//·¢²¼
Deploy,
//»ØÊÕ
Revoke,
//ɾ³ý
Delete
} |
b ÎÒµÄÁ÷³Ì
select * from bpm_instance_process where state = 'Run' and starter = 'ÏôÇØ' |
Á÷³Ì״̬°üÀ¨
public enum ProcessState { //´´½¨ Create,
//ÔËÐÐ
Run,
//¹ÒÆð
Pending,
//ÖÕÖ¹
Termination,
//Íê³É
Complete,
//È¡Ïû
Cancel
} |
c ÎҵĴý°ìÈÎÎñ
select * from bpm_instance_task where state = 'Run' and actor_id = 'ÏôÇØ' |
´ý°ìÈÎÎñ°üÀ¨Á˱ðÈËίÍиøÄãµÄÈÎÎñ£¬Èç¹ûÖ»Ïë¿´ÊôÓÚ×Ô¼ºµÄÈÎÎñÔò¿ÉÒÔ
select * from bpm_instance_task where state = 'Run' and owner_id = 'ÏôÇØ' |
ÈÎÎñ״̬°üÀ¨
public enum TaskState { //´´½¨£¬ ÈÎÎñÒѱ»´´½¨ Create,
//×èÈû£¬ µ½´ïÏßÖÐÓÐ×èÈûÈÎÎñ»¹Î´Íê³É
Blocking,
//Æô¶¯
Run,
//Íê³É£¬ Óû§ÒѾÍê³ÉÈÎÎñ²¢ÌṩÁËÈÎÎñµÄÊä³öÊý¾Ý
Complete,
//ʧ°Ü£¬ Óû§ÒѾÍê³ÉÈÎÎñ£¬ ²¢ÇÒÌṩÁË´íÎóÏûÏ¢
Failure,
//»ØÍË
Rollback
} |
d ²éѯÈÎÎñµÄºòÑ¡ÈËÐÅÏ¢
select * from bpm_instance_assignment where task_instance_id = 'ID' |
e ²éѯÎÒµÄÏûÏ¢
select * from bpm_application_notify where state='Unread' and reciever_id = 'ÏôÇØ' |
ÆäËü²éѯ¾Í²»ÔÙ¾ÙÀýÁË
Èý¡¢×ܽá
֮ǰÎÒÓÐ˵¹ýÎÒ¿ª·¢Õâ¸öµÄÒýÇæµÄÄ¿µÄÊÇΪÁËÔÚ×öÏîĿʱ£¬ÓÐÒ»¸öÌå»ýÇáÇÉ£¬ÒýÈë·½±ãµÄµ¥dllÎļþ£¨·¢²¼ºó´óСΪ1.1M£©µÄ¹¤×÷Á÷ÒýÇæ£¬½Ó¿ÚÒ²¼òµ¥Ò×ÓÚ¶þ´Î¿ª·¢£¬Ö§³Ö¶àÊý¾Ý¿â²¢ÇÒ¹¦ÄÜ»¹ËãÇ¿´ó¡£´ÓǰÄ꿪ʼµÄ¼òÒ×°æ±¾Éè¼Æ¿ª·¢µ½ÏÖÔÚ»ù±¾³ÉÐΣ¬²âÊÔÒ²ÊÇ»¨·ÑÁË´óÁ¿µÄʱ¼ä£¬¿ÉÄÜ»¹ÓÐÎÊÌâûÓв⵽£¬²»¹ýÏÖÔÚ»ù±¾Îȶ¨¡£½ÓÏÂÀ´Èç¹ûÓÐʱ¼äÎÒ»áÂýÂý¸ú´ó¼Ò½éÉܹ¦ÄÜϸ½ÚµÄÉè¼ÆºÍʵÏÖ£¬»¹ÓÐʲô¹¦ÄÜÎÒ¿¼ÂDz»ÖÜÈ«µÄ»òÒâ¼û»òÓÐÄIJ¿·ÖÏëÏêϸÁ˽âµÄ¶¼¿ÉÒÔ¸øÎÒÁôÑÔ¡£
|