Skip to content

URL で既定値を渡す・短縮 URL ​

第4版作成 最終更新 (日本時間)
確認バージョン1.5.8.1

サーバースクリプトの context.QueryStrings を使うと、URL のクエリパラメータをサーバースクリプトで受け取れます。このページでは、これを使って新規作成画面に既定値を渡す方法と、プリザンターの中だけで短縮 URL を実現する方法を説明します。

新規作成画面に URL で既定値を渡す ​

管理画面で設定できる既定値は固定値です。サーバースクリプトで model に値をセットすれば動的に変えられますが、さらにクエリパラメータを組み合わせると、URL で渡した値を既定値にできます。外部システム(たとえば CTI システムから電話番号を渡す)からプリザンターの新規作成画面をポップアップさせるときに便利です。

新規作成画面の URL は http(s)://{IPアドレス or ドメイン}/items/{サイトID}/new です。これにクエリパラメータを付けます。

text
http(s)://{IPアドレス or ドメイン}/items/{サイトID}/new?ClassA=hogehoge

値を受け取る ​

context.QueryStrings.Data('パラメータ名') で値を取得できます。条件は「画面表示の前」です。

javascript
if (context.Action === 'new') {
    var data = context.QueryStrings.Data('ClassA');
    logs.LogInfo(data);
}

実行すると、デバッグウインドウに hogehoge が表示されます。

既定値としてセットする ​

条件は同じく「画面表示の前」です。

javascript
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 が付いているときだけリダイレクトします。

js
let redirect = context.QueryStrings.Data('r');

if(redirect == '1') {
   context.AddResponse('Href','',model.DescriptionA);
}

レコードの編集画面の URL の末尾にパラメータを付けたものが短縮 URL になります。

diff
-https://{IP Address or Host}/items/3642439
+https://{IP Address or Host}/items/3642439?r=1

逆に、パラメータが付いているときだけリダイレクトさせない(通常はリダイレクトする)こともできます。

js
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 機能の設計 を参照してください。

関連ページ ​

変更履歴

第4版外部連携の改修・設計メモ(iCal・RSS/Atom・Webhook 送受信・iPaaS・短縮 URL・POP 受信・マスターデータ同期)を追加
第3版「機能の仕様と使いこなし」を 1.5.8.1 のソースで検証して修正
第2版記事のファイル名に並び順の番号を付け、元記事リンクを frontmatter の sources に移行
第1版「機能の仕様と使いこなし」セクションの記事を追加