コンテンツにスキップ
「プリザンター入門」発売中!

親テーブルの項目の値を子テーブルの項目に転記したい

回答

スクリプトを使用します。
NET Framweork版 0.50.251 以降、.NET Core版 1.1.27 以降のバージョンではルックアップ機能で実現できます。


概要

リンク機能で親子関係を結んでいるテーブルにおいて、親テーブルで入力された項目の値を子テーブルの項目に転記します。
例として、[Aテーブル(親)] [Bテーブル(子)]の時、Bテーブルの「分類A」をリンク項目として、Bテーブルの「分類B」にAテーブルの「分類A」の値をセットする場合のサンプルコードを以下に記載します。(この例では、Bテーブルにスクリプトを設定します)
プリザンターでは$p.apiGetを使用すると、レコードIDを指定するだけでajaxのPOSTリクエストによる値の取得が可能です。
※バージョン1.3.12.0以前をお使いの場合は、一部の記述内容が異なります。サンプルコード内のコメントを確認してください。

操作方法

  1. スクリプトを設定したいテーブルを選択してレコード一覧画面を表示する
  2. ナビゲーションメニューより[管理]-[テーブルの管理]を選択し、テーブルの管理画面を表示する
  3. [スクリプト]タブを選択後「新規作成」ボタンを押下し、スクリプトの設定を行う
  4. タイトルスクリプトを記述したら、「出力先」で"新規作成","編集"にチェックを付ける
    ※[ダイアログで編集]の設定をしている場合、"一覧"にもチェックが必要です

サンプルコード

JavaScript
//編集画面読込時のイベント
$p.events.on_editor_load = function () {
    getParentData();
}

//Bテーブルの「分類A」の値が変更されるたびに呼び出されるイベント
$(document).on('change', '#' + $p.getControl('ClassA')[0].id, function () {
    getParentData();
});

getParentData = function() {
    //Bテーブルの「分類A」に値がセットされている場合のみ、Aテーブルの指定したレコードの値を取得する
    if ($p.getControl('ClassA').val()) {
        $p.apiGet({
            //Bテーブルの「分類A」の値(レコードID)を指定
            'id': $p.getControl('ClassA').val(),
            'done': function (data) {
                //Bテーブルの「分類B」にAテーブルから取得した「分類A」の値をセット
                //※バージョン1.3.12.0以前をお使いの場合は、以下のコメント行の行頭にある//を外し、その次の行を削除してください。
                //$p.set($p.getControl('ClassB'), data.Response.Data[0].ClassA);
                $p.set($p.getControl('ClassB'), data.Response.Data[0].ClassHash.ClassA);
            },
            'fail': function (data) {
                console.log(data);
            }
        });
    } else {
        //Bテーブルの「分類A」に値がセットされていない場合、Bテーブルの「分類B」に空文字をセット
        $p.set($p.getControl('ClassB'), '');
    }
}

関連情報