関連サブテーブル行一覧プラグイン

関連レコード一覧の参照対象の単位を,「レコード」ではなく「サブテーブル行」にしたような機能を作ってみました.

プラグインファイル

下記からダウンロードしてください.
https://github.com/Atsushi-Eda/related-table-row/raw/master/plugin.zip

利用例

販売主マスタアプリに,関連サブテーブル行一覧プラグインを設置します. 購入管理アプリの購入商品から,販売主IDが一致する行を取得します. 表示は,レコード詳細画面の指定したスペースフィールド内に行います.

フォーム設定

・販売主マスタ

・購入管理

利用例ではルックアップを利用していますが,必要性はありません.

プラグイン設定

space

  • 関連サブテーブル行一覧を表示するスペースフィールド.
  • グループフィールド内のスペースフィールドは選択できません.
  • レコード追加画面,レコード編集画面では表示しません.

app

  • 参照するアプリのID.(半角数字)
  • アプリIDを入力後,searchボタンを押す.

subTable

  • 参照するサブテーブル.

conditions

  • レコードの絞り込み条件式.
  • 複数の場合は,andで評価.

conditions[].targetField

  • 絞り込み条件式に用いる,参照するアプリ内のフィールド.
  • 以下のフィールドタイプのフィールドは選択できません.
    「カテゴリー」,「subTableに指定していないサブテーブル内のフィールド」,「関連レコード内のフィールド」

conditions[].operator

  • 絞り込み条件式に用いる,演算子.
  • conditions[].targetFieldに合わせて選択肢が変わります.

conditions[].selfField

  • 絞り込み条件式に用いる,自アプリ内のフィールド.
  • 以下のフィールドタイプのフィールドは選択できません.
    「subTableに指定していないサブテーブル内のフィールド」,「関連レコード内のフィールド」

shows

  • 表示するフィールド.

shows[].field

  • 表示するフィールド.
  • 「添付ファイル」は画像ファイルの場合も,サムネイル表示しません.
  • 「ユーザー選択」,「組織選択」,「グループ選択」等はアイコンを表示しません.
  • 以下のフィールドタイプのフィールドは選択できません.
    「subTableに指定していないサブテーブル内のフィールド」,「関連レコード内のフィールド」

sorts

  • レコードのソート条件式.

sorts[].field

  • ソート条件式に用いる,参照するアプリ内のフィールド.
  • 以下のフィールドタイプのフィールドは選択できません.
    「作業者」,「カテゴリー」,「文字列 (複数行)」,「リッチエディター」,「チェックボックス」,「複数選択」,「添付ファイル」,「ユーザー選択」,「組織選択」,「グループ選択」,「subTableに指定していないサブテーブル内のフィールド」,「関連レコード内のフィールド」

sorts[].operator

  • ソート条件式に用いる,演算子.

※プラグインに利用しているフィールドの設定に変更があった場合は,プラグイン設定をやり直してください.
※ソート条件は1つ以上設定する必要があります.今後,ソート条件なしでも動作するよう修正する予定です.

API

JavaScriptカスタマイズ用にAPIを用意しております. 関連サブテーブル行一覧と同条件でサブテーブル行の取得が可能です. プラグインJSの読み込み完了後に利用可能です.

relatedTableRowPlugin.getRowsFromSingleReferenceTable(index, record)

アプリ内の指定する1つの関連サブテーブル行一覧と同条件でサブテーブル行を取得します.

引数

返り値

Promiseオブジェクト

relatedTableRowPlugin.getRowsFromAllReferenceTables(record)

アプリ内の全ての関連サブテーブル行一覧と同条件でサブテーブル行を取得します.

引数

返り値

Promiseオブジェクト

APIの利用例

関連サブテーブル行一覧の値を用いて,値段の合計を計算します. 詳細画面の「space2」に表示します.

コード

JavaScriptカスタマイズにて,下記「sample.js」を読み込みます.

・sample.js

(function(){"use strict";kintone.events.on(['app.record.detail.show',],function(event){relatedTableRowPlugin.getRowsFromSingleReferenceTable(0,event.record).then(function(rows){varsumDom=document.createElement('div');sumDom.innerText='値段合計: '+rows.reduce(function(sum,row){returnsum+Number(row.値段.value);},0);kintone.app.record.getSpaceElement('space2').appendChild(sumDom);});});})();

解決方法を検索していたら、このページに辿り着きました。

本ページにリンクのあるプラグインのインストールと、利用例そのままのアプリ構成で試しましたところ、

[space1]枠にサブテーブルの内容が表示されません。
※space2の合計表示は実施してません

現在のキントーンのバージョンでは使用できない状態でしょうか?
または、このページしか見てませんが、ここに記載されていない別なJavaScriptを読み込ませる必要がございますでしょうか?

大変お手数お掛け致しますが、ご回答頂けるとうれしいです。

渡部洋三さん

お世話になっております.
コメント頂きありがとうございます.

確認しましたところ,2021/1/20現在で問題なく利用できました.
別途で必要なJavaScriptなどはございません.

可能でしたら,下記などを参考にコンソール画面にエラーが表示されていないかご確認いただけますか?
動かない?そんな時はデバッグをしてみよう!入門編

江田さん

すいませんでした。解決しました!

原因は、プラグイン側のソートの設定が漏れていて、ソートの設定をしたら表示されるようになりました。
ソートの設定が必須とは知らず大変お手数をお掛け致しました。申し訳ございませんでした。

渡部さん

こちらこそ申し訳ございません.
明記しておくべきでした.

記事の方,修正いたします.

江田さん

この機能は非常に便利です!大変ありがとうございました。
ユーザー側のページ遷移の手間が1つ減るので、作業生産性がぐっと上がります!

渡部さん

そう言って頂けてとても嬉しいです.

利用していて不便な部分や,追加でほしい機能などございましたら,コメント頂けると幸いです.
全てのご要望にはお応えできないとは思いますが.

今後ともよろしくお願いいたします.

関連サブテーブル行一覧プラグインを使用し、データを表示する事は出来たのですが、
その表示したデータを取得する方法はありますでしょうか?

例えば、ボタン押下で、表示されているデータをtxt形式に出力する方法などです。

 

 

kintone_TS44さん

返信が遅くなり、申し訳ございません。

APIの利用例と同様に、relatedTableRowPlugin.getRowsFromSingleReferenceTable()で取得できます。

取得結果(sample.jsで言うところのrows)は配列なので、JSON.stringify()などで文字列にすると良いです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

txtファイル出力については、下記などが参考になるかと思います。
https://techacademy.jp/magazine/28206

別スレッドよりこちら紹介していただき無事機能させる事できました。

ひとつ要望なのですが、表示させる条件を追加出来るとよりありがたいかなと思いました。

例えばですが、参照先日付フィールド<>””(空でない場合)

関連サブテーブル行一覧の値を用いて値段の合計を計算する際、スペースフィールドではなく、数値または文字列に合計値を表示することは可能でしょうか?

吉岡千晶さん

お世話になっております。

JavaScriptカスタマイズにて可能です。

レコード追加や編集画面の保存実行前イベントで、eventオブジェクトのrecordプロパティを書き換えてreturnすれば、レコードに反映されます。
https://developer.cybozu.io/hc/ja/articles/201941984#step2

relatedTableRowPlugin.getRowsFromSingleReferenceTable()は非同期処理となるので、下記などを参考にすると良いと思います。
https://developer.cybozu.io/hc/ja/articles/360023047852

江田様

早速回答頂きましてありがとうございます。

案内頂きましたURLを参考に作成したいと思います。

初心者なので、また分からない事があれば質問させていただければと思いますので、よろしくお願いします。

sample.jsで行っている、値段合計の算出方法を他のフィールドに表示したい場合、どの様なコードになるでしょうか。
ご教示頂ければ幸いです。

「(n対n対応)のリレーション」が、「別アプリのsubtableの中をlookupする」でも実現できると判り、このプラグインにたどり着きました。

でも、subtableを転記したフィールドの表示が、詳細画面表示開始後1秒後位の遅さだったので、ブラウザの通信記録を観ましたら、下記の様な内訳でした。

・GET app.jsonで、278 ms
・GET fields.jsonで、409 ms
・POST cursor.jsonで、371 ms ここまで、1058ms

・GET cursor.json?idで、783ms + 986ms + 629ms + 296ms=2694ms

この内のターゲット・アプリの全レコードを読み込む2694msは、subtable内の値で絞り込む機能が無いので、約4秒かかるのは、止むをえないのでしょうね。
subtableの外側に 何か絞り込みできそうなキー項目を設ければ、約1秒まで 短縮できそうなのですが、今 しかかっている案件では、そうゆうキー項目も見当たりません。

でも、Kintone Rest API呼び出しの内、 app.jsonと fields.jsonとは、”アプリ管理”権限まで必要そうなAPIですので、実行段階での呼び出しを止め、"設定"段階に呼び出すように、していただくことは出来ませんでしょうか?
内部統制に従って、複数担当で使うあるアプリの場合、”アプリ管理”権限を持ってKintoneの"設定"画面に触れる人は、絞りたいものです。

江田さま

スペースフィールドに表示される件数を取得(表示)する事は可能ですか?

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。