Teamplate 工作流開發技術總結(3)

 http://www.cnblogs.com/nehc/archive/2007/11/16/961783.html

a)         審批日誌和關係保存對象(ProcessRelationLog

這個類主要實現審批日誌和關係的保存;

對象成員:

屬性:

屬性名稱

屬性類型

屬性說明

ProcessID

string

Process ID,必須設置

TaskID

string

Task ID,必須設置

LogonName

string

用戶登錄名,必須設置

UserID

string

用戶ID,只讀

DisplayName

string

用戶的顯示名

Type

string

關係類型,必須設置

Source

string

流程發起人

FormNo

string

流程流水號

Dept

string

部門信息

Category

string

類別

Description

string

描述

Detail

string

細節內容

Others

string

其它業務信息

補充說明:從Source起往下的屬性是用於保存流程的業務信息,如果客戶有需要,可選擇相應的屬性保存,不需要的屬性允許爲空,可不予理會。

方法:

方法名稱

屬性說明

AddTaskRelation

保存任務關係

WriteLog

寫日誌

Sample:下面的這個例子是我們在做精量項目時使用的一個調用工作流流轉程序的基類,在這個基類當中的流程流轉方法中我加入了寫日誌和任務關係的代碼(代碼中突出顯示的部分),做爲本文的最後一個Sample,請大家仔細研究。

namespace TeamplateBase

{

     
///<summary>

     
/// TeamplateWebFormBase 的摘要說明。

     
///</summary>


     
public class TeamplateWebFormBase : System.Web.UI.Page

     
{

           
public TeamplateWebFormBase()

           
{

           }


           
protected void LoadBindingData(BProcess process)

           
{

                BProcess pro 
= null;

                
try

                
{

                     
if(process == null)

                     
{

                           pro 
= this.LoadProcess();

                     }


                     
else

                     
{

                           pro 
= process;

                     }


                     
this.LoadData(pro);

                }


                
catch(Exception ex)

                
{

                     
throw ex;

                }


                
finally

                
{

                     
if(process == null && pro != null)

                     
{

                           pro.Dispose();

                           pro 
= null;

                     }


                }


           }


           
protected BProcess LoadProcess()

           
{

                
int taskId;

                
int processId;

                
string token;

                BProcess process 
= new BProcess();

                
try

                
{

                     taskId 
= Convert.ToInt32(Request.QueryString["TID"]);

                     processId 
= Convert.ToInt32(Request.QueryString["PID"]);

                     token 
= Request.QueryString["token"];

                     
if (token==null || taskId==0)

                     
{

                           
throw new Exception("Error, Invalid process id or token!");

                     }


                     process.SetSessionToken(token);

                     process.Load(processId);

                }


                
catch(Exception ex)

                
{

                     
throw ex;

                }


                
return process;

           }


           
protected virtual void LoadData(BProcess process)

           
{

           }


           
protected void PromoteProcess(System.Web.UI.Page page)

           
{

                
int taskId = Convert.ToInt32(Request.QueryString["TID"]);

                
int processId = Convert.ToInt32(Request.QueryString["PID"]);

                
string token = Request.QueryString["TOKEN"];

                BProcess process 
= null;

                
// 關係日誌對象 Add by Sunmf

                ProcessRelationLog relationlog 
= new ProcessRelationLog();

                
try

                
{

                     process 
= new BProcess();

                     process.SetSessionToken(token);

                     process.Load(processId);

                     
this.SaveBindingData(process);

                     process.WorkflowAdvance(taskId, 
null);

                     
this.SaveRelationLog(relationlog, process);

                }


                
finally

                
{

                     
if(process != null)

                     
{

                           process.Dispose();

                           process 
= null;

                     }


                }


           }


           
//由繼承的窗體完成關係和日誌信息的賦值

           
protected virtual void SaveRelationLog(ProcessRelationLog relationlog, BProcess process)

           
{

                relationlog.AddTaskRelation();

                relationlog.WriteLog();

           }


           
protected void SaveBindingData(BProcess process)

           
{

                BProcess pro 
= null;

                
try

                
{

                     
if(process == null)

                     
{

                           pro 
= this.LoadProcess();

                     }


                     
else

                     
{

                           pro 
= process;

                     }


                     
this.SaveData(pro);

                }


                
catch(Exception ex)

                
{

                     
throw ex;

                }


                
finally

                
{

                     
if(process == null && pro != null)

                     
{

                           pro.Dispose();

                           pro 
= null;

                     }


                }


           }


           
protected virtual void SaveData(BProcess process)

           
{

           }


           
protected void closeWindow(System.Web.UI.Page page)

           
{

                
string client;

                client 
= page.Request.ServerVariables["HTTP_USER_AGENT"];

                
int index = client.IndexOf("Windows CE"0);

                
if(index == -1)

                
{

                     
this.RegisterClientScriptBlock("tpCloseAndReloadParentWindow","<script language=JavaScript> opener.window.location.replace(opener.window.location.href); window.close();</script>");

                }


           }


     }


}


//使用這個基類例子代碼片斷:

           
protected override void SaveRelationLog(TeamplateLib.ProcessRelationLog relationlog, BProcess process)

           
{

                relationlog.TaskID 
=Request.QueryString["TID"].ToString();

                relationlog.ProcessID 
= Request.QueryString["PID"].ToString();

                relationlog.LogonName 
= this.CurrentUser;

                relationlog.DisplayName 
= this.ApproveControl1.lblApproverDisName.Text;

                relationlog.Type 
= "Actor";

                relationlog.Source 
= process.GetTextValue("Common","Root/Request/RequestBy");

                relationlog.Dept 
= process.GetTextValue("Common","Root/Request/Dept");

                relationlog.FormNo 
="Purchase Request";

                relationlog.Detail 
=process.GetTextValue("Common","Root/Request/Supplier");

                relationlog.Description 
=process.GetTextValue("Common","Root/Request/Description");

                
switch (this.ApproveControl1.ddlApproveStatus.SelectedValue)

                
{

                     
case "1":

                           relationlog.ApproveStatus 
= "Approved";

                           
break;

                     
case "2":

                           relationlog.ApproveStatus 
= "Declined";

                           
break;

                     
case "3":

                           relationlog.ApproveStatus 
= "Cancelled";

                           
break;

                }
          

                relationlog.ApproveComment 
= this.ApproveControl1.txtComment.Text;

                relationlog.ApproveRemark 
= this.ApproveControl1.txtApproveRemark.Text;

                
base.SaveRelationLog (relationlog, process);

           }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章