抓出 Queue 裡面所有的 User / Get All Users in a Queue
想抓出 Queue 裡面所有的 User?
在最簡單的情況下,queue 裡面裝的如果全是 user ,那就只要用 SOQL 去撈即可。
但是有一點超乎直覺的是,當我們要從 Group 裡抓出 GroupMember,只要
SELECT GroupId,Id,UserOrGroupId FROM GroupMember WHERE GroupId = '00Gxxxxxxxxxxxxxxx'
可是 Salesforce 裡不但沒有 QueueMember 這個 object,甚至也沒有 Queue 這個 object。不知道要去哪裡查 queue Id。
蛤?為什麼 queue 沒有 object?
因為所謂的 queue,其實就是一種特別的 group。
所以上面那行 SOQL 是完全通用的。
SELECT GroupId,Id,UserOrGroupId FROM GroupMember WHERE GroupId = '00Gxxxxxxxxxxxxxxx'
此處 criteria 的 GroupId,其實代表的也是 queue 的 Id。
queue 的 Id,的確也是 00G 開頭的,是貨真價實的 Group 無誤。
那如果想撈的目標 group 裡面不單只有 user 怎麼辦?
如果 group 裡全都是直接裝著 user record,那上面的 SOQL 就很夠用了。但是 Group 裡面除了直接裝 user,還有可能也裝著別的 sub group。
這時候你就需要往下挖一層,再做一次:
SELECT GroupId,Id,UserOrGroupId FROM GroupMember WHERE GroupId = 'sub_group_id'
(視情況需要,你可能要不斷地挖上好幾層,直到沒有 sub group 為止)
更複雜一點的情況是: group 裡還可以裝 UserRole。
而且 UserRole 還會有一個對應 00G 開頭的 Id,以致於它躲在 GroupMember 裡的時候,看起來就是一個普通的 Group。結果你嘗試用 UserRole 的 00G Id 一撈,
SELECT GroupId,Id,UserOrGroupId FROM GroupMember WHERE GroupId = '00Gxxxxxxxxxxxxxxx'
才發現 GroupMember 裡面根本沒有屬於這個 00G Id 對應的 user。
若想撈出屬於 UserRole 之下的 user,請乖乖地去 user object:
SELECT Id,UserRoleId FROM User WHERE UserRoleId = '00Exxxxxxxxxxxxxxx'
啊,我從 GroupMember 出發的,沒有看到什麼 00E 的 Id 啊?
這個要去 Group object 查 RelatedId :
SELECT RelatedId FROM Group WHERE Id = '(你從GroupMember抄來的UserRole的00G Id)'
未完待續
此篇僅先說明一下重點觀念。
預計下一篇文章會提供一份 sample code,讓你可以用 Apex code 去抓取這些 user。
留言
張貼留言