ここからは、DeptEmpDCデータ・コントロールをベースとするシンプルなモバイル・アプリケーションの構築手順を説明します。構築したモバイル・アプリケーションでは、次の処理を実行できます。
- REST/JSONサービスから取得した部門データを表示し、部門を選択する
- 選択した部門の従業員をREST/JSONサービスから取得して表示し、編集する従業員を選択する
- 選択した従業員データを編集し、REST/JSONサービス経由でデータベースに変更を書き出す
-
JDeveloperで、ViewController/META-INFフォルダにあるmaf-feature.xmlファイルを見つけて開きます(ダブルクリック)。
-
Featuresヘッダーの横にある緑色のプラス記号「
」のアイコンをクリックします。
-
Feature NameにDeptEmpRestと入力します。
「OK」をクリックして、その他の入力オプションはデフォルトのままにします。
-
「Content」タブを選択し、Fileオプションの横にある緑色のプラス記号をクリックします。

-
「Task Flow」メニュー・オプションを選択します。
File NameにdeptEmp-task-flow.xmlと入力したら「OK」をクリックします。
このパートでは、既存のアプリケーションにビュー・コンポーネントとナビゲーション・ルールを追加します。これらのコンポーネントのためのページは、次の項で作成します。
以上で、モバイル・アプリケーションに対するエントリ・ポイントと、ビジネス・プロセスを定義するためのタスク・フローの作成が完了しました。
この項では、ページを改良して部門リストを表示するためのデータを追加します。
-
タスク・フロー・ダイアグラムを開いた状態(空白の表示)で、「Window」 > 「Components」を選択してJDeveloperコンポーネント・パネルを開きます。
-
コンポーネント・ウィンドウのComponentsサブセクションから「View」を選択し、アクティビティをドラッグしてタスク・フロー・ダイアグラム内にドロップします。

-
「view1」アクティビティを選択し、名前をクリックするか[F2]キーを押して(Windowsの場合)、名前を編集モードにします。ビュー名をBrowseDepartmentsに変更します。
-
「BrowseDepartments」ビュー・アクティビティを右クリックして、メニューから「Create Page」を選択します。

-
Create MAF AMX Pageダイアログで、ページ・ファセットとしてHeader、Primary Action、Secondary Actionが選択されていることを確認したら、「OK」をクリックします。

注:実際の実装では、public_html/フォルダの下にフォルダを追加して、モバイル・ページを機能やタイプ別に分類することを推奨します。
-
表示されたページで次のoutputTextを見つけて、
<amx:outputText value="Header" id="ot1"/>
valueを次のとおりに変更します。
<amx:outputText value="Browse Departments" id="ot1"/>
-
primaryファセットとsecondaryファセットからamx:commandButtonタグを削除します。
-
Data Controlsウィンドウを開き、DeptEmpDCノードを開いて「allDepartments」コレクションを選択します。

-
「allDepartments」コレクションをドラッグして、ページ上にドロップします。</amx:panelPage> 終了タグの前にコレクションをドロップするように気をつけます。
-
メニューから「MAF List View」を選択します。

-
ListView Galleryダイアログで「OK」をクリックして、デフォルトの選択を受け入れます。
-
次にポップアップ表示されるEdit ListViewValue BindingをdepartmentIdからdepartmentNameに変更して「OK」をクリックします。
注:リスト・ビューはモバイル・ユーザー・インタフェースとして一般的なUIコンポーネントであり、値のリストをスクロールして、編集またはナビゲーション用にリスト・エントリを選択するために使用されます。
-
BrowseDepartmentsページで、ページ・ソース・エディタの下部にある「Bindings」タブを選択して、BrowseDepartmentsページと関連付けられたMAFバインディング・ファイルに切り替えます。

-
バインディング・エディタで「allDepartments」エントリを選択して、鉛筆アイコンをクリックします。

-
Edit Tree Bindingダイアログで、左側にある「departmentId」項目を選択し、シングルの右矢印アイコンをクリックして右側に移動します。
注:departmentIdプロパティを選択すると、リスト・ビューのコンテキスト内で式言語からアクセスできるプロパティにこの属性が追加されます。
「OK」をクリックします。
-
バインディング・エディタに戻り、下部にある「Source」タブをクリックして、ページ・ソース・ビューに切り替えます。

-
ページ・ソース・ビューを開いた状態で、ComponentsウィンドウのOperationsカテゴリを開きます。
Componentsパネル(Operationsサブセクション)から「SetPropertyListener」項目をドラッグし、amx:listItemタグ内にドロップします。
-
「amx:setPropertyListener」タグを選択した状態で、JDeveloperメニューから「Window」 > 「Properties」を選択し、プロパティ・インスペクタを表示します(表示されていない場合)。
次に、SetPropertyListenerタグのプロパティを次のとおりに指定します。From #{row.departmentId} To #{pageFlowScope.departmentIdVal} Type action 注:amx:setPropertyListenerは選択されたリスト項目のdepartmentId値を、メモリ内にあるdepartmentIdValバインド・タスク・フローのpageFlowScope属性に書き込みます。このチュートリアルでは簡略化するため、pageFlowScope属性を直接使用しています。実際のモバイル・アプリケーションでは、バインド・タスク・フロー内のアクティビティやページ間で共有する必要のある値はすべて、専用のマネージドBeanのpageFlowScope内で構成し、そこに格納することを推奨します。
-
以上で、モバイル・アプリケーションの最初の実行テストの準備が整いました。
JDeveloperの統合WebLogicサーバー内で、RESTサービスが実行中であることを確認します。
サービスが実行されていない場合は、このチュートリアルの最初のページのステップ4:RESTサービスの調査とテストに戻って、サービスを起動します。
-
iOSまたはAndroidのシミュレータが正しくセットアップされており、開発者のラップトップまたはPC上で実行されているものとします。JDeveloperメニューから「Application」 > 「Deploy」を選択し、次に「iOS1」または「Android1」メニュー項目を選択します(使用しているオペレーティング・システムや、サンプル・アプリケーションのテストに使用するモバイルOSクラスによって異なります)。
-
Deployダイアログで、「Deploy application to Simulator (iOS)または「Deploy application to Emulator (Android)を選択します。「Finish」をクリックして、アプリケーションをデプロイします。

-
シミュレータまたはエミュレータが立ち上がったら、「MAFREST」アプリケーション・アイコンを探してタップし、アプリケーションを起動します。

-
アプリケーションが起動されると、部門名のリストが選択可能な状態で表示されます。
Androidエミュレータを示した次の図では、左上隅に"三角の赤い警告マーク" が表示されています。これは、MAFアプリケーションがデフォルトでは、リリース・モードではなくデバッグ・モードで実行されるためです。三角のマークがあることで、アプリケーションをデバッグ・モードのままで誤って本番にデプロイした場合も、デバッグ・モードで実行されていることを思い出せます。

ここまでの作業内容:バインド・タスク・フローに基づく新しいAMX機能を作成して、テストしました。はじめて作成した唯一のAMXビュー・アクティビティには、リモートREST/JSONサービスから問い合わせた部門名のリストが選択可能な形で含まれています。
次のステップでは、選択した部門の従業員を問い合わせて、もう1つのビュー・アクティビティ(BrowseEmployeesページ)に表示するメソッド・アクティビティで、アプリケーションを拡張します。
従業員詳細ページ"BrowseEmployees"は、さまざまな役目を果たします。選択した部門の従業員をリスト表示し、選択した従業員を編集するか、または選択した部門に新規従業員を作成するために、別のモバイル・ページを開きます。
-
JDeveloperで、deptEmp-task-flowのタスク・フロー・ダイアグラムを開きます。
Data Controlsパネルで、DeptEmpDC→prepareEmployeesForDepartment(Integer)メソッドを探して、タスク・フロー・ダイアグラムにドラッグ・アンド・ドロップします。
-
Edit Action BindingダイアログでdepartmentIdパラメータを編集し、値を#{pageFlowScope.departmentIdVal}に設定します。
「OK」をクリックします。
-
Componentsパネルで「Control Flow Case」アイコンをクリックします。
「BrowseDepartments」ビュー・アクティビティをクリックします。次に、先ほど作成した「prepareEmployeesForDepartment」メソッド・アクティビティをクリックすると、2つのアクティビティ間に自動的に線が引かれます。
コントロール・フロー・ケースの名前としてqueryEmployeesを指定します。タスク・フロー・ダイアグラムは次のように表示されます(アクティビティの相対的な位置は重要ではありません)。

-
BrowseDepartmentsページを開きます(すでに閉じている場合、タスク・フロー・ダイアグラム内のビュー・アクティビティをダブルクリックします)。
-
「amx:listItem」タグを選択して、プロパティ・インスペクタを開きます。
ドロップダウン・リストを使用して、リスト項目のActionプロパティにqueryEmployeesを選択します。
注:このActionプロパティの設定により、ユーザーがリストから部門を選択したときに、メソッド・コール・アクティビティへのナビゲーションが開始されます。また同時に、setPropertyListenerによって、タスク・フローのpageFlowScope属性にdepartmentIdが保存され、メソッド・アクティビティから読み取れるようになります。
-
タスク・フロー・ダイアグラムに戻り、変更を保存します。
-
Componentsパネルから別の「View」アクティビティをドラッグし、タスク・フロー・ダイアグラムにドロップします。
Viewアクティビティの名前をview1からBrowseEmployeesに変更します。 -
Componentsウィンドウで「Control Flow Case」アイコンをクリックしてから、「prepareEmployeesForDepartment」メソッド・コール・アクティビティをクリックします。
次に、「BrowseEmployees」ビュー・アクティビティをクリックして、2つの間にコントロール・フロー線を引きます。
コントロール・フロー・ケースの名前はそのままにします。 -
BrowseEmployeesビューとBrowseDepartmentsビューの間にコントロール・フロー・ケースをもう1つ作成し、browseDepartmentsという名前を指定します。

-
次に、ビュー・アクティビティを右クリックしてメニューから「Create Page」を選択して、BrowseEmployeesページを作成します。
-
ページ作成ダイアログで「OK」をクリックして、デフォルト設定はすべてそのままにします。
すべての作業を保存します。 -
secondaryファセットのamx:commandButtonを編集し、値がEmpのテキスト・プロパティを追加します。コマンド・ボタンは、次の図のようになります。
-
primaryファセットのamx:commandButtonを編集し、Text属性にはShow Deptsを指定し、ActionプロパティにはbrowseDepartmentsを設定します。
-
headerファセットのOutput Textコンポーネントの値をEmp Listに変更します。

-
Data Controlsパネルから「allEmployees」コレクションをドラッグし、BrowseEmployeeページ内の</amx:panelPage>タグの前にドロップします。
メニューから「MAF List View」を選択します。
-
ListView Galleryダイアログで「OK」をクリックして、デフォルトの選択を受け入れます。
Edit List Viewダイアログで、次の図のとおりにValue Bindingフィールドの値をlastNameに設定し、「OK」をクリックします。
-
BrowseEmployeesページで、ページ・ソース・エディタの下部にある「Bindings」タブを選択して、BrowseEmployeesページと関連付けられたMAFバインディング・ファイルに切り替えます。

-
バインディング・エディタで「allEmployees」エントリを選択して、「鉛筆」アイコンをクリックします。

-
Edit Tree Bindingダイアログで、左側にある「firstName」項目を選択し、「単一の右矢印」アイコンをクリックして右側に移動します。
注:lastNameプロパティを選択すると、リスト・ビューのコンテキスト内で式言語からアクセスできるプロパティにこの属性が追加されます。
「OK」をクリックします。
-
バインディング・エディタに戻り、下部にある「Source」タブをクリックして、ページ・ソース・ビューに切り替えます。

-
Browse Employeesページを表示したページ・ソース・エディタで、amx:listItemにfirstNameを追加します。
注:lastName属性とfirstName属性の間に必ずカンマ","を挿入してください。
-
作業内容を保存します。
-
アプリケーションをテストします。JDeveloperのメニューから「Application」→「Deploy」を選択し、以前使用したデプロイメント・プロファイルを選択して、iOS SimulatorまたはAndroidエミュレータにアプリケーションをデプロイします。
-
アプリケーションを起動していずれかの部門(たとえば"IT")を選択し、従業員詳細ページへナビゲートします。

-
「Depts」コマンド・ボタンを押して、部門ページに戻ります。
ここまでの作業内容:"BrowseDepartments"ページと"BrowseEmployees"ページ間にマスター/ディテール動作を実装して、モバイル・アプリケーションを拡張しました。
選択した部門のIDはページ・フロー・スコープにコピーされて、メソッド・コール・アクティビティに読み取られます。このアクティビティは、従業員の詳細レコードを問い合わせるデータ・コントロール・メソッドを起動します。
次のステップでは、さらにアプリケーションを拡張して、従業員レコードを編集できるページを追加します。このとき、編集を取り消すことも、リモートRESTサービスに変更内容を保存することもできます。
フォーム・データの更新には送信が必要となるWebアプリケーションとは異なり、モバイル・クライアントではユーザーが入力フィールドを離れるとデータが変更されます。このチュートリアルの要件は、ユーザーが従業員編集フォームで実施した従業員データの変更を取り消せるようにすることです。
編集するために選択した従業員データを、BrowseEmployeesページに表示されたallEmployeesコレクションの従業員データから切り離すため、選択した従業員データのコピーを作成し、POJOデータ・コントロール上に表示した別個のコレクション内に保存します。
このため、DeptEmpDC Javaクラスは、編集ページ上で編集するための単一の従業員オブジェクトを格納するコレクション・プロパティとして、editableEmployeeを提供しています。
この項では、ユーザーがBrowseEmployeesページで選択した従業員を、editableEmployeeコレクションに移入します。従業員を選択したときの、従業員編集ページへのナビゲーションは後から実行します。また、従業員編集ページは次の項で作成します。
注:ここでは3つの重要な概念について学習します。1つ目は、プロキシWebサービス問合せ以外に対するPOJOデータ・コントロールの使用法であり、2つ目は、カスタムのpre動作やpost動作を使用したMAFコンポーネント・アクションのカスタマイズ方法です。3つ目は、データ・コントロールを使用して、MAF機能の複数ビュー間でオブジェクト状態を保持する方法です。
-
開いたままのBrowseEmployees.amxページで、amx:listView内の「amx:listItem」子コンポーネントを選択し、プロパティ・インスペクタを開きます。
-
Behaviorノードを開きます。Action Listenerプロパティの右側にマウスを移動し、青色の歯車「
」アイコンをクリックして「Edit」を選択します。 
-
Edit Property:Action Listenerダイアログで、「New」ボタンをクリックして、アクション・リスナー・ロジックを格納するための新しいマネージドBeanを作成します。

-
次のプロパティを使用してCreate Managed Beanダイアログに入力します。
下の表に明示的に示したもの以外の設定はすべてデフォルトのままにして、「OK」をクリックします。注:マネージドBeanには状態を格納する必要がないため、MAF内でもっとも小さいスコープであるビュー・スコープを構成します。
Bean Name browseEmployeesBean Class Name BrowseEmployeesBean Package maf.code.corner.hr.mobile.beans Scope view 
-
Edit Property:Action Listenerダイアログに戻り、Methodフィールドの横にある「New」ボタンをクリックします。
Create MethodダイアログでMethod NameとしてonEmployeeSelectを入力し、「OK」をクリックします。
-
もう一度「OK」をクリックして、作業内容を保存します。
ページ・ソースは、次の図のようになります。
-
JDeveloperのApplicationsウィンドウで、作成したばかりのマネージドBeanにナビゲートします。

-
Javaファイルをダブルクリックして、Javaコード・エディタで開きます。
onEmployeeSelectメソッドの本文にカーソルを置き、次のコードの内容を追加します。
注:チュートリアルのDOC/CODE_TXTフォルダにあるBrowseEmployeesBean.txtファイルには、コピーしてマネージドBeanに貼り付けできるコードが含まれており、入力の手間を省略できます。
すべてのインポートが追加されたら、[Alt]キーを押しながら[Enter]キーを押して、BasicIteratorのインポートを追加します。ここでは、モバイル・ページ間を移動するときに、状態情報をMAFに保存するための2つのオプションについて学習しました。1つはpageFlowスコープのマネージドBeanであり、もう1つはPOJOデータ・コントロールです。
ビュー・フロー・スコープ内のマネージドBeanは、クライアント側のUI状態(例:UIコンポーネントに"レンダリング"されたプロパティから参照された、コンポーネントの表示/非表示に関するスタイルシート情報)を格納するのに適しています。
POJOデータ・コントロールを使用すると、ソート順やフィルタ条件、(このチュートリアルで使用した)コレクション内で選択されたデータ・オブジェクトに関する情報などの、データ関連の状態情報を格納できます。
どのオプションをいつ使用するのかについてのガイドラインが必要な場合は、ページ自体で追加のデータ・フィルタリング・メソッドを起動することなく、その他のページで利用できるようにする必要のあるデータ関連の状態は、POJOデータ・コントロールに保存する、という目安を参考にしてください。
理想的には、マネージドBeanにはUI関連の状態のみを保存し、データ関連の状態にはPOJOデータ・コントロールを使用します。
マネージドBeanのBrowseEmployeesBeanは、バインド・タスク・フローのビュー・スコープ内に構成されています。Beanには選択した従業員オブジェクトの状態を維持する必要がないため、可能な限り小さいライフ・サイクル・スコープを使用できます。
上のJavaコードは、MAFのAMXイテレータ・バインディング内で現在選択された従業員レコードにアクセスし、従業員オブジェクト(エンティティ)を、DeptEmpDCデータ・コントロールのsetEditableEmployeeメソッドに渡します。
次のステップでは、選択された従業員データを編集するための編集フォームを作成して、リスト・ビュー内で従業員が選択されるとナビゲーションが実行されるように、BrowseEmployeesページに関連付けます。
-
タスク・フロー・ダイアグラム・ビューに切り替えて、コンポーネント・パネルからもう1つのViewアクティビティをドラッグし、ダイアグラムにドロップします。
ビュー・アクティビティの名前にEditEmployeeを指定します。 -
この新規ビュー・アクティビティを追加するため、2つのコントロール・フローを作成します。
コンポーネントを使用して、BrowseEmployeesビュー・アクティビティからEditEmployeeビュー・アクティビティに対するコントロール・フロー・ケースを作成し、editEmployeeという名前を付けます。
2番目のコントロール・フロー・ケースをEditEmployeeからBrowseEmployeesに対して作成し、browseEmployeesという名前を付けます。
-
「EditEmployee」ビュー・アクティビティをダブルクリックして、Create MAF AMX Pageダイアログを開きます。
Secondary Actionページ・ファセットの選択を解除して、「OK」をクリックします。
-
headerファセットのoutputTextコンポーネントの値をEdit Employeeに変更します。

-
Primary Facetで、amx:commandButtonのTextプロパティにEmployeesを設定します。

-
Action属性を追加して、値をbrowseEmployeesに設定します。
ヒント:プロパティ・インスペクタを使用して、選択リストからコントロール・フロー・ケースを選択することで、actionプロパティを設定できます。
-
Data ControlsパネルでeditableEmployeeコレクションを選択します。
次に、editableEmployeeコレクションをEditEmployeeページにドラッグして、ファセットと</amx:panelPage>終了タグの間にドロップします。
メニューから「MAF Form」を選択します。
-
「
」削除アイコンと青色の矢印アイコン(
、
)を使用して、次の属性リストが残るまで、フォーム属性の削除と再配置を実行します。
- firstName
- lastName
- email
- jobId
- managerId
- phoneNumber
- salary
「OK」をクリックします。
-
Componentsウィンドウを開いて、Layoutカテゴリを展開します。
次に、Componentsウィンドウから「Panel Group Layout」コンポーネントをドラッグし、EditEmployeeページの</amx:panelFormlayout>終了タグの下にドロップします。
-
amx:panelgroupLayoutのlayout属性にhorizontalを指定します。
子コンポーネントを作りやすくするため、amx:panelGroupLayoutタグを次のように変更します。
-
Data Controlsパネルから「updateEmployee」メソッドを選択します。
次に、「updateEmployee」メソッドをドラッグして、amx:panelGroupLayoutの開始タグと終了タグの間にドロップしMAF Buttonを作成します。
-
Edit Action Bindingダイアログで、emp引数の横にある「Value」フィールドをダブルクリックして、Show El Expression Builder メニュー・オプションを開きます。

-
「Show El Expression Builder」メニューをクリックし、「ADF Bindings 」→「bindings」→「editableEmployeeIterator」→「currentRow」→「dataProvider entry」を選択します。

-
「OK」をクリックして、式言語をMAFメソッド・バインディングに書き込みます。このメソッド・バインディングはボタンのActionListenerプロパティによって作成され、起動されます。
Edit Action Bindingダイアログで、もう一度「OK」をクリックします。
amx:panelGroupLayoutに新しい子コンポーネントとしてamx:commandButtonが含まれています。
-
amx:commandButtonコンポーネントを編集してaction属性にbrowseEmployeesという値を指定して追加します。これは、BrowseEmployeesページを指すナビゲーション・ケースです。

ヒント:プロパティ・インスペクタを使用してアクション属性を作成し、選択リストからコントロール・フロー・ケースを選択できます。
注:このコマンド・ボタンは、AMXページのバインディング・コンテナ内のメソッド・バインディングを起動して、現在選択されたイテレータの行を読み取り、関連付けられた従業員オブジェクトをデータ・コントロール・メソッドに渡します。次に、データ・コントロール・メソッドがリモートRESTサービスを起動し、リモートの従業員情報に変更を反映します。処理が完了すると、アプリケーションはBrowseEmployeesページに戻ります。 -
レコードをコミットせずにBrowseEmployeesページに戻るための、取消しボタンを追加します。
JDeveloperのComponentsウィンドウからamx:spacerコンポーネント(Layoutカテゴリ)とamx:commandButtonコンポーネント(General Controlsカテゴリ)を追加します。ページ・ソースは次のようになります。
amx:commandButtonにtext属性を追加し、Cancelという値を指定します。
次に、action属性を追加して、browseEmployeesという値を指定します。
注:取消しボタンは、DeptEmpDCクラスのallEmployeesコレクションに変更を永続化することなく、BrowseEmployeesページに戻る処理のみを実行します。
-
すべての作業内容を保存します。
-
最後のタスクは、BrowseEmployeesページとEditEmployeeページを関連付けることです。こうすることで、リスト・ビュー項目を選択すると、従業員が選択され、EditEmployeeページにナビゲートします。
BrowseEmployeesページを開きます。 -
amx:listItemタグにaction属性を追加し、valueにeditEmployeeを指定します。
editEmployeeは、タスク・フロー・ダイアグラムで先ほど作成したコントロール・フロー・ケースの名前です。ユーザーが従業員を選択するたびに、amx:listItem内でこのコントロール・フローが参照され、ページ・ナビゲーションが起動されます。
ヒント:プロパティ・インスペクタを使用して、action属性の追加と構成を実行します。
-
作業を保存してアプリケーションをテストします。
-
実行中のアプリケーションで部門を選択してから、従業員を選択します。
従業員データを編集して、ページ下部までスクロールしたら、「updateEmployee」ボタンまたは「Cancel」ボタンをクリックします。
いずれのボタンをクリックした場合も、従業員リスト・ページに戻ります。
-
action属性を追加して、browseEmployeesという値を指定します。
-
action属性を追加して、browseEmployeesという値を指定します。

-
action属性を追加して、browseEmployeesという値を指定します。

オプションの演習として、従業員を作成するページを追加します。
DeptEmpDCデータ・コントロール・クラスは、特定の部門に対して新規従業員を作成するメソッドも提供しています。MAFデータ・コントロール・パネルに表示されたcreateEmployee(…)メソッドに対するパラメータ・フォームとして、入力フォームを作成できます。
新しい従業員を作成するために選択されたdepartmentIdに関する情報は、memory属性内で提供されます。
従業員の作成ページは、このハンズオンでの学習内容をテストするための演習として残されています。次に、ヒントを示します。
-
個別のCreateEmployeeページを作成します。
-
「createEmployee」メソッドをドラッグしてパラメータ・フォームとしてページ上にドロップすることで、入力フォームを作成します。
-
memoryプロパティの#{pageFlowScope.departmentIdVal}からdepartmentIdを読み取ります(パラメータ・フォームには表示されません)。
-
コントロール・フロー・ケースを2つ作成します。1つはBrowseEmployeesページからCreateEmployeeページの間に作成し、もう1つはCreateEmployeeページからBrowseEmployeeページの間に作成します。
-
CreateEmployeeページにボタンを2つ追加します。
注:1つ目のボタンを押すと、RESTサービスに変更を送信します(ボタンは、createEmployeeメソッドをパラメータ・フォームとしてドラッグすると作成されます)。
2つ目のボタンを押すと、単純にBrowseEmployeesページに戻ります(取消しボタン)。 -
最後に、従業員作成ページにナビゲートするためのボタンをBrowseEmployeeページに追加します。
以上で、REST/JSON Webサービスに基づくシンプルなOracle Mobile Application Framework(Oracle MAF)アプリケーションの作成は完了です。
すべて表示 | すべて非表示
パート1:Mobile Application Frameworkアプリケーションの作成 