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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÎÒµÄ΢Ð͹¤×÷Á÷ÒýÇæ-¹¦ÄÜÉè¼Æ½âÎö¼°Ê¹ÓÃʾÀý
 
×÷ÕߣºÏôÇØ À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ 2015-9-18
  2614  次浏览      27
 

Ò»¡¢Ç°ÑÔ

ÉÏһƪÎÒ¸ø´ó¼Ò½éÉÜÁËÎҵŤ×÷Á÷µÄÄ£Ðͺͻù±¾µÄÉè¼Æ£¬ÕâÆªÎÒÏëÏêϸ˵Ã÷ÏÂÎÒÕâ¿î¹¤×÷Á÷µÄ¹¦Äܼ°Ê¹ÓÃʾÀý¡£Õâ¿î¹¤×÷Á÷Ö÷ÒªÊÇÃæÏò¿ª·¢ÕßÉè¼ÆµÄ£¬ÎªÁËÏÈÈôó¼ÒÓиöÈ«¾ÖµÄÈÏʶ£¬¾Ö²¿¹¦ÄܵÄÉè¼ÆÊµÏ־Ͳ»Ï¸ËµÁË£¬ºóÐøÓÐʱ¼äÎÒ»á¼ÌÐøÐ´ÎÄÕÂÏò´ó¼Ò½éÉÜ¡£

¶þ¡¢¹¦ÄÜÏê½â¼°Ê¹ÓÃʾÀý´úÂë

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¿·ÖÏëÏêϸÁ˽âµÄ¶¼¿ÉÒÔ¸øÎÒÁôÑÔ¡£

   
2614 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

¶àά·½·¨À´¿ª·¢ÓлúµÄÒµÎñÁ÷³Ì¼Ü¹¹
SCA Ó¦ÓóÌÐò¿ª·¢
BPM ºÍ SOA ÐÔÄÜ×î¼Ñʵ¼ù
ʵÏÖÆóÒµ·þÎñ×ÜÏßģʽ
Ïà¹ØÎĵµ

SCA½éÉܼ°Ó¦ÓÃʵÀý
»ùÓÚSOA¼Ü¹¹µÄESBƽ̨£ºInfomagic
SCA¼Ü¹¹
SOAµÄ»ù±¾¸ÅÄî
Ïà¹Ø¿Î³Ì

ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

»ùÓÚSOAµÄ¹¤×÷Á÷£¨WF£©ÕûºÏ
SOA 100ÎÊ - ÎÊÓë´ð
SOAP Ó¦ÓÃģʽ:´¦ÀíÓëÐÔÄÜ
ESB¼Ü¹¹Ö®Æóҵʵʩ°¸Àý
»ùÓÚSOA¼Ü¹¹µÄÆóÒµ¼¯³Éϵͳ
»ùÓÚSOAµÄÌåϵ¼Ü¹¹Éè¼Æ


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù


ijµÚÈý·½µç×ÓÖ§¸¶ÆóÒµ SOA¼Ü¹¹Éè¼Æ
ijµç×ÓÆóÒµ SOAÓ¦ÓÃ
ÖйúÒÆ¶¯ SOAÅàѵ
±±¾©´óѧ SOA¼Ü¹¹Éè¼ÆÊµ¼ù
ÓѰÏÕ SOA¼Ü¹¹Éè¼Æ
ÉϺ£ SOA¼Ü¹¹Êµ¼ù
ɽ¶«Òƶ¯Í¨ÐÅ SOAÌåϵ½á¹¹Êµ¼ù