ユーザー選択で選択した特定のユーザーのみにフィールドグループを表示非表示の設定をしたいです。

探してみましたが見つけられなかったのでご質問です。

フォーム作成時に特定のユーザーにだけフィールドやグループを表示させたいです。

複数選択やラジオボタンなどに関しては記述があるのですが、ユーザー選択でやりたいと考えています。

よろしくお願いいたします。

ku さん、こんにちは。

 

>複数選択やラジオボタンなどに関しては記述があるのですが、

こちらの記事は見つけていらっしゃるということでしょうか?
であれば、複数選択やラジオボタンを使っている箇所を、ユーザー選択フィールドの書き方に変更すれば良いかと思います。

それぞれのフィールドの値の持ち方は、フィールド形式 というドキュメントに載っているので見比べてみてください。

ユーザーフィールドの値を利用した処理は、下記の記事が参考になりそうです。

 

フィールド形式」のユーザー選択フィールドのところを見ていただくと分かるのですが、
ユーザー選択フィールドの場合、value(値)の中に code(ログイン名)と name(表示名)があります。
ログインユーザーが担当している~」のTipsではnameを使っていますが、
表示名は変わる可能性がある(codeはめったに変えない)という運用の場合は
nameではなくcodeを利用して判定する処理にした方が良いと思います。

 

参考になりましたでしょうか?

たまご様

ご回答誠にありがとうございます。

複数選択やラジオボタンの記事は見つけていて、試しにやってみて確認しました。

フィールド形式と背景色の件ありがとうございます。

本日試してみます、また結果報告いたします。

よろしくお願いいたします。

たまご様

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

色々試してみたのですが、実装できませんでした。

ログインユーザーは関係ないのですが、最初の段階でグループは非表示という設定で考えています。
追加、編集、詳細画面が表示された段階ではグループフィールドは非表示にしたいです。
それからユーザー選択を行った際に特定のユーザーのみグループが表示される設定にしたいと考えています。
指定した特定のIDですとグループが表示される、その他のIDを選択するとそのまま表示されないというイメージです。

よろしくお願いします。

グループフィールドの非表示ができないということでしょうか?

kintone.app.record.setFieldShown('グループフィールドコード', false);

ではだめでしたっけ?

 

どこがうまくいかなかったのか、わからないのか、書いていただければわかる範囲でアドバイスできるかもしれません。

たまご様

ありがとうございます。

参考にさせていただいた他サイトのコードですが記載してもよろしいのでしょうか?

ご回答いただけましたら明日アップいたします。

よろしくお願いします。

> 参考にさせていただいた他サイトのコードですが記載してもよろしいのでしょうか?
そのサイトのコード公開ポリシーによると思います。。。

ただ、先ほど一度投稿いただいたコメントで通知メールがきていたので回答しちゃいます。
最初のコメントで紹介した、フィールド形式の「複数選択」と「ユーザー選択」を見比べてください。

複数選択

"<フィールドコード>": {
    "type": "MULTI_SELECT",
    "value": [
        "選択肢1",
        "選択肢2"
    ]
}

ユーザー選択

"<フィールドコード>": {
    "type": "USER_SELECT",
    "value": [
        {
            "code": "sato",
            "name": "Noboru Sato"
        },
        {
            "code": "kato",
            "name": "Misaki Kato"
        }
    ]
}

 

複数選択の場合は

event.record['フィールドコード'].value;

["選択肢1", "選択肢2"]

が取得できますが、ユーザー選択の場合

[{ "code": "sato", "name": "Noboru Sato" }, { "code": "kato", "name": "Misaki Kato" }]

が返ってきます。

今回はこの中からcodeだけ使うので、codeの中身だけ取り出した配列をつくります。
ループ処理で配列に追加していってもいいですが、map使うと良いですね。
https://www.sejuku.net/blog/21812

こんな感じで書けます。

array1 = event.record['フィールドコード'].value;
var array2 = array1.map(function(value){return value.code});

 

配列さえできれば、あとは複数選択のときと一緒ですね。

配列の中身に特定の値が含まれるかのチェックは、indexOfのほうが扱いやすいと思います。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

 

こちらでいかがでしょうか?

たまご様

ありがとうございます。

試してみてまたご報告致します。

よろしくお願いします。

たまご様

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

なかなか時間が取れず遅くなってしまいました。

参考にしていたのは下記になります。

よろしくお願いします。

 

(function(){'use strict';varevents1=['app.record.create.show','app.record.create.change.multi','app.record.edit.show','app.record.edit.change.multi','app.record.detail.show',];kintone.events.on(events1,function(event){// 初期値としてフィールドを隠すkintone.app.record.setFieldShown('ga',false);kintone.app.record.setFieldShown('gb',false);kintone.app.record.setFieldShown('gc',false);// 複数選択フィールドの値を取得varMultiVal=event.record['multi'].value;// 複数選択することもあるので選択の数だけループさせるMultiVal.forEach(function(ele){switch(ele){case'A':kintone.app.record.setFieldShown('ga',true);break;case'B':kintone.app.record.setFieldShown('gb',true);break;case'C':kintone.app.record.setFieldShown('gc',true);break;}});});})();