JCA での参加者ピッカーの設定
目的
参加者ピッカーを使用すると、さまざまなサーチ基準を使用して参加者をサーチでき、特定の参加者を取得できます。
バックグラウンド
現在の参加者取得方法はユーザーおよびグループに制限され、Windchill 全体で統一されていません。新しい参加者ピッカー共通コンポーネントは、Windchill 全体で統一された動作を提供します。参加者ピッカーを使用すると、ユーザー、グループ、組織タイプの参加者をサーチできます。広範囲のサーチ範囲基準が提供されるので、それを使用してサーチ範囲を限定できます。
* 
このトピックでは、JCA テーブルで使用するために JCA ベースの参加者ピッカーをカスタマイズする方法について説明します。Windchill 11.0 では、AngularJS に基づく新しい参加者ピッカーが導入され、PTC は AngularJS、HTML、または Javascript に基づくスタンドアロンの単一ページアプリケーションにこれを使用することを推奨しています。詳細については、AngularJS での参加者ピッカーの設定を参照してください。
範囲/適用可能性/前提条件
Windchill クライアンとアーキテクチャテーブルでの使用: Windchill クライアントアーキテクチャ操作を定義し、参加者ピッカータグを持つ JSP ページにその操作をポイントする必要があります。必須属性 "action Class" および "action Method" を参加者ピッカータグに指定します。作成した Windchill クライアントアーキテクチャ操作を、目的の Windchill クライアントアーキテクチャテーブルに追加します。操作をクリックすると、参加者ピッカーウィザードが起動されます。目的の参加者を選択し、「OK」をクリックします。ピッカーは、指定された action Class の action Method を呼び出します。そのメソッドでは、選択した参加者を処理します。
プロパティピッカーと参加者ピッカーの併用: プロパティピッカーの使用方法を理解していることが前提です。プロパティピッカーの操作属性は、参加者ピッカータグを持つ JSP ページにポイントする必要があります。必須属性 "action Class" は "" (空白)、"action Method" は "JavaScript:${pickerCallback}()" である必要があります。${pickerCallback} は、プロパティピッカーに指定した pickerCallback JavaScript 関数です。目的の参加者を選択し、ウィザードで「OK」をクリックすると、pickerCallback JavaScript 関数が選択参加者を含んでいる JSON オブジェクトとともに呼び出されます。
予測される結果
選択した参加者は、Windchill クライアントアーキテクチャテーブルまたはプロパティピッカーのテキストボックスに入力されます。
ソリューション
参加者ピッカーを使用して参加者をサーチし、選択した参加者を Windchill クライアントアーキテクチャテーブルまたはプロパティピッカーのテキストボックスに追加します。
前提となる知識
この目的を達成するには、次のことを理解している必要があります。
Windchill クライアントアーキテクチャテーブルに Windchill クライアントアーキテクチャ操作を追加する方法と、選択した参加者によってテーブルを動的に更新する方法
プロパティピッカーを設定する方法と、JavaScript picker Callback 関数を作成する方法
ソリューションエレメント
エレメント
タイプ
説明
actionClass
タグ属性
選択した参加者の処理のために呼び出す必要のある操作クラスの名前。
actionMethod
タグ属性
選択した参加者の処理のために呼び出す必要のある操作メソッドの名前。
select
タグ属性
ピッカーで複数選択が可能か ("multi") 単一選択のみか ("single") を指定します。
participantType
タグ属性
これを使用してデフォルト値を任意の参加者タイプに設定します。クラス com.ptc.core.components.beans です。
PrincipalBean には、4 つの文字列定数が定義されており、そのうちの 1 つをこの属性に渡すことができます。定数は、ALL_PARTICIPANT、USER、GROUP、および ORG です。
singleParticipantType
タグ属性
これを使用して、participantType タグ属性で指定されたデフォルトの参加者タイプを唯一サポートされるタイプとして設定します。ここでは、true または false の値を設定できます。true に設定されている場合、participantType 属性で指定されるように、単一タイプに制限されます。false または指定なしの場合、ピッカーは ALL_PARTICIPANT、USER、GROUP、ORG の参加者タイプをサポートします。
associationMap
タグ属性
このマップには、関連付けドロップダウンリストに表示される関連付けのキー値ペアが含まれています。キーは関連付けの選択時にユーザーに返される Java 文字列リテラルです。値は関連付けドロップダウンリストに表示されるローカライズされた文字列です。
defaultAssociation
タグ属性
ドロップダウンであらかじめ選択しておく関連付けは、この属性に渡す必要があります。
associationLabel
タグ属性
関連付けの表示ラベルのローカライズされた文字列。
emailAllowed
タグ属性
"true" に設定すると、電子メールテキストボックスがレンダリングされます。参加要請する電子メールの区切りとしてコンマまたはスペースを入力できます。
contextMap
タグ属性
サーチ範囲を実行するコンテキストのリスト。このマップには、「サーチ範囲」ドロップダウンリストに表示されるコンテキストのキー値ペアが含まれています。キーは Windchill オブジェクトの oid を表す Java 文字列リテラルです。値は「サーチ範囲」ドロップダウンリストに表示されるローカライズされた文字列です。
filterEmail
タグ属性
ユーザーをサーチする際にこの属性が "true" に設定されている場合、電子メールアドレスを持つユーザーだけが返ります。デフォルトは "false" です。
recentAllowed
タグ属性
"false" に設定すると、最近の参加者のテキストボックスがレンダーされません。デフォルトは "true" です。
applicationContextSearch
タグ属性
ユーザーをサーチする際にこの属性が "true" に設定されている場合、指定したアプリケーションコンテキスト内のユーザーだけが返ります。デフォルトは "false" です。
defaultContext
タグ属性
ドロップダウンであらかじめ選択しておくコンテキストは、この属性に渡す必要があります。
serviceMap
タグ属性
LDAP サーバーのリストが渡され、サーチが実行されます。この属性のデフォルト値はありません。このマップには、「サービス」ドロップダウンリストに表示されるコンテキストのキー値ペアが含まれています。キーは LDAP サーバーを表す Java 文字列リテラルです。値は「サービス」ドロップダウンリストに表示されるローカライズされた文字列です。
includeInternal
タグ属性
"true" に設定すると、内部グループがサーチされます。デフォルトは "false" です。
disableRestrictedSearchScope
タグ属性
"true" に設定すると、組織に設定されている制限されたサーチ範囲が無効になります。デフォルトは "false" です。
enforceRestrictedSearchScope
タグ属性
"true" に設定すると、組織での設定にかかわらず、制限されたサーチ範囲が有効になります。デフォルトは "false" です。
showRoles
タグ属性
サーチにフィルタを追加して、選択する役割のサーチ範囲を制限するには、これを "true" に設定します。このオプションは、タイプオプションがユーザーの場合にのみ表示されます。
true の場合、サーチ基準で選択可能な役割のドロップダウンリストが表示されます。コンテキストで渡された役割が表示されます。
デフォルトは "false" です。
resourcePool
タグ属性
サーチするプリンシパルのプールを指定します。
すべてのアクセス制御規則も引き続き適用されます。
searchProfileGroups
タグ属性
"true" に設定すると、システム内のプロファイルグループのみがサーチされます。
デフォルトは "false" です。
searchDisconnectedPrincipals
タグ属性
"PrincipalBean.LDAP" に設定すると、LDAP 内の切断されたプリンシパルのみがサーチされます。
"PrincipalBean.DB" に設定すると、DB 内の切断されたプリンシパルのみがサーチされます。
デフォルトは "false" です。
title
タグ属性
参加者ピッカーウィンドウのタイトルを指定します。
デフォルトは「参加者を検索」です。
showSearchIn
タグ属性
参加者ピッカーに「サーチ範囲:」フィールドを表示するかどうかを指定します。デフォルトは "true" で、既存の機能が維持されます。
helpSelectorKey
タグ属性
ピッカーのヘルプリンクを設定します。何も指定しない場合、デフォルトで、ParticipantPickerHelp の service.properties の値になります。
enforceModifyPermission
タグ属性
サーチ結果がフィルタされ、カレントユーザーが修正アクセス許可を持つオブジェクトだけが返ります。
手順 - 参加者ピッカーでの関連付けの有効化
参加者ピッカーに関連付けを含めます。タグ属性 associationMap、defaultAssociation、および associationLabel を参加者ピッカータグに指定する必要があります。
以下のサンプルコードの 2 番目の例では、関連付けを参加者ピッカーに追加する場合のコード例について説明します。
手順 - サーチ範囲コンテキストを持つ参加者ピッカー
さまざまなコンテキストにサーチを絞り込みます。タグ属性 contextMap および defaultContext を参加者ピッカータグに指定する必要があります。コンテキストは、組織、サイト、製品、プロジェクト、およびライブラリです。
手順 - 異なる LDAP での参加者のサーチ
異なる LDAP で参加者をサーチします。タグ属性 serviceMap を指定する必要があります。
複数の LDAP サーバーをサポートするように Windchill を設定します。各 LDAP サーバーは、名前で識別されます。LDAP サーバーの名前はキーとして、ローカライズされた表示ラベルは値として指定する必要があります。serviceMap を指定すると、参加者ピッカーに "Service" ラベルを持つドロップダウンが表示されます。選択したキーは、サービスパラメータとして参加者ピッカーにより Info*Engine タスクに送信されます。
手順 - 参加者ピッカーでの電子メール参加要請の有効化
参加者ピッカーに「電子メールの参加要請」テキストボックスを追加します。タグ属性 emailAllowed="true" を設定する必要があります。
以下のサンプルコードセクションの 3 番目の例では、参加者ピッカーで電子メールの参加要請を取得する場合のコード例について説明します。
手順 - 単一選択の参加者ピッカー
一度に 1 人の参加者を選択します。タグ属性 select="single" を設定する必要があります。一度に 1 つの値を持つことができるテキストボックスとして参加者選択リストをレンダリングします。
手順 - 単一参加者タイプサーチへの制限
サーチする参加者のタイプを 1 つに制限します。タグ属性 singleParticipantType="true" を設定する必要があります。
サンプルコード
参加者ピッカータグを含んでいるサンプル JSP
参加者ピッカーを起動する操作のエントリを作成した後、操作タグと同じ名前で JSP を記述します (たとえば participantPickerSample.jsp)。
<%@ page import="com.ptc.windchill.enterprise.picker.principal.PrincipalBean"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/components" prefix="jca"%>
<jca:participantPicker
actionClass="com.ptc.netmarkets.principal.CustomPrincipalCommands"
actionMethod="addPrincipal"
participantType="<%= PrincipalBean.GROUP %>">
>
</jca:participantPicker>
-
以下のように、基本参加者ピッカーがレンダリングされます。
サーチ基準に基づいてサーチを実行します。参加者を参加者リストに移動し、「OK」をクリックします。コンポーネントは、参加者ピッカータグへの属性として指定された actionClass および actionMethod を呼び出します。actionClass に actionMethod を書き込む必要があります。サンプルコードは以下のとおりです。
public class CustomPrincipalCommands {
public static FormResult addPrincipal(NmCommandBean cb) throws WTException {
FormResult result = new FormResult(FormProcessingStatus.SUCCESS);
result.setNextAction(FormResultAction.REFRESH_OPENER);
String principals = cb.getTextParameter(PrincipalBean.PARAM_SELECTED_PRINCIPALS);
if (principals == null) {
result.setStatus(FormProcessingStatus.FAILURE);
return result;
}
ArrayList<String> selectedPrincipals = new ArrayList<String>();
int start = 0;
int pos = principals.indexOf("#", start);
while (pos != -1) {
String principal = principals.substring(start, pos);
selectedPrincipals.add(principal);
start = pos + 1;
pos = principals.indexOf("#", start);
}
// Now process selectedPrincipals
return result;
}
}
静的メソッドを actionMethod として記述する必要があります。NmCommandBean など 1 つの引数のみを受け入れます。選択した参加者はテキストパラメータとして、このメソッドに送信されます。このコンポーネント内では、これらの値は非表示変数として保存されます。非表示変数の名前は、"com.ptc.windchill.enterprise.picker.principal.PrincipalBean" に静的文字列として定義されます。選択した参加者を抽出するには、PrincipalBean.PARAM_SELECTED_PRINCIPALS を使用します。これにより "#" で区切られた DN (識別名) が返されます。
関連付けの追加
参加者ピッカーに関連付けを追加するには、以下のサンプルでハイライトされた 3 つの属性を入力する必要があります。属性 associationMap は LinkedHashMap を受け入れます。キー値ペアをこのマップに指定します。キーは java 文字列リテラルです。ユーザーが関連付けを選択すると、このキー文字列リテラルはテキストパラメータとして actionMethod に返されます。値はドロップダウンリストに表示されるローカライズされた文字列です。コンポーネントは LinkedHashMap を使用して、ドロップダウンリストに表示されている間にキー値ペアが追加される順番を保持します。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/components" prefix="jca"%>
<%@ page import="java.util.LinkedHashMap"%>
<%@ page import = "com.ptc.windchill.enterprise.picker.principal. PrincipalBean" %>
<%
LinkedHashMap associationMap = new LinkedHashMap();
associationMap.put("GUEST", "Guest");
associationMap.put("MEMBERS", "Members");
associationMap.put("PROJECT MANAGER", "Project Manager");
%>
<c:set var="associationMap" value="<%= associationMap %>"/>
<c:set var="participantType" value="<%= PrincipalBean.USER %>"/>
<jca:participantPicker
actionClass="com.ptc.netmarkets.principal.CustomPrincipalCommands"
actionMethod="addPrincipal"
participantType="${participantType}"
emailAllowed="true"
defaultAssociation="GUEST"
associationMap="${associationMap}"
associationLabel="Add to Role"
>
</jca:participantPicker>
以下の図のように、上記のコードは関連付けドロップダウンをレンダリングします。
上記の例では、役割を参加者に追加します。目的の参加者を参加者リストに移動し、関連付けリストから役割を選択して「OK」をクリックします。actionMethod コードは以下のようになります。
public class CustomPrincipalCommands {
public static FormResult addPrincipal(NmCommandBean cb) throws WTException {
FormResult result = new FormResult(FormProcessingStatus.SUCCESS);
result.setNextAction(FormResultAction.REFRESH_OPENER);
String principals = cb.getTextParameter(PrincipalBean.PARAM_SELECTED _PRINCIPALS);
if (principals == null) {
result.setStatus(FormProcessingStatus.FAILURE);
return result;
}
ArrayList<String> selectedPrincipals = new ArrayList<String>();
int start = 0;
int pos = principals.indexOf("#", start);
while (pos != -1) {
String principal = principals.substring(start, pos);
selectedPrincipals.add(principal);
start = pos + 1;
pos = principals.indexOf("#", start);
}
String role = cb.getTextParameter(PrincipalBean.PARAM_ASSOCIATION);
ArrayList result = NmRoleHelper.service.addUsersToRole(cb, role, selectedPrincipals);
return result;
}
}
上記のコードでハイライトされているように、選択した関連付けをテキストパラメータから抽出できます。
電子メール購読の追加
電子メール購読を取得するタグのコードは以下のようになります。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/components" prefix="jca"%>
<%@ page import="java.util.LinkedHashMap"%>
<%@ page import = "com.ptc.windchill.enterprise.picker.principal. PrincipalBean" %>
<%
LinkedHashMap associationMap = new LinkedHashMap();
associationMap.put("GUEST", "Guest");
associationMap.put("MEMBERS", "Members");
associationMap.put("PROJECT MANAGER", "Project Manager");
%>
<c:set var="associationMap" value="<%= associationMap %>"/>
<c:set var="participantType" value="<%= PrincipalBean.USER %>"/>
<jca:participantPicker
actionClass="com.ptc.netmarkets.principal.CustomPrincipalCommands"
actionMethod="addPrincipal"
participantType="${participantType}"
emailAllowed="true"
defaultAssociation="GUEST"
associationMap="${associationMap}"
associationLabel="Add to Role"
>
</jca:participantPicker>
以下の図のように、上記のコードは電子メール購読フィールドをレンダリングします。
ピッカーを起動してピッカー値をテキストボックスに返すサンプル JSP
プロパティピッカータグを使用して、テキストボックスおよび「検索」ボタンをレンダリングし、参加者ピッカーを起動します。「検索」ボタンは、前のセクションで説明したとおり、actions.xml で宣言する必要があります。プロパティピッカーはデフォルトで、ピッカーによって呼び出される JavaScript コールバック関数を提供し、ピッカーから取得した値を返します。プロパティピッカーは、ピッカーによって呼び出されるカスタム JavaScript 関数を定義することもできます。以下に例を示します。
<p:propertyPicker label="${label}" field="${textbox}" action="participantPickerSample2" type="participantpicker">
<p:populate from="${displayAttribute}" to="${displayFieldId}"/>
<p:populate from="oid" to="${id}" />
<p:pickerParam name="pickerId" value="${id}" />
<p:pickerParam name="objectType" value="wt.org.WTGroup"/>
<p:pickerParam name="componentId" value="${componentId}"/>
<p:pickerParam name="pickedDataFetcher" value="${pickedDataFetcher}" />
<p:pickerParam name="pickerCallback" value="${pickerCallBack}" />
<p:pickerParam name="containerRef" value="${containerRef}"/>
<p:pickerParam name="baseWhereClause" value="${baseWhereClause}" />
<p:pickerParam name="pickerTitle" value="${pickerTitle}"/>
<p:pickerParam name="multiSelect" value="${multiSelect}"/>
</p:propertyPicker>
参加者ピッカーに戻り、プロパティピッカーから参加者ピッカーが起動されると、リクエストパラメータとしてコールバック JavaScript 関数名を取得できます。
<c:set var="pickerCallback" value="<%=request.getParameter("pickerCallback")%>"/>
<jca:participantPicker
actionClass=""
actionMethod="JavaScript:${pickerCallback}()"
participantType="<%= PrincipalBean.GROUP %>"
<jca:participantPicker>
空白文字列を参加者ピッカーの actionClass 属性に渡します。リクエストパラメータから取得した JavaScript コールバック関数名は、文字列 "JavaScript:" に追加され、値として actionMethod に渡されます。PickerCallBack メカニズムが必要なので、文字列 "JavaScript:" は識別のためにピッカーで内部使用されます。ユーザーが目的の参加者を選択し、「OK」をクリックすると、値は JSON オブジェクト (プロパティピッカーで定義) として JavaScript 関数に返されます。
Windchill コードでの使用例
以下の場所はすべて \Windchill\codebase\netmarkets\jsp 内にあります。
\roleAccess\profile_addMembers.jsp
\subscription\subscrPrincipalPicker.jsp
\team\addUsersToRole.jsp
\object\findParticipant.jsp
\work\addUsersToRole.jsp (resourcePool)
\principal\find_disconnected.jsp (searchDisconnectedPrincipals)
\group\addProfileToList.jsp (enforceModifyPermission & searchProfileGroups)
\user\addToAdmin.jsp (enforceRestrictedSearchScope)
\agreements\findParticipant.jsp (disableRestrictedSearchScope)
これは役に立ちましたか?