こんにちは!ミウミウです。
今回は、タイトルの通り、krewDataでユーザー追加をしようとしたら思わぬ落とし穴があったので備忘録的にブログに記載しようと思います。
前段として、krewDataでユーザー追加する際はどうやってフローを組むの?という部分も記載しているので、krewDataで似たような動きにチャレンジしようと思っている方は参考にしていただけると幸いです!
krewData製品サイトはこちら
弊社では初回開発無料の定額39万円でkintoneアプリを開発する定額型開発サービス「システム39」を提供しております。kintoneの導入やアプリ開発でお困りの方は、お気軽にご相談ください。
*Webでの打ち合わせも可能です。
krewDataで自動的にユーザー追加されるフローを組んでみる
そもそもkrewDataでユーザー追加をしたい場合はどのようなフローになるでしょうか。
今回は、案件管理で、「案件ステータス」が「案件完了」になったら請求担当者のユーザー選択フィールドに総務担当のユーザーが入るというシナリオでアプリとkrewDataを設定してみます!
元となる案件管理アプリはこちら。
作成したkrewDataは画像の通りです。
ポイントは、
・ユーザー名を文字列にすること
・カンマで区切ること
の2つとなります!
順番に見ていきましょう!
ユーザー選択フィールドに複数の名前を入れたい場合は、それぞれのユーザー名をカンマで区切って入れる必要があります。
ユーザー選択フィールドのデータ型ではカンマに区切って入力することができないので、一度文字列に変換をかけます。
文字列に変換することで、カンマで区切ってまとめることができます。
データ編集コマンドを利用して、ユーザー名を結合します。
(今回は、特定のユーザー名の追加なのでデータ編集コマンドを利用しましたが、別アプリからユーザー名を取ってくる場合などは、グループ化コマンドを利用しても同じように結合ができます。)
最後に、文字列型に変換した請求担当者のデータを、ユーザー選択フィールド型に戻します。
文字列からユーザーフィールドへ型を変更する際、入力値の種類の選択が必要になるのですが、今回はユーザー名で入力しているので「表示名」を選択します。
入力値の種類でログイン名を選択することも可能なので、場面によって使い分けてくださいね。
また、今回は表示名をカンマで区切っているので、区切り文字は「カンマ」を選択してください。
ユーザーを追加するフローが完成したので、
請求担当者に「田中 美有」が入るか、実際にkrewDataを動かしてみます。
元となるデータはこちら。
一件だけ、案件ステータスが「案件完了」のものがあります。
krewDataを実行してみると…
ちゃんと追加されましたね!
これでkrewDataでのユーザー追加はマスター、かと思いきや1つ注意点があります。
krewDataでユーザー追加する時は同姓同名に注意!
タイトルでも書きましたが、同姓同名のユーザーが同じ環境にいる時は要注意です。
なぜかというと、同姓同名がいる場合は、先程ご紹介した方法だとユーザー名が消えてしまうからなんです。
ユーザー名が消えてしまう?どういうこと?
実際にやってみます!
今回は実験として、「田中 美有」というユーザーを2つ準備しておきます。
2人は全くの別人で、1人は開発部に、もう一人は総務部に所属しているユーザーとします。
先程と同じ案件管理アプリの請求担当に、総務部の田中 美有さんを入れるようにするというシナリオとしようと思います。
一度、このような状態のレコードに対して、先ほど組んだkrewDataを実行してみます。
実行結果は…
総務部の田中 美有は追加されず、元から入っていた開発部の田中 美有も消えてしまいました。
なぜ、このような状態となってしまったのでしょうか。
理由は、複数ユーザーを結合するために一度表示名を文字列に直す、という作業を行ったことにあります。
同姓同名のユーザーでも、ユーザー選択フィールドに入っているうちは、裏で個別のユーザー情報を持っているため別のユーザーとして認識されますが、文字列に直すと、その情報がなくなってしまいます。
裏で持っている個別のユーザー情報がない状態で、ユーザー名だけが文字情報として残るので、区別がつかなくなるんですね。
krewDataでは、このような状態になってしまった場合、フィールドタイプ設定を選択した瞬間に、同姓同名のユーザー名は空白となってしまいます。
krewDataの設定画面にも、「同じ表示名で複数のユーザーが存在する場合は結果が空白となります」と注意書きが書かれています!
「じゃあ、入力値の種類を『ログイン名』にすればいいじゃん」、と思ったそこのあなた。
確かに、ログイン名で判別すれば同姓同名の場合でも区別はできますが、ユーザー選択型を文字列型にデータ変換した時は、ログイン名は取ることはできず、表示名しか取れないため、ログイン名での入力は難しいです。
社員マスタの中にログイン名を持たせておいてアプリ結合させようにも、ユーザー情報として表示名しか取れないので、同姓同名がいる場合は、キー情報が重複してしまい、マスタデータを取ることはできません。
じゃあ、同姓同名がいる環境では、同姓同名のユーザーをkrewDataで扱えないの?ということになりますが、ご安心ください。
別のアプローチで考えましょう!
同姓同名のユーザーがいる場合の対応
ユーザー選択フィールドにユーザー追加する際、表示名が被ってしまった時点でユニークな情報を取得できないので、ユーザー追加が難しいことがわかりました。
表示名が異なれば今まで見てきた現象も起きないので、同じ名前の方がいる場合は、「田中 美有(開発部)」「田中 美有(総務部)」のように区別できる表示名にするという方法が一番シンプルかと思います。
表示名を変えるという方法が一番シンプルですが、運用上表示名を変更するということが難しい場合もあるかと思います。
そう言った場合に使える、別の方法もご紹介しようと思います!
データの扱いは変わってしまいますが、ルックアップ&テーブルを活用した方法となります。
社員マスタに社員情報をまとめ、ルックアップを使ってユーザー名を取得するというものです。
ルックアップでユーザー名を取ってくるようにし、複数ユーザー入るように、テーブルで設定をします。
社員マスタの情報は、案件管理上のルックアップで紐づけて持ってきます。
案件管理の画面は下記のような構成です。
社員マスタは以下のように、一意に紐づく社員番号と社員名、ログイン名を持っておきます。
社員番号S-0001が開発部の田中 美有、S-0002が総務部の田中 美有です。
前述の動きと同じように、案件管理アプリにて、「案件ステータス」フィールドが「案件完了」になった時だけ、総務部の「田中 美有」の行がテーブルに追加される、というkrewDataを組みました。
今回は、ルックアップフィールドにS-0002が固定で1行追加されるというフローです。
社員番号がルックアップフィールドに入るので、ルックアップの機能を利用し、ユーザー名を紐づけて持ってくる、という流れになります。
早速、下記のレコードの「案件ステータス」を「案件終了」にしてkrewDataを実行してみます。
開発部の田中 美有が先に入っている状態でも、総務部の田中 美有が入りました。
1行につき1名、ルックアップで取ってくるようにしたので、同姓同名のユーザーがいた場合でも、複数人問題なく入ります!
表示名には気をつけよう
krewDataでユーザー追加したい場合は、文字列に直して結合する、という箇所がポイントとなります。
これにより、同姓同名のユーザーが存在する環境にてkrewDataでユーザー情報を扱うと、削除されてしまうシーンが発生してしまうことも併せてご紹介しました。
何気なく名前で登録してしまいがちな表示名ですが、krewDataを使っての取り扱いは落とし穴があるので気をつけましょう!
krewDataの活用例もどんどんキントマニアで公開していきますので、次回もお楽しみに。
弊社では初回開発無料の定額39万円でkintoneアプリを開発する定額型開発サービス「システム39」を提供しております。kintoneの導入やアプリ開発でお困りの方は、お気軽にご相談ください。
*Webでの打ち合わせも可能です。