開発者向け機能:サーバスクリプト:context.AddResponse
概要
サーバスクリプトで任意のクライアントレスポンスを返却します。
制限事項
- リンクしたアイテムの作成ボタンでの子レコードの作成後の画面遷移など、method「Href」を指定しても製品側仕様が優先する場合があります。
構文
context.AddResponse(method,target,value)
パラメータ
| パラメータ | 型 | 概要 |
| method | string | レスポンスの操作種別を指定します。下記のmethod部分を参照してください。 |
| target | string | 対象の要素のIDを指定します。 |
| value | object | 要素や値を指定します。 |
メソッド
| 種別 | 説明 |
| ReplaceAll | 上記のtargetに指定した要素をvalueに指定した要素に置き換えます。 |
| Set | フォームに情報を格納します。 |
| Href | ポストバック後の遷移先URLを指定します。 |
戻り値
戻り値はありません。
使用例①
以下の例では、分類Cのフィールドを <div style="color:red">Pleasanter</div> で置き換えます。
context.AddResponse('ReplaceAll','#Results_ClassCField','<div class="field-normal" style="color:red">Pleasanter</div>');
使用例②
以下の例では、フォーム($p.data.MainForm)に以下の情報を格納します。
格納する情報
context.AddResponse('Set','NumA',123);
使用例③
以下の例では、作成後にサイトID1234のテーブルに遷移します。
context.AddResponse('Href','','/items/1234/index');
サンプルコード
1. テーブル内に期限切れレコードが存在した場合、ガイド欄にアナウンスを表示する
ReplaceAllメソッドでガイド欄の文言を動的に置き換えるサンプルコードです。
期限付きテーブルの一覧表示時に、期限切れのレコードを取得、1件でも期限切れレコードがあった場合、ガイド欄の内容をReplaceAllメソッドで置き換えます。
期限切れレコードが存在する場合、以下のようにガイド欄に文言とリンクが表示されます。

注意事項
本サンプルはバージョン1.5.0.0以降に対応しています。
CSS
以下スタイルを設定することで、ガイド欄の文字色を赤にします。
| .md-viewer * {
color: red !important;
}
|
JavaScript
条件:画面表示の前
| // 一覧画面(index)のときだけ動作
if (context.Action !== 'index') return;
// 文字列をHTMLとして差し込むため、最低限のエスケープ
const escapeHtml = (s) =>
String(s ?? '').replace(
/[&<>"']/g,
(c) =>
({
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
})[c],
);
// /items/<id>... の <id> 以降を落として /items/ で終わるURLを作る
const getItemsBaseUrl = () => {
const url = String(context.Url ?? '');
const m = url.match(/^(.*?\/items\/)/);
return m ? m[1] : '';
};
// 期限切れ(Overdue)のレコードを取得
const getOverdueItems = () => {
const param = {
View: { Overdue: true, ColumnSorterHash: { IssueId: 'asc' } },
};
return Array.from(items.Get(context.SiteId, JSON.stringify(param)));
};
// main処理
// 期限切れレコードを取得
const overdueItems = getOverdueItems();
// 期限切れレコードがなければ終了
if (overdueItems.length === 0) return;
// ベースURLを生成
const baseUrl = getItemsBaseUrl();
// 期限切れレコードのリンク一覧HTMLを生成
const linksText = overdueItems
.map((item) => {
const id = item.IssueId;
const title = escapeHtml(item.Title);
return `- ### [${title}](${baseUrl}${id})`;
})
.join('\n');
const guideText = `
[md]
# 期限切れのアイテムがあります。至急確認してください。
## 対象レコード
${linksText}
`;
// ガイドエリア用のHTMLを生成
const html = `
<div id="Guide">
<div>
<markdown-field class="is-disabled">
<textarea class="md-text" id="guide-textarea" data-readonly="1">${guideText}</textarea>
</markdown-field>
</div>
</div>
`;
// ガイドエリア(#Guide)を差し替え
context.AddResponse('ReplaceAll', '#Guide', html);
|
関連情報