Views: 3
這篇延續上一篇入門教學 ,在原有表單中增加一個明細表
設計思路
- 先把表單建立好+發表
- 正常建立一張單,拿到表單的XML(明細那邊建議塞三筆以上的資料)
- 請ChatGPT 處理拿XML資料的程式碼
測試Trigger 表單2.0
這邊我們這時增加一個新增表單版本 ,加上一個明細表
同樣到電子簽核 → 表單設計 → 選擇目標表單 → 新增表單版本
選擇從「舊版本複製」→「含表單流程」→ 確定
然後點剛剛新增的版本號 1.01
進入編輯→調整版面
欄位代號跟名稱看自己需求,這邊要先按下確定,才能再回來編輯明細欄位。
點下去明細後
這邊新增4個欄位,請依照自己需求新增。
- 項目(單行文字)
- 單價(數字)
- 數量(數字)
- 總計(表單計算,單價x數量)
發佈表單
填一張單 取得XML
上一堂課寫的Trigger
直接沿用,直接利用先前在Trigger
裡面埋的轉存XML可以在這邊繼續利用它取得表單內容。
填好之後送出
看一下XML長這樣
<Form formVersionId="9992c398-a128-4edc-a13b-5114f6a7b1f6">
<FormFieldValue>
<FieldItem fieldId="DOC_NBR" fieldValue="BPM250800002" realValue="" enableSearch="True" />
<FieldItem fieldId="APPLICICATE" fieldValue="WISH(wish)" realValue="<UserSet><Element type='user'> <userId>084ecfd9-b65a-4b99-b649-d4abcf03112c</userId></Element></UserSet>
" enableSearch="True" />
<FieldItem fieldId="APPLICICATE_DEPT" fieldValue="RD-T1" realValue="2c3feec0-c47e-b3d2-9b62-053be7cac613,RD-T1,False" enableSearch="True" />
<FieldItem fieldId="APPLY_DATE" fieldValue="2025/08/22" realValue="" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="" />
<FieldItem fieldId="SINGLE_TEXT" fieldValue="測試明細" realValue="" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="" />
<FieldItem fieldId="DETAILS" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="">
<DataGrid>
<Row order="0">
<Cell fieldId="NAME" fieldValue="iPhone 16" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="30000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="3" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="90000" realValue="" customValue="" enableSearch="True" />
</Row>
<Row order="1">
<Cell fieldId="NAME" fieldValue="iPhone 17" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="40000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="9" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="360000" realValue="" customValue="" enableSearch="True" />
</Row>
<Row order="2">
<Cell fieldId="NAME" fieldValue="iMac" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="60000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="6" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="360000" realValue="" customValue="" enableSearch="True" />
</Row>
</DataGrid>
</FieldItem>
</FormFieldValue>
</Form>
這邊可以看到,系統東西是包在 <DataGrid></DataGrid>
內
另一種取得XML的方式 從資料庫的資料表
讀取已經送出的表單 TB_WKF_TASK
SELECT TOP (10) CURRENT_DOC FROM [dbo].[TB_WKF_TASK] ORDER BY BEGIN_TIME DESC
通常我會送出一筆資料,透過上述SQL會把最新一筆排在最上面,從CURRENT_DOC
拿到表單資料
讀取草稿 TB_WKF_SCRIPT
SELECT TOP (10) [CONTENT] FROM [dbo].[TB_WKF_SCRIPT] ORDER BY MODIFY_TIME DESC
不送出表單也可以,只要儲存草稿就能拿到表單資料,這個SQL會把最新一筆排在最上面,從CONTENT
拿到表單資料
設計資料表主表-明細

- 主表,這個我們直接沿用上一個範例的
Z_TEST_TRIGGER
- 明細表:我們簡單命名就好明細表
Z_TEST_TRIGGER_D1

這邊照同樣把明細表的欄位定義寫入資料表
重點來了要將表單的DOC_NBR
+SEQ
欄位同時選起來(按下CTRL+滑鼠點),接著滑鼠按右鍵,按下Set Primary Key(設定為主鍵)

設定好之後將資料表存檔關閉
重新整理SSMS的資料庫後,應該可以看到最新的資料表在底下

建立Z_TEST_TRIGGER_D1
的MODEL
先將資料表的資料模型新增為一個類別,這個做法稱為建立model,Z_TEST_TRIGGER_D1.cs

建立好
後,內容如下Z_TEST_TRIGGER_D1.cs
- 順序
SEQ
,型態int
- 跟錢有關的,型態
decimal
- 數量,型態
int
- 字串類,型態
string
namespace UOF_DEV
{
/// <summary>
/// 測試用的表單-明細 對應資料表 Z_TEST_TRIGGER_D1
/// </summary>
public class Z_TEST_TRIGGER_D1
{
/// <summary>
/// 表單編號
/// </summary>
public string DOC_NBR { get; set; }
/// <summary>
/// 順序
/// </summary>
public int SEQ { get; set; }
/// <summary>
/// 品名
/// </summary>
public string NAME { get; set; }
/// <summary>
/// 單價
/// </summary>
public decimal? PRICE { get; set; }
/// <summary>
/// 數量
/// </summary>
public int? COUNT { get; set; }
/// <summary>
/// 總計
/// </summary>
public decimal? SUM { get; set; }
}
}
修改Trigger的Insert部分
邊用一個比較偷懶的方式 刪除再新增,不過建議實作還是要用 Update的方式進行新增,這邊為了教學方便取巧
這邊加入子表的刪除與新增,並且在輸入函數增加子表的部分
/// <summary>
/// 新增或更新資料到 Z_TEST_TRIGGER 資料表
/// </summary>
/// <param name="model"></param>
public void Insert(Z_TEST_TRIGGER model,List<Z_TEST_TRIGGER_D1> detail)
{
//這邊用一個比較偷懶的方式 刪除再新增,不過建議實作還是要用 Update的方式進行新增,這邊為了教學方便取巧
//主表的SQL指令
string sql = @"
DELETE FROM Z_TEST_TRIGGER WHERE DOC_NBR = @DOC_NBR;
INSERT INTO Z_TEST_TRIGGER (DOC_NBR, APPLICICATE, APPLICICATE_DEPT, APPLY_DATE, SINGLE_TEXT, TASK_STATUS, TASK_RESULT)
VALUES (@DOC_NBR, @APPLICICATE, @APPLICICATE_DEPT, @APPLY_DATE, @SINGLE_TEXT, @TASK_STATUS, @TASK_RESULT)";
//明細的SQL指令(新增)
string sqlDelD1 = @"DELETE FROM Z_TEST_TRIGGER_D1 WHERE DOC_NBR = @DOC_NBR;";
string sqlInsertD1 = @"
INSERT INTO Z_TEST_TRIGGER_D1 (DOC_NBR, SEQ, NAME, PRICE, COUNT, SUM)
VALUES (@DOC_NBR, @SEQ, @NAME, @PRICE, @COUNT, @SUM)";
//將資料寫入資料庫
using (var conn = new SqlConnection(_connectionString))
{
conn.Open();
var transaction = conn.BeginTransaction();
try
{
conn.Execute(sql, model , transaction);
//處理明細(新增這兩行)
conn.Execute(sqlDelD1, new { model.DOC_NBR }, transaction);
conn.Execute(sqlInsertD1, detail, transaction);
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
throw;
}
}
}
新增XML讀取資料表的部分的部分
這邊做幾件事
- 將XML的結構更新到程式碼當中,如果你有安裝Copilot系統就會自動更新它
- 將XML內容讀取成一個List
public string GetFormResult(ApplyTask applyTask)
{
//取得表單編號
string DOC_NBR = applyTask.FormNumber;
//將目前表單內容讀到 doc物件當中
XmlDocument doc = new XmlDocument();
doc.LoadXml(applyTask.CurrentDocXML);
//建立儲存表單的目錄
System.IO.Directory.CreateDirectory("C:\\UOF_DEBUG\\");
//儲存表單xml內容到硬碟中
doc.Save($"C:\\UOF_DEBUG\\{DOC_NBR}{DateTime.Now:yyyy-MM-dd-hh-mm-ss}.xml");
/*XML SAMPLE(這邊有更新)
<Form formVersionId="9992c398-a128-4edc-a13b-5114f6a7b1f6">
<FormFieldValue>
<FieldItem fieldId="DOC_NBR" fieldValue="BPM250800002" realValue="" enableSearch="True" />
<FieldItem fieldId="APPLICICATE" fieldValue="WISH(wish)" realValue="<UserSet><Element type='user'> <userId>084ecfd9-b65a-4b99-b649-d4abcf03112c</userId></Element></UserSet>
" enableSearch="True" />
<FieldItem fieldId="APPLICICATE_DEPT" fieldValue="RD-T1" realValue="2c3feec0-c47e-b3d2-9b62-053be7cac613,RD-T1,False" enableSearch="True" />
<FieldItem fieldId="APPLY_DATE" fieldValue="2025/08/22" realValue="" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="" />
<FieldItem fieldId="SINGLE_TEXT" fieldValue="測試明細" realValue="" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="" />
<FieldItem fieldId="DETAILS" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="">
<DataGrid>
<Row order="0">
<Cell fieldId="NAME" fieldValue="iPhone 16" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="30000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="3" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="90000" realValue="" customValue="" enableSearch="True" />
</Row>
<Row order="1">
<Cell fieldId="NAME" fieldValue="iPhone 17" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="40000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="9" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="360000" realValue="" customValue="" enableSearch="True" />
</Row>
<Row order="2">
<Cell fieldId="NAME" fieldValue="iMac" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="60000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="6" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="360000" realValue="" customValue="" enableSearch="True" />
</Row>
</DataGrid>
</FieldItem>
</FormFieldValue>
</Form>
*/
var model = new Z_TEST_TRIGGER
{
DOC_NBR = GetFieldValue(doc, "DOC_NBR"),
APPLICICATE = GetFieldValue(doc, "APPLICICATE"),
APPLICICATE_DEPT = GetFieldValue(doc, "APPLICICATE_DEPT"),
APPLY_DATE = TryParseDateTime(GetFieldValue(doc, "APPLY_DATE")) ?? DateTime.Now,
SINGLE_TEXT = GetFieldValue(doc, "SINGLE_TEXT"),
TASK_STATUS = GetFormTaskStatus(applyTask),
TASK_RESULT = GetFormTaskResult(applyTask)
};
var details = new List<Z_TEST_TRIGGER_D1>();
//處理明細資料 讀取 DataGrid 內容(這邊有更新)
//取得 DETAILS 明細的 DataGrid 節點(這邊使用copilot產生的)
var detailNode = doc.SelectSingleNode($"//FieldItem[@fieldId='DETAILS']/DataGrid");
if (detailNode != null) {
var rows = detailNode.SelectNodes("Row");
if (rows != null)
{
foreach (XmlNode row in rows)
{
var detail = new Z_TEST_TRIGGER_D1
{
DOC_NBR = model.DOC_NBR,
SEQ = int.TryParse(row.Attributes["order"]?.Value, out int seq) ? seq + 1 : 0,
NAME = row.SelectSingleNode("Cell[@fieldId='NAME']")?.Attributes["fieldValue"]?.Value,
PRICE = decimal.TryParse(row.SelectSingleNode("Cell[@fieldId='PRICE']")?.Attributes["fieldValue"]?.Value, out decimal price) ? price : (decimal?)null,
COUNT = int.TryParse(row.SelectSingleNode("Cell[@fieldId='COUNT']")?.Attributes["fieldValue"]?.Value, out int count) ? count : (int?)null,
SUM = decimal.TryParse(row.SelectSingleNode("Cell[@fieldId='SUM']")?.Attributes["fieldValue"]?.Value, out decimal sum) ? sum : (decimal?)null,
};
details.Add(detail);
}
}
}
Insert(model,details); //(這邊有更新)
//故意失敗,用於重複測試使用
throw new Exception("For TEST");
return "";
}
存檔編譯
TRIGGER
務必編譯後再進行測試
測試
測試方法很簡單,一樣新起一張單,然後送出,再去看資料表


常見的幾個問題點
沒出現任何錯誤,但資料庫也沒資料
看一下呼叫DLL

找到表單,查詢,通常有錯誤會在這邊,如果沒任何錯誤就是這張表沒設定起單要呼叫的DLL
到表單設計>該表單>維護表單


看一下這邊設定是不是漏掉了
主表有資料,明細沒有資料
這個範例使用的是交易模式,如果主表有資料,明細沒資料的狀態,代表你的DLL沒編譯最新的給它,這時回到Visual Studio的專案,按下建置(Build),再重新起單一次。
本範例Trigger的完整程式碼
using Ede.Uof.Utility.Data;
using Ede.Uof.WKF.Engine;
using Ede.Uof.WKF.ExternalUtility;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Xml;
using Dapper;
namespace UOF_DEV
{
public class Trigger : ICallbackTriggerPlugin
{
/// <summary>
/// 連線字串
/// </summary>
private string _connectionString;
/// <summary>
/// 建構子
/// </summary>
public Trigger()
{
//EIP內建抓取得連線字串
_connectionString = new DatabaseHelper().Command.Connection.ConnectionString;
}
public void Finally()
{
}
public string GetFormResult(ApplyTask applyTask)
{
//取得表單編號
string DOC_NBR = applyTask.FormNumber;
//將目前表單內容讀到 doc物件當中
XmlDocument doc = new XmlDocument();
doc.LoadXml(applyTask.CurrentDocXML);
//建立儲存表單的目錄
System.IO.Directory.CreateDirectory("C:\\UOF_DEBUG\\");
//儲存表單xml內容到硬碟中
doc.Save($"C:\\UOF_DEBUG\\{DOC_NBR}{DateTime.Now:yyyy-MM-dd-hh-mm-ss}.xml");
/*XML SAMPLE
<Form formVersionId="9992c398-a128-4edc-a13b-5114f6a7b1f6">
<FormFieldValue>
<FieldItem fieldId="DOC_NBR" fieldValue="BPM250800002" realValue="" enableSearch="True" />
<FieldItem fieldId="APPLICICATE" fieldValue="WISH(wish)" realValue="<UserSet><Element type='user'> <userId>084ecfd9-b65a-4b99-b649-d4abcf03112c</userId></Element></UserSet>
" enableSearch="True" />
<FieldItem fieldId="APPLICICATE_DEPT" fieldValue="RD-T1" realValue="2c3feec0-c47e-b3d2-9b62-053be7cac613,RD-T1,False" enableSearch="True" />
<FieldItem fieldId="APPLY_DATE" fieldValue="2025/08/22" realValue="" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="" />
<FieldItem fieldId="SINGLE_TEXT" fieldValue="測試明細" realValue="" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="" />
<FieldItem fieldId="DETAILS" enableSearch="True" fillerName="WISH" fillerUserGuid="084ecfd9-b65a-4b99-b649-d4abcf03112c" fillerAccount="wish" fillSiteId="">
<DataGrid>
<Row order="0">
<Cell fieldId="NAME" fieldValue="iPhone 16" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="30000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="3" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="90000" realValue="" customValue="" enableSearch="True" />
</Row>
<Row order="1">
<Cell fieldId="NAME" fieldValue="iPhone 17" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="40000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="9" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="360000" realValue="" customValue="" enableSearch="True" />
</Row>
<Row order="2">
<Cell fieldId="NAME" fieldValue="iMac" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="PRICE" fieldValue="60000" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="COUNT" fieldValue="6" realValue="" customValue="" enableSearch="True" />
<Cell fieldId="SUM" fieldValue="360000" realValue="" customValue="" enableSearch="True" />
</Row>
</DataGrid>
</FieldItem>
</FormFieldValue>
</Form>
*/
var model = new Z_TEST_TRIGGER
{
DOC_NBR = GetFieldValue(doc, "DOC_NBR"),
APPLICICATE = GetFieldValue(doc, "APPLICICATE"),
APPLICICATE_DEPT = GetFieldValue(doc, "APPLICICATE_DEPT"),
APPLY_DATE = TryParseDateTime(GetFieldValue(doc, "APPLY_DATE")) ?? DateTime.Now,
SINGLE_TEXT = GetFieldValue(doc, "SINGLE_TEXT"),
TASK_STATUS = GetFormTaskStatus(applyTask),
TASK_RESULT = GetFormTaskResult(applyTask)
};
var details = new List<Z_TEST_TRIGGER_D1>();
//處理明細資料 讀取 DataGrid 內容
//取得 DETAILS 明細的 DataGrid 節點(這邊使用copilot產生的)
var detailNode = doc.SelectSingleNode($"//FieldItem[@fieldId='DETAILS']/DataGrid");
if (detailNode != null) {
var rows = detailNode.SelectNodes("Row");
if (rows != null)
{
foreach (XmlNode row in rows)
{
var detail = new Z_TEST_TRIGGER_D1
{
DOC_NBR = model.DOC_NBR,
SEQ = int.TryParse(row.Attributes["order"]?.Value, out int seq) ? seq + 1 : 0,
NAME = row.SelectSingleNode("Cell[@fieldId='NAME']")?.Attributes["fieldValue"]?.Value,
PRICE = decimal.TryParse(row.SelectSingleNode("Cell[@fieldId='PRICE']")?.Attributes["fieldValue"]?.Value, out decimal price) ? price : (decimal?)null,
COUNT = int.TryParse(row.SelectSingleNode("Cell[@fieldId='COUNT']")?.Attributes["fieldValue"]?.Value, out int count) ? count : (int?)null,
SUM = decimal.TryParse(row.SelectSingleNode("Cell[@fieldId='SUM']")?.Attributes["fieldValue"]?.Value, out decimal sum) ? sum : (decimal?)null,
};
details.Add(detail);
}
}
}
Insert(model,details);
//故意失敗,用於重複測試使用
throw new Exception("For TEST");
return "";
}
/// <summary>
/// 新增或更新資料到 Z_TEST_TRIGGER 資料表
/// </summary>
/// <param name="model"></param>
public void Insert(Z_TEST_TRIGGER model,List<Z_TEST_TRIGGER_D1> detail)
{
//這邊用一個比較偷懶的方式 刪除再新增,不過建議實作還是要用 Update的方式進行新增,這邊為了教學方便取巧
//主表的SQL指令
string sql = @"
DELETE FROM Z_TEST_TRIGGER WHERE DOC_NBR = @DOC_NBR;
INSERT INTO Z_TEST_TRIGGER (DOC_NBR, APPLICICATE, APPLICICATE_DEPT, APPLY_DATE, SINGLE_TEXT, TASK_STATUS, TASK_RESULT)
VALUES (@DOC_NBR, @APPLICICATE, @APPLICICATE_DEPT, @APPLY_DATE, @SINGLE_TEXT, @TASK_STATUS, @TASK_RESULT)";
//明細的SQL指令
string sqlDelD1 = @"DELETE FROM Z_TEST_TRIGGER_D1 WHERE DOC_NBR = @DOC_NBR;";
string sqlInsertD1 = @"
INSERT INTO Z_TEST_TRIGGER_D1 (DOC_NBR, SEQ, NAME, PRICE, COUNT, SUM)
VALUES (@DOC_NBR, @SEQ, @NAME, @PRICE, @COUNT, @SUM)";
//將資料寫入資料庫
using (var conn = new SqlConnection(_connectionString))
{
conn.Open();
var transaction = conn.BeginTransaction();
try
{
conn.Execute(sql, model , transaction);
//處理明細
conn.Execute(sqlDelD1, new { model.DOC_NBR }, transaction);
conn.Execute(sqlInsertD1, detail, transaction);
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
throw;
}
}
}
public void OnError(Exception errorException)
{
}
/// <summary>
/// 取得BPM表單中 FieldValue 的內容
/// </summary>
/// <param name="doc"></param>
/// <param name="fieldId"></param>
/// <returns></returns>
private string GetFieldValue(XmlDocument doc, string fieldId)
{
return doc.SelectSingleNode($"//FieldItem[@fieldId='{fieldId}']")?.Attributes["fieldValue"]?.Value;
}
/// <summary>
/// 取得BPM表單中 RealValue 的內容
/// </summary>
/// <param name="doc">表單XML</param>
/// <param name="fieldId">欄位名稱</param>
/// <returns></returns>
private string GerRealValue(XmlDocument doc, string fieldId)
{
return doc.SelectSingleNode($"//FieldItem[@fieldId='{fieldId}']")?.Attributes["realValue"]?.Value;
}
/// <summary>
/// 字串轉DateTime
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private DateTime? TryParseDateTime(string value)
{
if (DateTime.TryParse(value, out DateTime result))
return result;
return null;
}
/// <summary>
///表單狀態
/// </summary>
/// <param name="applyTask">
/// </param>
/// <returns>
/// 1 = 處理中
/// 2 = 結案
/// 3 = 異常
/// 4 = 退回
/// </returns>
public static string GetFormTaskStatus(ApplyTask applyTask)
{
try
{
// 結案
// 如果 TaskStatus 不是 Active,返回 "2結案"
if (applyTask.Task.TaskStatus != ActiveStatus.Active)
{
return "2";
}
//退回申請者
// 檢查 SignResult 為 ReturnToAppliant 退回申請者 且 TaskStatus 為 Active,返回 "4退回"
if (applyTask.SignResult == SignResult.ReturnToAppliant &&
applyTask.Task.TaskStatus == ActiveStatus.Active)
{
return "4";
}
// 退回某人
// 檢查 SignResult 為 Return 且 TaskStatus 為 Active,返回 "1處理中"
if (applyTask.SignResult == SignResult.Return && applyTask.Task.TaskStatus == ActiveStatus.Active)
{
return "1";
}
// 檢查 SignResult 為 GetBack 且 TaskStatus 為 Active,返回 "4退回"
if (applyTask.SignResult == SignResult.GetBack && applyTask.Task.TaskStatus == ActiveStatus.Active)
{
return "4";
}
// 檢查 SignResult 為 Approve 且 TaskStatus 為 ReturnToApplicant,返回 "1處理中"
if (applyTask.SignResult == SignResult.Approve &&
applyTask.Task.TaskStatus == ActiveStatus.ReturnToApplicant)
{
return "1";
}
// 檢查 SignResult 為 Disapprove 且 TaskStatus 為 Active,返回 "2結案"
if (applyTask.SignResult == SignResult.Disapprove && applyTask.Task.TaskStatus == ActiveStatus.Active)
{
return "2";
}
// 如果沒有匹配條件,返回 "1處理中"
return "1";
}
catch
{
// 如果發生異常,返回 "3異常"
return "3";
}
}
/// <summary>
/// 取得表單的申請結果
/// </summary>
/// <param name="applyTask">The apply task.</param>
/// <returns>0核准, 1否決, 2作廢,3退回, NULL 簽核中</returns>
public static string GetFormTaskResult(ApplyTask applyTask)
{
return applyTask.FormResult == ApplyResult.UnKnow ? null : ((int)applyTask.FormResult).ToString();
}
}
}
0 Comments