URL で既定値を渡す・短縮 URL
サーバースクリプトの context.QueryStrings を使うと、URL のクエリパラメータをサーバースクリプトで受け取れます。このページでは、これを使って新規作成画面に既定値を渡す方法と、プリザンターの中だけで短縮 URL を実現する方法を説明します。
新規作成画面に URL で既定値を渡す
管理画面で設定できる既定値は固定値です。サーバースクリプトで model に値をセットすれば動的に変えられますが、さらにクエリパラメータを組み合わせると、URL で渡した値を既定値にできます。外部システム(たとえば CTI システムから電話番号を渡す)からプリザンターの新規作成画面をポップアップさせるときに便利です。
新規作成画面の URL は http(s)://{IPアドレス or ドメイン}/items/{サイトID}/new です。これにクエリパラメータを付けます。
http(s)://{IPアドレス or ドメイン}/items/{サイトID}/new?ClassA=hogehoge値を受け取る
context.QueryStrings.Data('パラメータ名') で値を取得できます。条件は「画面表示の前」です。
if (context.Action === 'new') {
var data = context.QueryStrings.Data('ClassA');
logs.LogInfo(data);
}実行すると、デバッグウインドウに hogehoge が表示されます。
既定値としてセットする
条件は同じく「画面表示の前」です。
if (context.Action === 'new') {
var data = context.QueryStrings.Data('ClassA');
if(data) {//クエリの中身があるときだけセットする(=クエリがなければ管理画面でセットした既定値が生きる)
model.ClassA = data;
}
}WARNING
URL エンコードが必要な文字を使う場合は、渡すときにエンコードし、受け取ったときにデコードする必要があります。
非ログイン状態の場合
非ログイン状態でアクセスした場合も動作します。追加したクエリは変更されずにリダイレクトされるため、ログイン画面を挟んでから、既定値を持った状態で新規作成画面が開きます。
短縮 URL を作る
ビューのリンクなどの長い URL を、プリザンターだけで短く扱う方法です。URL を保持する「URL マスタ」サイトを作り、そのレコードを中継して元の URL にリダイレクトさせます。
URL を格納する項目
適当なサイトを作り、ClassA または DescriptionA に URL を格納します。1024 文字以上の URL を扱うかどうかで使い分けます。
- IE の URL の上限は 2083 文字、IE を考慮しない場合でも Safari が 4096 文字です。長い URL を扱うなら説明項目にしておくのがよいでしょう。
サーバースクリプト
条件は「画面表示の前」です。編集画面を開いた途端にリダイレクトされると URL を書き換えられなくなるため、パラメータ r=1 が付いているときだけリダイレクトします。
let redirect = context.QueryStrings.Data('r');
if(redirect == '1') {
context.AddResponse('Href','',model.DescriptionA);
}レコードの編集画面の URL の末尾にパラメータを付けたものが短縮 URL になります。
-https://{IP Address or Host}/items/3642439
+https://{IP Address or Host}/items/3642439?r=1逆に、パラメータが付いているときだけリダイレクトさせない(通常はリダイレクトする)こともできます。
let redirect = context.QueryStrings.Data('r');
if(redirect != '1') {
context.AddResponse('Href','',model.DescriptionA);
}SMS など文字数制限の厳しいツールで URL を配るときに役立ちます。
リンクコピーボタンの URL が長くなる理由
画面右上のリンクコピーボタン(#CopyDirectUrlToClipboard)でコピーされる URL は、現在のクエリ文字列に View パラメータとしてビューの設定を JSON のまま足したものです。gridrows のアクションは index に置き換え、ポート 80 / 443 は省きます(HtmlBreadcrumb.cs)。URL は画面の HTML を作るときにサーバー側で確定して onclick に埋め込まれ(HtmlBreadcrumb.cs)、ブラウザ側は document.execCommand('copy') でコピーして alert を出すだけです(clipboard.js)。フィルタや並び順を多く設定したビューでは数百文字になるので、上の URL マスタに入れて短くすると共有しやすくなります。
このボタンで短縮 URL を自動発行するような機能は本体にありません。本体を改修する場合の設計は 短縮 URL 機能の設計 を参照してください。