ほっぷ、すてっぷ、テーブルヤバい(すてっぷ編)

公開日:

サポートの沖です。前回のほっぷ編はどうだったでしょうか? 見た目を変えるだけでも色々な「やること」があるのと、画面によって動作結果が違うことがわかったと思います。読んでないよって人はこちらをご確認ください。

今回はテーブル行に対してフィールド値の操作を試してみます。テーブルは行の特定が必要なケースが多いため、「アクション」の組み合わせと併せてご確認ください。

画面のカスタマイズ、自動処理(バッチ)、帳票出力といった「kintoneの”できない”を”できる”に」
gusuku Customineがあればkintoneらしさをそのままにkintoneをカスタマイズできます

値が変わった時に同行の別フィールドに値をセット

フィールドの値を編集して値が変わった時」で値が変わった時に「フィールドに値をセットする」でセットします。

この場合は、値が変わった行だけが処理対象になります。値を変えるごとにコピー先に値をセットします。

値が変わった時に全行の別フィールドに値をセット

フィールドの値を編集して値が変わった時」で値が変わった時に「他のアクションの実行が完了した時」でアクションを繋いで「フィールドに値をセットする」でセットします。

アクションを繋いだ場合は値が変わった行の情報はなくなりテーブル全行が対象になります。アクションを繋ぐことで対象が変わるという動きはカスタマインの仕様なのと、かなり重要な動きなので覚えておいてください。

画像に alt 属性が指定されていません。ファイル名: 8a5dc0fe86d1dd10c6518aeae4221da2-1.png

値が変わった時に別アプリにある値をセット

ルックアップでも取得可能ですが、「他のアプリからフィールドの値をコピーする」でも取得可能です。

値が変わった時にコピーしているので対象は値が変わった行だけです。

ボタンを押したら別アプリにある値をセット

値が変わった時ではなくボタンを押した時に「他のアプリからフィールドの値をコピーする」を使用すると、テーブル全行を一度に処理できます。

このような設定だと、以下の画像のように全行にキーに値を入れておけば、それぞれの行の値でレコードを取得してフィールド値を転記できます。

値が変わった時にダイアログを表示して選択した値をセット

先ほどは値と紐づくレコードが1件の想定でしたが、今回は複数レコードが該当するので「条件を組み立ててレコードを取得する」でレコード取得をして「レコードの一覧をポップアップで表示する」でダイアログ表示をして選択するという動きです。先ほどとは逆にコピー先の値からキーの値を取得してみます。

アクションを繋いでいるので選択した値は全行にセットされます。

ダイアログ選択でも特定行だけに値をセットする

ダイアログで選択だと必ずアクションを繋いだ後に値をセットになるので、行を特定する仕組みが必要になります。このような場合は行番号を追加する方法がわかりやすいと思います。今回は若干手抜きですが行追加時だけに「テーブルの列に行番号をセットする」で行番号をセットしています。

この設定だと「フィールド値をまとめてセットする」で値が変わった時にフィールドに値をセットしているので、元になる値は値が変わった行に特定されます。値が変わった時に行番号と検索キーとなる値をテーブル外に保存するので、それ以降のアクションではテーブル外の値を元に動作するという動きになります。

値が変わった時にテーブル内の重複チェック

値が変わった時にキーと行番号をテーブル外に保存しておき、「テーブル中の条件に合う行数をカウントする」でキーと一致する行数をカウントして重複があるかを判定します。カウントが2以上だと重複があるので、その行だけに「フィールドエラーを表示する」でエラー表示します。

値が変わった時にフィールドエラーを表示しているので、このまま保存ボタンを押すと保存できる点に注意が必要です。重複するときはレコード保存をキャンセルする場合は、値が変わったときとは別に「レコードを保存する直前(削除時は除く)」の時も同じ設定を作成してください。

なお、保存をキャンセルするだけなら以下のページの仕組みでも可能です。

テーブル内のフィールドに重複があるかをチェックする

レコードを書き出す

編集画面でテーブルにまとめて行追加したい場合は「レコードをテーブルに書き出す」が使用できます。書き出し時には「既存の行」でクリアするか残すかを選択できます。

レコードを書き出し時に残しておくと最初に空行が残ります。

初回追加でクリアして良いのであれば次の画面のように1行目からの追加になります。

テーブルに書き出し時には常に追加だが空行を削除したい

この場合はいくつかの方法が考えられます。

既存テーブルが空行だけかの判定をして分岐

書き出し時に残すアクションとクリアするアクションの2つを用意しておき、「テーブル中の条件に合う行数をカウントする」でカウントした結果で分岐します。アクションは増えますが処理はシンプルなので、ルックアップや添付ファイルがある場合にオススメです。

書き出し後に空行を削除

書き出しの後に「テーブルから空の行を削除する」で空行を削除します。ただ計算フィールドがある場合は空行と判定されないので、その場合は「テーブルから条件を満たす行を削除する」で削除する方法削除する方法があります。

書き出し後にレコードとして取得してから空欄以外に絞り込んで書き出す

書き出し後に「テーブル行をレコードとして取得する」で取得してから「取得したレコードを絞り込む」で値のあるレコードだけにします。その後に再度書き出すことで空行がなくなります。この場合、空行という条件をかなり柔軟に指定できます。ただ、添付ファイルがある場合は使用できない方法です。

重複を削除したレコード行だけ書き出す

取得したレコードから「レコードから重複を除去する」で重複を削除して、その結果をテーブルに書き出します。

書き出し後に重複を除去する

書き出した結果を重複なしにしたい場合は、上記の設定のような書き出しをした後で「テーブル行をレコードとして取得する」で取得してから「レコードから重複を除去する」で重複除去してから、既存の行はクリアで書き戻します。こうすると行追加後の状態で重複除去になります。

ただ、ルックアップがある場合は再取得が必要なので、レコード保存の直前では実行出来ないという点や、添付ファイルの場合はクリアされてしまうという点にご注意ください。

行コピーボタンを押した時に、コピーされた行の特定フィールドをクリア

行コピーボタンを押すと、その行の全てのフィールド値がコピーされます。ただ、特定のフィールドだけをコピーしたいという場合はコピー時に他のフィールドをクリアするという設定になります。今回はボタンがわかりやすいように左端に移動しています。

行コピー前の状態がこちらです。

行コピーすると以下のようになります。本来は2行目の「コピー先」に1000という値がセットされるはずですが、クリアしているので空欄になっています。

今回の設定も、行コピーした時にクリアというように1つのアクションなので、コピーした1行だけがクリアの対象になります。クリアする条件があってアクションをつなぐ場合は、行番号を設定してテーブル外に転記してから後続アクションを実行するようにしてください。

まとめ

今回は、テーブル内のフィールド値変更だけで終わってしまいました。色々なパターンを紹介しましたが、これだけ覚えてもらえれば大丈夫です。

テーブルに関する重要な点

フィールドの値を編集して値が変わった時」のアクションでは変わった行だけが対象になる。

他のアクションの実行が完了した時」でアクションを繋ぐと変わった行を忘れる。

次回は、なるべく避けたかった他レコードのテーブル更新です。更に添付ファイルがある場合の設定例なども紹介予定です。がんばれ>来月の自分

投稿者プロフィール

アバター画像
"サイボウズ公認kintoneエバンジェリスト
カスタマインやデプロイットでも色々とやってます"