> For the complete documentation index, see [llms.txt](https://hychen39.gitbook.io/apex-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hychen39.gitbook.io/apex-notes/forms/item_validation.md).

# 表單欄位檢查: 時間最多 2 小時

有開始和結束時間兩個欄位。這兩個欄位決定的時間間隔最多只能兩個小時。違反規則時，在表單上顯示錯誤訊息，表單資料不會 submit。

## User Story

有兩個 LOV 欄位，預約開始與結束時間。可預約的最長時間為 2 個小時。預約時段以 30 分鐘為單位。

預約開始與結束時間欄位皆顯示所有的時段。

提交表單時，檢查結束時間欄位。若預約的最長時間超 2 個小時，顯示錯誤訊息。

例如，開始時間為 08:00, 結束時間為 10:30， 此時違反規則，要顯示錯誤訊息。

## 原理

在結束時間欄位設置 Validation, 於 submit 表單時檢查。

每個 Validation 必須要設定的屬性：

* Validation 相關屬性: 設定檢查資料的邏輯
* Error 相關屬性: 設定錯誤訊息內容及顯示的位置

時段以流水號編列，例以 1 表 08:00，2 表 08:30，以此略推。使用時段間的差距計算時間間隔。

例如08:00開始(id: 1), 10:30(id: 6), 6 - 1 ＝ 5 > 4 表示超出 2 小時。

## 資料集準備

參考 [串接 LOV](/apex-notes/lov/cascade_lov.md#zi-liao-ji-zhun-bei)&#x20;

## 步驟

S1 在表單上建立開始與結束時間 2 個 LOV 欄位。

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2Flhg8CgDrrENJRUOhNevp%2Fimage.png?alt=media\&token=71b02f5b-998e-4b43-b824-d40dd9aa1b84)

S2 這兩個 LOV 欄位的 List of Values 的來源為 Shared Component.

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FWCXCT5orKwQvXyQKJRUi%2Fimage.png?alt=media\&token=44ae07b8-4c64-4583-9f38-240d38c88573)

HY\_PERIOD\_LIST 內的 Query 如下:

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2Fm8KsYcLk2vOOiwvNrOAv%2Fimage.png?alt=media\&token=bbba181e-68c6-41bf-b98a-139b96b32f4c)

S3 在 P6\_END\_TIME\_1 欄位新增一個 Validation.

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FDttyJoyXjkRcbPF6Nboc%2Fimage.png?alt=media\&token=83b95935-b7b9-4529-8278-260ec14ab62e)

S4 接著設定檢查的邏輯

使用的 type 為 PL/SQL Expression. 運算後的結果需為 TRUE or FALSE。

在 PL/SQL Expression 輸入以下的算式：

```plsql
:P6_END_TIME_2 - :P6_START_TIME_1 <= 4
```

算式運算的結果為 TRUE or FALSE.&#x20;

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FxcvZnrZWzomkT1TKetND%2Fimage.png?alt=media\&token=c019a276-ca38-4815-a097-ab1912c80ff6)

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FeTN4PpybVwXchrKHP49h%2Fimage.png?alt=media\&token=538c9a9e-186b-4b99-927b-1b913895ea6c)

S5 設定錯誤訊息內容及顯示位置

Display Location 屬性選擇 Inline with Field and in Notification. \
錯誤訊息會顯示在兩個地方，一個為關聯欄位(Associated Item) 下方，另一個為右上方的通知區域。

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2Fd8VFQCZdl8usLN4ifVkW%2Fimage.png?alt=media\&token=a8fc0703-2241-4625-af20-e24dabbf7b89)

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FDp2s5vuqiZOwPQ4IWHWf%2Fimage.png?alt=media\&token=6b71f866-4278-4564-bf62-90b1f91af386)

S6 在表單中增加一個 Region. 設定 Appearance > Template 屬性時用 Buttons Container.

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FoZLTLRbYS2aBAd7qY6mz%2Fimage.png?alt=media\&token=f6ffbddf-dcad-4124-aa6c-ff8d5d718be2)

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2Fil9GVBucj0xoX1D8c8vE%2Fimage.png?alt=media\&token=098004c5-b5a2-41b6-8caa-c1361117ffe9)

此外，在此 Region 中新增一個 Button, 以便提交表單. Button 的 Behavior > Action 設為 Submit Page.

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FFDSyJUK2nhraq6XZHRzy%2Fimage.png?alt=media\&token=0bb7f3a9-3c51-4c8d-90b5-ec119f725068)

S7 測試。若時間間隔超過 2 小時，會在錯誤欄位下方及右上方顯示錯誤訊息。

![](https://741116744-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5JWGStknepZGULjX5Vhv%2Fuploads%2FKBSM9Fo8h6vPir6ovyrI%2Fimage.png?alt=media\&token=c2813459-a6a2-4f99-a313-bbf78e003e9b)
