# 起始方法

## 描述

InitializeAsync() 非同步初始化 WebView2 控制項及其環境。StrucForm control 含有多個選項參數，可在起始控件的時候，客製化結構化表單使用情境。

## 必塡&#x20;

### 使用者資料

* UserID: 使用者代號
* Idno: 身分證字號 (用來確認管制病歷權限)
* UserName: 使用者姓名

### 病人資料

* Chtno: 病歷號
* Opdno: 就醫號，收件號
* DeptNo: 病人所屬部門代號，病歷紀錄，部門範本呼叫使用

### 起始表單

* [BaselineJson](#baselinejson): 優先以內建 JSON 文件 設定作為起始表單。
* [BaselineFormID](#baselineformid): 資料庫表單，預設純文字表單 = "f93afc97-9403-4613-bd67-2f683d805234"

## 選填

### 病人資料

* Pacsno: 影像號 AI推論使用。

### 表單綁定 HIS 病歷欄位資料

* [DocTypeID](#doctypeid): 連結 HIS 欄位的字典名稱 ID ，將欄位名稱提供結構化小組，經編輯器新增應對字典取得 UUID
* DocTypeName: 病歷紀錄欄位名稱 Subjective, Objective 可顯示在放大視窗上
* BaselinePreset: HIS 作業種類設定 (opd, ipd, exam, er)，用來回報病歷紀錄作業種類

### 表單其他設定

* SubpanelFormID: 設定子頁面起始助手表單編號 (預設門診小助手表單 7011725e-81f5-421f-8caf-337c6f2f7a21)
* LimitDictVal: 設定結構化欄位最大字元數 (預設 4000 字元)，超過部分會被刪除。
* Scutsource: 子表單來源 { "usr", "sub", "dpt", "sys" }
* Scutgroup: 子表單使用群組 { "門", "急", "住", "檢查", "手術" }
* DocDitto: 設定依 doctorID or deptNo 自動載入最近一次紀錄: DocDitto 預設 "" 不 ditto
* DocAutoLoad: 是否自動取用文件上次的暫存紀錄，false 帶入內容由HIS端自行控制
* DocOverwrite: 同一筆 opdno 文件可支援多次引用同一張子表單，預設 false，每次引用子表單都新增一筆紀錄；如果設定 true，則同一張子表單的紀錄會被複寫， 僅留存一筆紀錄。
* ShortcutAutoSave: 預設 true，當使用者在子表單觸發跳出結構化工具時，工具會自動另存子表單紀錄，若設定 false 會取消子表單編輯內容。
* Preview: 設定起始畫面為病歷預覽或編輯模式，預設 false 為編輯模式
* URLRoot: 結構化基礎 API 網址
* URLtemplate: 結構化加值 API 網址 (例如 loadtemplate API)
* EnableParentTemplateShortcut: 是否允許 shift + F2 熱鍵切換基礎表單，預設否 false。
* EnableChildTemplateShortcut: 是否允許 F4 熱鍵切換子表單，預設允許 true。
* F2Fix: 是否固定顯示主表單 (ParentTemplateShortcut) 選擇功能列，預設 false 不固定顯示。
* showCharCount: 是否在textarea 右下角顯示字元數，預設 true。
* showSubpanel: 放大視窗時是否自動展開子頁面。
* Debug:  show/hide debug using ctrl+D。
* OnlineCheckTimer: time interval for online check (sec)。

### 門診專用參數

* Font: 門診表單文字自型(例如: Arial, Times...) 預設 "system-ui, sans-serif"。
* FontSize: 門診表單文字大小(整數), 預設 16。
* FontWeight: 門診表單文字粗細，預設 bold。

```csharp
Form_Load();

// 非同步呼叫 Form_Load 使用 Configuration 初始化 strucForm 物件
private async Task Form_Load()
{
	// 設定 Configuration
	StrucForm1.Configuration = new ControlConfiguration
	{
		// 必填使用者資料
		UserID = "OL5", // 使用者代號
		Idno = "A123456789",  // 使用者身分證字號 (用來確認管制病歷權限)
		UserName = "王曉明",   // 使用者名稱		
		
		// 必填病人資料
		Chtno = "500",  // 病歷號
		Opdno = "20230925000001",  // 就醫號，收件號
		DeptNo = "33F0",  // 使用者部門代號四碼

		// 必填起始表單 BaselineJson, BaselineFormID 擇一填寫		
		BaselineFormID = "", // 起始表單編號
		BaselineJson = "[{\"itemtype\":\"form\",\"authread\":[\"doctor\"],\"authwrite\":[\"doctor\"],\"gettext\":true,\"item\":[{\"itemid\":2,\"datatype\":\"textarea\",\"datavalue\":\"\",\"dictionary\":\"OPD\",\"dicid\":\"a3d5cc5e-7ca9-4c03-9c72-16224e30c133\",\"dicrole\":\"tohis\",\"tag\":\"\",\"formula\":\"\",\"tocalc\":true,\"toSAS\":false,\"fromdict\":true,\"efontcolor\":\"black\",\"efontsize\":\"16\",\"ebackcolor\":\"#f3f6f4\",\"required\":false,\"reference\":\"\"}],\"itemid\":\"1\"},{\"itemtype\":\"javascript\",\"content\":\"$('.intextarea').css({\\n'font-family': 'Microsoft Sans Serif',\\n'backgound':'white',\\n'font-weight': 'bold',\\n});\"},{\"itemtype\":\"iot\",\"editorver\":\"1.54.03\",\"sheetid\":\"\",\"recType\":\"\",\"f_opdno\":false,\"f_chtno\":true,\"f_DWload\":\"f_DWpostsetvalue\",\"f_histext\":\"histextbyblock\",\"f_hideprevicon\":true,\"f_day\":\"0\",\"d_url\":\"https://xxx/\",\"modifiedUser\":\"林xx\",\"modifiedDept\":\"林口長庚xx科\",\"modifiedDate\":1695712955859}]",
		
		// 表單綁定 HIS 病歷欄位資料
		DocTypeID = "40e97c2-a181-450e-be22-aaa3d4459072", // 病歷紀錄欄位ID SOAP....using dictionary ID to define
		DocTypeName = "Subjective",  // 病歷紀錄欄位名稱 Subjective, Objective 可顯示在放大視窗上
		BaselinePreset = "opd", // HIS 作業種類設定 (opd, ipd, exam, er) 

		// 選填
		LimitDictVal = 4000, // 欄位字元數 byte 上限 (中文2 byte)
		Scutsource = new List<string> { "usr", "sys" },  // 範例: 只顯示個人 usr 以及 sys 體系來源的表單
		Scutgroup = new List<string> { "門" },  // 範例: 只顯示門診群組的表單
		DocAutoLoad = false,  // 是否帶入上次倉儲文件暫存紀錄，預設 false 帶入內容由HIS端自行控制
		DocOverwrite = false,  // 是否自動複寫同 opdno 文件，預設 false ，使用者可另存新檔
		ShortcutAutoSave = true, // 範本自動儲存
		Font = "system-ui, sans-serif",
		FontSize = 16,
		URLRoot = "https://cghasp.cgmh.org.tw/structure/"; // 結構化 API 網址
		URLtemplate = "http://10.30.111.14:85/"; // template API 網址
		EnableParentTemplateShortcut =  false,   // 啟動 shift F2 主表單選擇功能列
		EnableChildTemplateShortcut = true,   // 啟動 F4 子表單選擇功能列
		F2Fix = false, // 是否固定顯示 主表單 (ParentTemplateShortcut) 選擇功能列
		showCharCount = true,   // show.hide CharCount display
		Debug = true // show/hide debug using ctrl+D
		
		
	};
	await StrucForm.InitAsync();      
}
```

## DocTypeID

結構化控制項綁定的文件種類ID ，例如門診 SOAP 欄位字典，設定方式以及規格請參見 [文件規格](https://cgmh-kj.gitbook.io/strucmed/his-jiao-huan-zheng-he-gui-ge/wen-jian-gui-ge/doctype-gui-ge)。

## BaselineFormID

設定基礎表單所需的 sheetID，可以從編輯清單的標題列查詢而得

<figure><img src="https://1792893123-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdwFoogk3W80yJlNR060h%2Fuploads%2Fh6t8o7COj7My8u7elQKL%2F1panel.jpg?alt=media&#x26;token=90256693-b13f-466f-a09c-0d8b9affa6fa" alt=""><figcaption><p>進入表單清單</p></figcaption></figure>

## 範例

### BaselineFormID&#x20;

設定 Config，使用 BaselineFormID  作為基礎表單

```csharp
ControlConfiguration config = new ControlConfiguration
{
    // 必塡使用者資料
    UserID = "OL5", // 使用者代號
    UserName = "林天人"
        
    // 必填病人資料
    Chtno = "12345", // 病歷號
    Opdno = "20231122000001", // 就醫號，收件號
    DeptNo = "33F0", // 病人所屬部門代號前四碼   
        
    // 必填表單綁定 HIS 病歷欄位資料
    DocTypeID = "40e97c2-a181-450e-be22-aaa3d4459072", // Host program 綁定基礎表單的文件ID
    DocTypeName = "Subjective",   // 病歷紀錄欄位名稱可顯示在放大視窗上    
    BaselinePreset = "opd", // 起始預設表單 
    
    // 必填起始表單以 BaselineFormID 設定
    BaselineFormID = "0b37f6f5-55b5-429f-89e2-416f47d6df44",// 設定基礎表單引用 FormID
    
    // 選填
    Scutsource = new List<string> { "usr", "sub", "dpt", "sys" }, // 設定顯示 個人，次專，科部，或體系等來源的表單
    Scutgroup = new List<string> { "門", "急", "住", "檢查", "手術" }, // 設定顯示 "門", "急", "住", "檢查", "手術" 群組的表單
    DocAutoLoad = true,  // 基礎表單開啟時，會取出上次存檔內容
    DocOverwrite = true, // 子表單存檔時自動複寫上次紀錄    
    EnableParentTemplateShortcut = true // 允許 shift + F2 熱鍵切換基礎表單
};

strucForm1.Configuration = config;
```

### BaselineJson

利用 BaselinJson 參數可定義離線基礎表單的 JSON 內容。JSON 文件請使用編輯器，點選要編輯的表單，進入編輯畫面後點選下拉功能列，選擇  "匯出 JSON 文件" 取得。使用基礎表單時無須連網即可操作。

<figure><img src="https://1792893123-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdwFoogk3W80yJlNR060h%2Fuploads%2F4hYAJpImNdvqT2rqTsI5%2Fexport%20JSON.jpg?alt=media&#x26;token=374e6bcb-0944-4462-b402-78df06448329" alt=""><figcaption><p>取得JSON文件</p></figcaption></figure>

<figure><img src="https://1792893123-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdwFoogk3W80yJlNR060h%2Fuploads%2Frjyv46VoR6rQqnEUYjLp%2F2024-02-01_01-49-16.jpg?alt=media&#x26;token=9d65cc3b-c115-4ed5-9e60-582068024376" alt=""><figcaption><p>JSON 文件內容</p></figcaption></figure>

#### 範例

使用 JSON 文件設定基礎表單:&#x20;

```csharp
// 非同步呼叫 Form_Load 使用 Configuration 初始化 strucForm 物件
private async Task Form_Load()
{
    // 設定 Configuration
    strucForm1.Configuration = new ControlConfiguration
    {
        // 必塡使用者資料
        UserID = "OL5", // 使用者代號
        UserName = "林天人"
        
        // 必填病人資料
        Chtno = "12345", // 病歷號
        Opdno = "20231122000001", // 就醫號，收件號
        Pacsno = "20231122000001",   // 設定影像號(AI 推論使用)
        DeptNo = "33F0", // 病人所屬部門代號前四碼   
        
        // 必填表單綁定 HIS 病歷欄位資料
        DocTypeID = "40e97c2-a181-450e-be22-aaa3d4459072", // Host program 綁定基礎表單的文件ID
        DocTypeName = "Subjective",   // 病歷紀錄欄位名稱可顯示在放大視窗上    
        BaselinePreset = "opd", // 起始預設表單
        
        // 必填起始表單，以 BaselineJson 設定
        BaselineJson = "[{\"itemtype\":\"form\",\"authread\":[\"doctor\"],\"authwrite\":[\"doctor\"],\"gettext\":true,\"item\":[{\"itemid\":2,\"datatype\":\"textarea\",\"datavalue\":\"\",\"dictionary\":\"OPD\",\"dicid\":\"a3d5cc5e-7ca9-4c03-9c72-16224e30c133\",\"dicrole\":\"tohis\",\"tag\":\"\",\"formula\":\"\",\"tocalc\":true,\"toSAS\":false,\"fromdict\":true,\"efontcolor\":\"black\",\"efontsize\":\"16\",\"ebackcolor\":\"#f3f6f4\",\"required\":false,\"reference\":\"\"}],\"itemid\":\"1\"},{\"itemtype\":\"javascript\",\"content\":\"$('.intextarea').css({\\n'font-family': 'Microsoft Sans Serif',\\n'backgound':'white',\\n'font-weight': 'bold',\\n});\"},{\"itemtype\":\"iot\",\"editorver\":\"1.54.03\",\"sheetid\":\"\",\"recType\":\"\",\"f_opdno\":false,\"f_chtno\":true,\"f_DWload\":\"f_DWpostsetvalue\",\"f_histext\":\"histextbyblock\",\"f_hideprevicon\":true,\"f_day\":\"0\",\"d_url\":\"https://xxx/\",\"modifiedUser\":\"林xx\",\"modifiedDept\":\"林口長庚xx科\",\"modifiedDate\":1695712955859}]",
        
        // 選填
        Scutsource = new List<string> { "usr", "sys" },  // 範例: 只顯示個人 usr 以及 sys 體系來源的表單
        Scutgroup = new List<string> { "門" }  // 範例: 只顯示門診群組的表單
    };
    await strucForm.InitAsync();      
}
```

### BaselinePreset

使用 "離線基礎表單選項" 設定基礎表單 (目前有 離線基礎表單僅有 "opd" )

#### 範例

利用 BaselinePreset 參數使用內建的離線表單。

```csharp
// 非同步呼叫 Form_Load 使用 Configuration 初始化 strucForm 物件
private async Task Form_Load()
{
    // 設定 Configuration
    strucForm.Configuration = new ControlConfiguration
    {
        // 必塡使用者資料
        UserID = "OL5", // 使用者代號
        UserName = "林天人"
        
        // 必填病人資料
        Chtno = "12345", // 病歷號
        Opdno = "20231122000001", // 就醫號，收件號
        DeptNo = "33F0", // 病人所屬部門代號前四碼   
        
        // 必填表單綁定 HIS 病歷欄位資料
        DocTypeID = "40e97c2-a181-450e-be22-aaa3d4459072", // Host program 綁定基礎表單的文件ID
        DocTypeName = "Subjective",   // 病歷紀錄欄位名稱可顯示在放大視窗上    
        BaselinePreset = "opd", // 起始預設表單
        
        // 必填起始表單，沒有填以 BaselineFormID = "f93afc97-9403-4613-bd67-2f683d805234" 預設
        
        // 選填
        Scutsource = new List<string> { "usr", "sub", "dpt", "sys" },  // 範例: 顯示 "usr", "sub", "dpt", "sys" 來源的表單
        Scutgroup = new List<string> { "門", "急", "住", "檢查", "手術" }  // 範例: 顯示 "門", "急", "住", "檢查", "手術" 群組的表單
    };
    
    // 等候表單生成以及帶入欄位資料
    await strucForm.InitAsync(); 
}
```
