kintone関数活用例:テーブル各行の状態をまとめる(CONTAINS関数を理解する)
みなさんこんにちは。サイボウズ公認 kintoneエバンジェリスト、プロジェクト・アスノートの松田です。
2020年はkintoneの新しい機能「関数」が矢継ぎ早に登場し、kintoneの関数界隈がこれまでにない盛り上がりをみせた一年でした。
そんな1年の締めとして、2020年12月に「CONTAINS関数」がリリースされました!
この記事では、kintone関数の活用例として、CONTAINS関数と他の関数を組み合わせて、アプリのテーブルの各行の状態をまとめて状況表示させる、というサンプルを作っていきながら、kintone関数を理解していきましょう。
CONTAINS関数とは
CONTAINS(フィールドコード, 選択肢名)
「フィールドコード」で指定されたフィールドで、「選択肢名」で指定された選択肢が選択されている場合は真を返し、そうでない場合は偽を返します。
CONTAINS関数のヘルプの記載には、「真または偽を返す」と書いてあります。
この表現がある場合、この関数は何かを評価してその結果をYes/Noで返してくれる機能を持った関数ということがわかります。
単体で使うこともできなくはありません(true/falseを返す)が、ほとんどの場合はIF関数と組み合わせて使うことになります。
さて、ここで「CONTAINS」という英単語の意味を調べておきましょう。Googleの検索で「CONTAINS」と入力して検索するのが一番簡単です。
CONTAINS: 含む
という意味でした。最後のSは三単現(三人称・単数・現在)のSですね!
CONTAINというのは、〇〇を含むという動詞になります。
すなわち、CONTAINS関数はある対象に何かが含まれているかどうか?を評価してくれる、という関数なのです。
そして「含まれるかどうか?」を評価するということは、その対象は複数個であると予想がつきますね。
そう、kintoneアプリのフィールドで、複数個の値を取りうるもの、チェックボックスと複数選択 がこの対象となります。
何がどんなデータの型になっているのか?についてはヘルプの次のトピックが参考になりますので、チェックしておきましょう。
CONTAINS関数はこの中の「配列文字列型」が対象となります。
もう1つ複数個の値を持ちうるものがあります。それはテーブルの中に配置されたフィールドです。
SUM関数は、その中で指定された複数個の値の合計を計算する関数ですが、テーブル内のフィールドを指定して合計を求めるためにも使用することができますね。
ヘルプでもテーブルの計算に使用する関数としてCONTAINS関数とSUM関数が同列に扱われています
(ヘルプ:[SUM、CONTAINS関数]テーブルの計算)
CONTAINS関数も、テーブル内のフィールドを指定して、その中に指定した値があるかどうか?を評価することができます。
今回のお題
案件ごとのタスク管理を行うようなアプリを想定します。
アプリの1レコードで取り扱うデータの単位は1つの案件とします。案件名と担当者を登録します。
フォームにはテーブルがあり、その案件で行うべきタスクが登録されます。
テーブルの各行には各タスクが終わったかどうかを記録するためのドロップダウン:タスクの状態 があります。
これを確認することで、各案件の状況を把握することができます。
ここで一覧画面を見てみましょう。
アプリの一覧画面においては、各レコードのテーブルの情報は1つずつ開いて参照することができます。
しかし、案件ごとにテーブルのデータを開いて確認するのではなく、一覧画面のままで案件の状況を知りたいですよね。
お題
テーブルの中のタスクの状況を、一覧でも確認したい。
解決策
今回やってみる解決策は、
テーブル内のタスク状況をまとめて表すデータをテーブルの外に持たせる
一覧に表示するためには、テーブル内ではなくテーブルの外のフィールドにデータを持ってやる必要があります。
そこで次のような構成を作ってみることにしましょう。
テーブルの外に、1つ文字列(1行)フィールドを追加して、「全体判定」という名前をつけました。ここにテーブル内のタスクの状況を反映させるようにしたい、ということです。
ここで先ほど紹介した「CONTAINS関数」の定義を思い出してみましょう。
ある複数の値の中に目的の値が存在するかどうか?を評価する。
ですね。
今回設定した「タスクの状態」(ドロップダウン)の選択肢は、次の3つとなります。
- 未着手
- 対応中
- 完了
- (未選択)
未選択を含むと4つの状態が存在します。
1つのドロップダウンフィールドは1つしか選択できないため、データの型は「文字列型」となります。
ただし、テーブルの外からテーブルの中にある「文字列型」フィールドを見たときのデータ型は「配列文字列型」となりますので、CONTAINS関数を利用することができます。
今回作りたいのは、案件全体の状況を示す「全体判定」フィールドです。テーブル内のタスクの状態を評価して、全て完了になったのか、まだ未完了なのか?という2通りの結果を表示させるように考えてみましょう。
テーブルのタスクの状態がすべて「完了」になっている場合は、全体判定は「すべて完了」となります。
CONTAINS関数は「存在する」ことを判定できる関数ですから、すべてのタスク(行)が完了であるということを判定しようとするとちょっと工夫が必要になります。
テーブルの行の中に「完了」を含むか?
ではだめですね。じゃぁどうするか。
「すべて完了」を表す条件
- 「未着手」を含まない かつ
- 「対応中」を含まない かつ
- (未選択)を含まない
上記の条件を満たしたとき「すべて完了」を表示。
それ以外のときは「未完了」を表示。
条件の設定については、逆から考える方法もあります。
「未完了」を表す条件
- 「未着手」を含む または
- 「対応中」を含む または
- (未選択)を含む
上記の条件を満たしたとき「すべて完了」を表示。
それ以外のときは「未完了」を表示。
これを関数を用いて計算式に表現していきましょう。
「未着手」を含む、「対応中」を含む、(未選択)を含むについては、CONTAINS関数を用いて次のように書くことができます。
- CONTAINS(タスクの状態, “未着手”)
- CONTAINS(タスクの状態, “対応中”)
- CONTAINS(タスクの状態, “”)
この3つの条件のどれか1つが成立するか?を判定するので、OR関数を使います。
OR(
CONTAINS(タスクの状態, "未着手"),
CONTAINS(タスクの状態, "対応中"),
CONTAINS(タスクの状態, "")
)
AND関数の結果は真(true)または偽(false)で得られますから、これをIF関数の条件式に使います。
IF(
OR(
CONTAINS(タスクの状態, "未着手"),
CONTAINS(タスクの状態, "対応中"),
CONTAINS(タスクの状態, "")
),
"未完了",
"すべて完了"
)
IF関数の条件に設定した条件が成立する場合(すなわち未完了のステータスが存在する場合)は「未完了」。成立しない場合は「すべて完了」を表示させる、という計算式を設定しました。
アプリに設定してみよう
それでは上で考えた計算式をアプリに設定してみましょう。
先ほど追加した文字列(1行)フィールドに、以下のような設定を行いました。
フォームを保存し、アプリを更新して、さっそく動かして確認してみましょう。
テーブル内のドロップダウンを変更したときの動きは、想定通りになっていました。
これで一覧画面に表示することができるようになりましたね!
まとめ
今回は、CONTAINS関数を使ってテーブル内のフィールドの状態を評価し、テーブル外のフィールドに結果を表示させることによって、テーブル内の状況を一覧画面でも確認できるようにする、という機能を作ってみました。
kintoneの関数を勉強する際は、その関数の持つ本質的な機能をよく理解することで、さまざまな用途に応用することができるようになります。ぜひみなさんの持っている課題が関数を活用することで解決しないか、いろいろと検証してみてください。
kintone導入・活用のご相談はこちら!
◇ kintone導入がなかなか進まない
◇ アプリが思ったような動きをしてくれない・・・
◇ カスタマイズやプラグインをどう選んだらいいの??
◇ 業務改善の進め方がよくわからない
サイボウズ公認 kintone エバンジェリストの 松田正太郎があなたの相談相手になります。
保有しているkintone認定資格:
・kintone認定アソシエイト(2017)
・kintone認定アプリデザインスペシャリスト(2017)
・kintone認定カスタマイズスペシャリスト(2020)
★業務改善アドバイス、kintone構築支援
★連携サービス・プラグイン選定支援、カスタマイズ
★詳細ヒアリングの上、御社に最適なプランを提案します
★初回打合せ(2時間程度)は無料。まずはお問い合わせください!(WebミーティングOK)