スクリプトからサーバスクリプトへの値の受け渡し方法
まずはテーブルを作成します。ここでは「記録テーブル」の編集画面上に、「タイトル」「内容」「状況」「担当者」を表示しておきます。
今回の説明では、「タイトル」と「内容」に入力された値をコピーするように設定します。
コピーの設定を行う前に、レコードを1つ作っておきましょう。コピーしたことが分かるように「タイトル」と「内容」には任意の値を、「状況」と「担当者」は既定値と異なる値を登録します。
テーブルの管理から、「プロセス」をクリックします。プロセスでは、スクリプトを実行するためのボタンを設置します。
1.新規作成ボタンをクリックし、任意の名称を記入します。(例:コピー数入力)
2.画面種別は「編集」、現在の状況と変更後の状況は「*」を設定します。
3.OnClickには「$p.ex.inputCases();」と記入します。この関数は、後に設定するスクリプトの関数となります。
ここで作成したプロセスのIDをメモしておいてください。
次に、「スクリプト」を設定します。
任意のタイトルを記入し、出力先は「編集」を設定します。スクリプトは以下となります。
// プロセス OnClick に記入した関数
$p.ex.inputCases = function() {
const cases = prompt('コピーする数を入力してください。');
if (cases) { // 入力があれば処理を実行。入力無し、キャンセルボタン押下時は処理をしない
initializeFormData(cases);
sendFormData();
}
}
// フォームデータの初期化
function initializeFormData(cases) {
// MainForm = 編集画面でサーバへ値を送るためのメモリ空間
if ($p.data.MainForm === undefined) {
$p.data.MainForm = {};
}
// MainForm の後には任意の変数を設定。他の変数と重複しないよう注意が必要
$p.data.MainForm.myCases = cases;
$p.data.MainForm.myTitle = $p.getControl('Title').val();
$p.data.MainForm.myBody = $p.getControl('Body').val();
}
// 追加したプロセスの実行をサーバに送信
function sendFormData() {
$p.send($('#Process_1'));
}
スクリプトを設定したら、最後に「サーバスクリプト」を設定します。
任意のタイトルを記入し、条件は「画面表示の前」を設定します。スクリプトは以下となります。
if (context.ControlId === 'Process_1') {
if (context.Forms.ContainsKey('myCases')) {
processItems();
}
model.UpdateOnExit = true;
}
// アイテムの処理
function processItems() {
let siteId = context.SiteId;
let myCases = parseInt(context.Forms.Item.get('myCases'));
let myTitle = context.Forms.Item.get('myTitle');
let myBody = context.Forms.Item.get('myBody');
if (isNaN(myCases) || myCases < 1) {
context.Log('無効な数値が入力されました: ' + myCases);
return;
}
for (let i = 0; i < myCases; i++) {
createItem(siteId, myTitle, myBody, i);
}
}
// アイテムの作成とエラーハンドリング
function createItem(siteId, title, body, index) {
try {
// 期限付きテーブルの場合は「items.NewIssue()」
let item = items.NewResult();
item.Title = title + (index + 1); // タイトルに番号を追加
item.Body = body;
items.Create(siteId, item);
context.Log('Created item ID: ' + item.ResultId);
} catch (error) {
context.Log('エラーが発生しました: ' + error.message);
}
}
プロセス、スクリプト、サーバスクリプトの設定が完了したら、登録しておいたレコードの編集画面を開きます。
画面下部に、プロセスで設定したボタンが表示されています。
ボタンをクリックすると、ブラウザ上にダイアログが表示されます。
コピー数を入力後に「OK」をクリックすると、コピー元のレコードが更新され、コピー数分レコードがコピー作成されていることが確認できます。
まとめ
いかがでしたか?
このように プリなま では皆様のお悩み解決、また、もっと便利に活用するためのノウハウが YouTube配信 で確認することができます。
チャンネル登録して過去の配信も含めて視聴し、ぜひご活用ください。
弊社ではプリザンターをご使用中、または、これからご使用になられる方向けに、運用ノウハウ集、プリザンター逆引き辞典、スタイル・スクリプトサンプル集の販売を行っております。
また、 プリザンターからのExcel帳票出力・PDF帳票出力の支援パック販売 も行っております。
プリザンター導入の支援や、スクリプト開発などの支援も行っておりますので、まずは気軽にご相談ください。
※ご相談の内容によっては有料となる場合がございます。予めご了承ください。
☆☆☆
ブログ内容への質問や追加説明をご希望の方は【 問い合わせフォーム 】からお気軽にお問い合わせください
☆☆☆
スクリプト、サーバスクリプトをもっと便利に使う
こんにちは、シーイーシーカスタマサービスの森山です。
年間サポートをご契約のお客様より、こんなお問合せをいただきました。
プリザンターにあるコピーボタンでレコードのコピーをすることはできるが、1つずつしかコピーできない。
コピー数を指定して、コピーすることはできないか?
さて、皆様はどんな実現方法を想像されたでしょうか?
実現方法の一つとして、以下の実装が想像されます。
①コピーしたいレコード画面にボタンを設置
②設置したボタンをクリックすると、コピー数を入力するダイアログを表示
③ダイアログに入力したコピー数で、レコードをコピー
①②はスクリプトで実現できます。
③については、コピーする項目の値とコピー数が取得できれば、サーバスクリプトで実現することができます。
2024年8月配信「プリザンターお悩み解決生配信 プリなま #17」の中で紹介された「スクリプトからサーバスクリプトへの値の受け渡し方法」を使うことで、この①~③を実現することができるのです。
そこで今回は、プリなまで紹介された内容を使って、レコードを指定数コピーする方法をご紹介します。