![]() ![]() ![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
第2章
このガイドでは、ページフロープロセスを説明し、完全なページフローの例をいくつか示します。この章には、次のトピックが含まれています。
ページフローアプリケーションのコアとなるのは、ページフローモデラーを使用して仮想的に作成するXMLファイル、「プロセス記述子」です。 プロセス記述子の視覚的な表示である「ページフロープロセス」は、分岐する一連のアクティビティやリンクで、ポートレット内で一連のユーザ操作をモデル化します。
ページフロープロセスの記述子は、リソースセット内のpageflow-processフォルダに配置されます。
プロセス オブジェクト 各ページフロープロセスには、プロセスの一般的な設定を総括して定義する「プロセスオブジェクト」と呼ばれるグローバルオブジェクトがあります。
プロセスに関連付けられたプロパティの設定の詳細については、プロセスプロパティを参照してください。
サブフロー(フロー内のフロー) ページフロープロセスは、別のページフロープロセス内に含めることができます。 この操作を行う場合、埋め込まれるフローは収容フロー内に含まれます。
ページフローモデラーは、ページフローを保存するときに、ページフローを「ページフローランナー」にマップするリソースセットに、「ポートレットフラグメント展開記述子」を保存します。 ページフローランナーは、ポートレットとして実装されるJavaクラスです。exteNd Director には、ページフローランナーパッケージが付属しています(com.novell.afw.portal.portlet.pf.pageFlowRunner)。 このクラスは、どのページフローも実行することができます。 自身のページフローランナーを記述することもできますが、必要はありません。
ポートレットフラグメント展開記述子の詳細情報については、『ポータルガイド』のポートレットフラグメント展開記述子に関する節を参照してください。
各ページフローには個別の記述子があります すべてのページフローが同じポートレットランナークラスを使用しますが、それぞれのページフローには自身の記述子があります。 記述子には、他のポートレット記述子と区別する固有の名前があります。 記述子に指定された名前は、デフォルトではページフローに指定された名前と同じです。 したがって、ページフローをページフローモデラーに保存すると、同じ名前を持つ2つのXML記述子を持つことになります。 これらの記述子は、次のリソースセット内のさまざまなフォルダに配置されます。
ポータルページでページフローを表示するには、ユーザは(ページフロー自身ではなく)ページフローを実行するポートレットを選択する必要があります。
記述子の内容 ページフローに対して作成された各ポートレットは、識別可能な初期化パラメータ、設定、および初期設定を指定します。 PF_IDと呼ばれる初期化パラメータの1つは、次を実行するページフロープロセス名を指定します。
<init-param> <description>Pageflow ID</description> <name>PF_ID</name> <value>MyPageflow</value> </init-param>
ページフローポートレット記述子の例 次に、MyPageflowと呼ばれるページフローに対して生成されたポートレット記述子の例を示します。
<portlet xmlns="http://www.novell.com/xml/ns/portlet-fragment" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <description>MyPageflow</description> <portlet-name>MyPageflow</portlet-name> <display-name>MyPageflow</display-name> <portlet-class>com.novell.afw.portal.portlet.pf.pageFlowRunner </portlet-class> <init-param> <description>Pageflow ID</description> <name>PF_ID</name> <value>MyPageflow</value> </init-param> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <portlet-info> <title>MyPageflow</title> <short-title>MyPageflow</short-title> <keywords>MyPageflow</keywords> </portlet-info> <portlet-preferences> <preference> <name>width</name> <value>400px</value> <read-only>false</read-only> <data-type>String</data-type> <required>false</required> <multi-valued>false</multi-valued> </preference> <preference> <name>height</name> <value>400px</value> <read-only>false</read-only> <data-type>String</data-type> <required>false</required> <multi-valued>false</multi-valued> </preference> <preference> <name>Restrict Portlet Size</name> <value>false</value> <read-only>false</read-only> <data-type>Boolean</data-type> <required>false</required> <multi-valued>false</multi-valued> </preference> </portlet-preferences> <enable-title-bar>1</enable-title-bar> <supported-option>Restart</supported-option> <supported-option>edit</supported-option> <preview-image></preview-image> <auto-register enabled="true"> <registration-id>MyPageflow</registration-id> </auto-register> </portlet>
ページフローポートレットの初期設定 ページフローのポートレットの記述子には、ポートレットのランタイム表示を制御するために使用できる3つの初期設定があります。
「スコープパス」を使用すると、ページフロープロセスからさまざまな種類のデータにアクセスできます。exteNd Directorには、ページフローモデラーから、およびスコープパスAPIを通じて利用可能な事前定義されたスコープパスのグループが含まれます。
データは、非持続的または持続的のいずれかの状態にあります。 データは、単一のアプリケーションセッションで単一のユーザのみが使用できる場合は、非持続的になります。 データは、複数のユーザが使用できる場合、または他のアプリケーションで使用できる可能性がある場合は、持続的になります。 スコープパスのコンテキストでは、パスとは、指定されたスコープ内にあるデータの物理的な場所です。
ページフローモデラーでは、次の複数の方法でスコープパスを使用します。
事前定義されたすべてのスコープをページフロー内で使用できます。
事前定義されたスコープの使い方の詳細については、『exteNd Directorアプリケーションの開発』のスコープパスに関する章を参照してください。
ページフロー内で使用するスコープパスの例を次に示します。
制限 ページフロー内では事前定義されたどのスコープも使用できますが、要求および応答スコープには複数の制限が適用されています。詳細については、ページフローおよびポートレットランタイムの動作を参照してください。
この節では、ポートレットランタイム動作によるページフローの動作の変更方法について、いくつか説明します。
ページフローが実行される各ポイントでは、ページフローランナーポートレットのランタイム動作が、スコープパスで利用できる情報の種類に直接影響します。 したがって、ページフローで使用するスコープパスを決定する場合に、基本的なポートレットランタイムコンテキストについて知っておく必要があり、要求および応答スコープを使用する場合には特に知っておく必要があります。
要求および応答スコープに適用される制限 要求および応答スコープの操作を行う場合は、次の制限について知っておく必要があります。
Requestスコープのapiオプションは、表示要求でのみ使用できます(ページフローランナーポートレットのrender()メソッドの実行時)。
応答 スコープの表示 オプションは、表示要求でのみ使用できます(ページフローランナーポートレットのrender()メソッドの実行時)。
その他のすべての要求および応答オプションは、表示(ページフローランナーポートレットのrender()メソッドの実行範囲内)またはアクション(ページフローランナーポートレットのprocessAction()メソッドの実行範囲内)で使用できます。
利用可能なポートレットランタイムコンテキストの決定 次のルールは、ページフロー内のそれぞれの処理段階で適用されるコンテキストを決定します。
ページフロー最初にロードされるとき、ページフローランナーポートレットがrender()メソッドを実行します。 モードアクティビティに続く最初のアクティビティがプレゼンテーションアクティビティ(HTML、フォーム、JSP、またはサーブレット)の場合、ランナーは、アクティビティに指定された[実行前にコピー]操作を実行し、次にプレゼンテーションアクティビティ自身を実行します。
何らかのシステムアクティビティ(Webサービスアクティビティ、Composerアクティビティ、またはJavaアクティビティなど)がある場合は、ランナーポートレットがこれらのアクティビティを順番に実行します。 また、これらのアクティビティに指定された[実行前にコピー]および[実行後にコピー]操作も実行されます。
したがって、すべての[実行前にコピー]および[実行後にコピー]操作は、ページフローが最初に開始された時間から、最初のプレゼンテーションアクティビティが実行されるまで、render()フェーズで実行されます。
フロー内の最初のプレゼンテーションアクティビティでアクションが発生した場合、このアクティビティに関連付けられた[実行後にコピー]操作が実行されます。 [実行後にコピー]処理は、processAction()メソッド内で発生します。 ただし、(ユーザがURL表示をクリックするか、ブラウザの更新を押したために)再表示されると、[実行後にコピー]は、アクティビティがチェックポイントアクティビティよりも後の場合にのみ実行されます。 チェックポイントアクティビティが先に実行されない場合は、[実行後にコピー]操作は実行されません。 これは、[実行後にコピー]は、エンジンが他のアクティビティに移るときのみ実行されるためです(チェックポイントアクティビティで発生する場合と同様)。
再表示のイベントでは、[実行後にコピー]処理はrender()メソッド内で発生します。
注記: processAction()およびrender()フェーズで、さまざまなコンテキストが使用されているため、利用可能なコンテキストを知っておく必要があります。
システムアクティビティがページフロー内で実行された場合、すべての[実行前にコピー]および[実行後にコピー]処理は、それらが実行されるフェーズで発生します。 システムアクティビティがチェックポイントに続く場合、[実行前にコピー]および[実行後にコピー]操作は、render()メソッド内で実行されます。 チェックポイントの後にアクティビティが発生しない場合は、[実行前にコピー]および[実行後にコピー]処理はすべてprocessAction()メソッドで発生します。
注記: 最初のプレゼンテーションアクティビティの前に実行されたすべてのシステムアクティビティは、チェックポイントがあるかどうかにかかわらず、render()メソッドで実行されます。
ページフローランナーポートレットのキャッシュ動作は、ページフローのパフォーマンスに直接影響します。
ページフローのポートレット記述子で期限切れキャッシュを定義できます。
値が0の場合、ポートレットのキャッシュは無効になります。 0を指定すると、ポートレットのコンテンツはキャッシュされません。
値-1は、キャッシュされたコンテンツがそのポートレットで期限切れにならないことを表します。 -1を指定すると、キャッシュされたコンテンツは無期限で使用されます。
その他の正の値は、期限切れキャッシュを定義します。このコンテンツは、その値により指定された時間(秒)の後に期限切れになります。 正の値は、表示の呼び出しを許可する前にキャッシュする秒数を示します。
ページフローに関連付けられた表示操作の数を最小限にする場合は、期限切れキャッシュを正の数に設定する必要があります。
期限切れキャッシュを設定する方法を示す例は、次のとおりです。
<portlet xmlns="http://www.novell.com/xml/ns/portlet-fragment" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<description>MyPageflow</description>
<portlet-name>MyPageflow</portlet-name>
<display-name>MyPageflow</display-name>
<portlet-class>com.novell.afw.portal.portlet.pf.pageFlowRunner</portlet-class>
<init-param>
<description>Pageflow ID</description>
<name>PF_ID</name>
<value>tdbphonelistPageflow</value>
</init-param>
<expiration-cache>1000</expiration-cache>
...
</portlet>
次のログは、ページフローのランタイム動作に関する情報を収集する手助けをします。
ログ |
説明 |
---|---|
PageFlowLog |
すべてのページフローに共通する情報をログ記録します。 |
PageFlowFormLog |
ページフローに関連付けられたXForms処理に関連する情報をログ記録します。 |
これらのログに関連付けられた設定を変更する場合、ページフローサブシステムの config.xmlファイルを編集できます。
たとえば、アプリケーションで実行しているページフローに関する情報をより多く収集するには、これらのログのログ出力レベルを3から5に増やす必要があります。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties PUBLIC "-//SilverStream Software, LLC//DTD Framework Config XML 3.0//EN" "framework-config_3_0.dtd"> <properties> <property> <key>PageflowService/engine-id</key> <value>engine-id</value> </property> ... <property> <key>PageFlowLog.LoggingLevel</key> <value>5</value> </property> <property> <key>PageFlowLog.LogFieldSeparator</key> <value>|</value> </property> <property> <key>PageFlowLog.LoggingProvider</key> <value>com.sssw.fw.log.EboStandardOutLoggingProvider</value> </property> <property> <key>PageFlowFormLog.LoggingLevel</key> <value>5</value> </property> <property> <key>PageFlowFormLog.LogFieldSeparator</key> <value>|</value> </property> <property> <key>PageFlowFormLog.LoggingProvider</key> <value>com.sssw.fw.log.EboStandardOutLoggingProvider</value> </property> ... </properties>
注記: Director Administration Consoleでログ出力レベルを変更することもできます。
この節では、基本的なページフローの概念を表すいくつかの例を示します。
これは、単純なリンクに接続された2つのHTMLアクティビティが後続する、必須のモードアクティビティを表す単純なページフローです。 HTMLアクティビティは、ユーザに静的ページを表示するプレゼンテーションアクティビティです。
この例は、ページフロー内でナビゲーションパスを制御するために、どのようにリンク式を使用できるかを表しています。 リンク2およびリンク3の式により、ユーザがHTML1でクリックしたボタンが確定します。クリックされたボタンによって、HTML2またはHTML3が表示されます。
次のフローは、システムアクティビティであるXSLアクティビティを使用する例を表しています。 XSLアクティビティ1は、いくつかのXMLインスタンスデータを変換します。 結果のHTML出力は、HTML1への入力として使用されます。
XSLアクティビティは、システムアクティビティであるため、ユーザからは見えません。 このフローが開始されると、ユーザにはHTMLページのみが表示されます。
このフローには、システムアクティビティの別の例である、Webサービスアクティビティが含まれます。 このアクティビティは、株式相場を表示するWebサービスを起動します。 Webサービスが起動される前に、ユーザは、フォームアクティビティに関連付けられたXHTMLフォームで株式銘柄を指定します。 Webサービスが処理を終了すると、2番目のフォームアクティビティが相場の結果を表示します。 ブラウザの更新を処理するため、このフローにはチェックポイントアクティビティが含まれます。 更新が発生するたびに、フローは相場チェックポイントアクティビティを返し、そのポイントから続行されます。
例外アクティビティもこのフローに追加され、ランタイムに発生する可能性のある例外を処理します。 たとえば、呼び出されているWebサービスが何らかの原因で利用できない場合、例外アクティビティが制御します。 このアクティビティは、ユーザに役立つメッセージを表示するDisplay ExceptionというHTMLアクティビティに処理を転送します。
また、このフローには、「スマートリンク」も使用されています。 スマートリンクは、多数のアクティビティを共通のアクティビティにリンクする必要がある場合に、ページフロー内の複雑さ軽減します。 この例では、Help HTMLアクティビティには、ランタイムに生成されたダイナミックリンクによってアクセスできます。
この例は、単一のテーブルにアクセスするために使用される、典型的なデータベースページフローを表しています。 これには、ユーザが検索条件を入力し検索結果を表示できる、複数のデータベースアクティビティとフォームが含まれます。 また、ユーザが挿入、更新、および削除を実行できるようにするアクティビティとフォームも含まれます。
すべてのデータベースページフロープロセスには、データベースのアクセスに必要なすべての情報を提供するData Setオブジェクトが含まれます。
このフローは、データベースページフローウィザードにより生成されました。
データベースページフローウィザードの詳細については、を参照してください。
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...