フォーム機能
Ver.1.4.23.0 で、Google Forms や Microsoft Forms のような Web フォームを作れる「フォーム機能」が追加されました。このページでは、有効化の手順、設定項目、サーバースクリプト・スクリプトで制御するときの Controller / Action の値、リンク項目の扱いを説明します。
有効化する
パラメータに Form.json が追加されています。Enabled を true に変更します。
- "Enabled": false,
+ "Enabled": true,パラメータを変更したら、インスタンスを再起動してください。再起動後、テーブルの管理に「フォーム」タブが追加されます。

公開する
「フォームを匿名ユーザに公開する」のチェックボックスを ON にすると、フォームの専用 URL が発行されます。更新してからその URL を開くと、編集画面と同じ見た目のフォーム画面が表示されます。
URL の仕組み
- 専用 URL は
/forms/{guid}/newで、{guid}はサイトのSites.Form列に保存される 32 桁の 16 進数です(SiteModel.cs)。画面には小文字で表示されます(SiteUtilities.cs)。 - この値はチェックボックスを ON にした時点でブラウザ側で作られます(sitesettings.js)。
crypto.randomUUID()からハイフンを除いて大文字にし、crypto.randomUUID()が使えない環境(HTTP 接続など、安全なコンテキストでない場合)ではMath.random()を使って作ります(util.js)。URL が推測されにくいことが前提の機能なので、HTTPS で運用してください。 - アクセスされると、ルートの
guidを大文字にしてSites.Formと照合し、サイトを特定します(Context.cs)。このときForm.jsonのEnabledか、契約設定の拡張機能Formのどちらかが有効でないとサイトは特定されません(Context.cs)。
同じ「推測されにくい URL」の仕組みを使った、本体に無い機能の設計は iCal フィードの設計・外部 Webhook 受信の設計 にあります。
設定項目

| 設定 | 内容 |
|---|---|
| 有効期限 | フォームを受け付ける期間。開始・終了のどちらかを空にすると、その方向は未設定(制限なし)になる |
| 利用不可メッセージ | 有効期限外にアクセスしたときに表示されるメッセージ |
| サンクスメッセージ | フォームからの作成が完了したときに表示されるメッセージ |
たとえば、特定の日から公開して終了日は決めない場合は、開始日時だけを設定します。
サーバースクリプト・スクリプトで制御する
フォーム画面でもサーバースクリプトやスクリプトによる制御ができます。フォームかどうかは Controller と Action の値で判別します。サーバースクリプトは少なくとも作成画面で実行されるので、項目の表示・非表示などの制御は十分に行えます。
サーバースクリプト
| 画面・処理 | 条件 | Controller | Action |
|---|---|---|---|
| 作成画面 | WhenloadingSiteSettings | forms | new |
| 作成画面 | BeforeFormula | forms | new |
| 作成画面 | AfterFormula | forms | new |
| 作成画面 | BeforeOpeningPage | forms | new |
| API:作成 | WhenloadingSiteSettings | forms | create |
| API:作成 | WhenViewProcessing | forms | create |
| API:作成 | BeforeFormula | forms | create |
| API:作成 | AfterFormula | forms | create |
| API:作成 | BeforeCreate | forms | create |
| API:作成 | WhenViewProcessing | forms | create |
| API:作成 | WhenloadingRecord | forms | create |
| API:作成 | AfterCreate | forms | create |
| サンクス画面 | WhenloadingSiteSettings | forms | thanks |
| 利用不可画面 | WhenloadingSiteSettings | forms | new |
スクリプト
| 画面 | $p.controller | $p.action |
|---|---|---|
| 作成画面 | forms | undefined |
| 利用不可画面 | forms | undefined |
| サンクス画面 | forms | undefined |
スクリプトでは、いずれの画面でも $p.action は undefined です。参考までに、コード上の値は次のとおりです。
| 画面・処理 | Controller | Action |
|---|---|---|
| 作成画面 | forms | new |
| 利用不可画面 | forms | new |
| サンクス画面 | forms | thanks |
| API:項目作成 | forms | create |
リンク項目の扱い
リンクの親項目には権限制御がかかっているため、匿名ユーザのフォームではリンク項目は表示されません。基本的には選択肢を直接入力することを推奨しますが、リンク先のサイトで 情報公開機能 を使えば、フォームでもリンク項目を使えます。
その他の追加機能
同じバージョンでは、添付ファイル項目の拡張子制御、CSP 機能の拡張、reCAPTCHA 機能なども追加されています。