このドキュメントは何
SalesforceのロールとグループメンバーとグループをデータローダでExportして、
Excelでこねこねしてキューや公開グループに所属するロール一覧を作成しました。備忘として手順を記載しておきます。
公開グループのメンバーにはロールや公開グループを含めることができますが、一覧を出そうとするとかえって少し手間でした。
背景
ロール変更の影響調査のため、どのキューや公開グループにどのロールが所属しているか知りたかった。
ちなみに、ロールメンバーの一覧はUserRoleオブジェクトとUserオブジェクトで出せます。
UserRoleのIdとUserのUserRoleIdがキーになります。
調査
以下のhelpを見てみると、どうやらキューはグループオブジェクト、キューメンバーはグループメンバーオブジェクトで管理されているらしい。
help通りにレポートタイプ、レポートも作ってみたが、キューが正しく表示されない。そのため、データローダでデータをExportして、リストを突合してキューや公開グループに所属するロール一覧を作成してみることにした。
手順
- データローダーでExport
- グループ(Group)オブジェクトの全項目、全レコードをExport
- 同様にグループメンバー(GroupMember)、ロール(UserRole)オブジェクトの全項目、全レコードをExport
- Exportしたデータを加工してキューや公開グループに所属するロール一覧を作成
作成するリストに必要な列は以下の通りです。
| 項目 | 説明 | 記述例 |
|---|---|---|
| GroupMember.Id | グループメンバーオブジェクトのId | 「011」から始まる18桁の文字列 |
| GroupId | グループオブジェクトの参照項目 | 「00G」から始まる18桁の文字列 |
| Group.Name | グループのName項目。Group.TypeがRegularかQueueの場合には値が入る | 公開グループやキューの表示ラベル |
| Group.Type | グループの種別項目。公開グループ、キューなど。Regularが公開グループのこと。 | Regular, Queue, RoleAndSubordinatesInternalなど |
| Group.種別 | 英語のままだと分かりずらかったのでGroup.Type列を日本語に置き換えました。Regularは公開グループ、Queueはキュー | レギュラー、キューなど |
| GroupMember.UserOrGroupId | ユーザーかグループオブジェクトの参照項目 | 「00G」(公開グループ)または「005」(ユーザー)から始まる18桁の文字列 |
| UserRole.Name | ロールオブジェクトのName項目 | ロールの表示ラベル |
-
グループメンバーオブジェクトのExportデータをもとにして、必要な列を他オブジェクトのシートからVLOOKUPなどで引っ張って追加します。上表の太字の項目が追加する列です。
- Group.Name
- GroupMember.GroupIdとGroup.Idが一致するグループオブジェクトのName項目の値を持ってきます。
- Group.Type
- GroupMember.GroupIdとGroup.Idが一致するグループオブジェクトのType項目の値を持ってきます。
- Group.種別
- 個人的に英語のままだと分かりずらかったのでGroup.Type列を日本語に置き換えました。Regularは公開グループ、Queueはキューに置き換えました。
- UserRole.Name
二段階加工が必要になります。
1. 前段階として、グループオブジェクトのシートにUserRole.Nameという列を追加します。
Group.RelatedIdとRole.Idが一致するロールオブジェクトのName項目を引っ張ってきます。
2. これまで作成してきたグループメンバーをコピーしたリストに戻ります。
UserRole.Name列にGroupMember.UserOrGroupIdとGroup.Idが一致するUserRole.Name項目の値を持ってきます。
補足:Group.Name項目にはキューと公開グループの表示ラベルしか入らないようで、ロールオブジェクトから値を引っ張ってこないといけませんでした。
Type=Queue、RegularのNameには値が入っていましたが、Roleから始まる文字列の場合はNameは空欄となっていました。
- Group.Name
-
これで、キューや公開グループに所属するロール一覧を出すことができました。
- 今回はロールの確認さえできればOKだったのでこれで終わりですが、キューや公開グループに所属するロール以外のメンバー(ユーザーやキュー、公開グループ)を出したい場合は、UserOrGroupIdをキーにユーザーオブジェクトやグループオブジェクトから必要な情報を追加すればよさそうです。
知見
- キューはGroupオブジェクトで管理しているようでした。
- ロールもGroupオブジェクトで管理しているようでした。(グループオブジェクトのTypeを分けて管理している様子)
- Groupオブジェクトは公開グループ以外にも広めのものを管理するオブジェクトのようです。
グループのメンバーとしてキューやロールなどいろいろなものを選べるので、そうしておかないと構造として難しいのかな。 - GroupMemberオブジェクトはGroupと所属するユーザーやロールをつなぐ中間オブジェクト。GroupIdがグループの参照関係で、UserOrGroupIdがユーザーやロールの参照関係となっている
- 公開グループはGroupオブジェクトで管理していて、ChatterグループはCollaborationGroupオブジェクトらしい
- キュー(Queue)オブジェクトはないようだった。キューの sObject(QueueSobject)というオブジェクトがある。
結局使わなかったのでなんなのかよく分かっていないです。