次の表は、各ネイチャーに対してユーザーサービスの宣言クラスが実装する必要のあるインターフェイスを示しています。
ネイチャー | 宣言インターフェイス |
---|---|
データスペース | UserServiceDeclaration.OnDataspace |
Dataset | UserServiceDeclaration.OnDataset |
TableView | UserServiceDeclaration.OnTableView |
レコード | UserServiceDeclaration.OnRecord |
Hierarchy | UserServiceDeclaration.OnHierarchy |
HierarchyNode | UserServiceDeclaration.OnHierarchyNode |
Association | UserServiceDeclaration.OnAssociation |
AssociationRecord | UserServiceDeclaration.OnAssociationRecord |
ユーザーサービス宣言クラスはTIBCO EBX®の起動時にインスタンス化され、スレッドセーフになるようにコーディングする必要があります。ほとんどの実装は不変のクラスである必要があるため、これは通常問題にはなりません。
ユーザーサービス宣言は、モジュールまたはデータモデルによって登録する必要があります。
モジュールによる登録は、次のようなコードによるモジュール登録サーブレットによって実現されます。
public class CustomRegistrationServlet extends ModuleRegistrationServlet { @Override public void handleServiceRegistration(ModuleServiceRegistrationContext aContext) { // Register custom user service declaration. aContext.registerUserService(new CustomServiceDeclaration()); } }
モジュール登録サーブレットの詳細については、モジュール登録および ModuleRegistrationServlet
を参照してください。
データモデルによる登録は、次のようなコードによって実現されます。
public class CustomSchemaExtensions implements SchemaExtensions { @Override public void defineExtensions(SchemaExtensionsContext aContext) { // Register custom user service declaration. aContext.registerUserService(new CustomServiceDeclaration()); } }
データモデル拡張の詳細については、SchemeExtensions
を参照してください。
ユーザーサービスのプロパティには、そのラベル、説明、確認メッセージ、およびサービスを所有するグループが含まれます。すべてオプションですが、少なくともラベルを定義することをお勧めします。
詳細については、UserServiceDeclaration.defineProperties
を参照してください。
アクティベーションスコープは、サービスが利用可能な選択を定義します。
サービスアクティベーション定義の例:
public class CustomServiceDeclaration implements UserServiceDeclaration.OnTableView { ... @Override public void defineActivation(ActivationContextOnTableView aContext) { // activates the service in all dataspaces except the "Reference" branch. aContext.includeAllDataspaces(DataspaceType.BRANCH); aContext.excludeDataspacesMatching(Repository.REFERENCE, DataspaceChildrenPolicy.NONE); // activates the service only on tables "table01" and "table03". aContext.includeSchemaNodesMatching( CustomDataModelPath._Root_Table01.getPathInSchema(), CustomDataModelPath._Root_Table03.getPathInSchema()); // service will be enabled only when at least one record is selected. aContext.forbidEmptyRecordSelection(); // service will not be displayed in hierarchical views (neither in the // top toolbar, nor in the hierarchy nodes' menu). aContext.setDisplayForLocations( ActionDisplaySpec.HIDDEN, ToolbarLocation.HIERARCHICAL_VIEW_TOP, ToolbarLocation.HIERARCHICAL_VIEW_NODE); // service will be considered as disabled if not explicitly enabled // via the UI. aContext.setDefaultPermission(UserServicePermission.getDisabled()); } }
アクティベーションスコープの宣言の詳細については、UserServiceDeclaration.defineActivation
を参照してください。
ユーザーサービスの可用性の解決の詳細については、サービスのアクセス許可の解決を参照してください。
ユーザーサービスは,サービスの性質に応じたビルトインパラメーターを持つWebコンポーネントとして自動的に利用可能になります。カスタムパラメーターを定義したり、ワークフローのユーザタスク、パースペクティブメニューのアクション、ツールバーのWebコンポーネントアクションを構成する際にサービスのWebコンポーネントを利用できるように設定するには、 UserServiceDeclaration.declareWebComponent
を使用する必要があります。
Webコンポーネント宣言の例:
public class CustomServiceDeclaration implements UserServiceDeclaration.OnDataset { ... @Override public void declareWebComponent(WebComponentDeclarationContext aContext) { // makes this web component available when configuring a workflow user task. aContext.setAvailableAsWorkflowUserTask(true); // adds a custom input parameter. aContext.addInputParameter( "source", UserMessage.createInfo("Source"), UserMessage.createInfo("Source of the imported data.")); // modifies the built-in "instance" parameter to be "input/output" instead of "input". aContext.getBuiltInParameterForOverride("instance").setOutput(true); } }
詳細については、「TIBCO EBX®のWebコンポーネントとしての使用」を参照してください。
これらのサービスをWebコンポーネントとして使用する場合、入力/出力パラメーターを追加するために、既存のユーザーサービス(ビルトインまたはカスタム)を拡張することができます。
そのためには、ユーザーサービス拡張機能を最初にモジュールまたはデータモデルで登録する必要があります。
モジュールによる登録は、次のようなコードによるモジュール登録サーブレットによって実現されます。
public class CustomRegistrationServlet extends ModuleRegistrationServlet { ... @Override public void handleServiceRegistration(ModuleServiceRegistrationContext aContext) { // Register user service extension declaration. aContext.registerUserServiceExtension(new ServiceExtensionDeclaration()); } }
モジュール登録サーブレットの詳細については、モジュール登録および ModuleRegistrationServlet
を参照してください。
データモデルによる登録は、次のようなコードによって実現されます。
public class CustomSchemaExtensions implements SchemaExtensions { ... @Override public void defineExtensions(SchemaExtensionsContext aContext) { // Register user service extension declaration. aContext.registerUserServiceExtension(new ServiceExtensionDeclaration()); } }
データモデル拡張の詳細については、SchemeExtensions
を参照してください。
ユーザーサービスグループは、メニューおよび権限管理画面でのユーザーサービスの表示を整理するために使用されます。
次のタイプのサービスグループを利用できます。
EBX®が提供するビルトインユーザーサービスグループ、
モジュールで宣言されたカスタムユーザーサービスグループ。
グループとサービス間のリンクは、サービスの宣言時に作成されます。 サービスのグループへの関連付けを参照してください。
利用可能なビルトインサービスグループ:
サービスグループキー | Description |
---|---|
| EBX®が提供するすべてのビルトインのインポートおよびエクスポートサービスを含むグループ。デフォルトのメニューでは、これらのサービスは「インポート/エクスポート」サブメニューに表示されます。 |
| [表示]メニューに表示するサービスを含むグループ。他のサービスグループとは異なり、このグループに関連付けられているサービスはデフォルトメニューには表示されませんが、テーブルトップツールバーのカスタマイズできない部分に表示される[表示]メニューにのみ表示されます。これらのサービスは、カスタムツールバーに手動で追加できます。 |
ユーザーサービスグループは、モジュールの登録時に、メソッドModuleServiceRegistrationContext.registerServiceGroup
を使用して宣言する必要があります。
public class CustomRegistrationServlet extends ModuleRegistrationServlet { ... @Override public void handleServiceRegistration(ModuleServiceRegistrationContext aContext) { // In CustomModuleConstants, // CUSTOM_SERVICE_GROUP_KEY = ServiceGroupKey.forServiceGroupInModule("customModule", "customGroup") // registers CUSTOM_SERVICE_GROUP_KEY service group aContext.registerServiceGroup( CustomModuleConstants.CUSTOM_SERVICE_GROUP_KEY, UserMessage.createInfo("Custom group"), UserMessage.createInfo("This group contains services related to...")); } }
サービスとグループの関連付けは、宣言で、メソッド UserServicePropertiesDefinitionContext.setGroup
を使用して行われます。
public class CustomServiceDeclaration implements UserServiceDeclaration.OnDataset { ... @Override public void defineProperties(UserServicePropertiesDefinitionContext aContext) { // associates the current service to the CUSTOM_SERVICE_GROUP_KEY group aContext.setGroup(CustomModuleConstants.CUSTOM_SERVICE_GROUP_KEY); } }
サービスは、ビルトインサービスグループまたはカスタムサービスグループのいずれかに関連付けることができます。後者の場合、このサービスは、このグループに属する他のビルトインサービスと同様に、このビルトイングループに表示されます。