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,請大家仔細研究。
{
///<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);
}