Oracle® Fusion Middleware Oracle Application Development Frameworkモバイル開発者ガイド 11g リリース2 (11.1.2.3.0) B70750-01 |
|
前 |
次 |
この章では、ADFモバイルのアプリケーションレベルとアプリケーション機能レベルの両方のユーザー・プリファレンス・ページを作成する方法について説明します。
この章では、次の項目について説明します。
プリファレンスによって、エンド・ユーザーが構成可能な設定を追加できます。adfmf-application.xml
およびadfmf-feature.xml
の両方のファイル内で、<adfmf:preferernces>
要素を使用してユーザー・プリファレンス・ページを定義します。例13-1に示すとおり、<adfmf:preferenceGroup>
と呼ばれる<adfmf:preferences>
の子要素とその子要素によってユーザー・プリファレンスを定義します。これには、読取り専用文字列、ドロップダウン・メニューや、例13-1のケースのようにアプリケーション設定の追加オプションをユーザーに提示する子ページなど、様々な形でオプションを提示するページを作成します。
また、<adfmf:preferences>
要素を使用して、各アプリケーション機能内でユーザーが管理するプリファレンスを作成します。
例13-1 <adfmf:preferences>要素を使用したアプリケーションレベルのプリファレンスの定義
<?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="MobileApplication" id="com.company.MobileApplication" appControllerFolder="ApplicationController" version="1" vendor="oracle" listener-class="application.LifeCycleListenerImpl"> <adfmf:description>This is an ADF Mobile application</adfmf:description> <adfmf:featureReference id="PROD"/> <adfmf:featureReference id="HCM"/> <adfmf:featureReference id="Customers"/> <adfmf:preferences> <adfmf:preferenceGroup id="a" label="Prefs Group A"> <adfmf:preferenceBoolean id="a1-sound" label="Sound Effects"/> <adfmf:preferenceNumber id="a2-retries" label="Retries" default="3"/> <adfmf:preferenceList id="a3-background" label="Background" default="3"> <adfmf:preferenceValue name="None" value="0"/> <adfmf:preferenceValue name="Field" value="1"/> <adfmf:preferenceValue name="Galaxy" value="2"/> <adfmf:preferenceValue name="Mountain" value="3"/> </adfmf:preferenceList> <adfmf:preferenceText id="a4-name" label="Default Name"/> <adfmf:preferencePage id="aa" label="Prefs SubGroup AA"> <adfmf:preferenceGroup id="aa-sec" label="Security"> <adfmf:preferenceBoolean id="aa-sec-useSec" label="Use Security"/> <adfmf:preferenceNumber id="aa-sec-timeout" label="Timeout (secs)" default="120"/> </adfmf:preferenceGroup> </adfmf:preferencePage> </adfmf:preferenceGroup> <adfmf:preferenceGroup id="b" label="Prefs Group B"> <adfmf:preferenceBoolean id="b-cloudSync" label="Cloud Sync"/> <adfmf:preferenceList id="b-dispUsage" label="Display Usage As" default="1"> <adfmf:preferenceValue name="Percent" value="1"/> <adfmf:preferenceValue name="Minutes" value="2"/> </adfmf:preferenceList> </adfmf:preferenceGroup> </adfmf:preferences> </adfmf:application>
図13-1では、子ユーザー・プリファレンス・ページを開くことでそれに続くオプションを提供する方法の例を示しています。
プリファレンス・ページは<adfmf:preferenceGroup>
要素内で定義され、次の子要素が存在します。
<adfmf:preferencePage>
: ユーザー・インタフェースに新しいページを指定します。
<adfmf:preferenceList>
: ユーザーに特定のオプション・セットを提供します。
<adfmf:preferenceValue>
: リスト要素を定義する子要素です。
<adfmf:preferenceBoolean>
: ブール設定です。
<adfmf:preferenceText>
: テキスト・プリファレンス設定です。
これらの要素およびその属性の詳細は、Oracle Fusion Middleware Oracle ADFモバイルのタグ・リファレンスを参照してください。
ADFモバイル・アプリケーションおよびアプリケーション機能レベルの両方のプリファレンス・ページを作成する例については、PrefDemoサンプル・アプリケーションを参照してください。このサンプル・アプリケーションは、開発コンピュータのJDeveloperインストール・ディレクトリ内で次の場所にあるPublicSamples.zip
ファイルに置かれています。
jdev_install/jdeveloper/jdev/extensions/oracle.adf.mobile/Samples
PrefDemoアプリケーションは、アプリケーションレベルの設定ページと、ADFモバイルAMXとして実装されている3つのアプリケーション機能のプリファレンス・ページで構成されています。図13-2は、通常の設定ページから起動する、PrefDemoアプリケーションの設定ページを示しています。この図では、プリファレンス設定ページをiOSの設定アプリケーションから起動しています。
図13-3で「App」、「Feature1」(これが選択されています)および「Feature 2」と表示されているアプリケーション機能のプリファレンス・ページでは、ADFモバイル・ブール・スイッチ、入力テキストおよび出力テキストの各コンポーネントから構築されたプリファレンス・ページの例が示されています。これらのコンポーネントは、EL(式言語)を使用してアプリケーション機能やその内部に構成されている様々な<adfmf:preferences>
コンポーネントにアクセスします。詳細は、第13.3項「ユーザー・プリファレンス・ページ用に格納された値を取得するEL式の使用方法」を参照してください。
PrefDemoアプリケーションでは、ビュー・アクティビティとページ・リフレッシュが可能な制御フロー・ケースで構成される単一のバインド・タスク・フローによって、ADFモバイルAMXの各プリファレンス・ページが参照されます。
adfmf-application.xml
概要エディタの「プリファレンス」ページ(図13-4を参照)では、<adfmf:preferenceGroup>
内の子プリファレンス・ページ要素をネストすることでアプリケーションレベルのプリファレンス・ページ・セットを構築できます。このページでは、<adfmf:preferencesGroup>
およびその子要素が同様に名付けられたオプション(「プリファレンス・グループ」、「プリファレンス・ページ」、「プリファレンス・リスト」など)として示され、JDeveloperの「構造」ウィンドウと同様にこれらを階層(またはツリー)にアセンブルします。
adfmf-application.xml
ファイルを正しく構成するには、図13-4に示す「プリファレンス」ページの「追加」ドロップダウン・リストを使用してユーザー・プリファレンス・ページを構築します。また、図13-5に示す「プリファレンス」パレットからコンポーネントをドラッグして、エディタ、「ソース」ウィンドウまたは「構造」ウィンドウのいずれかにドロップできる一方で、そのページのドロップダウン・リストには、選択されたプリファレンス要素に対して、適切な親、子または兄弟の関係を持つことができる要素のみが提示されます。たとえば、図13-4には、プリファレンス・グループ要素であるOracleモバイル・アプリケーション内に挿入できるコンポーネントのみが示されています。また、このエディタでは、各プリファレンス要素に固有の属性に対して値を入力できます。
プリファレンス・ページを作成するには:
「プリファレンス」をクリックします。
「追加」をクリックして、親である<adfmf:preferenceGroup>
要素を作成します。
次の情報を「プリファレンス・グループの挿入」ダイアログ(図13-6を参照)に入力します。
プリファレンス・グループ要素の一意の識別子を入力します。
ユーザー・インタフェースに表示される説明テキストを入力します。ユーザー・インタフェースにこのテキストを表示する方法の例は、図13-1の例を参照してください。
「追加」をクリックし、「前に挿入」、「内部に挿入」、「後ろに挿入」の各オプションを使用してさらにプリファレンス・ページを定義し、XML文書が正しく構成されるようにします。
プリファレンス・ページ・コンポーネントでは新しいユーザー・インタフェース・ページを作成できます。「前に挿入」、「内部に挿入」、「後ろに挿入」の各オプションを使用してプリファレンス・ページを作成します。
始める前に:
プリファレンス・グループ要素を作成する必要があります。
新しいユーザー・プリファレンス・ページを作成するには:
「プリファレンス・グループ」要素を選択します。
「追加」をクリックして「内部に挿入」(プリファレンス・グループ)を選択し、「プリファレンス・ページ」を選択します。図13-7に示すとおり、プリファレンス・グループはMobileAppと呼ばれています。
「プリファレンス・ページの挿入」ダイアログ(図13-8を参照)に次のプリファレンス・ページ属性を定義します。
プリファレンス・ページ要素の一意の識別子を入力します。
ユーザー・インタフェースに表示される説明テキストを入力します。
プリファレンス・ページを選択し、図13-9に示すとおり、「内部に挿入」(プリファレンス・ページ)→「プリファレンス・グループ」と選択することで、子プリファレンス・グループ要素を挿入し、プリファレンス・ページの本体を作成します。子プリファレンス・グループの一意の識別子と表示名を定義すると、これにプリファレンス・リスト要素などの他の要素を移入できます(例13-2を参照)。
概要エディタでプリファレンス・ページとその子プリファレンス・グループ・コンポーネントを定義すると、JDeveloperでは、例13-2と同様の属性を使用して<adfmf:preferencePage>
が生成されます。<adfmf:preferencePage>
は、親<adfmf:preferenceGroup>
要素内にネストされます。
例13-2 <adfmf:PreferencePage element>の追加
<adfmf:preferences> <adfmf:preferenceGroup id="gen" label="Oracle Mobile App"> <adfmf:preferencePage id="application_version" label="Version"> <adfmf:preferenceGroup id="version_select" label="Select Your Version"> <adfmf:preferenceList id="edition" label="Edition" default="PERSONAL"> <adfmf:preferenceValue name="Enterprise" value="ENTERPRISE"/> <adfmf:preferenceValue name="Personal" value="PERSONAL"/> </adfmf:preferenceList> </adfmf:preferenceGroup> </adfmf:preferencePage> </adfmf:preferences>
プリファレンス・リスト・コンポーネントを追加してオプションのリストを作成します。
始める前に:
プリファレンス・リストまたは他のすべてのリストに関連するコンポーネントの親としてプリファレンス・グループを作成する必要があります。
ユーザー・プリファレンス・リストを作成するには:
「プリファレンス・グループ」または「プリファレンス・ページ」を選択して、「追加」→「内部に挿入」→「プリファレンス・リスト」の順にクリックします。例13-2には、Select Your Versionという名前のプリファレンス・グループ・コンポーネントの子としてプリファレンス・リストを追加する例が示されています。
「プリファレンス・リストの挿入」ダイアログ(図13-2を参照)を使用して次の属性を定義し、「OK」をクリックします。
一意の識別子を入力します。
ユーザー・インタフェースに表示される説明テキストを入力します。
「プリファレンス値」表(図13-12を参照)で「追加」をクリックし、読取り専用アイテムのリストを定義します。プリファレンス値を選択してから「削除」をクリックすることで、この値を削除することもできます。プリファレンス値の表示順番を変更するには、プリファレンス値を選択してから上および下の矢印を使用します。
ユーザーにデフォルト設定を提供するには、「デフォルト」を選択します。例13-2に示すように、<adfmf:preferenceList>
要素内でデフォルト・ステータスは、default="ENTERPIRSE"
と定義されています。
ヒント: 「追加」をクリックするほか、それらをドラッグして「構造」ウィンドウまたは「ソース」ウィンドウのいずれかにドロップしても、プリファレンス値コンポーネントを追加できます。 |
プリファレンス・リスト・コンポーネントをプリファレンス・グループに追加し、一連のプリファレンス値を定義すると、例13-2に示すように、JDeveloperでは<adfmf:preferenceList>
要素を使用して<adfmf:preferences>
セクションが更新されます。
たとえば、例13-1を参照してください。
始める前に:
<adfmf:preferenceBoolean>
要素は<adfmf:preferenceGroup>
要素内にネストされる必要があるため、まずプリファレンス・グループ・コンポーネントを階層に挿入する必要があります。
ブール型のプリファレンス・リストを作成するには:
ブール型のプリファレンスを追加してそのデフォルト値を指定した場合、例13-3に示すように、JDeveloperでは、<adfmf:preferenceBoolean>
要素を使用してadfmf-application.xml
ファイルの<adfmf:preferences>
セクションが更新されます。
図13-15に示すように、挿入オプションを使用して、ユーザーが情報を格納したりデフォルト・テキストを閲覧できるようにする「テキストのプリファレンス」というダイアログを作成します。図13-15は、「セキュリティ」という名前のプリファレンス・グループ内にテキストのプリファレンスを作成する例を示しています。
始める前に:
プリファレンス・グループ要素を作成します。
テキストのプリファレンスを作成するには:
プリファレンス・グループ要素を選択します。
「内部に挿入」→「テキストのプリファレンス」を選択します。
「テキストのプリファレンスの挿入」ダイアログ(図13-16を参照)に次の情報を入力して、「OK」をクリックします。
一意の識別子を入力します。
ユーザー・インタフェースに表示される説明テキストを入力します。
テキストのプリファレンス・ダイアログに次を定義します。
デフォルトのテキスト値を入力します。
「機密」を選択し、テキストのプリファレンスを非表示にすることでユーザーが編集できないようにします。
テキストのプリファレンスを追加してそのデフォルト値を指定すると、例13-4に示すように、JDeveloperでは、<adfmf:preferenceText>
要素を使用してadfmf-application.xml
ファイルの<adfmf:preferences>
セクションが更新されます。
例13-4 <adfmf:preferenceText>要素の追加
<adfmf:preferenceGroup id="security" label="Security"> <adfmf:preferenceText id="serviceURL" label="Security URL" default="http://security.foo.com/provider"/> <adfmf:preferenceText id="username" label="User Name"/> <adfmf:preferenceText id="password" label="Password" secret="true"/> </adfmf:preferenceGroup>
セキュリティURL、ユーザー名およびパスワードのプリファレンス設定を定義するプリファレンス・グループ要素は図13-18のように表示されます。
図13-18は、セキュリティURLが読取り専用の値、ユーザー名が入力値の<adfmf:preferenceText>
要素を示しています。ADFモバイルのプリファレンスはiOS設定アプリケーションと統合されているため、パスワード入力テキストのsecret="true"
属性により、ユーザーの入力を黒丸で覆うiOSの表記規則に従うアプリケーションとなります。詳細は、iOS Developer Library(http://developer.apple.com/library/ios/navigation/
)で入手可能な『Settings Application Schema Reference』のisSecure
テキスト・フィールド要素の説明および第13.4項「プラットフォームによる表示の差異」を参照してください。
ADFモバイル・アプリケーションをデプロイすると、アプリケーション全体のプリファレンス設定ページがiOSデバイスの設定アプリケーションなど、デバイスのグローバル設定アプリケーションに伝播されます。詳細は、16.2.3.6項「AndroidエミュレータまたはAndroidデバイスにアプリケーションをデプロイする場合のJDeveloperでの処理」、第16.4.5.1項「iOSシミュレータまたはiOSデバイスにアプリケーションをデプロイする場合のJDeveloperでの処理」および付録B「デプロイメントでのプリファレンスの変換」を参照してください。
図13-19に示されている「プリファレンス」タブでは、特定のアプリケーション機能に適用可能なユーザー・プリファレンスを定義できます。第13.1項「ADFモバイル・アプリケーションのユーザー・プリファレンス・ページの作成」の説明に従い、モバイル・アプリケーションレベルのプリファレンスを構築する方法でこれらのプリファレンスを構築します。次に、第8.3項「UIコンポーネントの作成と使用方法」で説明したブール・スイッチ、入力および出力の各コンポーネントに埋め込むADFモバイルAMXページを参照するアプリケーション機能を作成することによって実際のプリファレンスを構築します。
アプリケーション機能レベルのプリファレンス・ページを作成する場合、例13-5の入力テキスト・コンポーネントなど、ADFモバイルAMXコンポーネントに対してEL式を追加します。
例13-5 ADFモバイルAMXコンポーネントでELを使用したプリファレンス値の参照
<amx:inputText label="Number" id="it1" inputType="number" value="#{preferenceScope.feature.Feature1.f1top.f1Number}"/>
例13-5に示すとおり、EL式では、preferenceScope
オブジェクトを使用して、アプリケーションがアプリケーション機能レベルのプリファレンスにアクセスできるようにします。これらのEL式の書式は次のとおりです。
preferenceScope.feature.feature-id.group-id.property-id
図13-20は、式ビルダーを使用したEL式の作成について説明しています。アプリケーション機能(<adfmf:feature id="Feature1">
)のID、プリファレンス・グループ(<adfmf:preferenceGroup id="f1top">
)のID、プリファレンス・プロパティ(<adfmf:preferenceNumber id="f1Number">
)のIDなど、adfmf-feature.xml
内の様々なコンポーネントに対して構成されるIDによってプリファレンス自体が指定されています。
EL式には、ゼロ個以上のgroup-id
要素およびproperty-id
要素が含まれる可能性があります。
EL式には次の解決パターンがあります。
JavaScriptレイヤーから、次のJavaScript関数を使用してEL値式を解決します。
adf.mf.el.getValue(expression, success, failed)
adf.mf.el.getValue
の解決では、まずJS-ELパーサーとJavaScriptコンテキスト・キャッシュをローカルで使用して式の解決を試みます。式がローカルで解決できない場合は、その式を埋込みJavaレイヤーに評価用として渡し、そこでJava ELパーサーによって解決されます。これは、モデルのgetValue
メソッドに対するGenericInvokeRequest
を使用して処理されます。
Javaレイヤーで、次の手法を使用してEL値式を解決します。
String val = AdfmfJavaUtilities.evaluateELExpression("#{preferenceScope.feature.f0.vendor}");
setValue
メソッドでは、次のように式を解決します。
ValueExpression ve = AdfmfJavaUtilities.getValueExpression("#{preferenceScope.feature.f0.vendor}"); ve.setValue(AdfmfJavaUtilities.getADFELContext(), value);
EL式の評価には、preferenceScope
オブジェクトの検索が含まれます。評価は左から右に行われ、各トークンは別個に解決されます。トークンが解決されると、これは次の(その右側の)トークンの解決に使用されます。
preferenceScope
オブジェクトがない場合は、プリファレンスを公開できません。
ADFモバイルでは、ネイティブUI(UIView
、UIViewController
など)に提供されているAPIが統合され、iOSプラットフォームで一定の構成が可能です。
ネイティブUIを初期化すると、ADFSession
オブジェクトのインスタンスが利用可能になります。そのgetPreferences
メソッドを使用して、ADFモバイルに対し、adfmf-application.xml
ファイルで定義されているアプリケーションで利用可能なプリファレンスのリストを提供するように命令できます。例13-6に示すとおり、このメソッドでは、プリファレンスにid
、value
およびlabel
を含めることができるプリファレンス・プロパティ・オブジェクトのNSArray*
が戻されます。このAPIコールでは、エンド・ユーザーによって特定のプリファレンスの値が提供されたこと、またはプリファレンスのデフォルト値が戻されていることのいずれかを確認します。
例13-6 プリファレンスの取得
//... -(id) initWithADFSession:(id<ADFSession>) providedSession { id me = [self init]; session = providedSession; //... // Dump the preferences to the data display NSArray* prefsArray = [session getPreferences]; NSString* prefs = [prefsArray JSONRepresentation]; self.theData.text = [[NSString alloc ] initWithFormat: :@"%@\nUser Preferences = --> %@ <--", self.theData.text, prefs]; //... return me; }
ADFモバイルのプリファレンス・ページでは、iOSおよびAndroidの両プラットフォームでネイティブのルック・アンド・フィールが維持されます。その結果、ADFモバイルのプリファレンス・ページの表示は2つのプラットフォームで異なります。表13-1に示すとおり、iOSプラットフォームではプリファレンスがインラインで表示されるため、そのシステムではダイアログ・ページを起動しません。いくつかの例外を除いて、Androidプラットフォームではこれらのコンポーネントがダイアログで表示されます。
表13-1 プラットフォームごとのプリファレンス・コンポーネントの比較
コンポーネント | iOS | iOSの表示例 | Android | Androidの表示例 |
---|---|---|---|---|
ブール型のプリファレンス・リスト |
ブール型のプリファレンスは、onとoffなどのペアの値で表示されます。 |
Androidでは、ブール型のプリファレンスをチェック・ボックスで表示します。 |
||
テキストのプリファレンス(デフォルトは読取り専用のテキスト) |
iOSは読取り専用のテキストをインラインで表示します。 |
Androidは読取り専用のテキストをインラインで表示します。 |
||
テキストのプリファレンス(入力テキスト) |
iOSプラットフォームでは、ユーザーはテキストをインラインで入力します。 |
Androidでは、入力テキスト・ダイアログを起動します。 |
||
テキストのプリファレンス(機密入力テキスト) |
iOSプラットフォームでは、ユーザーはテキストをインラインで入力し、各文字はその入力後に黒丸で覆われます。詳細は、第13.1.1.8項「テキストのプリファレンスを定義する場合の処理」を参照してください。 |
Androidでは、入力テキスト・ダイアログが起動し、各文字はその入力後に黒丸で覆われます。 |
||
単一のアイテム選択リスト(プリファレンス・リストから) |
iOSプラットフォームでは別のプリファレンス・ページに単一のアイテム選択リストが表示されます。 |
Androidでは、ダイアログ内に単一のアイテム選択リストが表示されます。 |
||
プリファレンス・グループ(カテゴリ選択) |
iOSでは、その親プリファレンス・グループ内にプリファレンス要素が表示されます。 |
Androidでは、その親プリファレンス・グループ内にプリファレンス要素が表示されます。 |
||
プリファレンス・ページ |
iOSでは、プリファレンス・グループから子プリファレンス・ページを起動します。 |
Androidでは、プリファレンス・グループから子プリファレンス・ページを起動します。 |
iOSおよびAndroidのプラットフォームには設定アプリケーションがありますが、図13-21のOracleプリファレンスで示すように、設定アプリケーションへのアプリケーションレベルのプリファレンスの統合はiOSプラットフォームのみでサポートされます。
Androidデバイスでは、図13-22に示すとおり、ユーザーはプリファレンス・メニューを使用してプリファレンス・ページにアクセスします。