Cisco UCS Director Open Automation 開発者ガイド、リリース 5.0
新メニューの開発
新メニューの開発

新メニューの開発

この章は、次の内容で構成されています。

新メニューについて

新しいメニュー項目を作成するには、次のような一連の関連作業が必要です。

  • メニューを定義します。

  • 新しいメニューを登録します。

  • 新しいレポート コンテキストを登録します。

  • 必要に応じて、左側のナビゲーション ツリー プロバイダーを作成します。

  • レポートを作成して、新しいメニューの場所が適切なコンテキスト マップ ルールを使用して指定されていることを確認してください。

メニュー項目の定義

Open Automation を使用して新しいメニューを追加する唯一の方法は、menu.xml という名前のファイルを指定することです。 次のコード例で、メニュー項目の定義に関するガイダンスを示します。

次のサンプル コードは、Open Automation SDK サンプルに含まれています。 XML サンプルはメニュー項目を導入するための 2 つのオプションを表示します。
  • 新しいメニュー項目を既存のフォルダ(Virtual など)に挿入する方法

  • まったく新しいメニュー項目を UI に追加する方法

はじめる前に

すべてのメニュー ノードに一意の整数 ID が関連付けられます。 新しいメニュー項目を導入する場合は、表に示すように、次のメニュー ID が予約されていることに注意してください。

表 1  システム メニュー ID のリスト
メニュー ID
仮想 1000
物理 1001
組織 1002
ポリシー 1003
Virtual/Hypervisor ポリシー 1007
物理インフラストラクチャ ポリシー 1008
管理 1004

メニュー項目の構成要素を以下に示します。

  • label:メニュー用として UI に表示されるラベルです。

  • path:メニューに移動する場合に URL に使用される値です。

    重要:

    dummy_menu_1/dummy_menu_2/ のように、文字列の最後にバックスラッシュを付ける必要があります。

  • op:ユーザがこのメニューにアクセスするために必要な権限です。no_check は全員がアクセスできることを意味します。

  • url:必ず、「modules/GenericModules.swf」にする必要があります。 このフィールドは、カテゴリではなくメニュー項目の場合にだけ入力する必要があります。

  • leftNavType:有効値は「none」または「backend_provided」です。 以降のセクションでこれらの値の意味について説明します。 このフィールドは、カテゴリではなくメニュー項目の場合にだけ入力する必要があります。

  • children:メニューの下にさらにメニューがある場合に、ここに追加します。 ベスト プラクティスは、メニュー内に 4 つ以上のレベルを作成しないことです。

前述したメニュー項目の構成要素のサンプル値を次のコード例で示します。

手順
    ステップ 1   オプション 1:既存のフォルダの下に新しいメニュー項目を追加します。この場合のフォルダは Virtual です。 メニュー項目を既存のメニュー カテゴリに追加する場合は、まず、項目を追加するカテゴリの menuid を探す必要があります。 例では、「Virtual」の下に新しいメニュー項目を追加します。「Virtual」の menuid は 1000 です。 menuid だけが入力されている親メニュー項目に注目してください。メニュー項目を既存のカテゴリに配置することを示すために必要なことはこれだけです。 新しいメニュー項目が子フィールドに配置されます。

    例:
    <menu>
    	<!-- this shows you how to add a new menu item underneath virtual -->
    	<menuitem>
    		 <menuid>1000</menuid>
    		   <children>
    			    <menuitem>
    			      	<menuid>12000</menuid>
    		      		<label>Dummy Menu 1</label>
    		   		  	<path>dummy_menu_1/</path>
    		   		  	<op>no_check</op>
    				     	<url>modules/GenericModule.swf</url>
    			     		<leftNavType>backend_provided</leftNavType>
    	    		</menuitem>
    	 	</children>
    	</menuitem>
    
    ステップ 2   オプション 2:まったく新しいメニュー項目を UI に追加します。 まったく新しいメニュー項目を定義する場合は、例に示すように、すべての詳細を指定します。 最初に、メニュー カテゴリに関するすべての詳細を指定してから、その下にすべての子メニュー項目を追加します。 この例は、メニューを 2 レベル下まで表示しますが、理論上は、必要な深さにすることができます。 ベスト プラクティスは、3 レベル以下の深さのメニューを作成することです。

    例:
    <!-- entirely new menu -->
    <menu>
      <menuitem>
    		   <menuid>11000</menuid>
    		   <label>Whitney Category</label>
    		   <path>whitney/</path>
    		   <op>no_check</op>
    		   <children>
    			    <menuitem>
    				     <menuid>11001</menuid>
    				     <label>Whitney Menu 1</label>
    				     <path>whitney_menu_1/</path>
    				     <op>no_check</op>
    				     <url>modules/GenericModule.swf</url>
    				     <leftNavType>backend_provided</leftNavType>
    			    </menuitem>
    		   </children>
    	 </menuitem>
    <menu>
    

    次の作業

    メニューを登録します。

    メニュー項目の登録

    Open Automation では、メニュー登録が自動的に処理されます。 開発者がやるべきことは、メニューの xml ファイルを menu.xml として指定してから、モジュールの一部としてパッケージするだけです。 menu.xml ファイルがモジュール jar ファイルの最上位レベルにあることを確認してください。

    はじめる前に

    新しいメニュー項目を新しいフォルダまたは既存のフォルダの下で定義します。

    メニュー ナビゲーションの定義

    Cisco UCS Director は、メニュー ナビゲーションを使用して UI に表示するレポートとフォームを決定します。 レポートの場所のテーマに関する詳細については、レポートの場所の指定を参照してください。

    leftNavType フィールドは、メニュー項目に使用するナビゲーションのタイプを指定します。 値の「none」の意味は次のとおりです。

    • ナビゲーションは必要ない。

    • メニュー項目に関連付けられたコンテキスト マップ ルールで type = 10、name = "global_admin" が使用される (重要)。


    (注)  


    leftNavType が「none」に設定されている場合は、このメニューの場所にレポートを登録する必要があるときに、メニュー項目に関連付けられたコンテキスト マップ ルールの type 値と name 値が役に立ちます。


    leftNavType が「backend_provided」の場合は、左側のナビゲーション ツリーを生成する com.cloupia.model.cIM.AbstractTreeNodesProviderIf の実装を指定する必要があります。 このナビゲーション ツリーの各ノードで次の要素を指定する必要があります。
    • ラベル

    • UI に表示するアイコンへのパス(任意)

    • コンテキスト タイプ(詳細については、レポート コンテキストの登録に関するセクションを参照)

    • コンテキスト ID(これが表の生成時に使用されるレポート コンテキスト ID になる)

    ナビゲーション ツリーはメニュー ID に関連付ける必要があるため、ツリー プロバイダーの登録時には、必ず、対応するメニュー ID を使用してください。

    詳細については、コード サンプルを参照してください。

    レポート コンテキストの登録

    このトピックでは、新しいレポート コンテキストの追加方法を中心に説明します。 新しいメニュー項目を作成するには、新しいレポート コンテキストが不可欠です。新しい一意のコンテキストを登録する必要があります。既存のコンテキストは使用できません。

    Open Automation のマニュアルではメニュー ナビゲーションの定義に関して、左側のナビゲーション ツリー プロバイダーを作成するときにレポート コンテキスト タイプを指定する必要があることが記載されています。

    レポート コンテキストは、システムが任意の時点で UI に表示可能なレポートを決定するために使用されます。 その他の背景情報については、レポートの場所の指定に関するマニュアル(レポートの場所の指定)を参照してください。 また、付録 Bで既存のレポート コンテキスト データのリストを参照してください。

    Open Automation には、新しいレポート コンテキストを自動生成する API が用意されています。 レポート コンテキストとコンテキスト メニュー プロバイダーの登録例については、com.cloupia.feature.foo.FooModule を参照してください。


    ヒント


    自動生成されたレポート コンテキストはポータブルではありません。 これは、1 つのモジュールを UCSD の 2 つのインスタンスに展開すると、それぞれのインスタンスで取得された自動生成レポート コンテキストに別々の値が含まれている可能性があることを意味します。 そのため、このような重複値を使用する独自のコードは必ずしも正常に機能するとは限りません。 この問題を回避するには、ReportContextRegistry を使用してレポート コンテキストを登録し、それらを取得します。


    com.cloupia.model.cIM.ReportContextRegistry.register(String name, String label) を使用して、javadoc とサンプル コードで詳細を調査してください。

    これらのレポート コンテキストが最終的にどのように使用されるかを確認するには、コード サンプルとレポートの場所の指定に関するマニュアルを参照してください。

    はじめる前に

    レポート コンテキストの登録が必要な Open Automation 開発者は、最初に UCSD リードと話し合う必要があります。 UCSD リードはその開発者専用に予約された整数のブロックを提供することができます。 これにより、定義されたすべてのレポート コンテキストが一意であることが保証されます。 ブロックを入手すれば、ReportContextRegistry.register(int type, String name, String label) を使用して新しいコンテキストを登録できます。