HRプロファイルを参照するフィールドのフィルター設定について

NaoyaT
Tera Expert

知識不足で申し訳ございませんがご教示いただきたく記事を作成しました。

 

HRプロファイルテーブルを参照する参照フィールドをカタログアイテムに作成しており、参照修飾子の設定を以下スクリプトで設定しようとしていますがうまく動作しません。

以下条件を満たすためにはどのようにスクリプトを改修する必要があるかご教示いただきたいです。

 

■条件

・部門テーブル(cmn_department)のうち、一意識別コード(ou)が「S99999999110」または「H00010001503」を割り当てられているユーザー

 

■参照修飾子

// 1. 部門情報を取得
var dep = new GlideRecord('cmn_department');
dep.addActiveQuery()
.addOrCondition('ou', 'CONTAINS', 'S99999999110')
.addOrCondition('ou', 'CONTAINS', 'H00010001503');
dep.query();

var DeptIds = [];

// 2. 取得した部門情報のIDをリストに保持
while (dep.next()) {
DeptIds.push(dep.sys_id.toString()); // ここでは部署のsys_idを保存
}

// 3. そのIDを使ってユーザーを取得
var usr = new GlideRecord('sys_user');
if (DeptIds.length > 0) {
usr.addQuery('department', 'IN', DeptIds.join(','));

1件の返信1

iwai
Giga Sage

cmn_department のQuery方法が少し意図する方法と違うようです。
その方法だと以下のようになります。
active=true^ORouCONTAINSS99999999110^ORouCONTAINSH00010001503
読みやすくすると: active = true OR ou CONTAINS S99999999110 OR ou CONTAINS H00010001503
3つの条件のどれかなので、Active Trueで該当するものが抽出されると思います。

気になる点として、こちらのPID(個人環境)では、"active" Field も "ou" Fieldもないです。
それがある想定で、ou が「S99999999110」または「H00010001503」と完全一致(=)するものを検索するなら、以下のようになります。"OR"の違いを確認してください。
active=true^ou=S99999999110^ORou=H00010001503

読みやすくすると: active=true AND ou = S99999999110 OR ou = H00010001503
"IN"を使うことでも良いです。
active=true^ouINS99999999110,H00010001503

Scriptは以下のようになります。
dep.addActiveQuery();
dep.addQuery('ou', 'S99999999110')
.addOrCondition('ou', 'H00010001503');

activeやouがもしカスタマイズで追加したのなら"u_active"や"u_ou"になると思います。