Views: 3
這是v27版本透過dnSpy挖出來的,我猜各版本差異應該不大,官方論壇沒開放這段的程式碼,所以只好自己找了一下
結案復原的程式碼
/// <summary>
/// 結案復原
/// </summary>
/// <param name="taskId">表單TaskId</param>
/// <param name="comment">備註</param>
/// <param name="userGuid">執行者Guid</param>
/// <returns>結果訊息</returns>
public string ReturnForm(string taskId, string comment, string userGuid)
{
var task = new Ede.Uof.WKF.Engine.Task(taskId);
var uco = new Ede.Uof.WKF.Utility.ResponsibleUCO();
// 1) 判斷不可復原的情況
if (task.TaskDs.TB_WKF_TASK_NODE.Rows.Count == 1)
{
return "此單為起單即為結案,無法復原!";
}
if (uco.CheckLastSignSiteIsReturnToAppicant(taskId))
{
return "此單為退回申請者後作廢,無法復原!";
}
// 2) 驗證 Trigger (若有設定)
var validatorGuid = task.CurrentDocument.FormVersion.RETURN_FORM_VALIDATOR_TRIGGER;
if (!string.IsNullOrEmpty(validatorGuid))
{
try
{
string validatorStatus = uco.CallValidatorReturnFormTrigger(task.TaskId, validatorGuid);
var xml = new XmlDocument();
xml.LoadXml(validatorStatus);
if (xml.SelectSingleNode("TriggerReturn/Status")?.InnerText != "1")
{
var msg = xml.SelectSingleNode("TriggerReturn/Exception")?.InnerText ?? "驗證失敗";
return "結案復原驗證失敗,原因如下: " + msg;
}
}
catch
{
return "表單復原驗證失敗 (執行驗證時發生錯誤)";
}
}
// 3) 執行復原
var oldApplyResult = task.TaskResult;
try
{
int ret = uco.ReturnForm(taskId);
if (ret == 0)
{
return "表單復原狀態失敗";
}
// 狀態變更 Trigger
var changeGuid = task.CurrentDocument.FormVersion.CHANGE_FORM_RESULT_GUID;
if (!string.IsNullOrEmpty(changeGuid))
{
uco.CallFormTrigger(oldApplyResult, changeGuid, taskId, false);
}
// 更新外部任務
uco.UpdateExternalTask(taskId, -1);
// 紀錄 Log
uco.Log_GUID = Guid.NewGuid().ToString();
uco.User_GUID = userGuid;
uco.ContentMethod = "2";
uco.ExecuteTime = UserTime.SetZone(userGuid).GetNowForDb();
uco.taskId = taskId;
uco.formVersionId = task.FormVersionId;
uco.FORM_ID = task.FormId;
uco.DOC_NBR = task.FormNumber;
uco.ModifyPrior = ((int)oldApplyResult).ToString();
uco.ModifyLater = "-1";
uco.EXECUTE_COMMENT = comment;
uco.InsertLog(taskId, task.FormVersionId);
// 發送通知 (例外不影響結果)
try
{
uco.SendMessage("Return", taskId);
}
catch { }
return "表單復原狀態成功";
}
catch
{
return "表單復原狀態失敗 (執行過程發生例外)";
}
}
這段怎麼找出來的?
- 找張表單用管理者結案復原 可以知道結案復原是帶入
ReturnForm.aspx?taskId={0}
這個頁面(透過瀏覽器F12開發者模式找到的) - 找出這個頁面,知道後端是
ReturnForm.aspx.cs
- 使用dnSpy找到
ReturnForm.aspx.cs
這段的程式碼,提示:Ede.Uof.Web.dll
,直接搜ReturnForm
看結果是.ctor
的 - 把程式碼貼去ChatGpt,請它抽出來產生一個Method
0 Comments