公開日:
サポートの沖です。ついにヤバい編まで続いてしまいました。
これまでのシリーズでは、ほっぷ編では主に見た目の変化などを紹介しています。
すてっぷ編では行指定のフィールド値変更などを紹介していました。
上記のブログでは主に編集画面での一般的な動きだったので、今回は編集画面で特殊なケースと、別レコードのテーブル操作を取り上げてみたいと思います。他レコードの操作は「やること」を組み合わせて作成する事が多いのと、画面に表示されていないものを操作するという動作になりイメージしにくいという点にご注意ください。
カスタマインの利用についてはこちらをご確認ください。


編集画面の特殊ケース
CSVを読み込む枠でテーブルに読み込む
テーブルに追加する元になるレコードがなく、CSVがあるような場合は「テーブルデータをCSVから読み込むための枠を作成する」でテーブルに直接追加が可能です。

ただ、インポートするCSVファイルの仕様と合っていない場合は追加できません。ドキュメント内のCSVファイルの記述方法を確認してお試しください。
QRコードを読み込んでテーブルにセット
以下のページにに記載のように、QRコードでJSON文字列を読み込むことも可能です。読み込んだ内容をフィールドにセットも出来ますし、例にもあるように配列も作成できるので、テーブル内の値も指定する事が可能です。

使いこなすと強力な仕組みですので、ページの内容を実際に試していただくのが良いと思います。
他レコードのテーブル更新
キーで紐づいている別レコードのテーブルを上書き更新する
関連レコードを表示していて、関連レコードの内容をテーブルに転記しておくようなケースを考えてみます。
編集画面で更新であれば「関連レコード一覧の条件でレコードを取得する」と「レコードをテーブルに書き出す」で可能ですが、毎回編集画面を表示する必要があるので更新が遅れがちになります。
この場合に関連レコードで表示しているレコードの方を保存した時に、テーブルを更新するという動きにすると常に最新の状態になります。設定例は以下のページをご確認ください。
別アプリのレコードに書き出されたテーブルを、常に同期を取る方法
キーで紐づいている別レコードのテーブルの特定行のフィールドだけを更新する
テーブル全行を上書き更新ではなく、テーブル内のフィールド値と紐づいている行を更新対象とする場合です。日付で特定して数値を更新というようなイメージになります。設定例は以下のページをご確認ください。
複数テーブル全てを、キーで紐づいている別レコードへコピーする
レコード内に複数テーブルがある場合はそれぞれのテーブル毎に更新処理が必要です。
コピーがレコード追加だけであれば次のページのように「テーブルデータをセットしたレコードを追加する」を使うことでアクションを減らすことも可能です。
追加と更新がある場合は「レコードを更新または追加する(キーの値をフィールドで指定)」などでupsertをした上で「レコードを指定アプリのテーブルに書き出す」としておくと、既存レコードがあるかどうかの分岐がなくなり処理がシンプルになります。
テーブルに添付ファイルフィールドがある場合
kintoneの添付ファイルは特殊な仕組みなので、他のフィールドと違って単純に値をコピーすることはできません。

例えば上記のような設定で動作を試すと、以下のようなエラーになります。これは「レコードを指定アプリのテーブルに書き出す」は既存テーブルの値を更新するのではなく、上書きや追記で更新になるからです。

この結果は「テーブル付きでレコードを書き出す」を使った場合でも同じです。
このような場合はJob Runnerを使うと更新可能になります。例えば以下のような設定だとコピー先に日時文字列を設定できて、そのフィールド以外の値はそのままです。

結果はこちら。

Job Runnerの場合は取得したレコードのデータをベースに更新するので、更新データとしてはidが付いた状態で更新になります。こうするとテーブル行としては保持したままの更新なので添付ファイルもそのままです。
こちらが、詳細画面のコンソールログで、kintone.app.record.get()をした内容です。

こちらが、Job Runnerを実行時に出力されている更新データです。

と、せっかくなので、ネタに全振りしてみました。テーブル行と添付ファイルについて語り合える方を募集しておりますので、是非お声がけください(笑)
テーブルにルックアップフィールドがある場合
先ほどのJob Runnerの設定ではマッピングは「コピー先」のみの指定でした。しかしルックアップで取得済みの行があると、セットしていないのに再取得処理が実行されます。これはkintoneの仕様なので回避することはできません。
ルックアップの更新といえばよくある話ですが、元になるフィールドに重複禁止の設定をしていないとエラーになります。対応方法としては、別アプリにある元になるフィールドに重複禁止を設定するようにしてください。と、ルックアップの仕様について語り合える方を募集(以下略w
関連レコードとテーブルの違い
テーブルと似ているものに関連レコードがあります。テーブルはレコード内にフィールド値がありますが、関連レコードはフィールド値は表示しているだけで値はありません。そのため、kintoneの計算フィールドでテーブル行を集計をする場合は、テーブルは計算対象ですが関連レコードは対象外となります。
ただ、カスタマインなら関連レコードの集計が可能で、「関連レコード一覧の条件でレコードを取得する」で対象レコードを取得して、「レコード中のフィールド合計値を計算する」で合計できます。便利。
行数が0になるケース
画面操作ではテーブルを0行にすることは出来ませんが、「レコードを追加する」だと自動的に0行になります。詳細画面で0行だとkintoneのSUM関数でエラーになるので、「テーブルデータをセットしたレコードを追加する」で追加するようにしてください。この時の「テーブルの元になるレコード」にはダミーで1レコード取得して指定してください。値は空欄で良いと思いますので、取得方法はなんでも大丈夫です。
なお、そのレコードで編集画面を表示した時に、自動的にkintoneが行追加して1行になります。
レコード保存の直前で並べ替え時の制約
重要なので、色々なタイミングで書いておきましょう。
「テーブルの行を並べ替える」や「フィールドに値をセットする」は「レコードを保存する直前(削除時は除く)」の時に利用可能です。しかしテーブルにルックアップがある場合は、kintoneの制約によりエラーになります。編集画面を表示した時や保存した時に出来ること・できない事、についてはサイボウズさんのページが参考になりますのでご確認ください。
https://cybozu.dev/ja/kintone/docs/js-api/events/event-object-actions/#record-edit-events
このような場合は「レコードを保存した直後(削除後は除く)」に「レコードを指定アプリのテーブルに書き出す」とすることでルックアップがあってもテーブルを更新可能です。「テーブル行をレコードとして取得する」で取得した後に「レコードを並べ替える」とするなど、様々な処理も可能です。
まとめ
テーブルの使い方に関してはまだまだ色々な切り口があります。テーブル行を別アプリのレコードと同期という仕組みの場合は、別アプリ側がレコードになっているので更に活用可能になります。
とは言え、なるべくシンプルな使い方をおすすめしたいところです。このブログと矛盾しますが、出来ることを把握した上で選択しないという考え方もあります。アプリ構成とも関連しますので、注意深く設定するようにお願いします。
投稿者プロフィール

-
"サイボウズ公認kintoneエバンジェリスト
カスタマインやデプロイットでも色々とやってます"
最新の投稿
gusuku2025年10月20日ほっぷ、すてっぷ、テーブルヤバい(ヤバい編)
kintone2025年9月26日デプロイット実践編6「関連レコードとルックアップの配布 相互参照編」
kintone2025年9月5日ほっぷ、すてっぷ、テーブルヤバい(すてっぷ編)
kintone2025年8月22日デプロイット実践編5「関連レコードとルックアップの配布」