2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

midPoint by OpenStandiaAdvent Calendar 2024

Day 14

midPoint のオブジェクトテンプレートを活用する

Last updated at Posted at 2024-12-13

midPoint by OpenStandia Advent Calendar 2024 の14日目は、midPoint のオブジェクトテンプレート機能について紹介します。オブジェクトテンプレートは、13日目の記事で解説したアーキタイプとも関連します。

13日目までで構築した環境が前提となります。

オブジェクトテンプレートとは

オブジェクトテンプレートとは、midPointで管理されるオブジェクト(ユーザー、組織、ロールなど)に対して適用されるテンプレート機能です。例えば、ユーザーオブジェクトが持つ「姓(familyName)」、「名(givenName)」属性より値を計算して「表示名(fullName)」属性に設定するといった、あるオブジェクト内における値のマッピングや生成を行うことができます。他にも、ロールの自動アサイン、スキーマのカスタマイズ、フォームバリデーションの設定機能も備えます。

公式ドキュメントでの説明は下記にあります。

また、The Book内でも解説があります。

アーキタイプとの関連

オブジェクトテンプレートを作成しただけでは、その効果は適用されません。どのオブジェクトタイプに適用するかmidPointに指示する必要があります。ここで登場するのが、13日目の記事で解説したアーキタイプです。アーキタイプの設定において、どのオブジェクトテンプレートを適用するか設定可能になっています。アーキタイプ別に適用するルールを切り替えることができるのは、非常に便利です(例:正社員の場合は表示名には電話番号を含めるが、ビジネスパートナーの場合は表示名に所属会社名を含めるなど)。

オブジェクトテンプレートはシステム設定(SystemConfiguration設定)にて、グローバルに適用することもできます。midPointにアーキタイプが導入される前は、グローバル設定で適用していましたが、アーキタイプ導入後は、各アーキタイプに適用するオブジェクトテンプレートを設定する方法を基本的には使用します。

ただし、依然とグローバル設定で利用するケースもあります。例えば、オブジェクトテンプレートのスキーマのカスタマイズ機能を使って、UIの表示項目や表示名を変更する場合です。アーキタイプに紐づく画面表示では、アーキタイプに紐づけたオブジェクトテンプレートを利用しますが、どのアーキタイプにも紐づかないオブジェクトの画面表示では、グローバル設定のオブジェクトテンプレートが利用されます。

また、その他にオブジェクトテンプレートを個別適用可能な箇所もあります。5日目の記事などで登場したリソース設定での「同期の設定」です。「状況(Situation)」に応じてアクションを設定していましたが、このアクションの詳細設定で、オブジェクトテンプレートの設定が可能になっています。

image.png

オブジェクトテンプレートの機能を試す

13日目の記事で作成したアーキタイプに対して、専用のオブジェクトテンプレートを作成し、各種機能を試してみます。

オブジェクトテンプレートの作成

画面左メニューの「オブジェクト・テンプレート > 新規オブジェクト・テンプレート」をクリックします。

image.png

新規オブジェクト・テンプレートの作成画面が表示されます。以下を設定し、一旦「保存」ボタンをクリックして保存します。

  • 名前Employee Object Template

image.png

アーキタイプにオブジェクトテンプレートを設定

画面左メニューの「アーキタイプ > すべてのアーキタイプ」をクリックしてアーキタイプ一覧を表示し、「Employee」アーキタイプをクリックして詳細画面を開きます。

image.png

詳細画面では、「アーキタイプ・ポリシー」メニューを開きます。

image.png

「▶ アーキタイプ・ポリシー」の箇所をクリックして展開し、さらに「空項目を表示する」をクリックして入力項目を表示します。

image.png

そうすると関連付けるオブジェクト・テンプレートの設定箇所として、「オブジェクト・テンプレート参照」が表示されます。「編集」ボタンをクリックします。

image.png

オブジェクトの選択ダイアログが表示されます。先程作成したオブジェクトテンプレートEmployee Object Templateをクリックします。

image.png

設定された状態になります(まだ保存されていません)。「保存」ボタンをクリックして、アーキタイプを保存します。

image.png

これでこのアーキタイプに属するオブジェクトに対して、適用されるオブジェクトテンプレートが設定されました。

マッピング

例として、姓と名より氏名(fullName属性)を生成するようにマッピングをオブジェクトテンプレートに設定してみます。

マッピングの設定

画面左メニューの「オブジェクト・テンプレート > すべてのオブジェクト・テンプレート」をクリックし、オブジェクトテンプレートの一覧を表示します。

image.png

先ほど作成したEmployee Object Templateをクリックして、その詳細画面を開きます。

image.png

「マッピング」メニューをクリックします。

image.png

image.pngをクリックし、マッピング定義の画面を表示します。

image.png

まずは以下を設定します。

  • 名前fullName
  • 強さ強い

image.png

次に「ソース」を設定します。デフォルトで「フォーカス」となっているセレクトボックスをユーザーに変更します。その後すぐ下の入力フィールドをクリックするとユーザーオブジェクトの属性をサジェストしてくれます。ここでfamilyNameを選択または入力します。

image.png

また、複数ソースを設定したいので、「ソース」の右隣にあるimage.pngをクリックします。

image.png

すると追加の入力フィールドが追加されるので、同様の操作を行いgivenNameもソースに設定します。最終的に以下の状態にします。

image.png

次に、ターゲットです。ソースと同様の操作でfullNameを設定します。

image.png

最後に「式」では、スクリプトを選択し、「スクリプトを表示」ボタンをクリックします。

image.png

スクリプトの入力エリアが追加されますので、「コード」にfamilyName + " " + givenNameを設定します。

image.png

最下部にある「実行」ボタンをクリックします。

image.png

そうすると元の詳細画面に戻り、設定したマッピングが追加予定で表示されています(緑色の箇所)。「保存」ボタンをクリックして保存します。

image.png

マッピングの動作確認

設定した氏名を生成するマッピングの動作確認をしてみます。適当なユーザーの詳細画面を表示します。画面上部にある「オプション」をクリックしてメニューを開き、「リコンサイル」にチェックを入れます。この状態で、「変更のプレビュー」をクリックします。

「リコンサイル」オプションを設定してオブジェクトを更新すると、何も変更情報がなくても、該当オブジェクトにリンクされているリソースのインバウンド/アウトバンドマッピングや、適用されているオブジェクトテンプレートなどを再計算しなおします。

image.png

すると、オブジェクトテンプレートが評価されて、氏名を生成する変更を予定していることを確認できます。「保存」ボタンをクリックします。

image.png

ユーザー一覧画面に戻りますが、ちょうどデフォルトでこの一覧画面では「氏名」列がありますので、そこでオブジェクトテンプレートにより設定された値を見ることができます。

image.png

では、残りのユーザーにも適用して更新します。まとめて実施したい場合、一覧画面より複数人選択して「リコンサイル」アクションを実行というオペレーションも可能ですが、既にHR users importタスクという取り込みタスクを作成済みのため、今回はこちらを利用します。HR users importタスクを開き、「今すぐ実行」ボタンをクリックして再実行します。

image.png

源泉データ(./hr/users.csv)に変更はありませんが、設定したオブジェクトテンプレートが評価されて、差分があるとそれを検知して更新してくれます。タスクが終了すると、以下のように残りのユーザーにもマッピングが適用されたことが分かります。

image.png

もし仮に、源泉データ側で変更(例:改姓)が行われた場合は、HR users importタスクの実行で取り込みを再度行うと、連動して「氏名」も自動的に変更されます。

スキーマのカスタマイズ

オブジェクトテンプレートにより、適用されているオブジェクトのスキーマ情報をカスタマイズすることが可能です。例えば、表示名やヘルプ文言、アクセスコントロールなどをデフォルト設定から上書きすることができます。

例として、fullName属性はデフォルトでは「氏名」と訳されて表示されていますが、これをカスタマイズして「表示名」に変更してみます。

アイテムの設定

Employee Object Templateの詳細画面を開き、「アイテム」メニューをクリックします。

image.png

image.pngをクリックしてアイテムの追加画面を表示します。

image.png

「参照」には、マッピングの「ソース」と同様の方法でカスタマイズしたいスキーマ属性を選択します。今回は、fullNameを選択します。加えて、「ヘルプ」にこのユーザーの表示名です。と設定しておきます。

image.png

これで「保存」ボタンをクリックして保存します。

スキーマのカスタマイズの確認

源泉システムより取り込んだ適当なユーザーの詳細画面を開きます。すると、今まで「氏名」と表示されていた項目が「表示名」に変わっていることが分かります。

image.png

また、「表示名」の右隣のimage.pngをマウスオーバーさせると、カスタマイズしたヘルプ情報を参照できます。

image.png

この設定はオブジェクトテンプレートが適用されるオブジェクトに限定されているため、他の種類のユーザーには適用されていません。例えば、administratorユーザーの詳細画面を開くと、デフォルトの「氏名」のままであることを確認できます。

image.png

このように、アーキタイプごとに異なる表示名を設定することで、不必要にカスタム属性1を増やさずとも対応できるようになります。例えば、同じfullNameという属性を使いながら、「正社員」アーキタイプのユーザー詳細画面では「氏名」とし、「派遣社員」アーキタイプのユーザー詳細画面では「氏名 / 会社名」と項目表示することが可能です。

ユーザー詳細画面だけでなく、ユーザー一覧画面もカスタマイズすることができます。今回は割愛しますが、アーキタイプ別に一覧を表示するメニューを追加することが可能です。midPointにはデフォルトで「Person」アーキタイプが存在しますが、そのユーザー一覧を表示するメニューもデフォルトで追加されています。

image.png

「ユーザー > Persons」をクリックすると「Person」アーキタイプが適用されているユーザーに絞って一覧表示されます。

まとめ

14日目では、オブジェクトテンプレートについて解説しました。オブジェクトテンプレートを活用することで、アーキタイプごとに個別のカスタマイズ処理が色々実現できることをご理解頂けたかと思います。是非要件に合わせて使っていただければと思います。

今回は割愛しましたが、Groovyスクリプトの記述によるフォームバリデーションの設定も可能です。画面からユーザーなどを登録する要件がある場合、入力値チェック要件が必須になることが多いので非常に役立ちます。

次回は新たなプロビジョニング先として、Active Directory(AD)を追加してみたいと思います。CSV(Addressbook)では連携データはユーザーだけでしたが、ADはグループとそのメンバーのプロビジョニングも可能であり、いわゆるエンタイトルメント管理がmidPointを通じて可能となります。少し高度な設定が必要になりますが、お楽しみに!

  1. midPointでは用意されているあらゆるオブジェクトタイプに対して、任意のカスタム属性を追加することが可能です。これについては、別の日に紹介したいと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?