ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発
2.0
E56274-01
  目次へ移動
目次

前
 
次
 

4 モバイル・アプリケーションの定義

この章では、Oracle Mobile Application Frameworkの概要エディタを使用して、モバイル・アプリケーションのSpringboardおよびナビゲーション・バーの表示動作を定義する方法と、アプリケーション機能を埋め込むことでコンテンツを指定する方法について説明します。

この章には次の項が含まれます:

4.1 モバイル・アプリケーションの定義の概要

モバイル・アプリケーションには1つ以上のビュー・コントローラタイプのプロジェクトを含めることができます。これらにはそれぞれ、maf-feature.xmlファイル内の一連の機能が記述されています。第3章「モバイル・アプリケーション開発のスタート・ガイド」で説明したように、MAFは、モバイル・アプリケーションそのものに対してmaf-application.xml構成ファイルを、アプリケーションのコンテンツ定義用にmaf-feature.xmlファイルを提供しています。これらのファイルは手動で変更することもできますが、MAFでは、これらのファイルを宣言的にビルドできるようにする2つの概要エディタを提供しています。

4.1.1 maf-application.xmlの概要エディタの使用方法

概要エディタでは、maf-application.xmlファイルを構成して、モバイル・アプリケーションとそのリソースを記述できます。エディタの各ページで、構成ファイルの要素を追加または更新できます。

4.2 モバイル・アプリケーションの構成ファイルについて

maf-application.xml構成ファイルでは、表示名と一意のアプリケーションID (名前の競合を防ぐ)を指定し、アプリケーションのSpringboard (スマートフォンのホーム・ページに相当)に表示するアプリケーション機能を選択することで、モバイル・アプリケーションの基本構成を設定できます。さらに、このファイルでは、モバイル・アプリケーションのユーザー・プリファレンス・ページも作成できます。このファイルは、第3.2項「アプリケーション・ワークスペースの作成」で説明したように、アプリケーション作成ウィザードの完了後にJDeveloperによって生成されるもので、表4-1に示す要素で構成されています。

表4-1 アプリケーション識別子ファイルの要素

要素 説明

<adfmf:application>

maf-application.xmlのルート要素。

<adfmf:description>

アプリケーションの説明。

<adfmf:featureReference>

機能参照は、FAR (機能アーカイブ・ファイル)にパッケージ化されているか、maf-feature.xmlファイルで定義されているアプリケーション機能のうち、モバイル・アプリケーションのコンテンツに関連するものを指定します。機能参照を選択することで、モバイル・アプリケーションの特性とコンテンツを定義します。FARの詳細は、第4.13項「機能アーカイブ・ファイルの使用」を参照してください。

<adfmf:preferences>

ユーザー・プリファレンスのオプションおよび動作をアプリケーション・レベルで設定できます。maf-feature.xmlファイル内のアプリケーション機能に対するユーザー・プリファレンスの表示および動作方法も設定できます。詳細は、第14章「ユーザー・プリファレンスの有効化」を参照してください。

<adfmf:login>

アプリケーション機能のログイン・ページを設定できます。詳細は、第21章「モバイル・アプリケーションの保護」を参照してください。

<adfmf:navigation>

ナビゲーション・バーとSpringboardの動作を定義できます。Springboardはホーム・ページで、ここには、埋め込まれたアプリケーション機能のすべてのアプリケーション・アイコンとラベルがリスト・ビューに整理されて表示されます。Springboardには、ユーザーが使用可能なすべてのアプリケーションの最上位のビューが表示されます。ユーザーは内容に目を通してアプリケーションを選択できます。詳細は、第4.5項「Springboardとナビゲーション・バーの動作の構成」を参照してください。


例4-1は、Acme Salesという名前のアプリケーションのmaf-application.xmlファイルを示しています。Acme Salesはモバイル・アプリケーションで、そのコンテンツには顧客のコンタクト先アプリケーション(<adfmf:featureReference id="customers" showOnNavigationBar="true"/>)が含まれています。このアプリケーションはSpringboardに表示されます(図4-1参照)。

例4-1 maf-application.xmlファイル

<?xml version="1.0" encoding="UTF-8" ?>
<adfmf:application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:adfmf="http://xmlns.oracle.com/adf/mf"
                   name="Acme Sales"
                   id="com.company.AcmeSales"
                   appControllerFolder="ApplicationController"
                   version="1.0"
                   vendor="Oracle"
                   listener-class="application.LifeCycleListenerImpl">
    <adfmf:description>Sample Application</adfmf:description>
<adfmf:featureReference id="Customers"
                        showOnSpringboard="true"
                        showOnNavigationBar="true"/>
<adfmf:featureReference id="HCM"
                        showOnSpringboard="true"
                        showOnNavigationBar="true"/>
<adfmf:featureReference id="PROD"
                        showOnSpringboard="true"
                        showOnNavigationBar="true"/>
    <adfmf:preferences>
        <adfmf:preferenceGroup id="Root.Security" label="Security">
            <adfmf:preferenceText id="OracleSecurityProvider_serviceURL"
                                  label="Security URL"
                                  default="http://somecomputer.example.com:someaddress/
                                           idaas_rest/rest/tokenservice1/tokens/getprofile"/>
            
            <adfmf:preferenceText id="OracleADFMobile_UserName" label="User Name" default="sean"/>
            <adfmf:preferenceText id="OracleADFMobile_Password" label="Password" default="welcome1" 
                                                                secret="true"/>
        </adfmf:preferenceGroup> 
    </adfmf:preferences>
    <adfmf:navigation>
        <adfmf:springboard enabled="false"/>
        <adfmf:navigationBar enabled="true"/>
    </adfmf:navigation>
</adfmf:application>

図4-1 モバイル・アプリケーションのSpringboardに表示されるアプリケーション機能

この図は周囲のテキストで説明しています

これらの要素は、概要エディタを使用して宣言的に変更するか(図4-2を参照)、「ソース」エディタを使用して手動で変更できます。この2通りのアプローチは、どちらも同じように使用できます。

図4-2 maf-application.xmlファイルの概要エディタ

この図は周囲のテキストで説明しています

4.3 モバイル・アプリケーションの基本情報の設定

「アプリケーション」ページでは、名前、アプリケーションID、モバイル・アプリケーションの表示方法を設定できます。

4.3.1 モバイル・アプリケーションのIDおよび表示動作の設定方法

概要エディタの「アプリケーション」ページ(図4-2を参照)では、モバイル・アプリケーションに名前を付けたり、Springboardやナビゲーション・バーでのモバイル・アプリケーションの表示を制御できます。

始める前に

maf-application.xmlファイルの概要エディタを開くには、「アプリケーション・リソース」パネルのADF META-INFノード(図4-3を参照)にあるmaf-application.xmlファイルをダブルクリックします。

図4-3「アプリケーション」ウィンドウでのmaf-application.xmlファイルの選択

この図は周囲のテキストで説明しています

モバイル・アプリケーションの基本情報を設定するには:

  1. 「アプリケーション」ページを選択し、必要に応じて「概要」タブを選択します。


    注意:

    エディタでは、デフォルトで「アプリケーション」ページが開きます。


    図4-4は、「アプリケーション」ページの基本情報を定義する部分を示しています。

    図4-4 モバイル・アプリケーションの基本情報の設定

    この図は周囲のテキストで説明しています
  2. 「名前」フィールドに、アプリケーションの表示名を入力します。この属性はローカライズ可能です。詳細は、4.11.1項「リソース・バンドルの使用」を参照してください。


    注意:

    MAFでは、このフィールドに入力した値をiOSアーカイブ(.ipaまたは.app)ファイルの名前として使用します。このファイルは、iOSデバイスまたはシミュレータにアプリケーションをデプロイすると作成されます。詳細は、第19.2.4項「iOSデプロイメント・プロファイルの作成方法」を参照してください。


  3. 「ID」フィールドに、一意のIDを入力します。

    名前の競合を避けるため、AndroidとiOSでは、リバースパッケージ名が使用されます(例: com.company.application)。JDeveloperによって、アプリケーション名の前には、com.companyがリバースパッケージとして付加されますが、この値は別の値で上書きできます。ただし、上書きする値は一意で、iOSとAndroidの両方のデバイスのIDガイドラインを順守するものでなくてはなりません。iOSアプリケーションについては、『iOS Team Administration Guide』 (http://developer.apple.com/library/iosのiOS Developer Libraryで入手可能)の「Creating and Configuring App IDs」を参照してください。Androidについては、Android開発者のWebサイト(http://developer.android.com/guide/topics/manifest/manifest-intro.html)で入手可能な「The AndroidManifest.xml File」を参照してください。第19.2.3項「Androidデプロイメント・プロファイルの作成方法」および第19.2.4項「iOSデプロイメント・プロファイルの作成方法」で説明するように、このIDはデプロイメント・プロファイル内で上書きできます。


    注意:

    Androidデバイスまたはエミュレータにアプリケーションが正しくデプロイされるようにするには、IDの先頭を数字やピリオドではなく、文字にする必要があります。たとえば、IDが925090のように(com.company.925090)完全に数値で構成されている場合、アプリケーションはデプロイできません。hello925090などの文字で始まるIDであれば(com.company.hello925090)、デプロイメントは正常に実行できます。


  4. 「説明」フィールドに、アプリケーションの目的を説明した、短いけれども詳細な要約を入力します。

  5. 「バージョン」フィールドに、バージョンを入力します。

  6. 「ベンダー」フィールドに、このアプリケーションを最初に作成したベンダーの名前を入力します。

  7. 「ライフサイクル・イベント・リスナー」フィールドの「参照」をクリックして、「プロパティの編集」ダイアログ(図4-5を参照)を開き、イベントを起動、停止、アクティブ化、非アクティブ化するためのランタイム・コールを有効にするイベント・リスナーを登録します。イベント・リスナーの完全修飾クラス名を入力する必要があります。これはオプションのフィールドです。

    図4-5 アプリケーション・イベント・リスナーの取得

    この図は周囲のテキストで説明しています

    デフォルトのアプリケーション・リスナー・クラスは、application.LifeCycleListenerImplです。MAFでは、デフォルトではこのクラスは登録されません。このクラスはJVMを起動するため、各モバイル・アプリケーションには適さない可能性があるからです。かわりに、「プロパティの編集」ダイアログ(図4-5を参照)を使用して、手動でこのクラスを登録する必要があります。このダイアログを閉じると、JDeveloperにより、<adfmf:application>要素がlistener-class属性によって更新されます(例4-2を参照)。


    注意:

    アプリケーション・ライフサイクル・リスナーは引き続き、アプリケーション・コントローラ・プロジェクト(デフォルトの場所)内に存在している必要があります。


    例4-2 listener-class属性の追加

    <adfmf:application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xmlns:adfmf="http://xmlns.oracle.com/adf/mf"
                       name="OracleMobileApplication"
                       id="com.company.OracleMobileApplication"
                       appControllerFolder="ApplicationController" 
                       listener-class="application.LifeCycleListenerImpl"
                       version="1.1"
                       vendor="Oracle">
       <adfmf:description>This is a mobile application</adfmf:description>
       <adfmf:featureReference id="feature1"/>
    </adfmf:application>
    

    詳細は、第4.7項「ライフサイクル・イベント・リスナーについて」を参照してください。

4.4 カスタムURLスキームを使用したモバイル・アプリケーションの起動

カスタムURLスキームを使用して、他のアプリケーションからネイティブ・アプリケーションを起動できます。

別のアプリケーションからモバイル・アプリケーションを起動するには、次の手順を実行します。

  1. カスタムURLスキームを登録します。このURLスキームは、maf-application.xmlファイルの概要エディタで、「URLスキーム」フィールド(図4-4を参照)を使用して構成します。次に、このスキームのURLを使用して、モバイル・アプリケーションを起動し、データを渡すことができます。

  2. アプリケーション・コントローラ・プロジェクトで、URLが通知されるカスタムURLイベント・リスナー・クラス(CustomURLEventListenerなど)を作成します。このクラスには、イベント・リスナーを定義するoracle.adfmf.framework.event.EventListenerインタフェースを実装する必要があります。oracle.adfmf.framework.event.EventListenerインタフェースの詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

    このモバイル・アプリケーションの起動に使用されるURLで呼び出されるonMessage(Event e)メソッドをオーバーライドおよび実装します。Eventオブジェクトを使用して、URLペイロードおよびアプリケーションの状態に関する有益な情報を取得できます。URLペイロードを取得するには、Event.getPayloadメソッドを使用します。URLイベント時のアプリケーションの状態を取得するには、Event.getApplicationStateメソッドを使用します。詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスEventクラスに関する項を参照してください。

  3. アプリケーション・ライフサイクル・イベント・リスナー(ALCL)クラスを登録します。詳細は、第4.3項「モバイル・アプリケーションの基本情報の設定」および第4.7項「ライフサイクル・イベント・リスナーについて」を参照してください。

    ALCLクラスのstartメソッド内の、カスタムURLイベントのソースを表すEventSourceオブジェクトを取得します。

    EventSource openURLEventSource = EventSourceFactory.getEventSource(EventSourceFactory.OPEN_URL_EVENT_SOURCE_NAME);
    

    カスタムURLイベント・リスナー・クラスのオブジェクトを作成し、イベント・ソースに追加します。

    openURLEventSource.addListener(new CustomURLEventListener());
    

モバイル・アプリケーションでは、次の2つの方法で別のネイティブ・アプリケーションを起動できます。

4.5 Springboardとナビゲーション・バーの動作の構成

Springboardとナビゲーション・バーの表示動作を次のように制御するよう、モバイル・アプリケーションを構成できます。

4.5.1 アプリケーションのナビゲーションの構成方法

「アプリケーション」ページの「ナビゲーション」のオプション(図4-6を参照)を使用して、ナビゲーション・バーを表示または非表示にしたり、アプリケーションによって使用されるSpringboardのタイプを選択したり、ユーザーがアプリケーションをめくるように見ていくときのSpringboardの反応方法を定義できます。

図4-6 「アプリケーション」ページの「ナビゲーション」のオプション

この図は周囲のテキストで説明しています

始める前に

maf-application.xmlの概要エディタの「アプリケーション」ページを選択する必要があります。

ナビゲーション・バーの表示動作を設定するには:

  1. 「アプリケーションの起動時にナビゲーション・バーを表示」を選択して、モバイル・アプリケーションで、デフォルトで、Springboardではなくナビゲーション・バーが表示されるようにします(図4-7を参照)。

    図4-7 デフォルトでナビゲーション・バーを表示

    この図は周囲のテキストで説明しています

    このオプションをオフにすると、アプリケーションの起動時にナビゲーション・バーが表示されなくなり、ユーザーにはSpringboardがナビゲーションの唯一の方法として提示されます。ナビゲーション・バーはSpringboardと同じ目的を果たすものなので、これを非表示にすることで冗長な機能を削除できる場合もあります。

  2. 「ナビゲーション・バー・トグル・ボタンの表示」を選択して、選択したアプリケーション機能のコンテンツが表示されているときにはナビゲーション・バーを非表示にします。図4-8はこのオプションを示したもので、図4-7に示されているナビゲーション・バーを、アプリケーション機能のコンテンツによって非表示にする方法が示されています。

    図4-8 ナビゲーション・バーを非表示

    この図は周囲のテキストで説明しています

    このオプションはデフォルトで選択されており、アプリケーション機能によって表示/非表示状態が指定されていなければ、ナビゲーション・バーはデフォルトで表示されます。

Springboardの表示動作を設定するには:

  1. Springboardのタイプを選択します(存在する場合)。

    • なし: アプリケーションにSpringboardを表示しない場合は、このオプションを選択します。

    • デフォルト: MAFによって提供されるデフォルトのSpringboardを表示します。これは図4-1に示すスタイルを使用しています。デフォルトのSpringboardは、MAF AMXページとして実装されます。詳細は、第4.5.5項「MAF AMXコンテンツによるカスタムSpringboardアプリケーション機能に関する必知事項」を参照してください。

    • カスタム: カスタマイズされたSpringboardを使用する場合に選択します。たとえば、埋込みアプリケーション機能をグリッド・レイアウト・パターンに配置するカスタムSpringboardを作成したり、検索機能や共通タスク(「マイ・レポート」マイ・リードなど)のリストなどのデータを含めることができます。HTMLページまたはMAFモバイルAMXページとして実装できるこのアプリケーションは、maf-feature.xmlファイル(ビュー・コントローラ・プロジェクト内にあります)内でアプリケーション機能として宣言されます。詳細は、第4.9.1項「アプリケーション機能の基本情報の定義方法」を参照してください。HTMLで記述されたカスタムSpringboard内をナビゲーションできるようにする方法は、第B章「ローカルHTMLおよびアプリケーション・コンテナAPI」を参照してください。

      • 機能: Springboardとして使用するアプリケーション機能を選択します(図4-10を参照)。カスタムSpringboardの例は、APIDemoサンプル・アプリケーションを参照してください。詳細は、付録F「サンプルのモバイル・アプリケーション・フレームワーク・アプリケーション」を参照してください。


        注意:

        アプリケーション機能をカスタムSpringboardとして指定する場合、MAFのデザインタイムによって、「ナビゲーション・バーに表示」および「Springboardに表示」オプションをfalseに設定することが求められます。これにより、ページがユーザーによってナビゲーション・バーまたはSpringboardから起動されるアプリケーション機能としてではなく、Springboardとして動作します。詳細は、第4.6.1項「モバイル・アプリケーションのコンテンツの指定方法」を参照してください。


        図4-9 カスタムSpringboardとしてのアプリケーション機能の選択

        この図は周囲のテキストで説明しています
  2. 「アプリケーションの起動時にSpringboardを表示」を選択して、モバイル・アプリケーションの起動後にエンド・ユーザーに対してSpringboardを表示できるようにします。(このオプションは、「デフォルト」または「カスタム」オプションでのみ使用できます。)

  3. 「Springboardトグル・ボタンの表示」を選択して、Springboardのボタンを表示できるようにします(図4-10を参照)。このボタンはアプリケーション機能内に表示されます。図4-7「デフォルトでナビゲーション・バーを表示」では、アプリケーション機能のコンテキスト内にこのボタンが表示されています。このオプションは、「デフォルト」または「カスタム」オプションでのみ使用できます。

    図4-10 Springboardトグル・ボタン

    この図は周囲のテキストで説明しています

Springboardのスライドアウト動作を設定するには:

  1. 「Springboardアニメーション」を選択して、「右にスライド」を選択します。Springboardは、「スライドアウト幅」オプションで入力したピクセル数値(またはパーセント)によって指定された領域を占有します。「なし」を選択した場合、Springboardは右からスライドできません(つまり、MAFではこのアクションを有効にするためのアニメーションが提供されません)。Springboardが表示領域全体を占有します。


    注意:

    スライドアウト・オプションは、Springboardの「カスタム」または「デフォルト」オプションを選択した場合のみ適用できます。


  2. 幅を設定します(ピクセル単位)。iOSデバイスのSpringboardのデフォルト幅は320ピクセルです。Androidデバイスでは、デフォルトでSpringboardは画面全体を占有するので、使用可能な幅がすべて占有されます。


    注意:

    Springboardが表示領域全体を占有しない場合は、アクティブなアプリケーション機能が残りの表示領域を占有します。詳細は、第4.5.3項「Springboardにアニメーションを設定する場合の処理」を参照してください。


4.5.2 ナビゲーション・オプションの構成時の処理

Springboardおよびナビゲーション・バーのオプションを設定すると、adfmf:application.xmlファイルの<adfmf:navigation>要素に対して要素の更新や追加が行われます。たとえば、「なし」を選択すると、<springboard enabled="false">によってコードが更新されます(例4-3を参照)。

例4-3 Springboardを表示しないようにする処理

<adfmf:application>
  ...
  <adfmf:navigation>
     <adfmf:navigationBar enabled="true"/>
     <adfmf:springboard enabled="false"/>
  </adfmf:navigation>
</adfmf:application>

ヒント:

デフォルトでは、ナビゲーション・バーは有効ですが、Springboardは有効ではありません。XMLを手動で更新すると、次のようにSpringboardを有効化できます。

<adfmf:application>
  ...
<adfmf:navigation>
    <adfmf:springboard enabled="true"/>
  </adfmf:navigation>
  ...
</adfmf:application>

例4-4は、「デフォルト」を選択したときに、enabled属性がtrueに設定される様子を示しています。


注意:

Springboardはデバイスの画面全体を占有するので、ナビゲーション・バーとSpringboardは同時には表示されません。


例4-4 デフォルトのSpringboardの表示の有効化

<adfmf:application>
  ...
  <adfmf:navigation>
     <adfmf:navigationBar enabled="true"/>
     <adfmf:springboard enabled="true"/>
  </adfmf:navigation>
</adfmf:application>

「カスタム」を選択して、Springboardとして使用するアプリケーション機能を選択すると、エディタでは<adfmf:navigation>要素(例4-5を参照)が移入されます。id属性は、maf-feature.xmlファイルで定義された、カスタムSpringboardとして使用するアプリケーション機能を指しています。

例4-5 カスタムSpringboardの構成

<adfmf:navigation>
    <adfmf:springboard enabled="true">
      <adfmf:springboardFeatureReference id="springboard"/>
    </adfmf:springboard>
  </adfmf:navigation>

4.5.3 Springboardにアニメーションを設定する場合の処理

例4-6は、maf-application.xmlファイルのナビゲーション・ブロックを示しています。ここでは、Springboardはスライドアウトし、指定された表示領域(213ピクセル)を占有するように設定されています。

例4-6 Springboardアニメーションの構成

<adfmf:navigation>
   <adfmf:navigationBar enabled="true"
                        displayHideShowNavigationBarControl="true"/>
   <!-- default interpretation of width is pixels -->
   <adfmf:springboard enabled="true"
                      animation="slideright"
                      width="213"
                      showSpringbaordAtStartup="true"/>
</adfmf:navigation>

次の行ではアニメーションを無効にしています。

<adfmf:springboard enabled="true" animation="none"/>

次の行では、Springboardが表示領域の左から100ピクセル分を占有するように設定し、アクティブなアプリケーション機能が表示領域の残りの部分を占有できるようにしています。

<adfmf:springboard enabled="true" animation="slideright" width="100px"/>

アニメーション以外に、例4-6は次の処理を示しています。

  • showSpringboardAtStartup属性の使用。アプリケーションの起動時にSpringboardを表示するかどうかを定義します。(デフォルトでは、Springboardは表示されます。)

  • navigationBardisplayHideShowNavigationBarControl属性の使用。

Springboardが表示されないようにするには、enabled属性をfalseに設定します。

4.5.4 HTMLコンテンツによるカスタムSpringboardアプリケーション機能に関する必知事項

MAFによって提供されるデフォルトのHTML Springboardページでは、次のテクノロジが使用されています。これらは、カスタマイズしたログイン・ページに含めることもできます。

  • Cascading Style Sheets (CSS): 色とレイアウトを定義します。

  • JavaScript: Springboardページ内に埋め込まれた<script>タグには、第B章「ローカルHTMLおよびアプリケーション・コンテナAPI」で説明するメソッド(Apache Cordova APIをコールする)への参照が格納されています。また、HTMLページはJavaScriptを使用して、コールバックに応答したり、ページ・スワイプを検出します。スワイプ・イベントが検出されたら、JavaScriptでは、スタイル・シートの動的変更によってページ・モーションをアニメートできるようになります。

    HTML(または任意のカスタムHTMLページ)を使用して作成されたSpringboardでは、base.jsライブラリを参照する<script>タグを含めることによって、Apache Cordova APIを活用できます。このライブラリ(または他のJavaScriptライブラリ)の場所を特定するには、まずMAFアプリケーションをデプロイした後、deployディレクトリに格納されたプラットフォーム固有のアーティファクト内にあるwww/jsディレクトリを探します。Androidアプリケーションの場合、www/jsディレクトリは、Androidアプリケーション・パッケージ(.apk)ファイル内にあります。その場所を次に示します。

    application workspace directory/deploy/deployment profile name/deployment profile name.apk/assets/www/js
    

    iOSの場合、このライブラリは次の場所にあります。

    application workspace directory/deploy/deployment profile name/temporary_xcode_project/www/js
    

    詳細は、第B.1項「MAF APIを使用したカスタムHTML Springboardアプリケーション機能の作成」を参照してください。

  • WebKit: レイアウト間および異なるSpringboardページ間での遷移時に、アイコンのなめらかなアニメーションが提供されます。WebKitレンダリング・エンジンの詳細は、http://www.webkit.org/を参照してください。

HTMLで記述されるSpringboardは、maf-feature.xmlファイルで宣言され、maf-application.xmlファイルで参照されるアプリケーション機能です。

4.5.5 MAF AMXコンテンツによるカスタムSpringboardアプリケーション機能に関する必知事項

HTMLの場合と同様、MAF AMXを使用して記述されたSpringboardは、アプリケーション機能としてモバイル・アプリケーションによって参照されます(第4.6.1項「モバイル・アプリケーションのコンテンツの指定方法」を参照)。通常、Springboardはタスク・フローではなく単一のMAF AMXページとして記述されるため、埋込みアプリケーション機能の起動には、gotoFeatureメソッドが使用されます(例4-7のメソッド式を参照)。


注意:

カスタムSpringboardページ(HTMLまたはMAF AMXによって作成されたもの)は、ビュー・コントローラ・プロジェクト内に配置する必要があります。ビュー・コントローラ・プロジェクト内にはmaf-feature.xmlファイルも格納されています。詳細は、第4.6.1項「モバイル・アプリケーションのコンテンツの指定方法」を参照してください。


デフォルトのSpringboard (jdev_install\jdeveloper\jdev\extensions\oracle.maf\libにあるadfmf.default.springboard.jar)は、MAF AMXページであり、機能アーカイブ(FAR) JARファイルにバンドルされ、モバイル・アプリケーションに含まれる別のFARとともにデプロイされます。JARファイルには、DataBindings.cpxファイルやPageDef.xmlファイルなど、Springboardに関連付けられたすべてのアーティファクトが含まれます。このファイルは、maf-application.xmlファイルのSpringboardオプションで「デフォルト」が選択された後のみ使用できます。このオプションを選択すると、このFARもアプリケーション・クラスパスに追加されます。詳細は、第19.5項「機能アーカイブ・ファイル(FAR)のデプロイ」を参照してください。

デフォルトのSpringboard (例4-7に示すspringboard.amx)は、MAF AMXアプリケーション機能として実装されます。

例4-7 デフォルトのSpringboardページ、springboard.amx

<?xml version="1.0" encoding="UTF-8" ?>
<amx:view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:amx="http://xmlns.oracle.com/adf/mf/amx"
          xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt">
   <amx:panelPage id="pp1">
      <amx:facet name="header">
         <amx:outputText value="#{bindings.name.inputValue}" id="ot3"/>
      </amx:facet>
      <amx:listView var="row"  
                    value="#{bindings.features.collectionModel}"
                    fetchSize="#{bindings.features.rangeSize}"
                    id="lv1"
                    styleClass="amx-springboard">
         <amx:listItem showLinkIcon="false"  
                       id="li1"
                       actionListener="#{bindings.gotoFeature.execute}">
            <amx:tableLayout id="tl1"
                             width="100%">
               <amx:rowLayout id="rl1">
                  <amx:cellFormat id="cf11"  
                                  width="46px"
                                  halign="center">
                      <amx:image source="#{row.image}"  
                                 id="i1"
                                 inlineStyle="width:36px;height:36px"/>
                  </amx:cellFormat>
                  <amx:cellFormat id="cf12"  
                                  width="100%"
                                  height="43px">
                     <amx:outputText value="#{row.name}" 
                                     id="ot2"/>
                  </amx:cellFormat>
               </amx:rowLayout>
            </amx:tableLayout>
               <amx:setPropertyListener from="#{row.id}" 
                                        to="#{pageFlowScope.FeatureId}"/>
         </amx:listItem>
      </amx:listView>
   </amx:panelPage>
</amx:view>

図4-11に示すように、MAF AMXファイルでは、リスト・アイテムがモバイル・アプリケーションの埋込みアプリケーション機能であるリスト・ビューを使用してSpringboardを定義します。これらのアプリケーション機能は、デプロイ後は、名前と関連アイコンによって表示されます。AdfmfContainerUtilities APIのgotoFeatureメソッドでは、ページのナビゲーション機能が提供されます。このメソッドを使用した特定のアプリケーション機能の表示の詳細は、第B.2.6項「gotoFeature」を参照してください。また、第6.3.15項「リスト・ビューおよびリスト・アイテム・コンポーネントの使用方法」も参照してください。

図4-11 デフォルトのSpringboard

この図は周囲のテキストで説明しています

MAFでは、ApplicationFeaturesデータ・コントロール内にカスタムSpringboardを作成(またはデフォルトのSpringboardを拡張)するための基本ツールが提供されています。このデータ・コントロール(図4-12を参照)により、モバイル・アプリケーションとそのアプリケーション機能の両方を記述する属性のデータ・コレクションを使用して、Springboardページを宣言的に構築できます。カスタムSpringboardページの例は、APIDemoサンプル・アプリケーションを参照してください。このアプリケーション(およびMAFに付属の他のサンプル)の詳細は、付録F「サンプルのモバイル・アプリケーション・フレームワーク・アプリケーション」を参照してください。

図4-12 ApplicationFeaturesデータ・コントロール

この図は周囲のテキストで説明しています

ApplicationFeaturesデータ・コントロールのメソッドにより、ナビゲーション機能を追加できます。これらのadfmf.containerUtilitiesメソッドについて、表4-2に説明します。詳細は、第B.2項「MAFコンテナ・ユーティリティAPI」を参照してください。また、第7章「バインディングの使用とデータ・コントロールの作成」も参照してください。

表4-2 ApplicationFeatureメソッド

メソッド 説明

gotoDefaultFeature

デフォルトのアプリケーション機能に移動します。

gotoFeature

このメソッドに渡されたパラメータによって指定される特定のアプリケーションに移動します。

gotoSpringboard

Springboardに移動します。

hideNavigationbar

ナビゲーション・バーを非表示にします。

showNavigationbar

ナビゲーション・バーを表示します(非表示になっている場合)。

resetFeature

このメソッドに渡されたパラメータによって指定されるアプリケーション機能をリセットします。


4.5.6 Springboardの実行時動作に関する必知事項

「アプリケーションの起動時にSpringboardを表示」オプションを選択して、スライドアウト幅を画面の最大サイズに定義すると、MAFでは、起動時にバックグラウンドでデフォルトのアプリケーション機能がロードされます。モバイル・アプリケーションの休止時には、MAFではSpringboardを非表示にします。

4.6 モバイル・アプリケーション内のアプリケーション機能の構成

各モバイル・アプリケーションには、少なくとも1つのアプリケーション機能が必要です。

4.6.1 モバイル・アプリケーションのコンテンツの指定方法

図4-14は、「機能参照」ページを示しています。このページで、モバイル・アプリケーションのコンテンツを構築できます。第4.2項「モバイル・アプリケーションの構成ファイルについて」に示したように、モバイル・アプリケーション識別子ファイルの<adfmf:featureReference>要素によって、これらのアプリケーション機能を指定します。

例4-8 maf-application.xmlファイルでの機能参照の指定

<adfmf:featureReference id="Prod"
                        showOnNavigationBar="true"
                        showOnSpringboard="true"/>
<adfmf:featureReference id="Customers"
                        showOnNavigationBar="true"
                        showOnSpringboard="true"/>
<adfmf:featureReference id="HCM"
                        showOnNavigationBar="true"
                        showOnSpringboard="true"/>
<adfmf:featureReference id="custom_springboard"
                        showOnNavigationBar="false"
                        showOnSpringboard="false"/>
<adfmf:navigation>
   <adfmf:springboard enabled="true">
      <adfmf:springboardFeatureReference id="custom_springboard"/>
   </adfmf:springboard>
</adfmf:navigation>

例4-8では、いくつかの定義済の機能参照とそれらに関連する属性を示しています。概要エディタでは、これらの機能参照は「機能参照」表に表示されます。図4-14は、カスタマおよび製品のアプリケーション機能をそれぞれ表すHCMおよびPRODに対して定義された機能参照を示しています。このページを使用して、アプリケーション機能に対する参照を入力し、モバイル・アプリケーションのSpringboard内での表示を設定します(図4-1を参照)。

さらに、このページでは、ナビゲーション・バーおよびSpringboard上でのアプリケーション機能の表示順序を設定できます。実行時に、デバイス画面の幅によって、ナビゲーション・バーに表示されるアプリケーション機能の数を制限できます。ナビゲーション・バーに収まらない機能は、「次へ」タブの下に表示されます(図4-46を参照)。「編集」機能を使用して、「次へ」タブ内のアプリケーション機能の順序を変更できます。

図4-13「次へ」タブ

この図は周囲のテキストで説明しています

注意:

モバイル・アプリケーションの構築は反復型のプロセスなので、新しいFARが使用可能になり、新しいアプリケーション機能がmaf-feature.xmlファイルに追加されると、機能参照を追加、削除または更新できます。


図4-14 「機能参照」ページを使用したアプリケーション機能の指定

この図は周囲のテキストで説明しています

始める前に

第4.9項「アプリケーション機能の基本構成の設定」に示すように、アプリケーション機能がmaf-feature.xmlファイル内で構成されている必要があります。さらに、maf-application.xmlの概要エディタを開く必要があります。

機能参照を指定するには:

  1. maf-application.xmlの概要エディタの「機能参照」ページをクリックします。

  2. 「追加」をクリックします。

  3. 機能参照の挿入ダイアログで、ドロップダウンリストからアプリケーション機能のIDを選択します(図4-15を参照)。インポートした機能アーカイブ(FAR)ファイルに含まれているアプリケーション機能への参照を追加することもできます。詳細は、第4.13.2項「FARのライブラリとしての追加時に行われる処理」を参照してください。

    このダイアログには、maf-feature.xmlファイルの<adfmf:feature>要素に記述されているすべてのアプリケーション機能がリストされます。このダイアログを使用することで、<adfmf:featureReference>要素と<adfmf:feature>要素の両方のid属性が確実に一致するようになります。第4.6.2項「機能参照IDと機能IDに関する必知事項」も参照してください。

    図4-15 モバイル・アプリケーションのコンテンツの選択

    この図は周囲のテキストで説明しています
  4. 必要に応じて、上矢印と下矢印(図4-15を参照)を使用して機能参照の表示順序を調整するか、「ID」列の行にあるドロップダウン・リスト(図4-16を参照)を使用して機能参照の順序を変更します。最上位のアプリケーション機能が、デフォルトのアプリケーション機能です。このアプリケーションのセキュリティ構成に応じて、MAFではユーザーが匿名でログインして保護されていないコンテンツを表示したり、ユーザーに認証資格証明を提供するように求めることができます。詳細は、第21.1項「モバイル・アプリケーション・フレームワークのセキュリティについて」を参照してください。


    注意:

    「機能参照」表の最上位のIDが、モバイル・アプリケーション内で最初に表示されるアプリケーション機能です。例として、図4-7に示されているFeature 1アプリケーション機能を参照してください。


    図4-16 機能参照の順序変更

    この図は周囲のテキストで説明しています
  5. 「ナビゲーション・バーに表示」列および「Springboardに表示」列の行のドロップダウン・リストから、 「true」または「false」を選択することで、Springboardとナビゲーション・バーのアプリケーション機能に対する表示動作を設定します。図4-17は、アプリケーション機能がナビゲーション・バーに表示されなくなるオプションの選択状態を示しています。


    ヒント:

    アプリケーションによってカスタムSpringboardが使用される場合、またはアプリケーション機能が単一のスライディング・ウィンドウとして表示される場合は、これらのオプションをfalseに設定します。詳細は、第4.7.6項「スライディング・ウィンドウの有効化」を参照してください。


    図4-17 ナビゲーション・オプションの変更

    この図は周囲のテキストで説明しています

    デフォルトでは、Springboardとナビゲーション・バーが表示されます(つまり、これらの属性はtrueに設定されます)。ナビゲーション・バーとSpringboardの両方の属性をfalseに設定すると、アプリケーション機能は最初の位置にある場合のみ表示されるようになります。第B.2.11項「hideNavigationBar」および第B.2.12項「showNavigationBar」も参照してください。


    注意:

    Springboardアプリケーションは、ナビゲーション・バー上またはモバイル・アプリケーションのSpringboard内には表示されないので、カスタムSpringboardアプリケーション機能として使用される機能参照については、「ナビゲーション・バーに表示」および「Springboardに表示」を両方ともfalseに設定する必要があります。第4.5.5項「MAF AMXコンテンツによるカスタムSpringboardアプリケーション機能に関する必知事項」も参照してください。


4.6.2 機能参照IDと機能IDに関する必知事項

モバイル・アプリケーションには多数のプロジェクトを格納できるので、複数のmaf-feature.xmlファイルを含むこともできます。アプリケーション構成ファイルでは、機能参照はmaf-feature.xmlファイルによって記述される機能と関連しています。<adfmf:featureReferenceのIDは、対応するアプリケーション機能が定義される場所を識別します。言い換えれば、maf-application.xmlファイル内の<adfmf:featureReference要素のid属性は、maf-feature.xml内の<adfmf:feature要素に対して定義されたid属性と同じである必要があります。たとえば、maf-application.xml<adfmf:featureReference id="customers"は、maf-feature.xml<adfmf:feature id="customers"によって定義されます。JDeveloperは、同じモバイル・アプリケーション内のアプリケーションと機能識別子ファイルの間の参照を監査し、矛盾を発見したら警告を行います。図4-18に示すように、JDeveloperは、機能参照と機能アプリケーション識別子ファイルで宣言された機能との間の不一致をコード内で波状の下線で強調表示し、「参照が見つかりません」という警告を表示します。この場合は、機能参照IDが正しいProdではなくPridと定義されています。JDeveloperの構文監査の詳細は、Oracle Fusion Middleware Oracle Jdeveloperによるアプリケーションの開発の「Javaプロジェクトの監査とモニタリング」の章を参照してください。

図4-18 id属性の監査

この図は周囲のテキストで説明しています

<adfmf:featureReference>のIDがmaf-feature.xmlファイルで定義されている場合、ポップアップ・メニューの「宣言に移動」(図4-19を参照)を使用して、maf-application.xmlファイル内の<adfmf:featureReference>idから、これに対応するmaf-feature.xmlファイル内の<adfmf:feature>idへ移動できます。

図4-19 maf-feature.xmlファイル内のアプリケーション機能宣言の検索

この図は周囲のテキストで説明しています

機能IDはアプリケーション全体を通して一意である必要があります。アプリケーション機能は再使用できるので、適切な命名規則によって機能IDを必ず一意にしてください。


注意:

MAFビュー・コントローラ・プロジェクトを、別のMAFビュー・コントローラ・プロジェクトの依存性またはモバイル・アプリケーション・コントローラ・プロジェクトの依存性として追加しないでください。これを行った場合、追加したビュー・コントローラ・プロジェクトに、元のMAFビュー・コントローラ・プロジェクトのmaf-feature.xmlファイルに含まれる<admf:feature>要素と同じid属性を持つ<adfmf:feature>要素が追加されます。その結果、モバイル・アプリケーション全体で<adfmf:feature>要素のid属性が一意でないことが検出されるため、デプロイメント・フレームワークによるデプロイメントは終了します。


4.7 ライフサイクル・イベント・リスナーについて

MAFランタイムでは、クラスが様々なLifeCycleListenerメソッドを実装して、ネイティブ・オペレーティング・システムのフレームワークからJVMに送信されるイベント通知を伝達します。これらのイベント通知は、モバイル・アプリケーションと埋込みのアプリケーション機能の両方の様々な状態(起動、停止または休止)について記載しています。MAFは、汎用的な起動メッセージを使用して、JVMでクラス関数を呼び出します。

maf-application.xmlファイルとmaf-feature.xmlファイルの概要エディタでは、イベント発生時にMAFがコールするライフサイクル・リスナー・クラスを宣言的に追加できます。概要エディタのライフサイクル・イベント・リスナー・クラス・フィールドにある「クラスおよびパッケージ・ブラウザ」を使用して、完全修飾クラス名(パッケージを含む)を入力すると、JDeveloperによってXMLページにlistener-class属性が移入されます。モバイル・アプリケーションでは、この属性は<adfmf:application>要素に含まれています(例4-9を参照)。

例4-9 maf-application.xmlファイルのlistener-class属性

<adfmf:application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:adfmf="http://xmlns.oracle.com/jdev/adfmf"
                   id="app-20110308"
                   name="#{strings.Title}"
                   vendor="Oracle"  version="1.0"
                   listener-class="oracle.adfmf.application.AppListener">
 
...
 
</adfmf:application>

maf-feature.xmlファイルでは、listener-class属性は、<adfmf:feature>属性内に格納されています(例4-10を参照)。

例4-10 maf-feature.xmlファイルのlistener-class属性

...
 
   <adfmf:feature id="mycompany.phonelist"
                 name="Phone List"
                 icon="mycompany.phonelist/phoneicon.png"  
                 listener-class="oracle.adfmf.feature.LifeCycleListener">
                 image="mycompany.phonelist/phoneimage.png"
      <adfmf:content id="general">

         <adfmf:amx file="mycompany.phonelist/phone.amx"/>
      </adfmf:content>
 
   </adfmf:feature>
 
...

モバイル・アプリケーションを作成すると、JDeveloperによって、アプリケーション用のLifeCycleListenerImpl.javaというライフサイクル・リスナー・クラスが作成されます。このファイルを使用して、特定のメソッドを実装できます(第17章「プッシュ通知の有効化」を参照)。Lifecycle Eventsサンプル・アプリケーションでは、maf-application.xmlファイルおよびmaf-feature.xmlファイル内の両方でイベント・リスナー・クラスを宣言する例が提供されます。このサンプル・アプリケーションは、開発用コンピュータのJDeveloperインストール・ディレクトリ内にある次の場所のPublicSamples.zipファイルに含まれています。

jdev_install/jdeveloper/jdev/extensions/oracle.maf/Samples

4.7.1 モバイル・アプリケーションのイベント

アプリケーション・ライフサイクル・イベントを実行するには、モバイル・アプリケーションのライフサイクル・リスナー・クラスで、LifeCycleListenerインタフェースのstartstopactivateおよびdeactivateメソッドを実装する必要があります(例4-11を参照)。

例4-11 モバイル・アプリケーションのLifeCycleListenerインタフェース

package oracle.adfmf.application;
 
public interface LifeCycleListener
{
   void start();
   void stop();
   void activate();
   void deactivate();
}

注意:

アプリケーション・ライフサイクル・リスナーは、匿名ユーザーによって実行されます(つまり、そのリスナーのメソッドにはどのユーザーも関連付けられず、セキュアなWebサービスもコールされません)。


例4-12に示すAppListenerクラスでは、イベントを開始または停止するためにLifeCycleListenerメソッド・コールを使用します。また、アプリケーションを休止させる(deactivate)場合や、休止から戻す(activate)場合にも、これらのメソッド・コールを使用します。詳細は、第4.7.2項「モバイル・アプリケーション・イベントのタイミング」を参照してください。また、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスのLifeCycleListenerインタフェースに関する項も参照してください。

例4-12 LifeCycleListenerインタフェースの実装

package some.package;
import oracle.adfmf.application.LifeCycleListener;
 
public class AppListener implements LifeCycleListener
{
    public AppListener()
    {
        super();
    }
    public void start()
    {
        // Perform application startup tasks...
    }
    public void stop()
    {
        // Perform tasks to stop the application...
    }
    public void activate()
    {
        // Perform appplication activation tasks...
    }
    public void deactivate()
    {
        // Perform application deactivation tasks...
    }
}

LifeCycleEventsサンプル・アプリケーション(付録F「サンプルのモバイル・アプリケーション・フレームワーク・アプリケーション」を参照)のアプリケーション・コントローラ・プロジェクトには、LifeCycleListenerインタフェースを実装するクラス(LifeCycleListenerImpl.java)があります。


注意:

起動ライフサイクル・コードを実行する前に、マネージドBeanとデータ・バインディングを初期化する必要があります。


4.7.2 モバイル・アプリケーション・イベントのタイミング

MAFは、モバイル・アプリケーションの起動時、シャットダウン時、休止時における特定のタイミングでアプリケーション・ライフサイクル・メソッドをコールします。表4-3は、これらのメソッドがコールされるタイミングと、各イベントに対応するObjective-Cを示しています。

表4-3 MAFライフサイクル・メソッド

メソッド タイミング いつコールされるか 使用方法 iOSアプリケーション委任メソッドとの関係

start

モバイル・アプリケーションがアプリケーション機能を完全にロードした後、ユーザーに最初のアプリケーション機能またはSpringboardを表示する直前にコールされます。これはブロック化コールです。

アプリケーションの処理が開始されたとき。

次の使用方法があります。

  • モバイル・アプリケーションの更新があるかどうかを確認する。

  • ローカル・データベースにデータをダウンロードするよう、リモート・サーバーにリクエストする。

このイベントは特定のアプリケーション委任メソッドには対応していません。maf-application.xmlファイルとmaf-feature.xmlファイルのロード後、スプラッシュ画面が非表示になる直前にコールされます。

stop

モバイル・アプリケーションがシャットダウンを開始するときにコールされます。

アプリケーションの処理が終了したとき。

次の使用方法があります。

  • 任意のリモート・サービスからログオフする。

  • アプリケーションが終了する前に、データの変更をサーバーにアップロードする。

アプリケーション委任のapplicationWillTerminate:メソッド内でコールされます。

activate

モバイル・アプリケーションをバックグラウンドにある(休止)状態からアクティブ化するときにコールされます。これはブロック化コールです。

startメソッドがコールされた後。

次の使用方法があります。

アプリケーション委任のapplicationDidBecomeActive:メソッド内でコールされます。

deactivate

モバイル・アプリケーションを非アクティブ化し、バックグラウンドに移動する(休止)ときにコールされます。これはブロック化コールです。

stopメソッドがコールされる前。

次の使用方法があります。

アプリケーション委任のapplicationWillResignActive:メソッド内でコールされます。


4.7.3 アクティブ化および非アクティブ化メソッドを使用したアプリケーションの状態の保存

チェックポイントの適用によってアプリケーションの状態が保存されるため、ユーザーは、チェックポイント・エントリをactivateおよびdeactivateメソッドに追加することによって、休止前にアクティブであったモバイル・アプリケーションの最後のページを引き続き使用できます。ライフサイクル・リスナーは、activateクラスに追加されたチェックポイント・エントリを読み取り、アプリケーションが休止から戻った後、処理を再開できるようにします。ユーザーは再度ログインする必要がなくなるため、アプリケーションを中断することなく引き続き使用できます。休止中にアプリケーションが終了した場合、deactivateメソッドの一部として、チェックポイント情報をデータベースまたはデバイスのキャッシュ・ディレクトリに書き込むよう指定することによって、アプリケーションを再開できるようになります。アクティブ化中にこのチェックポイント情報を読み取ることによって、アプリケーションが同じページから再開されます。

4.7.4 アプリケーション機能ライフサイクル・リスナー・クラスについて

モバイル・アプリケーション機能ライフサイクル・リスナー・クラス(例4-14に示したFeatureListenerPhoneListなど)では、LifeCycleListenerインタフェースのactivateおよびdeactivateメソッドを実装する必要があります(例4-13を参照)。

例4-13 アプリケーション機能LifeCycleListenerのインタフェース

package oracle.adfmf.feature;
public interface LifeCycleListner
{
   void activate();
   void deactivate();
}

例4-14は、FeatureListenerPhoneListと呼ばれるクラスを示しています。このクラスでは、LifeCycleListenerを実装することで、activateおよびdeactivateメソッドを使用してアプリケーション機能を表示/非表示にします(表4-4を参照)。これらのメソッドでは、アプリケーション機能をアプリケーションの休止時に非表示にしたり、休止から戻ったときに表示したりできます。


注意:

Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスで説明されているように、activateおよびdeactivateメソッドはブロック化コールです。これらのメソッドは完全に実行されるまでユーザー・インタフェースを固定するため、メソッド内に含まれる実行時間の長い処理によって別のアプリケーション機能のアクティブ化が遅延されます。アプリケーションが非アクティブ化される前に実行時間の長い処理を完了する必要がない場合、この処理をこれらのメソッド内ではなくバックグラウンド・スレッドに含めます。


例4-14 アプリケーション機能ライフサイクルの実装

package some.package;
 
import oracle.adfmf.feature.LifeCycleListener;
 
public class FeatureListenerPhoneList implements LifeCycleListener
{
    public FeatureListenerPhoneList()
    {
        super();
    }
    public void activate()
    {
        // Perform application activation tasks...
    }
    public void deactivate()
    {
        // Perform application deactivation tasks...
    }
 
}

ヒント:

LifeCycle Eventsサンプル・アプリケーションでは、Feature1Handler.javaおよびFeature2Handler.javaファイルにより、アプリケーション機能レベルでLifeCycleListenerインタフェースを使用する例が提供されています。これらのファイルは、ビュー・コントローラ・プロジェクトのApplication Sourcesフォルダ内にあります。


4.7.5 アプリケーション機能ライフサイクルでイベントをアクティブ化および非アクティブ化するタイミング

アプリケーション機能ライフサイクル・リスナー・クラスを実装することによって、アプリケーション機能で、applicationScope変数や、アプリケーション機能が非アクティブ化されたときに変更されたアプリケーション機能固有の変数に対する、すべてのデータ変更を自動的に取得できるようになります。表4-4は、アプリケーション機能に対してactivateイベントおよびdeactivateイベントを実行するタイミングを示しています。詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

表4-4 アプリケーション機能に対するactivateおよびdeactivateメソッド

メソッド タイミング いつコールされるか 使用方法

activate

現在のアプリケーション機能がアクティブ化される前にコールされます。

ユーザーがモバイル・アプリケーションの起動後に初めてアプリケーション機能を選択したとき、またはアプリケーション機能が再選択されたとき(つまり、フォアグラウンドに戻されたとき)にコールされます。

次の使用方法があります。

  • applicationScope変数を読み取る。

  • 最初のMAF AMXビューにおける現在の行を設定する。

deactivate

次のアプリケーション機能がアクティブ化される前、またはアプリケーション機能が終了する前にコールされます。

ユーザーが別のアプリケーション機能を選択したときにコールされます。

たとえば、deactivateイベントを使用して、applicationScope変数や、次のアプリケーション機能が使用するその他の状態情報を記述できます。


4.7.6 スライディング・ウィンドウの有効化

アプリケーション・ライフサイクル・リスナー(ALCL)にoracle.adfmf.framework.api.AdfmfSlidingWindowUtilitiesインタフェースを実装することによって、アプリケーション機能を、ナビゲーション・バーまたはSpringboard内に表示される他のアプリケーション機能と同時に表示されるスライディング・ウィンドウとして使用できます。スライディング・ウィンドウを使用して、アプリケーション内に常に表示するコンテンツ(グローバル・ツールバーなど)または一時(ポップアップ)コンテンツ(ヘルプ・ウィンドウなど)を表示できます。Springboardまたはナビゲーション・バー内でのアプリケーション機能の表示の詳細は、第4.6.1項「モバイル・アプリケーションのコンテンツの指定方法」を参照してください。AdfmfSlidingWindowUtilities APIのメソッドの使用の詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

4.8 モバイル・アプリケーション機能の構成ファイルについて

maf-feature.xmlファイル(例4-15を参照)では、対応するmaf-application.xmlファイルの<adfmf:featureReference>要素によって参照される実際のモバイル・アプリケーション機能を構成できます。

例4-15 maf-feature.xmlファイル

<?xml version="1.0" encoding="UTF-8" ?>
<adfmf:features xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:adfmf="http://xmlns.oracle.com/adf/mf">
    <adfmf:feature id="PROD" 
                   name="Products" 
                   icon="images/logo.png">
        <adfmf:constraints>
        </adfmf:constraints>
        <adfmf:description>Products</adfmf:description>
        <adfmf:content id="PROD.1">
            <adfmf:amx file="PROD/products_page.amx"/>
        </adfmf:content>
    </adfmf:feature>
    <adfmf:feature id="HCM" 
                   name="Contents" 
                   icon="images/directory.png">
        <adfmf:description>People Finder</adfmf:description>
        <adfmf:content id="HCM.1">
            <adfmf:remoteURL connection="Connections1"/>
        </adfmf:content>
    </adfmf:feature>
    <adfmf:feature id="Customers.1" 
                   name="Customers" 
                   icon="images/people.png">
        <adfmf:constraints>
            <adfmf:constraint property="user.roles" 
                              operator="equal" 
                              value="field sales"/>
            <adfmf:constraint property="user.roles" 
                              operator="not" 
                              value="consultant"/>
        </adfmf:constraints>
        <adfmf:description>Customers</adfmf:description>
        <adfmf:content id="Customers.2">
            <adfmf:localHTML url="Customers/customers_page.html"/>
        </adfmf:content>
    </adfmf:feature>
</adfmf:features>

maf-feature.xmlファイルの要素を定義することで、アプリケーション機能の動作を設定します。このためには、今度はXMLファイル内のルート要素<adfmf:features>の下で最上位の要素である<Feature>要素の子要素を定義します。<Feature>要素そのものは、名前、バージョン、セキュリティ保護の有無など、アプリケーション機能の基本情報について記述しています。詳細は、第21章「モバイル・アプリケーションの保護」を参照してください。<Feature>要素の子要素を表4-5に示します。maf-application.xml識別子ファイルの概要エディタのように、maf-feature.xmlファイルの概要エディタを使用して、このファイルをこれらの要素で宣言的に更新(または編集)できます(第4.9項「アプリケーション機能の基本構成の設定」を参照)。

表4-5 <Feature>要素の子要素

要素 説明

<adfmf:content>

特定のデバイスやユーザーに対してアプリケーション機能で使用される形式を記述します。アプリケーション機能のコンテンツ(通常はユーザー・インタフェース)は、MAF AMXページやHTML5ページとして記述することも、リモートWebサーバー上でホストされるWebページから配信することもできます。コンテンツをWebアプリケーションとして指定する方法は、第13章「リモートURLを使用したアプリケーション機能コンテンツの実装」を参照してください。

<adfmf:constraint>

指定したアプリケーション機能を実行時にアプリケーションに表示できるようにするかどうかを決定します。制約を使用すると、ユーザー・ロールやデバイスのプロパティなどの基準に基づいてアプリケーション機能の使用を許可または回避できます。詳細は、第15章「アプリケーション機能に関する制約の設定」を参照してください。


4.9 アプリケーション機能の基本構成の設定

各モバイル・アプリケーションには、少なくとも1つのアプリケーション機能が必要です。各アプリケーション機能はそれぞれ別個に(モバイル・アプリケーション自体とも別に)開発できるので、maf-feature.xmlファイルの概要エディタでは、<adfmf:features>の子要素を定義して、それぞれの名前とIDを割り当て、コンテンツの実装方法を設定することで、アプリケーション機能を区別できます。アプリケーション機能の概要エディタを使用すると、モバイル・アプリケーション内のアプリケーション機能のランタイム表示を制御したり、アプリケーション機能がユーザー認証を必要とするタイミングを指定することもできます。

4.9.1 アプリケーション機能の基本情報の定義方法

概要エディタの「一般」タブ(図4-20を参照)では、アプリケーション機能を追加したり、その基本情報や表示アイコンを指定できます。

図4-20 アプリケーション機能の「一般」タブ

この図は周囲のテキストで説明しています

始める前に

アプリケーション機能で、MAFによって提供されるデフォルト・イメージではなく、ナビゲーション・バーやSpringboardのカスタム・イメージを使用する場合、これらのイメージは、Android開発者のWebサイト(http://developer.android.com/design/style/iconography.html)および、iOS Developer Library (http://developer.apple.com/library/ios/navigation/)で入手できる『iOS Human Interface Guidelines』の「Custom Icon and Image Creation Guidelines」の章に示されている仕様に従って作成する必要があります。

これらのイメージは、ビュー・コントローラ・プロジェクトのpublic_htmlディレクトリに配置します。第4.10.2項「外部リソースの選択に関する必知事項」も参照してください。

さらに、maf-feature.xmlファイルを開いて、「一般」タブを選択する必要があります。

アプリケーション機能の基本情報を設定するには:

  1. 「一般」タブを選択します。

  2. 「機能」表で、「追加」をクリックします。

  3. 「MAF機能の作成」ダイアログ(図4-18を参照)に入力して、「OK」をクリックします。このダイアログは次のように入力します。

    • 「機能名」フィールドに、アプリケーション機能の表示名を入力します。

    • 「機能ID」フィールドに、アプリケーション機能の一意の識別子を入力します。

    • 必要に応じて、アプリケーション機能の場所を、public_htmlディレクトリ(デフォルトの親ディレクトリ)内の任意のディレクトリに変更します。この場所を「ディレクトリ」フィールドに入力します。

    • 新しく定義したアプリケーション機能をモバイル・アプリケーションに追加するには、「機能ID」に入力した値と一致するid属性を持つmaf-application.xmlファイルに、新しい<adfmf:featureReference>要素を追加します。「対応する機能参照をmaf-application.xmlに追加」を選択します。このダイアログの入力を完了すると、「機能参照」ページの表(図4-14を参照)に機能参照が追加されます。第4.6.2項「機能参照IDと機能IDに関する必知事項」も参照してください。

      図4-21 アプリケーション機能の追加

      この図は周囲のテキストで説明しています
  4. 概要エディタの「一般」タブで、「ベンダー」フィールドに、アプリケーション機能を最初に作成したベンダーの名前を入力します。これはオプションの値です。

  5. 「バージョン」フィールドに、アプリケーション機能のバージョン番号を入力します。これはオプションの値です。

  6. 「説明」フィールドに、アプリケーションの目的の簡単な説明を入力します。これはオプションの値です。

  7. 「ライフサイクル・イベント・リスナー」の「クラスおよびパッケージ・ブラウザ」を使用して、完全修飾クラス名(oracle.adfmf.featureのようにパッケージを含む)を入力して、イベントを起動、停止、休止および休止から戻すためのランタイム・コールを有効にします。詳細は、第4.7項「ライフサイクル・イベント・リスナーについて」を参照してください。これはオプションの値です。

  8. 「ナビゲーション・バー・アイコン」および「Springboardイメージ」フィールドで、ナビゲーション・バーのアイコンとして使用するイメージと、Springboardの表示アイコンとして使用するイメージを、プロジェクトから参照して選択します。「アプリケーション」ウィンドウから「ファイルの場所」フィールドにイメージ・ファイルをドラッグ・アンド・ドロップすることもできます。これはオプションの値です。

4.10 アプリケーション機能のコンテンツ・タイプの定義

アプリケーション機能のコンテンツ・タイプには、ユーザー・インタフェースの形式が記述されます。このコンテンツ・タイプは、MAF AMXコンポーネントまたはHTML(5)タグを使用して構成できます。また、アプリケーション機能では、モバイル・コンテキストに適したコンテンツを含む、リモートでホストされたページから、自身のコンテンツを導出することもできます。このようなWebページとして考えられるのは、スマートフォン向けのApache Trinidadで作成されたJavaServerページや、タブレット・デバイス上で実行されるアプリケーション向けのADF Facesコンポーネントから構成されたページです。モバイル・アプリケーションに埋め込まれた各アプリケーション機能では、様々なコンテンツ・タイプを保持できます。


ヒント:

複数のコンテンツ・タイプを含むモバイル・アプリケーションを設計してください。


モバイル・アプリケーションには、様々なコンテンツ・タイプを持つアプリケーション機能が含まれますが、アプリケーション機能自体も、ユーザーおよびデバイス固有の要件に応じた様々なコンテンツ・タイプを保持する場合があります。アプリケーション機能によって、様々なコンテンツ・タイプがどのように提供されるかについては、第15章「アプリケーション機能に対する制約の設定」を参照してください。例4-16のように、子要素を<adfmf:content>要素に追加すると、アプリケーション機能にユーザー・インタフェースをどのように実装するかを定義できます。

例4-16 <adfmf:content>要素

<adfmf:content id="Feature1">
      <adfmf:amx file="FeatureContent.amx">
</adfmf:content>

4.10.1 アプリケーション・コンテンツの定義方法

概要エディタの「コンテンツ」タブ(図4-22を参照)には、例4-16に示したターゲット・コンテンツ関連の要素と属性を定義するためのドロップダウン・リストとフィールドが表示されます。このタブのフィールドを使用すると、アプリケーション機能用に配信されるコンテンツのタイプと、そのコンテンツ・タイプで使用するナビゲーションとSpringboardアイコンのイメージを制御できる制約を設定できます。

各コンテンツ・タイプには、独自のパラメータ・セットがあります。たとえば、図4-22に示すように、MAF AMXページの場所、またはMAF AMXコンテンツとして実装するアプリケーション機能のタスク・フローの場所を指定する必要があります。さらにオプションで、アプリケーション機能に他のアプリケーション機能(またはモバイル・アプリケーション自体)とは異なるルック・アンド・フィールを設定するCSSファイルを選択したり、MAF AMXコンポーネントのアクションを制御するJavaScriptファイルを選択することもできます。

図4-22 アプリケーション機能の実装の定義

この図は周囲のテキストで説明しています

始める前に

各コンテンツ・タイプには、次のような独自の前提条件があります。

  • MAF AMX: アプリケーション機能のデフォルトのコンテンツ・タイプで、個々のMAF AMXページおよびタスク・フローの両方が含まれます。MAF AMXコンテンツは、一連のモバイル固有のユーザー・インタフェース・コンポーネント、ADFデータ・バインディング、カメラなどのデバイス・サービスを統合するデータ・コントロール、およびチャート、グラフ、テーマ・マップなどのデータ視覚化ツールを使用して、宣言的に構築できます。MAF AMXページの構築の詳細は、第5章「MAF AMXページの作成」を参照してください。

    MAF AMXとして実装されるアプリケーション機能には、既存のビュー(単一のMAF AMXページ)か、バインド・タスク・フローまたはバインドなしタスク・フローが必要です。JavaScriptファイルを追加すると、MAF AMXコンポーネントに対するレンダリング・ロジックが提供されるか、既存のレンダリング・ロジックがオーバーライドされます。アプリケーション機能に対するカスタムのルック・アンド・フィールを指定するセレクタを持つスタイルシート(CSS)を含めます。これは、モバイル・アプリケーション・レベルで定義されたスタイル(アプリケーション機能にデフォルトで使用されるスタイル)をオーバーライドします。つまり、アプリケーション機能全体で確実に独自のルック・アンド・フィールを持つようになります。

    MAF AMXページとこれらを格納するモバイル・アプリケーションは、両方とも「新規ギャラリ」のウィザードを使用して作成できます。これらのウィザードにアクセスするには、まず「アプリケーション」ウィンドウでビュー・コントローラ・プロジェクトを強調表示してから、次に「新規」を選択します。または、「アプリケーション」ウィンドウでビュー・コントローラ・プロジェクトを右クリックしてから「新規」を選択すると表示されるポップアップ・メニュー(図4-23を参照)を使用して、MAF AMXページを作成することもできます。


    注意:

    maf-feature.xmlファイル内にある、タスク・フロー、MAF AMXページ、CSSおよびJavaScriptファイルへの参照を手動で編集する場合、デバイスで使用されているファイル・システムによって大文字と小文字が区別され、特殊文字が許可されない可能性があることに注意してください。これらのファイルを確実に参照できるようにするには、モバイル・デバイスの仕様を確認してください。


    図4-23 MAFページを作成するためのポップアップ・メニュー

    この図は周囲のテキストで説明しています
  • リモートURL: Webアプリケーションへの参照。既存のWebアプリケーションをモバイル用に拡張し、さらにデバイス・サービスを拡張できます。リモート・コンテンツでは、ローカル・データ・キャッシュや、サーバー側データおよび機能の一式を提供することによって、MAF AMXおよびローカルHTMLコンテンツの両方を補完できます。リモートURL実装には、有効なWebアドレスとホストされたモバイル・アプリケーションが必要です。詳細は、第13章「リモートURLを使用したアプリケーション機能コンテンツの実装」を参照してください。

  • ローカルHTML: ユーザーのモバイル・アプリケーション内にパッケージ化されるHTMLページを参照します。HelloWorldサンプル・アプリケーション(付録F「サンプルのモバイル・アプリケーション・フレームワーク・アプリケーション」を参照)で示したようなHTMLページでJavaScriptを参照できます。MAFがアプリケーション機能の実装に最適ではない場合、このコンテンツ・タイプを使用し、Cordova JavaScript APIを使用してアプリケーション機能を実装することを検討してください。JavaScript APIおよびMAFの詳細は、付録B「ローカルHTMLおよびアプリケーション・コンテナAPI」を参照してください。

アプリケーション・コンテンツをリモートURLまたはローカルHTMLとして定義するには:

  1. maf-feature.xmlファイルの「機能」表にリストされているアプリケーション機能を選択します。

  2. 「コンテンツ」をクリックします。

  3. 「追加」をクリックして、「コンテンツ」表に新しい行を作成します。

  4. 次のいずれかのコンテンツ・タイプで、生成されたIDに対応するものを選択します。

    • リモートURL

    • ローカルHTML

  5. コンテンツ固有のパラメータを定義します。

    • リモートURLコンテンツの場合は、図4-24のように接続を選択します。これは、サーバー上のWebページのアドレス(および起動ページの場所)を表しています。

      図4-24 ホスト・アプリケーションの接続の選択

      この図は周囲のテキストで説明しています

      この接続を作成するには、まず「追加」をクリックして、次に「URL接続の作成」ダイアログに入力します(図4-25を参照)。このダイアログの詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。この接続は、connections.xmlファイルに格納されます。


      注意:

      この接続は、アプリケーション・リソースとしてのみ作成できます。


      図4-25 URL接続の作成

      この図は周囲のテキストで説明しています
    • ローカルHTMLコンテンツの場合は、ローカル・バンドルの場所を入力します。または、「URL」フィールドで「追加」をクリックし、図4-26に示すダイアログに入力して、JDeveloperのHTMLエディタを使用してページを構築することで、HTMLページを作成します。これはアプリケーション機能なので、このページはビュー・コントローラ・プロジェクトのWeb Contentフォルダに格納されます。

      図4-26 アプリケーション機能のコンテンツとしてのローカルHTMLページの作成

      この図は周囲のテキストで説明しています
  6. 必要に応じて、次の手順を実行します。

アプリケーション機能のコンテンツをMAF AMXとして指定するには:

  1. アプリケーション機能を選択します。

  2. 「コンテンツ」をクリックします。

  3. 必要に応じて、「追加」をクリックして「コンテンツ」表に行を作成し、「タイプ」列のドロップダウン・リストから「MAF AMX」を選択します(図4-27を参照)。

    図4-27 MAF AMXをコンテンツ・タイプとして選択

    この図は周囲のテキストで説明しています
  4. 「ファイル」フィールドで「参照」をクリックし、「MAF AMXページ」または「タスク・フロー」を選択して(図4-28を参照)、MAF AMXページまたはバインド・タスク・フローの場所に移動し、これを取得します。または、「アプリケーション」ウィンドウから「ファイルの場所」フィールドにMAF AMXページをドラッグ・アンド・ドロップすることもできます。

    図4-28 ファイル・フィールドでのファイルの場所の参照

    この図は周囲のテキストで説明しています
  5. または、ページまたはタスク・フローを作成します。これを行うには、次の手順を実行します。

    1. 「ファイル」フィールドで「追加」をクリックして、「MAF AMX」または「タスク・フロー」を選択します(図4-29を参照)。

      図4-29「ファイル」フィールドからの「MAF AMXページ」または「タスク・フロー」の追加

      この図は周囲のテキストで説明しています
    2. 「MAF AMXページの作成」ダイアログ(図4-30参照)など、作成ダイアログの入力を完了させます。

      図4-30 「MAF AMXページの作成」ダイアログ

      この図は周囲のテキストで説明しています
    3. エディタを使用して、MAF AMXページまたはタスク・フローを構築します。

  6. 必要に応じて、次の手順を実行します。


    注意:

    イメージ、スタイルシートおよびJavaScriptファイルは、デプロイ可能にするために、public_htmlフォルダ内に配置する必要があります。第4.10.2項「外部リソースの選択に関する必知事項」を参照してください。


4.10.2 外部リソースの選択に関する必知事項

デプロイメントを可能にするために、次の属性によって参照されるすべてのリソースは、ビュー・コントローラ・プロジェクトのpublic_htmlディレクトリ内に配置する必要があります。

MAFは、別の場所から参照されるリソースをサポートしていません。つまり、たとえば、../を接頭辞として使用して、public_htmlディレクトリ外部に値を入力することはできません。public_html外部のリソースを参照しないようにする安全策として、MAFには、「ファイルがpublic_htmlディレクトリにありません」と呼ばれる監査ルールが含まれています。MAFの監査プロファイル(図4-31を参照)には、「ツール」「プリファレンス」「監査」「プロファイル」と選択することで、「プリファレンス」の「監査」の下の「プロファイル」ノードからアクセスできます。

図4-31 MAFの監査プロファイル

この図は周囲のテキストで説明しています

このプロファイルを選択した場合、リソースの場所を変更すると、JDeveloperによって警告が発行されます。図4-32に示すように、デフォルト値がオーバーライドされると、JDeveloperはこうした警告を表示します。監査の詳細は、Oracle Fusion Middleware Oracle Jdeveloperによるアプリケーションの開発の「Javaプロジェクトの監査とモニタリング」の章を参照してください。

図4-32 外部リソースの警告

この図は周囲のテキストで説明しています

4.11 ローカライズ済コンテンツの操作

ローカライゼーションは、テキストを変換し、ロケール固有のコンポーネントを追加することで、特定地域の言語または文化にアプリケーションを適応させるプロセスです。様々なロケールを使用するようにMAFアプリケーションとそのユーザー・インタフェース・ページを構成することによって、MAFアプリケーションがモバイル・デバイスで設定されている言語用に作成されたもののように表示できます。たとえば、フランス語を話す人がMAFアプリケーションを表示できるようにすることでこのアプリケーションの使用を拡大する場合、デバイスのSpringboardおよびMAF Webビュー内の両方で使用されるテキスト文字列およびイメージがフランス語で表示されるように(つまり、productsles produitsなどに変換されます)アプリケーションをローカライズできます。

JDeveloperでは、これらのテキスト・リソースを28言語に自動的に変換します。

変換可能な文字列(バリデータ・エラー・メッセージまたは属性コントロール・ヒントなど)を定義すると、JDeveloperでは、プロジェクト・レベルのリソース・バンドル・ファイルに変換可能な文字列が格納されます。MAFでは、英語の言語テキスト・リソースを指定します(ただし他の言語では、任意のツールを使用して、リソース・バンドル・ファイルを生成できます)。モバイル・アプリケーションを構成して、アプリケーションおよびビュー・コントローラ・プロジェクト・レベルの両方で変換可能なUI文字列を格納できます。

4.11.1 リソース・バンドルの使用

MAFは、ローカライゼーションにXLIFF (XML Localization Interchange File Format)ファイルのみを使用します。つまり、JDeveloperは、文字列を格納するためにリソース・バンドル.xlfファイルを作成します。XLFFの詳細は、次を参照してください。

http://docs.oasis-open.org/xliff/xliff-core/xliff-core.html

4.11.1.1 リソース・バンドル・オプションの設定方法

プロジェクトの「リソース・バンドル」設定ページを使用して、ビュー・コントローラ・プロジェクトおよびアプリケーション・コントローラ・プロジェクトのリソース・バンドルを作成できます(図4-33を参照)。

図4-33「プロジェクト・プロパティ」の「リソース・バンドル」ページ

この図は周囲のテキストで説明しています

プロジェクトのリソース・バンドル・オプションを設定するには:

  1. 「アプリケーション」ウィンドウで、プロジェクトをダブルクリックします。

  2. 「プロジェクト・プロパティ」ダイアログで、「リソース・バンドル」を選択します。

  3. 自動的にデフォルトのリソース・ファイルを生成するには、「バンドルの自動同期化」を選択します。

  4. 次に示すいずれかのリソース・バンドル・ファイル・オプションを選択します。

    • 1プロジェクト当たり1バンドル: <ProjectName>.xlfという名前のファイルに構成されます。詳細は、第4.11.1.2項「リソース・バンドル・オプションの選択時に行われる処理」を参照してください。

    • 1ファイル当たり1バンドル: リソースをファイル(maf-feature.xmlmaf-application.xmlまたは「MAF AMXページ」)に格納するたびに新しいバンドルが作成されます。このため、各ファイルには独自のバンドルがあります。このオプションによりリソース・バンドルの数が各ファイル1つに制限されるため、このオプションを選択した場合、JDeveloperでは2つ目のバンドルを作成できません。

  5. 「OK」をクリックします。


    注意:

    Xliffリソース・バンドルは、MAFで使用される唯一のリソース・バンドルの形式です。このページの詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。


4.11.1.2 リソース・バンドル・オプションの選択時に行われる処理

JDeveloperでは、図4-33に示すように、「プロジェクト・プロパティ」ダイアログのリソース・バンドル・オプションのパートで行った選択に基づいて、特定のタイプの1つ以上のリソース・バンドルが生成されます。図4-35で示す「テキスト・リソースの選択」ダイアログを初めて呼び出したときに、リソース・バンドルが生成されます。

「1プロジェクト当たり1バンドル」を選択し、「リソース・バンドル・タイプ」ドロップダウン・リストから、「リスト・リソース・バンドル」値を選択したとします。初めて「テキスト・リソースの選択」ダイアログを呼び出すと、JDeveloperではそのプロジェクト用に1つのリソース・バンドルが生成されます。

デフォルトでは、JDeveloperにより、プロジェクトの「アプリケーション・ソース」ディレクトリの「view」サブディレクトリに、生成されたリソース・バンドルが作成されます。

4.11.1.3 リソース・バンドルへの文字列の入力方法

プロジェクト・レベルでは、「リソース・バンドル」ダイアログを使用してリソース・バンドル・ファイルを作成します。このダイアログには、「プロパティ」ウィンドウで「テキスト・リソースの選択」をクリックすることでアクセスします。このダイアログでは、表4-6および表4-7に示すmaf-application.xml属性およびmaf-feature.xml属性のベース・リソース・バンドルに、テキスト・リソースを自動的に作成できます。

アプリケーション・レベルでは、アプリケーション名やプリファレンス・ページのラベルなどの属性の文字列をローカライズできます。表4-6にこれらを示します。

表4-6 MAFアプリケーションのローカライズ可能な属性

要素 属性

<adfmf:Application>

name

<adfmf:PreferenceGroup>

label

<adfmf:PreferencePage>

label

<adfmf:PreferenceBoolean>

label

<adfmf:PreferenceText>

label

<adfmf:PreferenceNumber>

label

<adfmf:PreferenceList>

label

<adfmf:PreferenceValue>

name


プロジェクト(ビュー・コントローラ)レベルでは、表4-7に示すような、アプリケーション機能関連の属性をローカライズできます。

表4-7 アプリケーション機能のローカライズ可能な属性

要素 属性

<adfmf:Feature>

name

<adfmf:Constraint>

value

<adfmf:Parameter>

value

<adfmf:PreferencePage>

label

<adfmf:PrefrenceGroup>

label

<adfmf:PreferenceBoolean>

label

<adfmf:PreferenceText>

label

<adfmf:PreferenceNumber>

label

<adfmf:PreferenceList>

label

<adfmf:PreferenceValue>

name


リソース・バンドルにローカライズ可能な文字列を作成するには:

  1. 「プロパティ」ウィンドウでNameなどの属性を選択します(図4-34参照)。

  2. 「テキスト・リソースの選択」を選択します。図4-34に、「プロパティ」ウィンドウで選択されたアプリケーション名属性を示しています。

    図4-34 テキスト・リソースを選択するダイアログ

    この図は周囲のテキストで説明しています
  3. 「テキスト・リソースの選択」ダイアログ(図4-35を参照)で、表示名とキーを入力して新しい文字列リソースを作成し、「保存して選択」をクリックします。

    図4-35 「テキスト・リソースの選択」ダイアログ

    この図は周囲のテキストで説明しています

4.11.1.4 リソース・バンドル追加時の処理

「テキスト・リソースの選択」ダイアログでリソースを追加すると、JDeveloperによって、指定した表示名の文字列とキー・ファイルをADF Meta-INFファイルに格納した、新しいプロジェクト・リソース・バンドルが作成されます(図4-36acmeBundle.xlfを参照)。

図4-36 アプリケーション・リソース・バンドル

この図は周囲のテキストで説明しています

属性を最初にローカライズすると、JDeveloperによって<adfmf:loadbundle>要素が追加されます。この要素のbasename属性が、新しく作成したリソース・バンドルを参照します。

さらにJDeveloperは、ローカライズされた属性文字列を、リソース・バンドル内で定義された文字列のキーを参照するEL式に変更します。たとえば、JDeveloperは、Acme Salesというアプリケーション名属性を、「テキスト・リソースの選択」ダイアログでキーとして入力されたACME_SALES値に基づいて、name="#{acmeBundle.Acme_Sales}"に変更します。

アプリケーション・レベルにはリソース・バンドル・ファイルが1つしか存在しないので、JDeveloperは、ローカライズされた各文字列を同じリソース・バンドル・ファイルに追加します。

maf-application.xmlおよびmaf-feature.xmlファイルには、それぞれadfmf:loadBundle要素が1つのみ格納されています。アプリケーションをデプロイすると、リソース・バンドルはランタイムによって想定される言語フォーマットに変換されます。

4.11.1.5 MAF AMXコンポーネントの文字列のローカライズ方法

<amx:commandButton>text属性のようなMAF AMXコンポーネントの属性には、リソース・バンドルを作成できます。表4-8に、これらのMAF AMX (amx)コンポーネントを示します。

表4-8 MAF AMXコンポーネントのローカライズ可能な属性

コンポーネント 属性

<amx:inputDate>

label

<amx:inputNumberSlider>

label

<amx:panelLabelAndMessage>

label

<amx:selectBooleanCheckBox>

label

<amx:selectBooleanSwitch>

label

<amx:selectItem>

label

<amx:selectManyCheckBox>

label

<amx:selectManyChoice>

label

<amx:selectOneButton>

label

<amx:selectOneChoice>

label

<amx:selectOneRadio>

label

<amx:commandButton>

text

<amx:commandLink>

text

<amx:goLink>

text

<amx:inputText>

labelvaluehintText

<amx:outputText>

value


MAF AMXコンポーネントの文字列を使用するには:

  1. 「プロパティ」ウィンドウで、<amx:outputText>コンポーネント(図4-37)に対して定義されたvalue属性などの属性を選択します。

    図4-37 MAF AMXコンポーネントに対するテキスト・リソースの選択

    このイメージについては周囲のテキストで説明しています。
  2. 「テキスト・リソースの選択」を選択します。

  3. 「テキスト・リソースの選択」ダイアログ(図4-38を参照)で、表示名とキーを入力して新しい文字列リソースを作成し、「保存して選択」をクリックします。

    図4-38 リソース・バンドルへの文字列の追加

    このイメージについては周囲のテキストで説明しています。

4.11.1.6 MAF AMXコンポーネントのプロジェクト・レベルのリソース・バンドルの作成時に行われる処理

<amx:outputText>コンポーネント(例4-17)のvalue属性などのコンポーネントをローカライズする場合、JDeveloperでは、文字列をEL式(例4-17#{viewcontrollerBundle.LES_PRODUITS}など)に変換します。

例4-17 MAF AMXコンポーネントのローカライズ

<amx:facet name="header">
      <amx:outputText value="#{viewcontrollerBundle.LES_PRODUITS}"
                      id="ot1"
                      rendered="true"/>
    </amx:facet>

さらに、例4-18ViewControllerBundle.xlfのように、JDeveloperはプロジェクトのデフォルト・パッケージの下にリソース・バンドルを作成します。生成された<amx:loadBundle>コンポーネントでは、basenameがこのパッケージを示しています(例4-18を参照)。

例4-18 <amx:loadBundle>コンポーネント

<amx:loadBundle basename="mycomp.mobile.ViewControllerBundle"
                 var="viewcontrollerBundle" 
                 id="lb1"/>

4.11.1.7 イメージ・ファイルのローカライズに関する必知事項

イメージがテキストを格納していたり、特定の国または地域を反映している場合(たとえば旗のピクチャなど)、ローカライゼーション・プロセスの一環として代替イメージを指定できます。イメージをハードコード化することはできません(例: icon="/feature1/test.png")。そのかわり、イメージのパスの<trans-unit>要素を追加することで、ViewControllerBundle.xlfファイルを手動で編集する必要があります(例4-19を参照)。

例4-19 <amx:image>コンポーネントのリソースの定義

<trans-unit id="IMAGEPATH">
     <source>/feature1/test.jpg</source>
     <target/>
</trans-unit>

注意:

例4-19<source>要素で定義されているイメージの場所は、ViewController\public_htmlのアプリケーション機能ファイルの場所を基準にした相対的な場所です。または、イメージ・ファイルの名前を入力することもできます(例: <source>test.png</source>)。第4.10.2項「外部リソースの選択に関する必知事項」も参照してください。


ViewControllerBundle.xlfの更新後、「式ビルダー」を使用して、icon属性のsource属性のEL式を定義します(図4-39を参照)。

図4-39 ローカライズされたアイコン・イメージのEL式の作成

この図は周囲のテキストで説明しています

4.11.1.8 リソース・バンドル・ファイルの編集方法

XLIFFファイルを作成した後で、ソース・エディタを使用してこのファイルを編集できます。

リソース・バンドル・ファイルを編集するには:

  1. メイン・メニューから「アプリケーション」→「リソース・バンドルの編集」を選択します。

  2. 「リソース・バンドルの編集」ダイアログ(図4-40を参照)で、「リソース・バンドル」ドロップダウン・リストから編集するリソース・バンドル・ファイルを選択するか、編集するリソース・バンドル・ファイルが「リソース・バンドル」ドロップダウン・リストに表示されない場合は、「検索」アイコンをクリックして「リソース・バンドルの選択」ダイアログを起動します。

    図4-40 リソース・バンドル文字列の編集

    このイメージについては周囲のテキストで説明しています。
  3. 「リソース・バンドルの選択」ダイアログで、「ファイル・タイプ」ドロップダウン・リストからファイル・タイプを選択します。編集するリソース・バンドルに移動します。「OK」をクリックします。

  4. 「リソース・バンドルの編集」ダイアログで、図4-40に示すように、「追加」アイコンをクリックしてキーと値のペアを追加します。完了したら「OK」をクリックします。

4.11.1.9 iOSアプリケーションのXLIFFファイルに関する必知事項

<adfmf:loadBundle>要素によって記述された場所には、1つ以上のXLIFFファイルが存在している必要があります。XLIFFファイルのファミリには、次のファイルが含まれています。

  • ベースXLIFFファイル: ベースXLIFFファイルの名前は、basename属性によって指定されたパス内の最後のトークンと一致する必要があります。このファイルには.xlfという拡張子が付きます(例: ViewControllerBundle.xlf)。次の定義では、ファイルの名称はViewControllerBundleです。

    <adfmf:loadBundle var="stringBundle" basename="view.ViewControllerBundle"/>
    
  • ゼロ個以上のローカライズされたXLIFFファイル: 各ベースXLIFFファイルには、ゼロ個(以上)のローカライズされたXLIFFファイルを存在させることができます。各ファイルには次の決まりがあります。

    • ファイル拡張子は.xlfである必要があります。

    • 対応するベースXLIFFファイルと同じディレクトリにコロケートさせる必要があります。

    • ファイル名の形式は次のようになります。

      <BASE_XLIFF_FILE_NAME>_<LANGUAGE_TOKEN>.xlf
      

      説明:

      • <BASE_XLIFF_FILE_NAME>は、ベースXLIFFファイル名です(拡張子.xlfは含みません)。

      • <LANGUAGE_TOKEN>の形式は次のとおりです。

        <ISO-639-lowercase-language-code>
        

        注意:

        MAFは、国または地域をサポートしていません。


        たとえば、スペインの場合、言語トークンはesになります。

      たとえば、言語コードがenesfrの場合、stringBundle.xlfという名前のベースXLIFFを参照するXLIFFファイルのローカライズされたファイル名は次のようになります。

      • stringBundle_en.xlf

      • stringBundle_es.xlf

      • stringBundle_fr.xlf

4.11.1.10 iOSアプリケーションの国際化

maf-application.xmlおよびmaf-feature.xmlファイルのローカライズ可能な要素は、表4-7および表4-6に示す属性内で、ELに似た文字列を使用して国際化された文字列を参照します。これらの構成ファイルはアプリケーション・ライフサイクルの初期に読み取られるので、これらの文字列は実行時にはEL文として評価されません。そのかわり、これらの文字列は、ネイティブ・デバイス変換インフラストラクチャにおいて変換された文字列の完全なキーとして取得されます。

式言語の構文は"${BUNDLE_NAME.STRING_KEY}"ですが、MAFは"#{}"によって囲まれた文字列全体をキーとして使用して、変換された文字列を検索します。これらの文字列の形式は、#{bundleName.['My.String.ID']} (ここではXLIFF文字列がピリオドによって分割されています)と、#{bundleName.['MyStringID']} (これはピリオドによって分割されない文字列の識別子に対してのみ使用されます)になります。例4-20には、#{strings.CONTACTS} (name属性を変更します)など、後者の例が示されています。iOSネイティブ・フレームワークでは、デプロイメントで、その文の内容が、変換に使用される*.stringファイル内の適切なキーと必ず一致するようになっています。

エンド・ユーザーに表示される属性、またはエンド・ユーザーに表示されるコンテンツの場所を制御する属性のみが、国際化された文字列の使用をサポートしています。そこには次のような属性が含まれています。

  • <adfmf:application>要素のname属性

  • <adfmf:feature>要素のname属性

  • <adfmf:feature>要素のicon属性

  • <adfmf:feature>要素のimage属性

  • <adfmf:content>要素のicon属性

  • <adfmf:content>要素のimage属性

例4-20では、nameiconimage属性を持つアプリケーション機能が国際化文字列を使用しています。

例4-20 文字列を使用した国際化

<adfmf:feature id="CTCS" name="#{strings.CONTACTS}"  
                         icon="#{strings.CONTACTS_ICON}"
                         image="#{strings.CONTACTS_IMAGE}">
        <adfmf:constraints>
            <adfmf:constraint property="user.roles" 
                              operator="contains" 
                              value="employee" />
        </adfmf:constraints>
        <adfmf:description>The HTML Device Contacts</adfmf:description>
        <adfmf:loadBundle basename="mobile.adfmf-stringsBundle"
                          var="strings"/>
        <adfmf:content id="CTCS.Generic">
            <adfmf:constraints />
            <adfmf:localHTML url="contacts.html" />
        </adfmf:content>
  </adfmf:feature>

<adfmf:loadBundle>要素を定義するときに(例4-21を参照)、バンドル名と実際のバンドルとのマッピングを作成します。バンドル名は、式を評価するときに使用します。

例4-21 <adfmf:loadBundle>を使用したバンドル名のマッピング

   <adfmf:constraints>
      <adfmf:constraint property="user.roles"
                        operator="contains"
                        value="employee" />
   </adfmf:constraints>
        <adfmf:description>The HTML Device Contacts</adfmf:description>
        <adfmf:loadBundle basename="mobile.adfmf-featureBundle" 
                          var="mobileBundle"/>
        <adfmf:loadBundle basename="mobile.adfmf-stringsBundle" 
                          var="strings"/>

MAFのランタイムでは、JVMに最初にアクセスするまで、<adfmf:loadBundle>要素が保持されます。メッセージがJVMに送信され、パッケージのベース名からバンドルのEL名へのマッピングが初期化されます。例4-22は、JVMに送信されるメッセージの構造を示しています。

例4-22 ベース名からEL名へのマッピングを初期化するメッセージ

{classname:"oracle.adfmf.framework.api.Model",method:"setBundles",
 params:[[{basename:"mobile.adfmf-featureBundle",elname:"mobileBundle"},
          {basename:"mobile.adfmf-stringsBundle",elname:"strings"}]]}

4.12 モバイル・アプリケーションのスキニング

MAFではCSS (Cascading Style Sheet)言語ベースのスキンを使用するので、モバイル・アプリケーション内の(その要素のアプリケーション機能で使用されるものを含む)すべてのアプリケーション・コンポーネントが一貫したルック・アンド・フィールを確実に共有するようになっています。MAF AMXまたはHTMLコンポーネントを再構成してモバイル・アプリケーションの外観を変更するかわりに、コンポーネントの表示方法を変更するスキンを作成または拡張できます。MAFは実行時にスキンを適用するので、スキンに対する変更はアプリケーションの起動時に有効になります。

第3.2.2項「MAFアプリケーションの作成時に行われる処理」に示したように、アプリケーション・コントローラ・プロジェクトの作成によって生成されるアーティファクトには、2つのスキニング関連ファイル、maf-config.xmlおよびmaf-skins.xmlが含まれます。これらのファイルを使用して、モバイル・アプリケーションのスキニングを制御します。maf-config.xmlファイルでは、アプリケーション・コンポーネントのレンダリングに使用するデフォルト・スキン・ファミリを指定し、maf-skins.xmlファイルでは、デフォルト・スキン・ファミリをカスタマイズしたり、新しく定義することができます。

4.12.1 maf-config.xmlファイルについて

モバイル・アプリケーションを作成すると、JDeveloperによって、maf-config.xmlファイルがモバイル・アプリケーションのMETA-INFノードに移入されます。このファイル自体には、ベースMAFスキン・ファミリであるmobileAltaが移入されます(例4-23を参照)。

例4-23 maf-config.xmlファイルに移入されたデフォルト・スキン(mobileAlta)

<?xml version="1.0" encoding="UTF-8" ?>
<adfmf-config xmlns="http://xmlns.oracle.com/adf/mf/config">
  <skin-family>mobileAlta</skin-family>
  <skin-version>v1.1</skin-version>
  <generic-type>
    <conversion>
      <validated>false</validated>
    </conversion>
  </generic-type>
</adfmf-config>

注意:

EL式を使用して実行時にスキンの値を決定できます。詳細は、第4.12.12項「実行時での動的スキン選択の有効化」を参照してください。


MAFでは、階層としてスキンを適用します。最上位はデバイス固有のスキン、その後にプラットフォーム固有のスキン、ベース・スキンmobileAltaと続きます。MAFのmobileAltaスキン・ファミリの場合、この階層は次のように表されます。

  1. mobileAlta.<DeviceModel> (例: mobileAlta.iPhone5,3)

  2. mobileAlta.iOSまたはmobileAlta.Android

  3. mobileAlta

MAFでは、この階層のデバイス固有のレベルで定義されたセレクタを優先します。つまり、MAFでは、mobileAlta.iOSで定義されたセレクタを、mobileAlta.iPhoneで定義された同じセレクタで上書きします。<extends>要素(第4.12.3項「maf-skins.xmlファイルについて」を参照)によって、この階層がMAFランタイム用に定義されます。様々なレベルでのスキンの適用方法の詳細は、第4.12.10項「スキニングに関する必知事項」を参照してください。

4.12.2 MAFスタイルに関する必知事項

ベース・スキン・ファミリmobileAltaの基礎となるスキニング・スタイルは、amx.cssamx-mobileAlta-1.0.cssおよびamx-v1.1.cssファイル内で定義されます。MAF AMXページのセレクタを定義するこれらのファイルは、www\cssディレクトリ内にあります。このディレクトリにアクセスするには、まずモバイル・アプリケーションをシミュレータまたはデバイスにデプロイした後、deployディレクトリ(C:\JDeveloper\mywork\application name\deployなど)に移動します。www\cssディレクトリは、デプロイメントによって生成された、プラットフォーム固有のアーティファクト内にあります。iOSデプロイメントの場合、このディレクトリはtemporary_xcode_projectディレクトリ内にあります。Androidデプロイメントの場合、このディレクトリはAndroidアプリケーション・パッケージ(.apk)ファイルのassetsディレクトリ内にあります。


注意:

MAF DOM構造に依存するスタイルを記述しないでください。また、これらのファイル内で定義されている一部のセレクタは、サポートされていない場合があります。


4.12.3 maf-skins.xmlファイルについて

アプリケーション・コントローラ・プロジェクトのMETA-INFノードにあるmaf-skins.xmlファイルは、<skin>および<skin-addition>要素を使用します。既存のスキンを拡張して新しいスキンを作成するには、<skin>要素を使用します。<skin-addition>要素は、既存のスキンにスタイル・シートを追加します。

デフォルトでは、このファイルは空ですが、表4-9に示されている要素によって子要素を記述します。これらの子要素をこのファイルに移入することで、mobileAltaを拡張したり、アプリケーションで使用できるCSSファイルを定義できます。新しいスキンを作成したり、既存のスキンを拡張するには、<skin>要素を使用します。

表4-9 <skin>要素の子要素

要素 説明

<id>

maf-skins.xmlファイルのスキンを識別する必須要素。指定する値は、次のいずれかの形式に従う必要があります。

  • skinFamily-version

  • skinFamily-version.platform

たとえば、Apple iPadまたはiPhoneへのデプロイ時に、ユーザーのアプリケーションの外観を定義するスキンをユーザーのアプリケーションに登録するには、mySkin-v1.iOSを指定します。登録するスキンによってiPadまたはiPhoneのいずれかのデバイスのアプリケーションの外観が定義される場合、iOSiPadまたはiPhoneによって置き換えられます。Androidプラットフォームへのデプロイ時に、アプリケーションの外観を定義するスキンを登録する場合、.androidを指定します。

<family>

スキン・ファミリを識別する必須要素。

<extends>

この要素を使用して、拡張するスキンのスキンIDを指定することによって既存のスキンを拡張します。

<skin>
  <id>mySkin-v1</id>
  <family>mySkin</family>
  <extends>mobileAlta-v1.1</extends>
  <style-sheet-name>styles/myskin.css</style-sheet-name>
  <version>
    <name>v1</name>
  </version>     
</skin>

<style-sheet-name>

モバイル・アプリケーションのプロジェクト内のCSSファイルの場所を指定するには、相対URLを使用します。たとえば、SkinningDemoサンプル・アプリケーションのmaf-skins.xmlファイルには、アプリケーション・コントローラ・プロジェクトのcssディレクトリのv1.cssスタイルシートへの次の参照が含まれます。

<style-sheet-name>css/v1.css</style-sheet-name>

<version>

スキンの異なるバージョンを指定します。詳細は、第4.12.7項「MAFスキンのバージョニング方法」を参照してください。


表4-10に、スタイルシートを既存のスキンに統合する場合に、MAF CSS内で<skin-addition>要素を定義するために使用できる要素を示しています。

表4-10 <skin-addition>の子要素

要素 説明

<skin-id>

スタイルシートをさらに追加する必要があるスキンのIDを指定します。使用可能な値には、MAFで提供されるスキン(例: mobileAlta-v1.1.iOS)またはユーザーが作成するカスタム・スキンなどがあります。

<style-sheet-name>

モバイル・アプリケーションのプロジェクト内のCSSファイルの場所を指定するには、相対URLを使用します。たとえば、SkinningDemoサンプル・アプリケーションのmaf-skins.xmlファイルには、アプリケーション・コントローラ・プロジェクトのcssディレクトリのv1.cssスタイルシートへの次の参照が含まれます。

<style-sheet-name>css/v1.css</style-sheet-name>


例4-24では、<style-sheet-name>要素でCSSファイルの場所を、<skin-id>でターゲット・スキン・ファミリを指定しています。

例4-24 <skin-addition>要素の使用

<?xml version="1.0" encoding="UTF-8" ?>
<adfmf-skins xmlns="http://xmlns.oracle.com/adf/mf/config">
  <skin-addition>
    <skin-id>mobileFusionFx-v1.1.iOS</skin-id>
    <style-sheet-name>skins/mystyles.iphone.addition1.css</style-sheet-name>
  </skin-addition>
</adfmf-skins>

<skin-id>および<style-sheet-name>要素を使用して特定のiOSまたはAndroidデバイスにレンダリングしたり、これらの要素を定義してすべてのデバイスのプラットフォームに対するスタイルを処理することもできます。表4-11に、iOSプラットフォームに属するすべてのデバイス、および特定のiOSデバイス・タイプ(タブレット、電話、シミュレータ)をターゲットにするこれらの要素の使用例を示します。


ヒント:

デバイス・モデルの情報を取得するには、DeviceDemoサンプル・アプリケーション(付録F「サンプルのモバイル・アプリケーション・フレームワーク・アプリケーション」を参照)の使用を検討してください。


表4-11 プラットフォームおよびデバイス固有のスタイル

デバイス

iPhone

<skin-addition>
   <skin-id>mobileAlta-v1.1.iPhone5,1</skin-id>
   <style-sheet-name>iPhoneStylesheet.css</style-sheet-name>
</skin-addition>

iPad

<skin-addition>
   <skin-id>mobileAlta-v1.1.iPad4,2</skin-id>
   <style-sheet-name>iPadStylesheet.css</style-sheet-name>
</skin-addition>

iPhoneシミュレータ

<skin-addition>
   <skin-id>mobileAlta-v1.1.iPhone Simulator x86_64</skin-id>
   <style-sheet-name>iPhoneSimStylesheet.css</style-sheet-name>
</skin-addition>

すべてのiOSデバイス

<skin-addition>
   <skin-id>mobileAlta-v1.1.iOS</skin-id>
   <style-sheet-name>iOSSimStylesheet.css</style-sheet-name>
</skin-addition>

4.12.4 アプリケーションへのカスタム・スキンの追加方法

アプリケーションにカスタム・スキンを追加するには、JDeveloper内にCSSファイルを作成します。CSSはアプリケーションとともにデプロイするために、JDeveloperによりプロジェクトのソース・ファイルに配置されます。

カスタム・スキンをアプリケーションに追加する手順:

  1. 「アプリケーション」ウィンドウで、ApplicationControllerプロジェクトを右クリックして、「新規」→「CSSファイル」を選択します。

  2. 「Cascading Style Sheetの作成」ダイアログで、CSSファイルの名前およびディレクトリを指定します。

  3. 「OK」をクリックします。

4.12.5 アプリケーションが使用するスキンの指定方法

maf-config.xmlファイルで値を構成して、アプリケーションで使用するスキンを決定します。

使用するアプリケーションのスキンを指定するには:

  1. 「アプリケーション」ウィンドウで、maf-config.xmlファイルをダブルクリックします。デフォルトでは、これは、「アプリケーション・リソース」ペインの「ディスクリプタ」および「ADF META-INF」ノードの下にあります。

  2. maf-config.xmlファイルで、使用するスキンの<skin-family>要素、および<skin-version>要素(オプション)の値を指定します。

    例4-25は、モバイル・アプリケーションでmobileAlta.v1.1スキンを使用するのに必要な構成を示しています。

    例4-25 アプリケーションのスキンを指定する構成

    <adfmf-config xmlns="http://xmlns.oracle.com/adf/mf/config">
      <skin-family>mobileAlta</skin-family>
      <skin-version>v1.1</skin-version>
    </adfmf-config>
    

注意:

アプリケーションが実行時に使用するスキンを動的に選択する場合、EL式を<skin-family>要素の値として設定します。詳細は、第4.12.12項「実行時での動的スキン選択の有効化」を参照してください。


新しいスタイルシートをスキンに追加するには:

  1. 「コンポーネント」ウィンドウから「構造」ウィンドウに、<skin-addition>要素をドラッグ・アンド・ドロップします。

  2. 「skin-additionの挿入」ダイアログ(図4-41を参照)に入力を行うことで、表4-10で説明した要素を<skin-addition>要素に移入します。

    • 新しいスタイルを追加するスキンの識別子を入力します。

    • CSSファイルの場所を取得します。

    図4-41 「skin-additionの挿入」ダイアログ

    この図は周囲のテキストで説明しています
  3. 「OK」をクリックします。


注意:

DOM変更構造を使用するカスタム・スタイルを作成すると、モバイル・アプリケーションがハングする可能性があります。特に、displayプロパティでは、MAF AMXから変換されたHTMLでレンダリングに問題が発生します。このプロパティは、tabletable-rowtable-cellなどの値を使用してコンポーネントを表に変換しており、適切な親の表オブジェクト内に含まれていない表関連の構造が作成される可能性があります。この問題はアプリケーションのユーザー・インタフェース自体には表示されないことがありますが、ロギング・コンソールではSignal 10の例外によってレポートされます。


4.12.6 カスタム・スキンの登録方法

maf-skins.xmlファイルにカスタム・スキンを識別するプロパティ値を追加することで、ユーザーのアプリケーションにカスタム・スキンを登録します。

カスタム・スキンを登録する手順:

  1. 「アプリケーション」ウィンドウで、「ApplicationController」「アプリケーション・ソース」「META-INF」を開き、「maf-skins.xml」をダブルクリックします。

  2. 「構造」ウィンドウで、「adfmf-skins」ノードを右クリックし、「adfmf-skinsの中に挿入」「skin」を選択します。

  3. 「skinの挿入」ダイアログで、次のようにフィールドに入力します。

    • ファミリ: スキンのファミリ名の値を入力します。

      新しい名前を入力するか、既存のファミリ名を指定できます。既存のファミリ名を指定する場合、ファミリの値が同じスキンを区別するためにスキンのバージョニングが必要です(第4.12.7項「MAFスキンのバージョニング方法」を参照)。

      入力する値は、作成するスキンを登録するmaf-skins.xml<family>要素の値として設定されます。アプリケーションのmaf-config.xml<skin-family>要素では、実行時にこの値を使用してアプリケーションで使用されるスキンを識別します。

    • ID: skinFamily-versionまたはskinFamily-version.platformのいずれかの名前書式を使用してスキンのIDを入力します。たとえば、mySkinFamily-v1.1.androidなどです。

    • 拡張対象: 拡張する親スキンの名前を入力します。たとえば、カスタム・スキンでmobileAlta-v1.1スキンを拡張する場合、mobileAlta-v1.1を入力します。

    • スタイルシート名: スタイルシートの名前を入力または選択します。

  4. 「OK」をクリックします。

4.12.7 MAFスキンのバージョニング方法

<version>要素を使用して、maf-skins.xmlファイルでスキンのバージョン番号を指定できます。maf-skins.xmlファイル内の<family>要素の値が同じスキンを区別する場合はこのオプション機能を使用します。この機能は、いくつかの既存の動作を変更するために既存のスキンの新規バージョンを作成する場合に役立ちます。特定のスキンを使用するようにアプリケーションを構成する場合は、第4.12.5項「アプリケーションが使用するスキンの指定方法」で説明されているように、maf-config.xmlファイルで値を指定することに注意してください。

maf-skins.xmlファイル内の<version>要素に値を入力して、スキンのバージョンを指定します。


ベスト・プラクティス:

アプリケーションのmaf-skins.xmlファイルに登録する各スキンのバージョン情報を指定します。


MAFスキンをバージョニングするには:

  1. 「アプリケーション」ウィンドウで、maf-skins.xmlファイルをダブルクリックします。デフォルトでは、これは、アプリケーション・コントローラ・プロジェクトのMETA-INFノードにあります。

  2. 「構造」ウィンドウで、バージョニングするスキンのskinノードを右クリックし、「skinの中に挿入」「version」を選択します。

  3. maf-config.xmlファイルの<skin-version>要素に値が指定されていない場合に、このバージョンのスキンがアプリケーションで使用されるようにするには、「バージョンの挿入」ダイアログで、デフォルト・リストからtrueを選択します(第4.12.5項「アプリケーションが使用するスキンの指定方法」を参照)。

  4. 名前フィールドに値を入力します。たとえば、スキンの最初のバージョンである場合はv1と入力します。

  5. 「OK」をクリックします。

4.12.8 スキンのバージョニング時に行われる処理

スキン用に構成するバージョン情報は、実行時にアプリケーションでスキンが適用されるときに、プラットフォーム値およびデバイス値より優先されます。実行時に、モバイル・アプリケーションでは、プラットフォーム固有のスキンが適用される前にデバイス固有のスキンが適用されます。スキンのバージョン情報が指定されている場合、アプリケーションでは最初に、指定したスキンのバージョン値と一致するスキンを検索します。スキン・バージョン値およびデバイス値と一致するスキンが見つかると、アプリケーションではこのスキンが適用されます。指定したスキン・バージョンのスキンがデバイス固有のスキン内で見つからなかった場合、アプリケーションでは指定したバージョンのスキンをプラットフォーム固有のスキン内で検索します。使用可能なプラットフォーム固有のスキン内で、指定したバージョンと一致するスキンが見つからない場合、アプリケーションではベース・スキンを検索します。

例4-26は、3つのスキン(customFamily-v1.iphone5,3customFamily-v2.iPhoneおよびcustomFamily-v3.iPhone)を参照するmaf-skins.xmlの例を示しています。これらの各スキンの<family>要素は同じ値(customFamily)になっています。<version>要素の子要素の値によって、これらのスキンがそれぞれ区別されます。

実行時に、アプリケーションのmaf-config.xmlファイルにおける<skin-family>要素の値としてcustomFamilyが指定されたアプリケーションでは、customFamily-v1.iphone5,3を使用します。これは、このスキンがmaf-skins.xmlファイルでデフォルト・スキンとして構成されているためです(<default>true</default>)。この動作は、第4.12.5項「アプリケーションが使用するスキンの指定方法」で説明されているように、maf-config.xmlファイル内の<skin-version>要素に値を指定してオーバーライドできます。たとえば、maf-config.xmlファイル内の<skin-version>要素の値としてv2を指定した場合、アプリケーションはmaf-skins.xmlファイル内でデフォルトとして定義されているcustomFamily-v1.iphone5,3のかわりにcustomFamily-v2.iPhoneを使用します。

(maf-config.xmlファイル内の<skin-version>要素を使用して)取得するスキンのバージョンを指定しない場合、アプリケーションはmaf-skins.xmlファイル内の<default>true</default>要素を使用してデフォルトとして定義されているスキンを使用します。デフォルトのスキンを指定しない場合、アプリケーションはmaf-skins.xmlファイル内で定義される最後のスキンを使用します。例4-26において、定義される最後のスキンはcustomFamily-v3.iPhoneです。

例4-26 バージョニングされたスキン・ファイルが含まれたmaf-skins.xmlファイル

<?xml version="1.0" encoding="UTF-8" ?>
<adfmf-skins xmlns="http://xmlns.oracle.com/adf/mf/skin">
  <skin id="s1">
    <family>customFamily</family>
    <id>customFamily-v1.iphone5,3</id>
    <extends>customFamily-v1.iOS</extends>
    <style-sheet-name>iphone.css</style-sheet-name>
    <version>
      <default>true</default>
      <name>v1</name>
    </version>
  </skin>
  <skin id="s2">
    <family>customFamily</family>
    <id>customFamily-v2.iPhone</id>
    <extends>customFamily-v1.iOS</extends>
    <style-sheet-name>iphone-v2.css</style-sheet-name>
    <version>
      <name>v2</name>
    </version>
  </skin>
  <skin id="s3">
    <family>customFamily</family>
    <id>customFamily-v3.iPhone</id>
    <extends>customFamily-v1.iOS</extends>
    <style-sheet-name>iphone-v3.css</style-sheet-name>
    <version>
      <name>v3</name>
    </version>
  </skin>
</adfmf-skins>

4.12.9 デフォルト・スキン・スタイルのオーバーライド

MAF AMXアプリケーションでは、MAF AMXとして実装されたアプリケーション機能に対して特定のスタイルを指定し、それによって、maf-config.xmlおよびmaf-skins.xmlファイル内のアプリケーション・レベルで設定されているデフォルトのスキン・スタイルをオーバーライドできます。アプリケーション機能に個別のスタイルを追加するには、CSSファイルを包含ファイルとして使用します。

4.12.9.1 アプリケーション機能に新しいスタイル・クラスを適用する方法

maf-feature.xmlファイルの概要エディタの「包含」表では、MAF AMXアプリケーション機能にCascading Style Sheet (CSS)を追加できます。

図4-42 「包含」表

この図は周囲のテキストで説明しています

始める前に

第5.2項「タスク・フローの作成」の説明に従って、MAFタスク・フローを作成します。スキンのCascading Style Sheet (CSS)ファイルを作成または追加します。ビュー・コントローラ・プロジェクトを選択し、「新規」「CSSファイル」を選択してCSSファイルを作成できます。または、次のようにCSSファイルをJARファイルにパッケージ化することもできます。

  1. メイン・メニューから「アプリケーション」→「プロジェクト・プロパティ」を選択します。

  2. 「プロジェクト・プロパティ」ダイアログで、「ライブラリとクラスパス」ページを選択し、「JAR/ディレクトリの追加」をクリックします。

  3. 「アーカイブまたはディレクトリの追加」ダイアログで、インポートするADFスキンが含まれているJARファイルに移動し、「選択」をクリックします。

    JARファイルが「クラスパス・エントリ」リストに表示されます。

  4. 「OK」をクリックします。

アプリケーション機能にスタイルを追加するには:

  1. 「追加」をクリックして、「包含」表に新しい行を作成します。

  2. 「タイプ」列のドロップダウン・メニューから、「スタイルシート」を選択します(図4-43を参照)。

    図4-43 「スタイルシート」オプションの選択

    この図は周囲のテキストで説明しています
  3. 「ファイル」列で、「編集」を選択します(図4-43を参照)。

  4. 「プロパティの編集」ダイアログでCSSを選択して(図4-44を参照)、「OK」をクリックします。


    注意:

    .cssファイルは、ビュー・コントローラ・プロジェクト内に配置する必要があり、アプリケーション・コントローラ・プロジェクト内に配置されている.cssファイルを含めることはできません。


    図4-44 アプリケーション機能のCSSの選択

    この図は周囲のテキストで説明しています

4.12.9.2 スキンのアプリケーション機能への適用時に行われる処理

CSS (またはJavaScriptファイル)を「包含」表に追加すると、MAF AMXエディタの「プレビュー」ペインにある機能コンテンツのドロップダウン・メニュー(図4-45を参照)からアプリケーション機能を選択することで、アプリケーション機能に追加されたCSSページを、MAF AMXページに適用できます。

図4-45 機能コンテンツのドロップダウン・メニュー

この図は周囲のテキストで説明しています

4.12.10 スキニングに関する必知事項

maf-skins.xmlファイルで定義されるCSSファイル(例4-27を参照)は、Apple iPhoneとiPadの異なる表示要件に適応するようにスキンを拡張する方法を示します。これらのスタイルは降順に適用されます。SkinningDemoサンプル・アプリケーションでは、アプリケーションを異なるデバイスにデプロイするときに、カスタマイズされたスタイルを適用できるようにする方法のデモが提供されています。このサンプル・アプリケーションは、開発用コンピュータのJDeveloperインストール・ディレクトリ内にある次の場所のPublicSamples.zipファイルに含まれています。

jdev_install/jdeveloper/jdev/extensions/oracle.maf/Samples

たとえば、iOSレベルでは、スタイルシート(例4-27mobileAlta)がiPhoneまたはiPadのどちらにも適用されます。デバイス固有のスタイル用には、iPhoneおよびiPadのスキンに対して<skin-id>要素を定義します。スキニングのデモ・アプリケーションでは、この要素によって定義されたカスタム・スキンの使用方法が示されています。

例4-27 maf-skins.xmlファイルで定義されるスキニング・レベル

<?xml version="1.0" encoding="UTF-8" ?>
<adfmf-skins xmlns="http://xmlns.oracle.com/adf/mf/skins">
    <skin>
        <id>mobileAlta-v1.1.iPhone</id>
        <family>mobileAlta</family>
        <extends>mobileAlta-v1.1.iOS</extends>
        <style-sheet-name>skins/mobileAlta-v1.1.iphone.css</style-sheet-name>
    </skin>
    <skin>
        <id>mobileAlta-v1.1.iPad</id>
        <family>mobileAlta</family>
        <extends>mobileAlta-v1.1.iOS</extends>
        <style-sheet-name>skins/mobileAlta-v1.1.ipad.css</style-sheet-name>
    </skin>
    <skin>
        <id>mobileAlta-v1.1.iPod</id>
        <family>mobileAlta</family>
        <extends>mobileAlta-v1.1.iOS</extends>
        <style-sheet-name>skins/mobileAlta-v1.1.ipod.css</style-sheet-name>
    </skin>
    <!--  Skin Additions -->
    <skin-addition>
        <skin-id>mobileAlta-v1.1.iPhone</skin-id>
        <style-sheet-name>skins/mystyles.iphone.addition1.css</style-sheet-name>
    </skin-addition>
    <skin-addition>
        <skin-id>mobileAlta-v1.1.iPhone</skin-id>
        <style-sheet-name>skins/mystyles.iphone.addition2.css</style-sheet-name>
    </skin-addition>
    <skin-addition>
        <skin-id>mobileAlta-v1.1.iOS</skin-id>
        <style-sheet-name>skins/mystyles.ios.addition2.css</style-sheet-name>
    </skin-addition>
</adfmf-skins>

4.12.11 スキニング・スタイルの移行に関する必知事項

MAFで作成したアプリケーションは、mobileFusionFXスキン・ファミリからそれらのスタイルを導出します。mobileAltaスキン・ファミリと同様に、mobileFusionFx.iPhoneおよびmobileFusionFx.iOSなどのデバイスおよびプラットフォーム固有のスタイルは、ベース・スキン自体であるmobileFusionFxの前に適用されます。アプリケーションがmobileAltaスキンのルック・アンド・フィールであることを確認するには、maf-config.xmlファイルの<skin-family>mobileFusionFx</skin-family>を次のように置き換えます。

<?xml version="1.0" encoding="UTF-8" ?>
<adfmf-config xmlns="http://xmlns.oracle.com/adf/mf/config">
  <skin-family>mobileAlta-v1.1</skin-family>
</adfmf-config>

ヒント:

<skin-family>要素を更新して、スキンを指定できます。


4.12.12 実行時での動的スキン選択の有効化

エンド・ユーザーが実行時に他のスキンを選択できるように、アプリケーションを構成できます。エンド・ユーザーが必要により適したスキンを使用して、アプリケーションをレンダリングできるようにする場合に、この機能を構成します。

図4-46では、ボタンを表示して、エンド・ユーザーが実行時にアプリケーションで使用されるスキンを変更できるようにすることで、この機能をどのように実装するかを示しています。ページ上のボタンを構成して、後からアプリケーションのmaf-config.xmlファイルのskin-familyプロパティにより評価されるscope値を設定します。

図4-46 実行時におけるアプリケーションのスキンの変更(iOSの場合)

このイメージについては周囲のテキストで説明しています。

4.12.12.1 エンド・ユーザーが実行時にアプリケーションのスキンを変更できるようにする方法

アプリケーションのmaf-config.xmlファイルのskin-familyプロパティの値の更新を可能にするコンポーネントを公開することにより、エンド・ユーザーがアプリケーションのスキンを変更できるようにします。

エンド・ユーザーが実行時にアプリケーションのスキンを変更できるようにするには:

  1. maf-config.xmlファイルでスキン・ファミリ・プロパティを設定するために使用するコンポーネントを構成するページを開きます。

  2. エンド・ユーザーが実行時に多数の使用可能なスキンの1つを選択できるようにする多数のコンポーネント(ボタン・コンポーネントなど)を構成します(図4-46を参照)。

    例4-28は、図4-46のように、エンド・ユーザーが実行時に使用可能なスキンを選択できるようにするamx:commandButtonコンポーネントの構成方法を示しています。各amx:commandButtonコンポーネントにより、actionListener属性の値を指定します。エンド・ユーザーがボタンをクリックすると、この属性でactionEventskinsというマネージドBean上のメソッド(skinMenuAction)に渡されます。

    例4-28 コンポーネントを使用したスキン・ファミリの設定

    ...
    <amx:commandButton text="Switch to Alta" 
         actionListener="#{applicationScope.SkinBean.switchToMobileAlta}" id="cb1"/>
    <amx:commandButton text="Switch to Fusion Fx"
         actionListener="#{applicationScope.SkinBean.switchToMobileFusionFx}" id="cb2"/>
    ...
    
  3. エンド・ユーザーによって選択されたスキンの値を格納するには、アプリケーションのビュー・コントローラ・プロジェクトにマネージドBeanを記述します。例4-29は、エンド・ユーザーが選択した値をとり、それをマネージドBean内のskinFamilyの値の設定に使用するメソッドを示しています。例4-29は、新しいスキンを使用するためにアプリケーションのすべての機能をリセットするメソッドも示しています。

    例4-29 アプリケーションのスキンを変更するためのマネージドBean

    package application;
     
    import javax.el.ValueExpression;
    import oracle.adfmf.amx.event.ActionEvent;
    import oracle.adfmf.framework.FeatureInformation;
    import oracle.adfmf.framework.api.AdfmfContainerUtilities;
    import oracle.adfmf.framework.api.AdfmfJavaUtilities;
    import oracle.adfmf.java.beans.PropertyChangeListener;
    import oracle.adfmf.java.beans.PropertyChangeSupport;
     
    public class SkinBean
     
    {
        private String skinFamily = "mobileAlta";
        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
     
        public void setSkinFamily(String skinFamily) {
            String oldSkinFamily = this.skinFamily;
            this.skinFamily = skinFamily;
            propertyChangeSupport.firePropertyChange("skinFamily", oldSkinFamily, skinFamily);
     
        }
     
        public String getSkinFamily() {
            return skinFamily;
        }
     
        public void addPropertyChangeListener(PropertyChangeListener l) {
            propertyChangeSupport.addPropertyChangeListener(l);
        }
     
        public void removePropertyChangeListener(PropertyChangeListener l) {
            propertyChangeSupport.removePropertyChangeListener(l);
        }
     
        public void switchToMobileAlta(ActionEvent ev){
            this.switchSkinFamily("mobileAlta");
        }
     
        public void switchToMobileFusionFx(ActionEvent ev) {
            this.switchSkinFamily("mobileFusionFx");
        }
     
        public void switchSkinFamily(String family) {
            this.setSkinFamily(family);
            // reset all the features individually as follows to load the new skin
            FeatureInformation[] features = AdfmfContainerUtilities.getFeatures();
            for (int i = 0; i < features.length; i++) {
                AdfmfContainerUtilities.resetFeature(features[i].getId());
            }
        }
    }
    
  4. 「アプリケーション」ウィンドウで、「アプリケーション・リソース」パネルを開き、「ディスクリプタ」→「ADF Meta-INF」ノードを開き、maf.config.xmlファイルをダブルクリックします。

  5. maf-config.xmlファイルで、EL式を記述してスキン・ファミリを動的に評価します。

    <skin-family>#{applicationScope.SkinBean.skinFamily}</skin-family>

4.12.12.2 実行時に行われる処理: エンド・ユーザーによるアプリケーションのスキンの変更方法

実行時に、エンド・ユーザーは公開されたコンポーネントを使用して、別のスキンを選択します。例4-28では、これは多数のamx:commandButtonコンポーネントの1つです。このコンポーネントは、エンド・ユーザーが選択した値をマネージドBeanに発行し、次にこれがマネージドBeanのプロパティ(skinFamily)の値を設定します。実行時に、maf-config.xmlファイルの<skin-family>プロパティでは、EL式を使用してマネージドBeanから値を読み取ります。また、例4-29のマネージドBeanは、新しく指定したスキンを使用するアプリケーションに機能を再ロードします。


ヒント:

<skin-family>プロパティと同様に、EL式を使用して、実行時にmaf-config.xmlファイルの<skin-version>プロパティの値を設定できます。


アプリケーションの機能を個別にリセットして新しいスキンをロードするかわりに、次のクラスからresetApplicationメソッドを起動することもできます(例4-29を参照)。

oracle.adfmf.framework.api.AdfmfContainerUtilities

詳細は、Oracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

4.13 機能アーカイブ・ファイルの使用

maf-application.xmlファイルは、少なくとも1つのアプリケーション機能を参照します。これらのアプリケーション機能は、機能アーカイブ・ファイル(FAR)と呼ばれるJARファイルにパッケージ化されると、他のモバイル・アプリケーションが使用できる再利用可能なコンテンツを提供します。FARは本質的に、アイコンのイメージ、リソース・バンドル、HTMLファイル、JavaScriptファイル、その他の実装固有のファイルなど、アプリケーション機能が必要とするすべてのものを格納した自己完結型のコレクションです。第19.5項「機能アーカイブ・ファイル(FAR)のデプロイ」で説明するように、FARのコンテンツには1つのmaf-feature.xmlファイルが含まれます。このファイルでは、パッケージ化された各アプリケーション機能が一意のIDによって識別されます。このファイルを編集することで(第4.8項「モバイル・アプリケーション機能の構成ファイルについて」を参照)、コンテンツ実装(ローカルまたはリモートのHTMLファイルや、MAF AMXページ)などの機能プロパティを更新し、ユーザー・ロールや権限またはデバイス・プロパティなどのファクタに基づいて表示できます。モバイル・アプリケーションでは、1つまたは複数のFARを参照することも、何も参照しないようにすることもできます。

FARをアプリケーション・ライブラリまたはビュー・コントローラ・プロジェクトとして追加できます。FARのコンテンツをプロジェクト・ライブラリとして追加する場合、FARのコンテンツをカスタマイズすることも、その個別のアーティファクトを再利用することもできません。FARがライブラリ・ファイルとして追加される場合、モバイル・アプリケーションではFAR全体が使用されます。たとえば、FARのタスク・フローは、タスク・フロー・コール・アクティビティのターゲットにすることはできません。ただし、FARをビュー・コントローラ・プロジェクトとして追加すると、そのアーティファクトをカスタマイズできるようになります(第4.14項「Oracle Metadata Servicesを使用したMAFファイルのカスタマイズ」を参照)。

4.13.1 MAFアプリケーションでのFARコンテンツの使用方法

アプリケーション機能を、それを使用するアプリケーションのクラスパスに追加することで、モバイル・アプリケーションで使用できるようにします。


注意:

FARは、アプリケーション・コントローラ・プロジェクトにのみ追加でき、ビュー・コントローラ・プロジェクトにFARを追加することはできません。


始める前に

アプリケーション機能を機能アーカイブ・ファイルとしてデプロイします(第19.5.2項「機能アーカイブのデプロイメント・プロファイルのデプロイ方法」を参照)。

アプリケーション機能コンテンツをライブラリとしてモバイル・アプリケーションに追加するには:

  1. 「リソース」ウィンドウを開き、「新規」「IDE接続」を選択して、「ファイルシステム」を選択します。

  2. 「ファイルシステム接続」ダイアログに入力し、機能アーカイブJARファイルを格納するディレクトリへのファイル接続を作成します。詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。

  3. 「リソース」ウィンドウで、機能アーカイブ・ファイル(JARファイルとして示されている)を右クリックします。

  4. 「名前を付けてアプリケーションに追加」を選択して、「ライブラリ」を選択し、これを使用するアプリケーションのクラスパスを追加します(図4-47を参照)。

    図4-47 ライブラリとしてのFARのモバイル・アプリケーションへの追加

    この図は周囲のテキストで説明しています

    ヒント:

    使用するアプリケーションのクラスパスから機能アーカイブJARを削除するには、「ライブラリをアプリケーションから削除」を選択します。


FARをビュー・コントローラ・プロジェクトとして追加するには:

  1. 「リソース」ウィンドウを開き、「新規」「IDE接続」を選択して、「ファイルシステム」を選択します。

  2. 「ファイルシステム接続」ダイアログに入力し、機能アーカイブJARファイルを格納するディレクトリへのファイル接続を作成します。詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。

  3. 「リソース」ウィンドウで、機能アーカイブ・ファイル(JARファイルとして示されている)を右クリックします。

  4. 「名前を付けてアプリケーションに追加」を選択して、「ViewControllerプロジェクト」を選択します(図4-48を参照)。

    図4-48 ビュー・コントローラ・プロジェクトとしてのFARのモバイル・アプリケーションへの追加

    この図は周囲のテキストで説明しています

4.13.2 FARのライブラリとしての追加時に行われる処理

FARをライブラリとして(または手動でアプリケーションのクラスパスに)追加した場合:

  • FARのコンテンツが、「アプリケーション・リソース」の「ライブラリ」ノードの下に表示されます(図4-49を参照)。

    図4-49 使用するアプリケーションの「アプリケーション・リソース」に表示されるFAR JARファイル

    この図は周囲のテキストで説明しています
  • JARに含まれるmaf-feature.xmlファイルで宣言されたすべてのアプリケーション機能は、図4-50に示すように、アプリケーションで使用できるようになります。この図のドロップダウンには、AcmeFAR.jarに属している使用可能なアプリケーション機能のID (HCM、PROD、Customers)と、アプリケーション(StockTrackerFAR.jar)に追加された別の機能アーカイブ内で定義されているPortfolioというIDが表示されています。第4.6.1項「モバイル・アプリケーションのコンテンツの指定方法」も参照してください。

    図4-50 様々なmaf-feature.xmlファイルで定義されたアプリケーション機能の参照

    この図は周囲のテキストで説明しています

    ヒント:

    機能アーカイブJARをアプリケーションのクラスパスに手動で追加すると、アプリケーション機能が機能参照の挿入ダイアログにも表示されるようになります。


    または、次のように「リソース」ウィンドウからアプリケーション機能を追加したり、削除することもできます。

    1. 「リソース」ウィンドウで、機能アーカイブJARを開きます。

    2. 「MAF機能」フォルダから、アプリケーション機能を右クリックします。

    3. 「機能参照をmaf-application.xmlに追加」(図4-51を参照)、または「機能参照をmaf-application.xmlから削除」(図4-52を参照)を選択します。図4-51に、インポートしたFARであるacmeFAR.jarからのCustomerというアプリケーション機能の追加を示しています。

      図4-51 機能参照の追加

      この図は周囲のテキストで説明しています

    図4-52に、maf-application.xmlファイルからのcustomers機能参照(最初にインポートしたFARであるacmeFAR.jarから追加されている)の削除を示しています。

    図4-52 機能参照の削除

    この図は周囲のテキストで説明しています
  • 機能アーカイブJARにあるconnections.xmlファイル内の情報は、使用するアプリケーションのconnections.xmlファイルにマージされます。図4-53に示す「ログ」ウィンドウには、名前の競合が表示されています。


    注意:

    使用するアプリケーションで接続が有効であることを確認する必要があります。


    図4-53 接続での名前の競合を示すメッセージ・ログ・ウィンドウ

    この図は周囲のテキストで説明しています

4.13.3 FARのビュー・コントローラ・プロジェクトとしての追加時に行われる処理

FARをビュー・コントローラ・プロジェクトとして追加する場合:

  • MAFは、インポートしたFARと同じ名前のビュー・コントローラ・プロジェクトを生成します。図4-54に、MAFで、StockTracker(図4-48StockTrackerFAR.jarを参照)というインポートしたFARファイルに対してビュー・コントローラ・プロジェクト(.jprファイル)を作成する方法を示しています。このビュー・コントローラ・プロジェクトには、MAFビュー・コントローラ・プロジェクトのデフォルト構造およびメタデータ・ファイルが含まれます(第3.2.2.3項「ビュー・コントローラ・プロジェクトのリソースについて」を参照)。特に、FARビュー・コントローラ・プロジェクトには、maf-feature.xmlファイルが含まれます。MAFアプリケーションに他のビュー・コントローラ・プロジェクトが含まれている場合、いずれのプロジェクトにもIDが同じアプリケーション機能が含まれていないことを確認する必要があります。第4.13.4項「機能アーカイブ・リソースの再使用の有効化に関する必知事項」も参照してください。

    図4-54 モバイル・アプリケーション内のビュー・コントローラ・プロジェクトとしてインポートしたFAR

    この図は周囲のテキストで説明しています
  • ライブラリとしてインポートしたFARと同様に、機能アーカイブJARにあるconnections.xmlファイル内の情報は、使用するアプリケーションのconnections.xmlファイルにマージされます。ターゲット・アプリケーションにconnections.xmlファイルが存在しない場合、MAFではこのファイルが作成されます。同様に、sync-config.xmlファイルは、使用するアプリケーションのsync-config.xmlファイルにマージされます。

  • MAFでは、FARに含まれる.classおよびJARファイルをビュー・コントローラ・プロジェクトでライブラリとして使用できるように、これらをそのlibディレクトリ(C:\jdeveloper\mywork\application\FAR view controller project\libなど)にコピーします。MAFでは、これらのファイルをclassesFromFar.jarというファイルにコンパイルします。

  • ライブラリとしてインポートしたFARとは異なり、ビュー・コントローラ・プロジェクトのファイルはカスタマイズできます。


    注意:

    FARに含まれる元のリソース・バンドルは、生成されたビュー・コントローラ・プロジェクトでは使用できない可能性があるため、このプロジェクト内に新しいリソース・バンドルを作成する必要があります(第4.14.6.1項「リソース・バンドルでカスタマイズを有効化する方法」を参照)。


  • ライブラリとしてインポートしたFARと同様に、FARのmaf-feature.xmlファイル内で宣言されたすべてのアプリケーション機能は、使用するアプリケーションで使用できるようになります。

4.13.4 機能アーカイブ・リソースの再使用の有効化に関する必知事項

FARのリソースをアプリケーションで使用可能にするためには、FARの名前とその機能参照IDが両方ともグローバルに一意である必要があるため、maf-application.xmlファイル内に機能参照IDの重複がないことを確認してください。FARの内部では、DataControl.dcxファイルが一意のパッケージ・ディレクトリ内に存在する必要があります。これらのパッケージ・ディレクトリのデフォルト名をそのまま使用するのではなく、プロジェクト用に一意のパッケージ階層を作成する必要があります。さらに機能参照IDについても、同じようなパッケージ・ネーミング・システムを使用する必要があります。

4.13.5 FARを使用したsync-config.xmlファイルの更新に関する必知事項

sync-config.xmlファイルにより、モバイル・アプリケーションが、様々なタイプのWebサービス(SOAP、REST-XML、JSONペイロードによるREST)を介してアクセスされるサーバー側リソースから取得されたデータをSQLite埋込みデータベースにキャッシュできるようになるだけでなく、キャッシュ内のこのデータおよびサーバー側リソースも更新できるようになります。

ビュー・コントローラ・プロジェクトがFARとしてデプロイされると、sync-config.xmlファイルは機能アーカイブ・ファイルに含まれます。connections.xmlファイルと同様に、FARをアプリケーションに追加すると、MAFではFAR (jar-sync-config.xml)内のsync-config.xmlファイルの内容と、使用するアプリケーションのsync-config.xmlファイルの内容をマージします。sync-config.xmlファイルは、モバイル・アプリケーションによって使用されるWebサービスのエンドポイントを記述するため、モバイル・アプリケーションを構成するアプリケーション機能によって使用されるすべてのWebサービスのエンドポイントを、FARを追加することで更新できます(第4.13.3項「FARのビュー・コントローラ・プロジェクトとしての追加時に行われる処理」を参照)。

FARをアプリケーションに追加すると、MAFでは、アプリケーションのsync-config.xmlファイルおよびconnections.xmlファイルを確認し、必要に応じて変更するように求めるメッセージがログに記録されます。図4-55に示すように、これらのメッセージは、使用するアプリケーションのsync-config.xmlファイルの状態を反映します。

図4-55 メッセージ・ログ

このイメージについては周囲のテキストで説明しています。

使用するアプリケーションにsync-config.xmlファイルがない場合、MAFではこのファイルをアプリケーションに追加し、次のようなメッセージを書き込みます。

oracle.adfmf.framework.dt.deploy.features.deployers.SyncConfigMerger _logNoSyncConfigInAppUsingFar
WARNING: The application does not contain a synchronization file, "sync-config.xml". Creating one 
containing the synchronization configuration in the Feaure Archive.

sync-config.xmlファイルの<ServerGroup>要素に、使用するアプリケーションのconnections.xmlファイルで定義された対応する<Reference>要素がない場合、MAFでは接続の確認(または作成)をリクエストする次のようなログ・メッセージを書き込みます。

oracle.adfmf.framework.dt.deploy.features.deployers.SyncConfigMerger _logAddedServerGroups
WARNING: The following server groups were added sync-config.xml by the Add to Application 
operation:
{
  ServerGroup1 - there is no existing application connection defined for this server group.
Please create the connection.

  ServerGroup2 - verify its configuration.
}

使用するアプリケーションのconfig-sync.xmlファイルの<ServerGroup>定義が、FAR内の対応するconfig-sync.xmlファイルの定義を複製する場合、MAFでは次のSEVEREレベルのメッセージをログに書き込みます。

oracle.adfmf.framework.dt.deploy.features.deployers.SyncConfigMerger _logDuplicateServerGroups
SEVERE: Cannot merge the server groups from the Feature Archive because the following definitions 
already exist:
ServerGroup1
ServerGroup2

4.14 Oracle Metadata Servicesを使用したMAFファイルのカスタマイズ

Oracle Metadata Services (MDS)を使用すると、実行時にアプリケーションの再ブランディング、カスタマイズおよびパーソナライズを行うことができます。MDSでは、単一のアプリケーションを様々な産業、場所またはユーザー・グループに適応させることができます。後者の場合、たとえば、MDSを使用して、ユーザー・グループまたはユーザー職責にあわせてルック・アンド・フィールを調整できます。

カスタマイズしたアプリケーションは、ベース・アプリケーションとカスタマイズの1つ以上のレイヤーで構成されます。1つのアプリケーションで複数のカスタマイズ・レイヤーを使用でき、各レイヤーでは複数のレイヤー値を使用できます。これらのレイヤー値を、指定の優先順位に従ってベース・メタデータの最上位に適用できます。MDSでは、これらのカスタマイズをMDSリポジトリに格納し、実行時に取得します。MDSは、作成されたカスタマイズを別のMDSリポジトリに保存するため、ベース・アプリケーションは変更されません。メタデータ・サービス・リポジトリの構成の詳細は、『Oracle Fusion Middleware管理者ガイド』のOracle Metadata Repositoryの管理に関する項を参照してください。

MDSでは、次の2つのカスタマイズ・パターンを使用できます。

MDSフレームワークを使用して、モバイル・アプリケーションの次のアーティファクトをカスタマイズできます。

MDSフレームワークを使用してアプリケーションをカスタマイズするには、次のタスクを実行します。

  1. カスタマイズ・レイヤーの作成: 1つ以上のグローバルまたはアプリケーション固有のカスタマイズ・レイヤーを作成します。詳細は、第4.14.1項「カスタマイズ・レイヤーの作成方法」を参照してください。

  2. カスタマイズ・クラスの作成: MDSでは、カスタマイズ・クラスを使用して、ベース・アプリケーションに適用するカスタマイズを決定します。各カスタマイズ・クラスは、ベース・カスタマイズ・レイヤーを定義します。カスタマイズする予定のモバイル・アプリケーションではこのファイルを作成しないでください。詳細は、第4.14.2項「カスタマイズ・クラスの作成方法」を参照してください。

  3. カスタマイズにアクセスするためのデザインタイムの有効化: 次のタスクを実行します。

    1. カスタマイズ・クラス(.javaファイル)をJARファイルとしてパッケージ化します。

    2. JARファイルをモバイル・アプリケーションのいずれかのプロジェクトに追加します。

      詳細は、第4.14.3項「カスタマイズ・クラスにアクセスするためのデザインタイムの有効化方法」を参照してください。

  4. adf-config.xmlファイルのcust-configセクションへのカスタマイズ・クラスの追加: 優先順位に従ってカスタマイズ・クラスを登録します。

  5. 「カスタマイズ開発者」ロールでのJDeveloperの起動(またはこのロールへの切替え): 詳細は、Oracle Fusion Middleware Oracle Jdeveloperによるアプリケーションの開発のJDeveloperロールの操作に関する項を参照してください。


    注意:

    「カスタマイズ開発者」ロールを使用して既存のファイルをカスタマイズできますが、新しいファイルを作成することはできません。


  6. 「カスタマイズ・コンテキスト」ウィンドウからカスタマイズ・レイヤーを選択します(図4-56を参照)。

    図4-56 カスタマイズ・レイヤーの選択(ヒント・レイヤー)

    この図は周囲のテキストで説明しています

    注意:

    「カスタマイズ開発者」ロールで作業する際、「カスタマイズ・コンテキスト」ウィンドウで選択したレイヤーとレイヤー値をヒント・レイヤーと呼びます。「カスタマイズ開発者」ロールで作業中に行った変更は、このレイヤーにのみ適用されます。


  7. デバイス、エミュレータへのアプリケーションのデプロイ、またはプラットフォーム固有のアプリケーション・パッケージとしてのアプリケーションのデプロイ: カスタマイズしたアプリケーションをデプロイするには、「カスタマイズ開発者」ロールを使用する必要があります。「カスタマイズ開発者」ロールでデプロイするには、次の手順を実行します。

    1. 「カスタマイズ開発者」ロールで、アプリケーションを起動します。

    2. 「カスタマイズ・コンテキスト」ウィンドウ(図4-56)で、カスタマイズを実装するレイヤーと値を選択します。

    3. デプロイメント・オプションから選択します(「アプリケーション」「デプロイ」を選択し、デプロイメント・プロファイルを選択してアクセスします)。詳細は、第19章「モバイル・アプリケーションのデプロイ」を参照してください。

    4. 各カスタマイズ・コンテキストに対して別のデプロイメントを実行します。

    デプロイメント時に、ベース・ファイルおよびデルタ・ファイルがマージされ、実行時のアプリケーションのカスタマイズ・バージョンが作成されます。デプロイされたアプリケーションには、MDSの依存性はありません。


    ヒント:

    カスタマイズしたアプリケーションをMAFアプリケーション・アーカイブ(.maa)ファイルとしてデプロイして、このファイルをアプリケーションにインポートし、別のカスタマイズを実行したり、アップグレードすることもできます。.maaファイルに含まれるデルタ・ファイルは、デプロイメント後にベース・ファイルとマージされます。詳細は、第4.14.7項「カスタマイズを使用したモバイル・アプリケーションのアップグレード」を参照してください。


4.14.1 カスタマイズ・レイヤーの作成方法

カスタマイズには、グローバル(JDeveloperのインスタンス全体で使用可能)またはアプリケーション固有があります。JDeveloperでは、jdev_install/jdeveloper/jdev/CustomizationLayerValues.xmlにあるCustomizationLayerValues.xmlファイルにグローバル・カスタマイズが格納されます。デフォルトでは、このファイルは、site1およびsite2というレイヤー値でシードされます。これらは、<cust-layer-value>要素を使用して、次のように定義されます。

<cust-layers xmlns="http://xmlns.oracle.com/mds/dt">
   <cust-layer id-prefix="s" name="site"> 
      ...
         <cust-layer-value id-prefix="1" display-name="Site One" value="site1"/>
         <cust-layer-value id-prefix="2" display-name="Site Two" value="site2"/>
      ...
   <cust-layer-value display-name="Site" value="site"/>
</cust-layer>

このファイルで定義されたレイヤー値は、アプリケーション固有のCustomizationLayerValues.xmlファイルで定義されたレイヤー値で実行時にオーバーライドできます。

アプリケーション固有のCustomizationLayerValues.xmlファイルを作成するには:

  1. 「アプリケーション」ウィンドウで、「アプリケーション・リソース」フォルダを開きます。

  2. 「ADF-META INF」フォルダを開き、adf-config.xmlファイルを開きます。

  3. 「概要エディタ」の「MDS」ページで、デザインタイム・カスタマイズ値の構成をクリックします。

  4. CustomizationLayerValues.xmlファイルを開き、シードされたレイヤー値(Site OneおよびSite Two)を必要に応じて更新します。次に例を示します。

    <cust-layers xmlns="http://xmlns.oracle.com/mds/dt">
      <cust-layer name="site" id-prefix="s">
        <!-- Generated id-prefix would be "s1" and "s2" for values 
         site1" and "site2"-->
        <cust-layer-value value="headquarters" display-name="Headquarters"
         id-prefix="1"/>
        <cust-layer-value value="remoteoffices" display-name="Remote Offices"
         id-prefix="2"/>
    ...
    

4.14.2 カスタマイズ・クラスの作成方法

カスタマイズする予定のモバイル・アプリケーションではこのファイルを作成しないでください。かわりに、カスタマイズ・クラスに対して別のJavaアプリケーションを作成します。Javaクラスの作成が完了した後で、カスタマイズするモバイル・アプリケーションにそのクラスをインポートします。

カスタマイズ・クラスを作成するには:

  1. Javaアプリケーションを作成します。

  2. 「ファイル」「新規」「プロジェクト」をクリックします。

  3. 「新規ギャラリ」で、「Javaアプリケーション・プロジェクト」を選択します。ウィザードを完了します。

  4. 「アプリケーション」ウィンドウで、「Javaアプリケーション・プロジェクト」を右クリックして、「プロジェクト・プロパティ」を選択します。

  5. 「プロジェクト・プロパティ」ダイアログで、「ライブラリとクラスパス」をクリックしてから「ライブラリの追加」を選択します。

  6. 「ライブラリの追加」ダイアログで、MDSランタイムを選択し、「OK」をクリックします。「OK」をクリックして、「プロジェクト・プロパティ」ダイアログを閉じます。

  7. 「アプリケーション」ウィンドウで、「Javaアプリケーション・プロジェクト」を右クリックし、「新」「Javaクラス」を選択します。

  8. 「Javaクラスの作成」ダイアログで、クラスの名前およびパッケージを入力します。

  9. 「拡張」フィールドで、クラス階層を参照し、oracle.mds.cust.CustomizationClassを取得します(図4-57を参照)。「OK」をクリックします。


    注意:

    「抽象メソッドの実装」(デフォルトの設定)を「Javaクラスの作成」ダイアログで選択する必要があります。


    図4-57 カスタマイズ・クラスの作成

    このイメージについては周囲のテキストで説明しています。
  10. スタブ・ファイルを更新します。例4-30は、カスタマイズ・クラスを示しています。

    例4-30 カスタマイズ・クラス

    package mobile;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    import oracle.mds.core.MetadataObject;
    import oracle.mds.core.RestrictedSession;
    import oracle.mds.cust.CacheHint;
    import oracle.mds.cust.CustomizationClass;
     
    public class SiteCC extends CustomizationClass {
        private static final String DEFAULT_LAYER_NAME = "site";
        private String mLayerName = DEFAULT_LAYER_NAME;
        public SiteCC() {
           
        }
     
        public SiteCC (String layerName) {
            mLayerName = layerName;
        }
        public CacheHint getCacheHint() {
                   return CacheHint.ALL_USERS;
        }
     
        public String getName() {
            
            return mLayerName;
        }
     
           public String[] getValue(RestrictedSession restrictedSession, MetadataObject metadataObject)
    {
            // This needs to return te site value at runtime.
            //For now, it's always null
               Properties properties = new Properties();
               String configuredValue = null;
               Class clazz = SiteCC.class;
               InputStream is  = clazz.getResourceAsStream("/customization.properties");
    
               if (is != null){
                   try {
                       properties.load(is);
                       String propValue = properties.getProperty(mLayerName);
                       if (propValue != null){
                           configuredValue = propValue;
                       }
                   } catch (IOException e) {
                       e.printStackTrace();
                   }
               }
               
               return new String[] {configuredValue};
        }
    }
    
  11. Javaアプリケーション・プロジェクトを再ビルドします。

4.14.3 カスタマイズ・クラスにアクセスするためのデザインタイムの有効化方法

最初に、カスタマイズ・クラスをJARファイルとしてパッケージ化し、このクラスをモバイル・アプリケーションに登録する必要があります。カスタマイズ・クラスおよび関連するアーティファクトをJARファイルにパッケージ化するには、「デプロイメント・プロファイルの作成」ウィザードを使用してデプロイメント・プロファイルを作成する必要があります。詳細は、第3.2.2.4項「自動的に生成されるデプロイメント・プロファイルについて」を参照してください。

JARにカスタマイズ・クラスを追加するには:

  1. 「アプリケーション」ウィンドウで、「Javaアプリケーション・プロジェクト」を右クリックし、「新」→「ギャラリから」を選択します。

  2. 「新規ギャラリ」で、「一般」を展開し、「デプロイメント・プロファイル」「JARファイル」の順に選択して、「OK」をクリックします。


    ヒント:

    「カテゴリ」ツリーに「デプロイメント・プロファイル」ノードが表示されない場合、「すべての機能」タブをクリックします。


  3. 「デプロイメント・プロファイルの作成」 -- 「JARファイル」ダイアログで、プロジェクト・デプロイメント・プロファイルの名前(図4-58SiteCCなど)を入力して、「OK」をクリックします。

    図4-58 カスタマイズ・クラスのデプロイメント・プロファイルの作成

    図4-58については周囲のテキストで説明しています。
  4. 「JARデプロイメント・プロファイルのプロパティの編集」ダイアログで、「JARオプション」を選択します。

  5. 必要に応じて、JARファイルの場所を入力します。または、デフォルトの場所を使用します。

  6. ファイル・グループ→「プロジェクトの出力」→「フィルタ」を開き、JARに含むように選択できるファイルを一覧表示します。

  7. 「フィルタ」ページの「ファイル」タブで、JARファイルに追加するカスタマイズ・クラスを選択します(図4-59を参照)。

    図4-59 カスタマイズ・クラスをJARファイルに含める

    このイメージについては周囲のテキストで説明しています。
  8. 「OK」をクリックして、「JARデプロイメント・プロファイルのプロパティの編集」ダイアログを終了します。

  9. 「OK」を再度クリックして、プロジェクト・プロパティのダイアログを終了します。

  10. 「アプリケーション」ウィンドウで、「Javaアプリケーション・プロジェクト」を右クリックし、「デプロイメント・プロファイル」を選択します。「デプロイメント・アクション」ページ(図4-60を参照)では、「JARにデプロイ」がデフォルトで選択されています。「次へ」をクリックします。

    図4-60 カスタマイズ・クラスのJARファイルへのデプロイ

    このイメージについては周囲のテキストで説明しています。
  11. JARファイルの出力場所の確認メッセージを確認します。「OK」をクリックします。

    図4-61「サマリー」ページ(JARファイルの出力場所を示す)

    このイメージについては周囲のテキストで説明しています。

    「ログ・ファイル」ウィンドウ(図4-62)では、デプロイメントのステータスが表示されます。

    図4-62 デプロイメント・ログ

    このイメージについては周囲のテキストで説明しています。

カスタマイズ・クラスをモバイル・アプリケーションに登録するには:

  1. モバイル・アプリケーションを開きます。

  2. 「アプリケーション」「アプリケーションのプロパティ」を選択します。

  3. 「ライブラリとクラスパス」を選択します。

  4. 「JAR/ディレクトリの追加」をクリックします。

  5. 「アーカイブまたはディレクトリの追加」ダイアログで、カスタマイズ・クラスを含むJARファイルに移動して、「開く」をクリックします。

  6. 「OK」をクリックします。

  7. adf-config.xmlファイルの「MDS」ページの概要エディタで、カスタマイズ・クラスを追加します(図4-63を参照)。

    図4-63 カスタマイズ・クラスの追加

    このイメージについては周囲のテキストで説明しています。

4.14.4 Webサービス・データ・コントロールとカスタマイズしたアプリケーションのデプロイメントに関する必知事項

WebサービスJava Bean定義(JDB)ファイルは、カスタマイズ・デプロイメントでは作成できないため、カスタマイズ・デプロイメントの実行前に、次のように非カスタマイズ・デプロイメントを実行してこれらのファイルを作成する必要があります。

  1. Studio開発者ロールで、アプリケーションを起動します。

  2. 「ビルド」「すべてクリーン」を選択し、以前のデプロイメント以降に廃止されている可能性があるWebサービスJDBファイルを削除します。

  3. デプロイメント・オプションから選択します(「アプリケーション」「デプロイ」を選択し、デプロイメント・プロファイルを選択してアクセスします)。詳細は、第19章「モバイル・アプリケーションのデプロイ」を参照してください。

  4. 「カスタマイズ開発者」ロールで、アプリケーションを起動します。

  5. 手順3で選択したデプロイメント・プロファイルと同じものを選択すると、カスタマイズ・デプロイメントが、非カスタマイズ・デプロイメントで作成されたJBDファイルにアクセスできるようになります。

4.14.5 モバイル・アプリケーションのカスタマイズ時に行われる処理

モバイル・アプリケーションでカスタマイズを実装する場合、JDeveloperによりこれらのカスタマイズ用のメタデータ・ファイルとこれらを格納するサブパッケージが作成されます。メタデータ・ファイルにはカスタマイズしたオブジェクトのカスタマイズが含まれ、これらは実行時にベース・メタデータに適用されます。JDeveloperでは、新しいメタデータ・ファイルにオブジェクトのベース・ファイルと同じ名前が付けられますが、.xml拡張子が追加されます(図4-64maf-feature.xml.xmlを参照)。

図4-64 maf-feature.xmlメタデータ・ファイル

この図は周囲のテキストで説明しています

4.14.6 モバイル・アプリケーションのリソース・バンドルでのカスタマイズの有効化

リソース・キーのカスタマイズを実装する場合、ベース・リソース・バンドル・ファイルを使用することができないため、追加のリソース・バンドル・ファイルを作成する必要があります。

4.14.6.1 リソース・バンドルでカスタマイズを有効化する方法

Studio開発者ロールで、アプリケーションまたはプロジェクト・リソース・バンドルを作成します。作成するバンドルを編集して、リソース・キーの文字列値を定義します。

始める前に

Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発の複数のリソース・バンドルの使用方法に関する項を理解しておいてください。

アプリケーション・リソース・バンドルを作成するには:

  1. Studio開発者ロールで、「アプリケーション」「アプリケーションのプロパティ」「リソース・バンドル」をクリックします。

  2. 「リソース・バンドル」ページで、「アプリケーション・バンドル検索」をクリックし、「バンドルの追加」アイコンの右にあるドロップダウン・メニューをクリックして、「アプリケーション・バンドルの作成」を選択します(図4-65を参照)。

    図4-65 アプリケーション・リソース・バンドルの作成

    この図については周囲のテキストで説明しています。
  3. 表示された「Xliffファイルの作成」ダイアログで、リソース・バンドルの名前を入力し、「OK」をクリックします。

  4. リソース・バンドルを編集します(第4.11.1.8項「リソース・バンドル・ファイルの編集方法」を参照)。


    注意:

    MAFは、アプリケーション・レベルの「リソース・バンドル」ページではオーバーライドされたプロパティをサポートしていません。


  5. 「カスタマイズ開発者」ロールで、「テキスト・リソースの選択」ダイアログを開き、適切な文字列を含むリソース・バンドルから選択します。「カスタマイズ開発者」ロールでは文字列の変更または新しい文字列の作成ができないため、選択したバンドルの文字列から選択することのみが可能です。


    注意:

    「カスタマイズ開発者」ロールで、ベース・リソース・バンドルから文字列を選択すると、アプリケーションのアップグレード時に問題が発生する可能性があるため選択しないでください。


プロジェクト・リソース・バンドルを作成するには:

  1. Studio開発者ロールで、リソース・バンドルを作成するプロジェクトを右クリックして、「新」「ギャラリから」「一般」「XML」「XMLローカライゼーション・ファイル(XLIFF)」を選択します。

  2. 表示された「Xliffファイルの作成」ダイアログで、リソース・バンドルの名前を入力し、「OK」をクリックします。

  3. リソース・バンドルを編集します(第4.11.1.8項「リソース・バンドル・ファイルの編集方法」を参照)。

  4. 「リソース・バンドル」ページの「バンドル検索」タブで、プロジェクト(.jpr)ファイルを選択してリソース・バンドルを登録します(図4-66を参照)。

    図4-66 リソース・バンドルの選択

    この図は周囲のテキストで説明しています

    リソース・バンドルを登録すると、「テキスト・リソースの選択」ダイアログに表示されます(図4-67を参照)。

    図4-67 テキスト・リソースのリソース・バンドルの選択

    この図は周囲のテキストで説明しています
  5. 「テキスト・リソースの選択」ダイアログを使用して、次のようにキーを定義します。

    1. 「リソース・バンドル」ドロップダウン・リストからバンドルを選択します。

      ダイアログには、選択したリソース・バンドルで現在定義されている文字列が表示されます。

    2. 新しい文字列を入力して、「保存して選択」をクリックします。

      JDeveloperでは、選択したリソース・バンドルに文字列を書き込みます。

  6. 「カスタマイズ開発者」ロールで、「テキスト・リソースの選択」ダイアログを開き、適切な文字列を含むリソース・バンドルから選択します。「カスタマイズ開発者」ロールでは文字列の変更または新しい文字列の作成ができないため、選択したバンドルの文字列から選択することのみが可能です。


    注意:

    「カスタマイズ開発者」ロールで、ベース・リソース・バンドルから文字列を選択すると、アプリケーションのアップグレード時に問題が発生する可能性があるため選択しないでください。


4.14.7 カスタマイズを使用したモバイル・アプリケーションのアップグレード

カスタマイズはベース・アプリケーションとは別に保存されているため、安全にアップグレートができます。カスタマイズは変更を保持するため、これらの変更をアプリケーションの新しいバージョンに適用して、アプリケーションをアップグレードできます。MAFアプリケーション・アーカイブ(.maa)ファイルによって、モバイル・アプリケーションをアップグレードするためのメカニズムが提供されます。.maaファイルからアプリケーションを作成する場合、.maaファイルの更新バージョンを使用してアプリケーションをアップグレードできます。

4.14.7.1 モバイル・アプリケーションのアップグレード方法

「アーカイブからモバイル・アプリケーションをアップグレード」ウィザードを使用すると、アップグレードの前に行われたカスタマイズを保持しながら新しいバージンにアプリケーションをアップグレードできます。

始める前に

MAFアプリケーション・アーカイブ(.maa)ファイルについて理解しておいてください。詳細は、第19.6項「モバイル・アプリケーション・アーカイブ・ファイルの作成」および第19.7項「署名のないデプロイメント・パッケージの作成」を参照してください。

.maaファイルにパッケージ化され、アップグレードに使用されるアプリケーションのアプリケーションIDが、適用されるアプリケーションと同じであることを確認してください。また、アップグレードの対象となるアプリケーションより新しいバージョン番号である必要があります。

モバイル・アプリケーションをアップグレードするには:

  1. .maaファイルからモバイル・アプリケーションを作成します。

  2. カスタマイズをモバイル・アプリケーションに適用します(第4.14項「Oracle Metadata Servicesを使用したMAFファイルのカスタマイズ」および第4.14.6項「モバイル・アプリケーションのリソース・バンドルでのカスタマイズの有効化」を参照)。

  3. 「アプリケーション」をクリックして、アーカイブからモバイル・アプリケーションを選択を選択します。

  4. .maaファイルを参照して選択します。.maaにパッケージ化されたアプリケーションが、現在のアプリケーションと同じ(または古い)バージョンであったり、異なるアプリケーションIDである場合、ウィザードによりアップグレードは中止されます。

    図4-68 .maaファイルの選択

    この図は周囲のテキストで説明しています
  5. 手動マージが必要なファイルの「サマリー」ページを確認します。図4-69に示すように、MAFでは、Tempディレクトリにアプリケーションの初期バージョン(バージョン1)が保存されます。「サマリー」ページにもログ・ファイルの一時的な場所が表示されます。

    図4-69 アプリケーションのアップグレード情報

    前後のテキストでこのイメージを説明しています
  6. アップグレードが正常に完了すると、JDeveloperは再起動します。異なるバージョンの構成ファイルに調整が必要な場合、JDeveloperにより通知されます(図4-70を参照)。

    図4-70 手動マージ通知

    この図は周囲のテキストで説明しています

アップグレード中に、MAFでは、バージョン1のアプリケーションとバージョン2 (アップグレードしたバージョンのアプリケーション)の両方に対してカスタマイズできないファイル・セットがコピーされます。これらのファイルには、connections.xmlファイル、adf-config.xmlファイルなどがあります。MAFによって、バージョン1とバージョン2のconnections.xmlファイルとadf-config.xmlファイルに差異が検出されると、これらのファイルの両方のコピーを保持し、マージ・ログ・ファイルに対してエントリを記述します。バージョン番号がある場合、MAFではファイル名にバージョン番号を追加してバージョン1を区別します。バージョン番号がない場合、MAFでは_oldをファイル名に追加します(図4-70connections_old.xmlを参照)。必要に応じて、この差異を新しいバージョンに手動でマージできます。図4-71に示すように、MAFでは、「サマリー」ページに表示された一時的な場所にマージ・ファイル・ログを配置します。MAFでは、ファイルにworkspace name_timestampという名前を付けます。

図4-71 マージ・ログ・ファイル

前後のテキストでこのイメージを説明しています

4.14.8 アプリケーションのアップグレード時のJDeveloperでの処理

Tempディレクトリへのバージョン1のコピー、およびバージョン1とバージョン2のアップグレード不可の構成ファイルのコピーの作成に加えて、「アーカイブからモバイル・アプリケーションをアップグレード」ウィザードを使用してアプリケーションをアップグレードする場合、MAFでは次のことも実行します。

  • 各プロジェクトのライブラリおよびリソース・バンドル設定を、に保存します。プロジェクト・ファイル名が入力されたマップに保存します。

  • ワークスペースのリソース・バンドル設定を保存します。

  • 登録したカスタマイズ・クラスをadf-config.xmlファイルに保存します。

  • バージョン2の.maaファイルを一時ディレクトリにインポートします。

  • バージョン1へのアップグレードに使用される.maaファイルからアプリケーションをコピーします。

  • バージョン2の各プロジェクト(.jpr)ファイルを、登録したリソース・バンドルおよびライブラリ依存マップで更新します。ライブラリの新しいバージョンにより以前のバージョンがオーバーライドされます。ただし、バージョン1で使用されるライブラリと同じ名前を共有している場合、バージョン1ライブラリは変更されません。

  • バージョン2のワークスペース(.jws)ファイルを、登録したリソース・バンドル設定で更新します。

  • バージョン2のadf-config.xmlファイルを更新し、カスタマイズ・クラスを登録します。

4.14.9 FARのアップグレードに関する必知事項

アプリケーションの作成に使用された元の.maaファイル内にパッケージ化されていないFARファイルがアプリケーションに含まれる場合(または、アプリケーションのアップグレードに使用される.maaファイルに含まれる場合)、FARファイルを個別にアップグレードする必要があります。たとえば、.maaファイルからアプリケーションを作成し、FARファイルを追加してカスタマイズを実行できます。「リソース」ウィンドウから更新したFARを追加することによって新しいバージョンのFARを使用するために、アプリケーションをアップグレードできます(第4.13.1項「MAFアプリケーションでのFARコンテンツの使用方法」を参照)。

4.15 モバイル・アプリケーションへのCordovaプラグインの統合

MAFで作成したアプリケーションはハイブリッド・モバイル・アプリケーションであるため、Apache Cordova JavaScript APIを使用してネイティブ・デバイスAPIにアクセスします。Cordova Apache Documentation (http://cordova.apache.org/で入手可能)のプラグイン開発ガイドに示すように、Cordovaプラグインは、プラットフォーム固有のSDK (XcodeまたはAndroid SDK)およびJavaScriptを使用して構築されたネイティブ・コードで構成されています。

MAFはサードパーティCordovaプラグインには付属していないため、かわりに、このプラグインがデプロイされるプラットフォームのSDKを使用して開発する必要があります。つまり、Xcodeを使用してiOSアプリケーションのプラグインを作成し、Android SDKを使用してAndroidデバイスをターゲットとするアプリケーションのプラグインを作成します。プラグイン自体の作成に加えて、プラグインのリソースをアプリケーションに追加する方法を説明する付随する手順(readmeまたはmanifestファイル)も提供する必要があります。

サードバーティ・プラグインが、MAFでサポートされるCordovaのバージョンに準拠していることを確認する必要があります。MAFでサポートされるAPIのバージョンが、プラグインで使用されるバージョンとは異なる場合、有効化する機能をモバイル・アプリケーションでは使用できなくなる可能性があります。

MAFを使用するJavaScript APIへのアクセス方法の詳細は、付録B「ローカルHTMLおよびアプリケーション・コンテナAPI」を参照してください。


注意:

プラグインは、Cordova 2.2.0 (MAFでサポートされている唯一のバージョン)と互換性がある必要があります。


4.15.1 iOSおよびAndroidのCordovaプラグインの統合方法

「Cordovaプラグイン」ページ(図4-72を参照)で、プラットフォーム固有のXMLファイル(iOS用のcordova.plistファイルおよびAndroid用のconfig.xmlファイル)を更新することで、モバイル・アプリケーションにプラグインを統合できます(プラグインの開発者によって提供されているプラグイン手順を参照)。

図4-72「Cordovaプラグイン」ページ

この図は周囲のテキストで説明しています

概要エディタに加えて、Cordovaプラグインを使用するようにMAFを構成するには、「コンポーネント」ウィンドウからソース・エディタまたは「構造」ウィンドウにCordovaコンポーネントをドラッグします(図4-73を参照)。「プロパティ」ウィンドウを使用して、構成を編集することもできます。

図4-73「Cordovaプラグイン」コンポーネント

この図は周囲のテキストで説明しています

始める前に

次の手順を実行します。

  • プラグインの開発者からプラグインの統合手順を取得します。

  • プラグイン自体を取得します(ソース・コード、JavaScriptファイル、および追加のライブラリ、リソース、アセット)。

  • 表4-12に、アプリケーション・コントローラ・プロジェクトおよびビュー・コントローラ・プロジェクトに手動で作成するディレクトリを示します。作成後、プラグイン・アーティファクトをディレクトリにコピーします。プラグインの主なコンポーネント、JavaScriptファイルおよびプラグイン・バイナリ・ライブラリは、モバイル・アプリケーション内の異なるプロジェクト(ビュー・コントローラ・プロジェクトおよびアプリケーション・コントローラ・プロジェクト)に配置されます。


    ヒント:

    「Cordovaプラグイン」ページの「インストール」セクションでは、これらのファイルの場所のガイドラインが読取り専用で表示されます。


    表4-12 プラグイン・アーティファクトを作成するディレクトリの場所

    アーティファクト ファイルの場所 説明

    アセット

    アプリケーション・ワークスペース・ディレクトリ\ApplicationController\src\plugins\Plugin Name\Platform\assets
    例:
    JDeveloper\mywork\application1\ApplicationController\src\plugins\BarcodeScanner\Android\assets

    このフォルダには、プラグイン・アセットがあります。このAndroid専用アーティファクトはオプションです。

    JavaScriptファイル

    アプリケーション・ワークスペース・ディレクトリ\ViewController\public_html\plugins\Plugin Name\Platform\js
    例:
    JDeveloper\mywork\application1\ViewController\public_html\plugins\BarcodeScanner\Android\js

    このディレクトリには、プラグインJavaScriptファイルがあります。このフォルダは必須であり、JavaScriptファイルが含まれている必要があります。

    プラグイン・ライブラリ

    アプリケーション・ワークスペース・ディレクトリ\ApplicationController\src\plugins\Plugin Name\Platform\bin

    次に例を示します。

    JDeveloper\mywork\application1\ApplicationController\src\plugins\BarcodeScanner\Android\bin

    プラグイン・ライブラリが含まれています。このフォルダは、このコンテンツが含まれている必要がある必須のフォルダです。

    依存ライブラリ

    アプリケーション・ワークスペース・ディレクトリ\ApplicationController\src\plugins\Plugin Name\Platform\libs

    次に例を示します。

    JDeveloper\mywork\application1\ApplicationController\src\plugins\BacodeScanner\Android\libs

    追加の依存ライブラリをこの場所にコピーします。このフォルダはオプションです。

    リソース

    アプリケーション・ワークスペース・ディレクトリ\ApplicationController\src\plugins\Plugin Name\Platform\res

    次に例を示します。

    JDeveloper\mywork\application1\ApplicationController\src\plugins\BacodeScanner\Android\res

    追加のプラグイン・リソース・フォルダをコピーします。このフォルダはオプションです。


    図4-74に、「アプリケーション」ウィンドウでのこれらの場所を示します。

    図4-74 プラグイン・アーティファクト

    この図は周囲のテキストで説明しています
  • MAF AMXで作成したアプリケーション機能の場合、タスク・フローのマネージドBeanには、次のようなinvokeContainerJavaScriptFunctionを使用するハンドラ・メソッドを含む必要があります。

    AdfmfContainerUtilities.
    invokeContainerJavaScriptFunction(featureid, methodname, new Object[]
                                                             { params... })
    

    このメソッドはJavaScriptを起動します。実装の例は、APIDemoサンプル・アプリケーションのManagedBean.javaファイルを参照してください。このサンプル・アプリケーションは、開発用コンピュータのJDeveloperインストール・ディレクトリ内にある次の場所のPublicSamples.zipファイルに含まれています。

    jdev_install/jdeveloper/jdev/extensions/oracle.maf/Samples
    

    invokeContainerJavaScriptFunctionの詳細は、第B.2.14項「invokeContainerJavaScriptFunction」およびOracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

  • FARからプラグイン関連アーティファクトおよびJavaScriptファイルを取得する場合(第4.15.4項「FARを使用したプラグインの統合に関する必知事項」を参照)、プラグインにJavaScriptファイルが付随していることを確認する必要があります。モバイル・アプリケーションで使用されるFARにJavaScriptファイルがない場合、このファイルを取得するか、FAR開発者の手順を使用して作成する必要があります。FARをアプリケーションに追加する必要もあります(第4.13.1項「MAFアプリケーションでのFARコンテンツの使用方法」を参照)。

Androidプラグインを追加するには:

  1. maf-application.xmlの概要エディタを開き、「Cordovaプラグイン」ページを選択します。

  2. 「追加」をクリックします。

  3. 「プラグインの挿入」ダイアログに入力します(図4-75を参照)。

    図4-75 Androidプラグインの追加

    この図は周囲のテキストで説明しています
    • 完全修飾名: プラグインの完全修飾名。この名前はmanifestまたはreadmeファイルによって提供され、config.xmlファイル内のプラグイン要素のname属性にマッピングされます。

    • 実装クラス: プラグインを実装するクラスの名前。manifestまたはreadmeファイルによって提供されるこの名前は、通常、Javaパッケージとその後にクラス名が続いたものです。これは、config.xmlファイル内のプラグイン要素のvalue属性にマッピングされます。

    • 名前: プラグインの名前。これは、プラグイン・アーティファクトとエラー検出時にデプロイメントに記録される値を含むフォルダの名前です。

    • プラットフォーム: 「Android」を選択します。

  4. 「OK」をクリックします。


    ヒント:

    「Cordovaプラグイン」コンポーネント・ウィンドウからエディタまたは「構造」ウィンドウにプラグイン・コンポーネントをドラッグして、このダイアログにアクセスすることもできます。


  5. プラグインに、その独自のAndroidリソースが必要な場合、これらのリソースを表示する必要があるJavaパッケージを「リソース・パッケージ名」フィールドに入力します。そうでない場合は、このフィールドを空白のままにしておきます。これはオプションの値です。

図4-76 Androidプラグインの統合

この図は周囲のテキストで説明しています

iOSプラグインを追加するには:

  1. maf-application.xmlの概要エディタを開き、「Cordovaプラグイン」ページを選択します。

  2. 「追加」をクリックします。

  3. 「プラグインの挿入」ダイアログに入力します(図4-77を参照)。

    図4-77 iOSプラグインの追加

    この図は周囲のテキストで説明しています
    • 完全修飾名: プラグインの完全修飾名。この名前はmanifestまたはreadmeファイルによって提供され、cordova.plistファイル内の<key>要素にマッピングされます。

    • 実装クラス: プラグインを実装するクラスの名前。この名前はmanifestまたはreadmeファイルによって提供され、通常、Objective-Cクラスの名前です。これは、cordova.plistファイル内の<string>要素にマッピングされます。

    • 名前: プラグインの名前。これは、プラグイン・アーティファクトとエラー検出時にデプロイメントに記録される値を含むフォルダの名前です。

    • プラットフォーム: iOSを選択します。

  4. 「OK」をクリックします。

  5. 「リンカー・フラグ」フィールドに、プラグインに必要な追加のリンカー・フラグを入力します。プラグイン・ライブラリ(-l BarcodeScannerなど)へのリンクにオプションを追加する必要があります。次に例を示します。

    -l BarcodeScanner -lc++ -liconv -framework CoreVideo -framework AssetsLibrary
    -framework AVFoundation
    

    readmeファイルを参照し、追加のライブラリが必要かどうかを判断します。

    図4-78 iOSプラグインの統合

    この図は周囲のテキストで説明しています

MAF AMXコンテンツでプラグインのJavaScriptファイルの参照を可能にするには:

  1. maf-feature.xmlの概要エディタを開き、プラグインを使用するアプリケーション機能を選択します。

  2. 「コンテンツ」をクリックして、「MAF AMX」を選択します。


    注意:

    ビュー・コントローラ・プロジェクトには、次のようにJavaハンドラでinvokeContainerJavaScriptFunctionを使用してJavaScriptを起動するクラスを含む必要があります。

    AdfmfContainerUtilities.invokeContainerJavaScriptFunction( 
                                                              featureid, methodname, new Object[] { params... });
    

  3. 「包含」表で「追加」をクリックして、インクルードの挿入ダイアログを開きます。

    図4-79 ビュー・コントローラ・プロジェクト内のプラグインJavaScriptファイルの参照

    この図は周囲のテキストで説明しています
  4. 「JavaScript」を選択して、プラグインのJavaScriptファイルの場所を参照します(このファイルはビュー・コントローラ・プロジェクトのpublic_htmlフォルダに配置されています)。図4-79に示すように、JavaScriptファイルはビュー・コントローラ・プロジェクト内に配置されています(plugins/plugin name/platform/js/JavaScriptファイル名)。

ローカルHTMLコンテンツでプラグインのJavaScriptファイルの参照を可能にするには:

  1. maf-feature.xmlの概要エディタを開き、プラグインを使用するアプリケーション機能を選択します。

  2. 「コンテンツ」をクリックして、「ローカルHTML」を選択します。

  3. HTMLドキュメントの<script>タグを使用してJavaScriptファイルを参照します(例4-31<script type="text/javascript" src="../../../../www/js/barcodescanner.js"></script>など)。

    図4-31 <script>タグを使用したプラグインJavaScriptファイルの参照

    <!DOCTYPE html>
    <html>
      <head>
        <meta name="viewport" content="user-scalable=no,height=device-height,width=device-width" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <script type="text/javascript">if (!window.adf) window.adf = {};  
                                          adf.wwwPath = "../../../../www/";</script>
        <script type="text/javascript" src="../../../../www/js/base.js"></script>
        <script type="text/javascript" src="../../../../www/js/barcodescanner.js"></script>
        <script type="text/javascript" charset="utf-8">
            function scanBarcode()
            {
              window.plugins.barcodeScanner.scan(
                                                 function(result) {
                                                  if (result.cancelled)
                                                    updateContentNode("the user cancelled the scan");
                                                  else
                                                  updateContentNode("We got a barcode: " +
                                                    result.text);
                                                 },
                                                 function(error) {
                                                    updateContentNode("scanning failed: " + error);
                                                 }
                                                )
            }
     
            function updateContentNode(newContent)
            {
              $("#content").html(newContent);
            }
          </script>
      </head>
      <body onload="onBodyLoad()">
     
        <!-- MAIN PAGE -->
        <div data-role="page" id="main" data-url="main.jspx" data-position="fixed">
          <div data-role="header" data-position="fixed">
            <h1>
              Barcode Scanner Test
            </h1>
          </div>
          <div data-role="content" id="content">
            No barcode scanned yet
          </div>
          <div data-role="footer" data-position="fixed">
            <div data-role="navbar">
              <ul>
                <li>
                    <a href="javascript:try{scanBarcode();}catch(e){alert(e.description);}"
                    data-rel="dialog" data-transition="pop">Scan barcode</a>
                </li>
              </ul>
            </div>
          </div>
        </div>
      </body>
    </html>
    

4.15.2 プラグインの更新時に行われる処理

概要エディタまたは「コンポーネント」ウィンドウから「Cordovaプラグイン」コンポーネントを使用すると、maf-application.xmlファイルに<adfmf:cordovaPlugins要素が移入されます(図4-30を参照)。この要素とその子要素の詳細は、Oracle Fusion Middleware Oracle Mobile Application Frameworkのタグ・リファレンスを参照してください。

例4-32 <adfmf:cordovaPlugins>要素

<adfmf:cordovaPlugins>
    <adfmf:plugin name="BarcodeScanner" platform="iOS" 
                 implementationClass="CDVBarcodeScanner"
                 fullyQualifiedName="ios.apache.cordova.barcodeScanner">
      <adfmf:iosPluginInfo>
        <adfmf:linkerFlags>-l BarcodeScanner     
                           -lc++
                           -liconv
                           -framework CoreVideo
                           -framework AssetsLibrary
                           -framework AVFoundation</adfmf:linkerFlags>
      </adfmf:iosPluginInfo>
    </adfmf:plugin>
    <adfmf:plugin platform="Android" name="BarcodeScanner"
                  implementationClass="com.phonegap.pluigns.barcodescanner.BarcodeScanner"
                  fullyQualifiedName="BarcodeScanner">
      <adfmf:androidPluginInfo>
        <adfmf:resourcePackageName>com.google.zxing.client.android</adfmf:resourcePackageName>
        <adfmf:androidManifestActivities>&lt;activity android:name=".CaptureActivity"
              android:screenOrientation="landscape"
              android:clearTaskOnLaunch="true"
              android:stateNotNeeded="true"
              android:configChanges="orientation|keyboardHidden"
              android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
              android:windowSoftInputMode="stateAlwaysHidden"&gt;
              ...
         </adfmf:androidManifestActivities>
      </adfmf:androidPluginInfo>
    </adfmf:plugin>
  </adfmf:cordovaPlugins>
</adfmf:application>

4.15.3 プラグイン・プリファレンスの追加方法

アプリケーション・レベルとアプリケーション機能レベルの両方の「ユーザー・プリファレンス」ページで、Cordovaプラグイン・プリファレンスは表示されますが、このプラグイン・プリファレンスは、プリファレンス要素で定義されたプリファレンスの下の「ユーザー・プリファレンス」ページの下部(第14章「ユーザー・プリファレンスの有効化」を参照)や、プリファレンス・グループまたは単一のアイテム・プリファレンス・リスト選択から開く子プリファレンスとして表示されます。

始める前に

設定バンドル(Settings.bundle)とそのコンテンツ(Root.plistファイルおよび.stringsファイルなど)の詳細は、iOS Developer Library (http://developer.apple.com/library/ios/navigation/)で入手できる『Preferences and Settings Programming Guide』を参照してください。

iOSアプリケーションのプリファレンス・ページの下部にあるCordovaプラグイン・プリファレンスをマージするには:

  1. プラグインのアプリケーション・コントローラ・プロジェクト内に次のようなリソース(res)ファイルを作成します。

    application workspace directory\ApplicationController\src\plugins\plugin name\iOS\res
    
  2. 設定バンドル(Settings.bundle)ファイルをプラグインのresフォルダにコピーします。

Cordovaプラグイン・プリファレンスをiOSアプリケーションの子ページとしてマージするには:

  1. アプリケーション・コントローラ・プロジェクト内に次のようなプラグイン用のリソース(res)フォルダを作成します。

    application workspace directory\ApplicationController\src\plugins\plugin name\iOS\res
    
  2. 設定バンドル(Settings.bundle)ファイルをプラグインのresフォルダにコピーします。

  3. Root.plistファイルの名前をPluginName.Root.plistに変更します(このPluginNameはプラグインの名前です)。たとえば、このファイルの名前をBarcodeScanner.Root.plistに変更します。

  4. プラグインの.stringsファイル内の子ページのタイトルに対して、文字列IDおよびローカライズ可能な値を定義します。このIDは、PluginName.page.titleである必要があります(PluginNameはプラグインの名前です)。次に例を示します。

    "PluginName.page.title" = "Some Localized Page Title";

Androidアプリケーションのプリファレンス・ページの下部にあるCordovaプラグイン・プリファレンスをマージするには:

  1. アプリケーション・コントローラ・プロジェクト内のプラグイン用に次のようなリソース(res)フォルダを作成します。

    application workspace directory\ApplicationController\src\plugins\plugin name\Android\res
    
  2. preferences.xmlファイルを含むリソースをプラグインのresフォルダにコピーします。preferences.xmlファイル、および従属画面の定義の詳細は、Android開発者のWebサイト(http://developer.android.com/guide/topics/ui/settings.html)で入手できる『Settings Guide』の「Defining Preferences in XML」またはAndroid SDKドキュメントを参照してください。MAFデプロイメント・フレームワークでのプリファレンスの変換方法の詳細は、第C.2項「Android用のプリファレンスの変換」を参照してください。

Cordovaプラグイン・プリファレンスをAndroidアプリケーションの子ページとしてマージするには:

  1. preferences.xmlファイルを含むリソースをプラグインのresフォルダにコピーします。

  2. プリファレンス・セット(例4-33を参照)を別のPreferenceScreen要素内にネストします(例4-34)。

    例4-33 プリファレンス

    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
          <PreferenceCategory android:title="@string/preferences_scanning_title">
                <CheckBoxPreference android:key="preferences_decode_1D"
                                    android:defaultValue="true" 
                                    android:title="@string/preferences_decode_1D_title"/>
                ...
           </PreferenceCategory>
            ...
     
    </PreferenceScreen>
    

    例4-34は、PreferenceScreen要素をラップするためのandroid:key属性の定義を示しています。

    例4-34 PreferenceScreen要素でラップされたプリファレンス・セット

    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
      <PreferenceScreen android:key="wrapperScreen" android:title="Barcode Scanner">
          <PreferenceCategory android:title="@string/preferences_scanning_title">
                <CheckBoxPreference android:key="preferences_decode_1D"
                                    android:defaultValue="true"
                                    android:title="@string/preferences_decode_1D_title"/>
                ...
           </PreferenceCategory>
            ...
      </PreferenceScreen>
    </PreferenceScreen>
    
  3. 「プリファレンス」ページにローカライズが必要な場合、ローカライズされたstrings.xmlファイルに文字列値を定義します。strings.xmlファイルの詳細は、Android開発者のWebサイト(http://developer.android.com/guide/topics/resources/index.html)で入手できる『App Resources Guide』の「String Resources」、またはAndroid SDKドキュメントを参照してください。MAFデプロイメント・フレームワークでのstrings.xmlファイルの処理方法の詳細は、第C.2.3項「Strings.xml」を参照してください。

4.15.4 FARを使用したプラグインの統合に関する必知事項

1人の開発者がモバイル・アプリケーションのコンポーネントを作成する場合がありますが、通常、アプリケーションは複数の開発者が提供するリソースから構成されています。サードパーティのプラグインの追加は、後者の場合を示しており、FAR開発者は、ビュー・コントローラ・プロジェクトを機能アーカイブ・ファイル(FAR)としてデプロイする前に、まずプラグインを使用するアプリケーション機能を作成してテストします。FAR開発者はこのFARをアプリケーション・アセンブラ開発者に公開し、プラグインおよびJavaScriptファイルを統合する一連の手順(readmeファイルなど)を提供します。また、FAR開発者は、アプリケーション・アセンブラ開発者にプラグイン・バイナリ・ライブラリのZIPファイルを提供することもあります。アプリケーション・アセンブラは次に、FARをモバイル・アプリケーションに追加し、手順を使用してJavaScriptファイルおよびプラグイン・バイナリ・ライブラリをモバイル・アプリケーションのプロジェクトに統合します。続いて、モバイル・アプリケーションをテストして、プラットフォーム固有のパッケージとしてデプロイし、公開します。具体的には、FAR開発者とアプリケーション・アセンブラ間の共同作業は、次のもので構成されています。

  1. FAR開発者は、XcodeまたはAndroid SDKを使用して、Cordovaプラグイン・ライブラリ(iOS用の.aファイルまたはAndroid用のJARファイル)を作成します。MAFアプリケーションでこのライブラリを使用できるようにするには、開発者は次の手順を実行します。

    1. モバイル・アプリケーションを作成します。開発者は、アプリケーション・コントローラ・プロジェクト内の様々な場所にプラグイン・ライブラリを含めてから、ビュー・コントローラ・プロジェクトのpublic_htmlディレクトリにJavaScriptファイルを追加します。MAF AMXとして実装されたユーザー・インタフェースでは、JavaScriptファイルは、インクルードの挿入ダイアログを使用してmaf-feature.xmlファイルで参照されます(第4.10.1項「アプリケーション・コンテンツの定義方法」を参照)。HTMLベースのユーザー・インタフェースでは、JavaScriptインクルードを使用してこのファイルを参照します。

      MAF AMX作成アプリケーション機能では、JavaハンドラにinvokeContainerJavaScriptFunctionメソッドを含めることで、JavaScriptを起動します。詳細は、第B.2.14項「invokeContainerJavaScriptFunction」およびOracle Fusion Middleware Oracle Mobile Application Framework Java APIリファレンスを参照してください。

      HTML作成アプリケーション機能では、<script>タグでJavaScriptファイルの場所を参照して、JavaScriptファイルを直接コールします。

    2. maf-application.xmlの概要エディタとそのダイアログの「Cordovaプラグイン」ページを使用して、Cordovaプラグインを統合します。

    3. アプリケーションをテストするためにデバイスにデプロイします。

    4. ビュー・コントローラ・プロジェクトをFARとしてデプロイします。このFAR自体には、CordovaプラグインおよびJavaScriptファイルを参照するMAF AMXおよびHTMLページなどのアーティファクトが含まれる場合があります。


      注意:

      FARに、JavaScriptファイルが常に含まれるわけではありません。


    5. FARに含まれていない場合でも、FAR開発者は、モバイル・アプリケーションにプラグインを統合する一連の手順をアプリケーション・アセンブラ開発者に提供します。これらの手順は、開発組織およびプラグイン自体に固有であるため、伝達される方法および形式(メタデータ・ファイルまたはreadmeファイルなど)は、FAR開発者とアプリケーション・アセンブラ開発者間の合意によって決まります。例4-35は、iOSプラグインの統合方法を示すREADME.mdファイルの一部を示しています。

      例4-35 README.mdファイル

      ...
      ## Adding the plugin to your project ##
      * Copy the .h, .cpp and .mm files to the Plugins directory in your project.
      * Copy the .js file to your www directory and reference it from your html file(s).
      * In the `Supporting Files` directory of your project, add a new plugin by editing  
       the file `Cordova.plist` and in the `Plugins` dictionary adding the following
       key/value pair:
        * key: `org.apache.cordova.barcodeScanner`
        * value: `CDVBarcodeScanner`
       Add the following libraries to your Xcode project, if not already there:
        * AVFoundation.framework
        * AssetsLibrary.framework
        * CoreVideo.framework
        * libiconv.dylib
      ...
      
  2. アプリケーション・アセンブラは、FARモバイル・アプリケーションを追加します(第4.13.1項「MAFアプリケーションでのFARコンテンツの使用方法」を参照)。

  3. FAR開発者がプラグイン・バイナリのZIPファイルを提供しない場合、アプリケーション・アセンブラはプラットフォーム固有のSDKを使用してプラグインを構築する必要があります。プラグインは、プラットフォーム固有のパッケージ(iOS用の.aファイルまたはAndroid用のJARファイル)にパッケージ化されています。

  4. アプリケーション・アセンブラ開発者は、アプリケーション・コントローラ・プロジェクトにプラグイン・バイナリ・ライブラリを追加し、ビュー・コントローラ・プロジェクトのpublic_htmlディレクトリにJavaScriptファイルを追加します。

  5. maf-application.xmlの概要エディタおよびそのダイアログの「Cordovaプラグイン」ページを使用して、アプリケーション・アセンブラ開発者は手順の指示に従って、プラットフォーム固有のXMLファイル(iOS用のcordova.plistファイルおよびAndroid用のconfig.xmlファイル)を更新します。MAFデプロイメントでは、この構成を使用して、モバイル・アプリケーションにプラグインを組み込みます。