こんにちは、株式会社シーイーシーカスタマサービスの田中です。
いつもは自社のブログで記事を書いていますが、今回はQiitaに直接投稿させていただきました。
ぜひ弊社のプリザンターブログもご覧下さい。
今回は、私が実装したいと思っていたことで、少し悩んでいた「サーバスクリプトを自由なタイミングで動かしたい」の方法について書きたいと思います。
サーバスクリプトの一覧画面での発火
サーバスクリプトは、発火するタイミング(条件)が「作成・更新前/後」や「画面表示の前」など決まったものしかなく、自分が発火させたいタイミングでの設定ができません。
しかし、プロセスなどと併用することで、プロセスで設置したボタンをクリックすることでサーバスクリプトを発火させることは可能です。
こちらの詳細はCCSブログ「第255回)ボタンでサーバスクリプトを発火させる」をご覧ください。
ただ、この方法ですとプロセス機能を使用しているため、新規作成画面か編集画面でしかボタンを設置できず、一覧画面からサーバスクリプトが発火できません。単に一覧画面にボタンを設置することはできますし、そのボタンのIDを拾うことは可能ですが、ちょっと工夫が必要なため備忘録を兼ねて紹介します。
スクリプト・サーバスクリプトの説明
今回サンプルとして、何でもよいので記録テーブルを作成し、そこにスクリプトでボタンを設置、サーバスクリプトでそのボタンクリック後の処理をさせます。
サンプルのためサーバスクリプトではログ出力のみ行います。
まずは、以下のスクリプトを追加します。
出力先は、「一覧」のみを選択してください。
$p.events.on_grid_load = function () {
$("#MainCommands").append(
$('<button id="button-exe" class="button button-icon button-positive ui-button ui-corner-all ui-widget applied" data-action="GridRows" data-method="post" onclick="$p.send($(this));">')
.html('<span class="ui-icon ui-icon-play"></span>実行')
);
};
上記は、一覧画面を表示したときに実行される \$p.events.on_grid_load を使って、MainCommands領域(「戻る」や「作成」ボタンが表示される領域)にボタンを追加しています。
3行目の最後にある onclick=\$p.send($(this)) とすることで、ポストバックさせています。
4行目では、UIアイコンを追加しています。
次に、上記のボタンをクリックしたときのサーバスクリプトを作成します。
条件は、「画面表示の前」としてください。
try {
// 実行ボタンが押された時の処理
if (context.ControlId === 'button-exe') {
context.Log ('ボタンが押されました。')
}else{
// アラート出力
context.Error ('エラー')
}
} catch (ex) {
context.Log(ex.stack);
}
一覧画面を表示すると、一覧画面の下に「実行」ボタンが表示されます。
「実行」ボタンをクリックすると、コンソールに「ボタンが押されました。」と表示されます。※コンソールは、F12キーを押下するなどして表示させてください。
まとめ
いかがでしたでしょうか?
スクリプトで処理をさせると、処理に時間がかかる場合に、処理途中で画面リフレッシュによりスクリプトが中断されてしまうことがあります。また処理自体に遅かったりする場合があります。そのため、スクリプトではなくサーバスクリプトで処理することで、そのような心配がなくなります。
ただし、注意事項としては、サーバ側で処理されるためサーバに負荷がかかりますし、エラー時にはサーバ全体に影響が出ることもあるため、慎重に使用されるようにしてください。