Remoting を使用した AEM Forms の呼び出し invoking-aem-forms-using-remoting
このドキュメントのサンプルと例は、JEE 環境の AEM Forms のみを対象としています。
Workbench で作成されたプロセスは、Remoting を使用して呼び出すことができます。つまり、Flex で作成されたクライアントアプリケーションから AEM Forms プロセスを呼び出すことができます。この機能は、データサービスに基づいています。
次の AEM Forms の短時間のみ有効なプロセス(MyApplication/EncryptDocument
)は、Remoting を使って呼び出すことができます。(このプロセスの入力値や出力値などについて詳しくは、短時間のみ有効なプロセスの例を参照。)
このプロセスを呼び出すと、次のアクションが実行されます。
- 入力値として渡された保護されていない PDF ドキュメントを取得します。このアクションは
SetValue
操作に基づいています。入力パラメーターの名前はinDoc
で、そのデータタイプはdocument
です。(document
データタイプは、Workbench 内で使用できるデータタイプです。) - PDF ドキュメントをパスワードで暗号化します。このアクションは
PasswordEncryptPDF
操作に基づいています。このプロセスの出力値の名前はoutDoc
で、パスワードで暗号化された PDF ドキュメントを表します。outDoc のデータタイプはdocument
です。 - パスワードで暗号化した PDF ドキュメントを PDF ファイルとしてローカルファイルシステムに保存します。このアクションは
WriteDocument
操作に基づいています。
MyApplication/EncryptDocument
プロセスは、既存の AEM Forms プロセスに基づいていません。このコードの例の流れを追うには、Workbench を使用して MyApplication/EncryptDocument
という名前のプロセスを作成します。関連トピック
(AEM Forms では非推奨 )AEM Forms Remoting を使用したドキュメントの処理
(AEM Forms では非推奨)AEM Forms Remoting を使用したセキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出し
Remoting を使用してプロセスを呼び出すための安全なドキュメントの受け渡し
Remoting を使用したカスタムコンポーネントサービスの呼び出し
人間中心の長期間有効なプロセスを呼び出す、Flexで構築されたクライアントアプリケーションの作成
HTTP トークンを使用した SSO 認証を実行する Flash Builder アプリケーションの作成
AEM Forms Flex ライブラリファイルを含める including-the-aem-forms-flex-library-file
Remoting を使用して AEM Forms プロセスをプログラムで呼び出すには、adobe-remoting-provider.swc ファイルを Flex プロジェクトのクラスパスに追加します。この SWC ファイルは次の場所にあります。
-
<install_directory>\Adobe_Experience_Manager_forms\sdk\misc\DataServices\Client-Libraries
ここで、<install_directory> は、AEM Forms がインストールされているディレクトリです。
関連トピック
(AEM Forms では非推奨 )AEM Forms Remoting を使用した AEM Forms の呼び出し
(AEM Forms では非推奨 )AEM Forms Remoting を使用したドキュメントの処理
(AEM Forms では非推奨)AEM Forms Remoting を使用したセキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出し
Remoting を使用したドキュメントの処理 handling-documents-with-remoting
AEM Forms で使用される最も重要な非プリミティブ Java タイプの 1 つは、com.adobe.idp.Document
クラスです。ドキュメントは、通常、AEM Forms 操作を呼び出すために必要です。主に PDF ドキュメントですが、SWF、HTML、XML、DOC ファイルなど、他のドキュメントタイプを含めることができます。(Java API を使用した AEM Forms サービスへのデータの受け渡しを参照。)
Flex で作成されたクライアントアプリケーションは、ドキュメントを直接リクエストできません。例えば、Adobe Reader を起動して、PDF ファイルを生成する URL をリクエストできません。PDF や Microsoft® Word ドキュメントなどのドキュメントタイプのリクエストは、URL である結果を返します。URL のコンテンツを表示するのはクライアントの責任です。Document Management サービスは、URL およびコンテンツタイプ情報の生成に役立ちます。XML ドキュメントのリクエストは、結果に完全な XML ドキュメントを返します。
入力パラメーターとしてのドキュメントの受け渡し passing-a-document-as-an-input-parameter
Flex で作成されたクライアントアプリケーションは、ドキュメントを AEM Forms プロセスに直接渡すことができません。代わりに、クライアントアプリケーションは mx.rpc.livecycle.DocumentReference
ActionScript クラスのインスタンスを使用して、com.adobe.idp.Document
インスタンスを必要とする操作に入力パラメーターを渡します。Flex クライアントアプリケーションには、DocumentReference
オブジェクトを設定するためのいくつかのオプションがあります。
- ドキュメントがサーバー上にあり、そのファイルの場所がわかっている場合は、DocumentReference オブジェクトの referenceType プロパティを REF_TYPE_FILE に設定します。次の例に示すように、fileRef プロパティをファイルの場所に設定します。
... var docRef: DocumentReference = new DocumentReference();
docRef.referenceType = DocumentReference.REF_TYPE_FILE;
docRef.fileRef = "C:/install/adobe/cs2/How to Uninstall.pdf"; ...
- ドキュメントがサーバー上にあり、その URL がわかっている場合は、DocumentReference オブジェクトの referenceType プロパティを REF_TYPE_URL に設定します。次の例に示すように、url プロパティを URL に設定します。
... var docRef: DocumentReference = new DocumentReference();
docRef.referenceType = DocumentReference.REF_TYPE_URL;
docRef.url = "https://companyserver:8080/DocumentManager/116/7855"; ...
- クライアントアプリケーションのテキスト文字列から DocumentReference オブジェクトを作成するには、DocumentReference オブジェクトの referenceType プロパティを REF_TYPE_INLINE に設定します。次の例に示すように、text プロパティを、オブジェクトに含めるテキストに設定します。
... var docRef: DocumentReference = new DocumentReference();
docRef.referenceType = DocumentReference.REF_TYPE_INLINE;
docRef.text = "Text for my document"; // Optionally, you can override the server's default character set // if necessary: // docRef.charsetName=CharacterSetName ...
- ドキュメントがサーバー上にない場合は、Remoting アップロードサーブレットを使用して、ドキュメントを AEM Forms にアップロードします。AEM Forms の新機能は、セキュアなドキュメントをアップロードする機能です。セキュアなドキュメントをアップロードする場合、ドキュメントアップロードアプリケーションユーザー の役割を持つユーザーを使用する必要があります。この役割がないと、ユーザーはセキュアなドキュメントをアップロードできません。セキュアなドキュメントをアップロードする場合は、シングルサインオンを使用することをお勧めします。(Remoting を使用したプロセスを呼び出すためのセキュアなドキュメントの受け渡しを参照。)
指定したアップロード URL には、標準の Flash アップロード機能を使用します:https://SERVER:PORT/remoting/lcfileupload
。その後、タイプ Document
の入力パラメーターが予想される場所であればどこでも DocumentReference
を使用できます private function startUpload():void { fileRef.addEventListener(Event.SELECT, selectHandler); fileRef.addEventListener("uploadCompleteData", completeHandler); try { var success:Boolean = fileRef.browse(); } catch (error:Error) { trace("Unable to browse for files."); } } private function selectHandler(event:Event):void { var request:URLRequest = new URLRequest("https://SERVER:PORT/remoting/lcfileupload") try { fileRef.upload(request); } catch (error:Error) { trace("Unable to upload file."); } } private function completeHandler(event:DataEvent):void { var params:Object = new Object(); var docRef:DocumentReference = new DocumentReference(); docRef.url = event.data as String; docRef.referenceType = DocumentReference.REF_TYPE_URL; }
Remoting クイックスタートは、Remoting アップロードサーブレットを使用して、PDF ファイルを MyApplication/EncryptDocument
プロセスに渡します。(AEM Forms Remoting(AEM Forms では非推奨)を使用してセキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出しを参照。)
private
function startUpload(): void {
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener("uploadCompleteData", completeHandler);
try {
var success: Boolean = fileRef.browse();
}
catch (error: Error) {
trace("Unable to browse for files.");
}
}
private
function selectHandler(event: Event): void {
var request: URLRequest = new URLRequest("https://SERVER:PORT/remoting/lcfileupload") try {
fileRef.upload(request);
}
catch (error: Error) {
trace("Unable to upload file.");
}
}
private
function completeHandler(event: DataEvent): void {
var params: Object = new Object();
var docRef: DocumentReference = new DocumentReference();
docRef.url = event.data as String;
docRef.referenceType = DocumentReference.REF_TYPE_URL;
}
Remoting クイックスタートは、Remoting アップロードサーブレットを使用して、PDF ファイルを MyApplication/EncryptDocument
プロセスに渡します。(AEM Forms Remoting(AEM forms では非推奨)を使用して、セキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出しを参照。)
クライアントアプリケーションにドキュメントを戻す passing-a-document-back-to-a-client-application
クライアントアプリケーションは、出力パラメーターとして com.adobe.idp.Document
インスタンスを返すサービス操作のタイプ mx.rpc.livecycle.DocumentReference
のオブジェクトを受け取ります。クライアントアプリケーションは Java ではなく ActionScript オブジェクトを扱うので、Java ベースの ドキュメントオブジェクトを Flex クライアントに戻すことはできません。代わりに、サーバーはドキュメントの URL を生成し、その URL をクライアントに戻します。DocumentReference
オブジェクトの referenceType
プロパティは、コンテンツが DocumentReference
オブジェクト内にあるか、DocumentReference.url
プロパティで URL から取得する必要があるかを指定します。DocumentReference.contentType
プロパティはドキュメントのタイプを指定します。
関連トピック
(AEM Forms では非推奨 )AEM Forms Remoting を使用した AEM Forms の呼び出し
(AEM Forms では非推奨)AEM Forms Remoting を使用したセキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出し
Remoting を使用してプロセスを呼び出すための安全なドキュメントの受け渡し
Remoting を使用してセキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出し invoking-a-short-lived-process-by-passing-an-unsecure-document-using-remoting
Flex で作成されたアプリケーションから AEM Forms プロセスを呼び出すには、次のタスクを実行します。
mx:RemoteObject
インスタンスを作成します。ChannelSet
インスタンスを作成します。- 必要な入力値を渡します。
- 戻り値を処理します。
mx:RemoteObject インスタンスの作成
mx:RemoteObject
インスタンス作成して、Workbench で作成された AEM Forms プロセスを呼び出します。mx:RemoteObject
インスタンスを作成するには、次の値を指定します。
- id: 呼び出すプロセスを表す
mx:RemoteObject
インスタンスの名前。 - 宛先: 呼び出す AEM Forms プロセスの名前。例えば、
MyApplication/EncryptDocument
プロセスを呼び出すには、MyApplication/EncryptDocument
を指定します。 - result: 結果を処理する Flex メソッドの名前。
mx:RemoteObject
タグで、プロセスの呼び出しメソッドの名前を指定する <mx:method>
タグを指定します。通常、Forms 呼び出しメソッドの名前は invoke
です。
次のコードの例では、MyApplication/EncryptDocument
プロセスを呼び出す mx:RemoteObject
インスタンスを作成します。
<mx:RemoteObject id="EncryptDocument" destination="MyApplication/EncryptDocument" result="resultHandler(event);">
<mx:method name="invoke" result="handleExecuteInvoke(event)"/>
</mx:RemoteObject>
AEM Forms へのチャネルを作成
次の ActionScript の例に示すように、クライアントアプリケーションは MXML または ActionScript でチャネルを指定することで、AEM Forms を呼び出すことができます。チャネルは、AMFChannel
、SecureAMFChannel
、HTTPChannel
、SecureHTTPChannel
のいずれかである必要があります。
...
private function refresh():void{
var cs:ChannelSet= new ChannelSet();
cs.addChannel(new AMFChannel("my-amf",
"https://yourlcserver:8080/remoting/messagebroker/amf"));
EncryptDocument.setCredentials("administrator", "password");
EncryptDocument.channelSet = cs;
}
...
ChannelSet
インスタンスを mx:RemoteObject
インスタンスの channelSet
フィールドに割り当てます(前のコードの例を参照)。一般的には、ChannelSet.addChannel
メソッドの呼び出し時に完全修飾名を指定するのではなく、インポートステートメントでチャネルクラスをインポートします。
入力値の受け渡し
Workbench で作成されたプロセスは、0 個以上の入力パラメーターを受け取り、出力値を返すことができます。クライアントアプリケーションは、AEM Forms プロセスに属するパラメーターに対応するフィールドをもつ ActionScript
オブジェクト内の入力パラメーターを渡します。この短時間のみ有効なプロセス(MyApplication/EncryptDocument
)には、1 つの入力パラメーター(inDoc
)が必要です。プロセスによって公開される操作の名前は invoke
(短時間のみ有効なプロセスのデフォルト名)です。((AEM Forms では非推奨)AEM Forms リモートを使用した AEM Forms の呼び出しを参照。)
次のコードの例では、PDF ドキュメントを MyApplication/EncryptDocument
プロセスに渡します。
...
var params:Object = new Object();
//Document is an instance of DocumentReference
//that store an unsecured PDF document
params["inDoc"] = pdfDocument;
// Invoke an operation synchronously:
EncryptDocument.invoke(params);
...
このコードの例では、pdfDocument
は保護されていない PDF ドキュメントを含む DocumentReference
インスタンスです。DocumentReference
について詳しくは、(AEM Forms では非推奨)AEM Forms リモートによるドキュメントの処理を参照してください。
特定のバージョンのサービスの呼び出し
呼び出しのパラメーターマップで _version
パラメーターを使用すると、特定のバージョンの Forms サービスを呼び出すことができます。例えば、MyApplication/EncryptDocument
サービスのバージョン 1.2 を呼び出すには、次のように指定します。
var params:Object = new Object();
params["inDoc"] = pdfDocument;
params["_version"] = "1.2"
var token:AsyncToken = echoService.echoString(params);
version
パラメーターは、1 つのピリオドを含む文字列である必要があります。ピリオドの左側の値(メジャーバージョン)と右側の値(マイナーバージョン)は整数である必要があります。このパラメーターを指定しない場合、ヘッドアクティブバージョンが呼び出されます。
戻り値の処理
AEM Forms プロセスの出力パラメーターは、次の例に示すように、ActionScript オブジェクトにデシリアライズされ、クライアントアプリケーションはこのオブジェクトから名前で特定のパラメーターを抽出します。(MyApplication/EncryptDocument
プロセスの出力値の名前は outDoc
です。)
...
var res:Object = event.result;
var docRef:DocumentReference = res["outDoc"] as DocumentReference;
...
MyApplication/EncryptDocument プロセスの呼び出し
次の手順を実行して MyApplication/EncryptDocument
プロセスを呼び出すことができます。
- ActionScript または MXML を使用して
mx:RemoteObject
インスタンスを作成します。「mx:RemoteObject インスタンスの作成」を参照してください。 - AEM Forms と通信するための
ChannelSet
インスタンスを設定し、それをmx:RemoteObject
インスタンスに関連付けます。「AEM Forms へのチャネルを作成」を参照してください。 - ChannelSet の
login
メソッドまたはサービスのsetCredentials
メソッドを呼び出して、ユーザー識別情報の値とパスワードを指定します。(シングルサインオンの使用を参照。) mx.rpc.livecycle.DocumentReference
インスタンスに、MyApplication/EncryptDocument
プロセスに渡す保護されていない PDF ドキュメントを入力します。(ドキュメントの入力パラメーターとしての受け渡しを参照。)mx:RemoteObject
インスタンスのinvoke
メソッドを呼び出して PDF ドキュメントを暗号化します。入力パラメーター(保護されていない PDF ドキュメント)を含むObject
を渡します。「入力値を渡す」を参照してください。- プロセスから返される、パスワードで暗号化された PDF ドキュメントを取得します。「戻り値の処理」を参照してください。
クイックスタート:(AEM Forms では非推奨)AEM Forms Remoting を使用して保護されていないドキュメントを渡すことにより、短期間のプロセスを呼び出す
Flex で作成されたクライアントアプリケーションの認証 authenticating-client-applications-built-with-flex
AEM Forms User Manager で Flex アプリケーションからリモートリクエストを認証する方法はいくつかあり、これには、中央のログインサービスを使用した AEM Forms のシングルサインオン、基本認証、カスタム認証などが含まれます。シングルサインオンも匿名アクセスも有効になっていない場合、リモートリクエストは基本認証(デフォルト)またはカスタム認証のいずれかになります。
基本認証は、web アプリケーションコンテナからの標準の J2EE 基本認証に依存しています。基本認証の場合、HTTP 401 エラーはブラウザーの問題の原因になります。つまり、Flex アプリケーションからまだログインしていない状態で、RemoteObject を使用して Forms アプリケーションに接続しようとすると、ブラウザーがユーザー名とパスワードの入力を求めます。
カスタム認証の場合、サーバーはクライアントに fault を送信し、認証が必要であることを示します。
カスタム認証の使用 using-custom-authentication
管理コンソールでカスタム認証を有効にするには、リモートエンドポイントの認証方法を「基本」から「カスタム」に変更します。カスタム認証を使用する場合、クライアントアプリケーションはログインには ChannelSet.login
メソッド、ログアウトには ChannelSet.logout
メソッドを呼び出します。
RemoteObject.setCredentials
メソッドを呼び出して資格情報を宛先に送信していました。setCredentials
メソッドは、コンポーネントがサーバーへの接続を最初に試みるまで、資格情報を実際にサーバーに渡しませんでした。したがって、コンポーネントが障害イベントを発行した場合、その障害が認証エラーによって発生したか、別の理由で発生したかを確認することはできません。ChannelSet.login
メソッドは、呼び出し時にサーバーに接続し、認証の問題をすぐに処理できるようにします。setCredentials
メソッドは引き続き使用できますが、ChannelSet.login
メソッドを使用することをお勧めします。同じチャネルおよび対応する ChannelSet オブジェクトを複数の宛先で使用できるので、1 つの宛先にログインすると、同じチャネル(単一または複数)を使用する他の宛先にログインします。2 つのコンポーネントが同じ ChannelSet オブジェクトに異なる資格情報を適用する場合は、最後に適用された資格情報が使用されます。複数のコンポーネントが同じ認証済み ChannelSet オブジェクトを使用している場合、logout
メソッドは、すべてのコンポーネントを宛先からログアウトします。
次の例では、ChannelSet.login
および ChannelSet.logout
メソッドと RemoteObject コントロールを使用します。このアプリケーションは、次のアクションを実行します。
RemoteObject
コンポーネントによって使用されるチャンネルを表すcreationComplete
ハンドラー内にChannelSet
オブジェクトを作成する- ボタンクリックイベントに応答して
ROLogin
関数を呼び出すことにより、サーバーに資格情報を渡す - RemoteObject コンポーネントを使用して、ボタンクリックイベントに応答して文字列をサーバーに送信します。サーバーが同じ文字列を RemoteObject コンポーネントに返します
- RemoteObject コンポーネントの「結果イベント」を使用して、 TextArea コントロールに文字列を表示します
- ボタンクリックイベントに応答して
ROLogout
関数を呼び出すことにより、サーバーからログアウトします。
<?xml version="1.0"?>
<!-- security/SecurityConstraintCustom.mxml -->
<mx:Application xmlns:mx="https://www.adobe.com/2006/mxml" width="100%"
height="100%" creationComplete="creationCompleteHandler();">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.messaging.config.ServerConfig;
import mx.rpc.AsyncToken;
import mx.rpc.AsyncResponder;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.messaging.ChannelSet;
// Define a ChannelSet object.
public var cs:ChannelSet;
// Define an AsyncToken object.
public var token:AsyncToken;
// Initialize ChannelSet object based on the
// destination of the RemoteObject component.
private function creationCompleteHandler():void {
if (cs == null)
cs = ServerConfig.getChannelSet(remoteObject.destination);
}
// Login and handle authentication success or failure.
private function ROLogin():void {
// Make sure that the user is not already logged in.
if (cs.authenticated == false) {
token = cs.login("sampleuser", "samplepassword");
// Add result and fault handlers.
token.addResponder(new AsyncResponder(LoginResultEvent,
LoginFaultEvent));
}
}
// Handle successful login.
private function LoginResultEvent(event:ResultEvent,
token:Object=null):void {
switch(event.result) {
case "success":
authenticatedCB.selected = true;
break;
default:
}
}
// Handle login failure.
private function LoginFaultEvent(event:FaultEvent,
token:Object=null):void {
switch(event.fault.faultCode) {
case "Client.Authentication":
default:
authenticatedCB.selected = false;
Alert.show("Login failure: " + event.fault.faultString);
}
}
// Logout and handle success or failure.
private function ROLogout():void {
// Add result and fault handlers.
token = cs.logout();
token.addResponder(new
AsyncResponder(LogoutResultEvent,LogoutFaultEvent));
}
// Handle successful logout.
private function LogoutResultEvent(event:ResultEvent,
token:Object=null):void {
switch (event.result) {
case "success":
authenticatedCB.selected = false;
break;
default:
}
}
// Handle logout failure.
private function LogoutFaultEvent(event:FaultEvent,
token:Object=null):void {
Alert.show("Logout failure: " + event.fault.faultString);
}
// Handle message recevied by RemoteObject component.
private function resultHandler(event:ResultEvent):void {
ta.text += "Server responded: "+ event.result + "\n";
}
// Handle fault from RemoteObject component.
private function faultHandler(event:FaultEvent):void {
ta.text += "Received fault: " + event.fault + "\n";
}
]]>
</mx:Script>
<mx:HBox>
<mx:Label text="Enter a text for the server to echo"/>
<mx:TextInput id="ti" text="Hello World!"/>
<mx:Button label="Login"
click="ROLogin();"/>
<mx:Button label="Echo"
enabled="{authenticatedCB.selected}"
click="remoteObject.echo(ti.text);"/>
<mx:Button label="Logout"
click="ROLogout();"/>
<mx:CheckBox id="authenticatedCB"
label="Authenticated?"
enabled="false"/>
</mx:HBox>
<mx:TextArea id="ta" width="100%" height="100%"/>
<mx:RemoteObject id="remoteObject"
destination="myDest"
result="resultHandler(event);"
fault="faultHandler(event);"/>
</mx:Application>
login
および logout
メソッドは AsyncToken オブジェクトを返します。結果イベントが「成功した呼び出し」を処理し、障害イベントが失敗を処理するために、イベントハンドラーを AsyncToken オブジェクトに割り当てます。
シングルサインオンの使用 using-single-sign-on
AEM Forms ユーザーは、複数の AEM Forms web アプリケーションに接続してタスクを実行できます。ユーザーが web アプリケーション間を移動する際に、web アプリケーションごに個別にログインさせるのは効率的ではありません。AEM Forms のシングルサインオンメカニズムを使用すると、ユーザーは 1 回ログインして任意の AEM Forms web アプリケーションにアクセスできます。AEM Forms のデベロッパーは AEM Forms と使用するクライアントアプリケーションを作成できるので、シングルサインオンメカニズムを利用する能力も必要です。
各 AEM Forms web アプリケーションは、独自の web アーカイブ(WAR)ファイルにパッケージ化されます。このファイルは、エンタープライズアーカイブ(EAR)ファイルの一部としてパッケージ化されます。アプリケーションサーバーでは異なる web アプリケーション間でのセッションデータの共有が許可されないので、AEM Forms では HTTP Cookie を使用して認証情報を保存します。認証 Cookie を使用すると、ユーザーは Forms アプリケーションにログインしてから、他の AEM Forms web アプリケーションに接続することができます。この手法は、シングルサインオンと呼ばれます。
AEM Forms のデベロッパーは、フォームガイド(非推奨)の機能を拡張し、Workspace をカスタマイズするためのクライアントアプリケーションを作成します。例えば、Workspace アプリケーションはプロセスを開始することができます。次に、クライアントアプリケーションはリモートエンドポイントを使用して Forms サービスからデータを取得します。
AEM Forms Remoting(AEM Forms では非推奨)を使用して AEM Forms サービスが呼び出されると、クライアントアプリケーションは認証 Cookie をリクエストの一部として渡します。ユーザーは既に認証されているので、クライアントアプリケーションから AEM Forms サービスに接続するために、追加のログインは必要ありません。
AEM Forms のシングルサインオンメカニズムを回避するには、独自にログインおよびログアウトするクライアントアプリケーションを記述します。シングルサインオンメカニズムを回避する場合は、アプリケーションで基本認証またはカスタム認証を使用できます。
このメカニズムでは AEM Forms のシングルサインオンメカニズムが使用されないので、認証 Cookie はクライアントに書き込まれません。ログイン資格情報は、リモートチャネルの ChannelSet
オブジェクトに格納されます。したがって、ChannelSet
で行う同じRemoteObject
の呼び出しは、これらの資格情報のコンテキストで作成されます。
AEM Formsでのシングルサインオンの設定 setting-up-single-sign-on-in-aem-forms
AEM Forms でシングルサインオンを使用するには、一元化されたログインサービスを含む Forms Workflow コンポーネントをインストールします。ユーザーが正常にログインすると、一元化されたログインサービスはユーザーに認証 Cookie を返します。Forms web アプリケーションに対するすべての後続のリクエストには Cookie が含まれます。Cookie が有効な場合、ユーザーは認証済みと見なされ、再度ログインする必要はありません。
シングルサインオンを使用するクライアントアプリケーションの書き込み writing-a-client-application-that-uses-single-sign-on
シングルサインオンメカニズムを利用する場合、ユーザーがクライアントアプリケーションを起動する前に、一元化されたログインサービスを使用してログインすることが想定されます。つまり、クライアントアプリケーションは、ブラウザーを介してログインしたり ChannelSet.login
メソッドを呼び出してログインしたりはしません。
AEM Forms のシングルサインオンメカニズムを使用している場合、基本ではなくカスタム認証を使用するようにリモートエンドポイントを設定します。そうしないと、基本認証を使用する場合、認証エラーによってブラウザーで問題が発生します。これはユーザーには見せたくありません。代わりに、アプリケーションは認証エラーを検出し、一元化されたログインサービスを使用してログインするようユーザーに指示するメッセージを表示します。
次の例に示すように、クライアントアプリケーションは、RemoteObject
コンポーネントを使用してリモートエンドポイントを介して AEM Forms にアクセスします。
<?xml version="1.0"?>
<mx:Application
backgroundColor="#FFFFFF">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
// Prompt user to login on a fault.
private function faultHandler(event:FaultEvent):void
{
if(event.fault.faultCode=="Client.Authentication")
{
Alert.show(
event.fault.faultString + "\n" +
event.fault.faultCode + "\n" +
"Please login to continue.");
}
}
]]>
</mx:Script>
<mx:RemoteObject id="srv"
destination="product"
fault="faultHandler(event);"/>
<mx:DataGrid
width="100%" height="100%"
dataProvider="{srv.getProducts.lastResult}"/>
<mx:Button label="Get Data"
click="srv.getProducts();"/>
</mx:Application>
Flex アプリケーションの実行中に新しいユーザーとしてログイン
Flex で作成されたアプリケーションは、AEM Forms サービスに対するすべてのリクエストに認証 Cookie を含めます。パフォーマンス上の理由から、AEM Forms はリクエストのたびに cookie を検証しません。ただし、認証 Cookie が別の認証 Cookie に置き換えられた場合、AEM Forms は検知します。
例えば、クライアントアプリケーションを起動し、アプリケーションがアクティブな状態で、一元化されたログインサービスを使用してログアウトします。次に、別のユーザーとしてログインできます。別のユーザーとしてログインすると、既存の認証 Cookie が新しいユーザーの認証 Cookie に置き換えられます。
クライアントアプリケーションからの次のリクエストで、AEM Forms は cookie が変更されたことを検知し、ユーザーをログアウトします。そのため、Cookie を変更した後の最初のリクエストは失敗します。以降のリクエストはすべて、新しい cookie のコンテキストで行われるため成功します。
ログアウト
AEM Forms からログアウトしてセッションを無効にするには、クライアントのコンピューターから認証 Cookie を削除する必要があります。シングルサインオンの目的はユーザーが 1 回だけログインするようにすることであるため、クライアントアプリケーションで cookie が削除されることは望ましくありません。このアクションは、ユーザーを効果的にログアウトします。
そのため、クライアントアプリケーションで RemoteObject.logout
メソッドを呼び出すと、セッションがログアウトされていないことを示すエラーメッセージがクライアントに生成されます。代わりに、ユーザーは一元化されたログインサービスを使用してログアウトして、認証 Cookie を削除できます。
Flex アプリケーションの実行中にログアウトする
Flex で構築されたクライアントアプリケーションを起動し、一元化されたログインサービスを使用してログアウトできます。ログアウトプロセスの一環として、認証 Cookie が削除されます。Cookie なしで、または無効な Cookie でリモート処理のリクエストが行われた場合、ユーザーセッションは無効になります。このアクションはログアウトになります。次回、クライアントアプリケーションで AEM Forms サービスに接続しようとするとき、ユーザーはログインする必要があります。
関連項目
(AEM Forms では非推奨 )AEM Forms Remoting を使用した AEM Forms の呼び出し
(AEM Forms では非推奨 )AEM Forms Remoting を使用したドキュメントの処理
(AEM Forms では非推奨)AEM Forms Remoting を使用したセキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出し
Remoting を使用してプロセスを呼び出すための安全なドキュメントの受け渡し passing-secure-documents-to-invoke-processes-using-remoting
1 つまたは複数のドキュメントを必要とするプロセスを呼び出す際に、セキュリティで保護されたドキュメントを AEM Forms に渡すことができます。セキュリティで保護されているドキュメントを渡すことにより、ビジネス情報や機密ドキュメントを保護できます。この場合、ドキュメントとは PDF ドキュメント、XML ドキュメント、Word ドキュメントなどを指しています。セキュリティで保護されているドキュメントを許可するように AEM Forms が設定されている場合は、Flex で記述されたクライアントアプリケーションからセキュリティで保護されているドキュメントを AEM Forms に渡す必要があります(安全なドキュメントと安全でないドキュメントを受け入れるための AEM Forms の構成を参照)。
セキュリティで保護されているドキュメントを渡す場合は、シングルサインオンを使用し、ドキュメントアップロードアプリケーションユーザー の役割を持つ AEM Forms ユーザーを指定します。この役割がないと、ユーザーはセキュアなドキュメントをアップロードできません。プログラムによってユーザーに役割を割り当てることもできます(役割と権限の管理を参照)。
AEM Forms は、アップロードサーブレットに渡されたトークンを返す getFileUploadToken
という名前の操作をサポートしています。DocumentReference.constructRequestForUpload
メソッドには、AEM Forms への URL と LC.FileUploadAuthenticator.getFileUploadToken
メソッドによって返されたトークンが必要です。このメソッドは、アップロードサーブレットへの呼び出しで使用される URLRequest
オブジェクトを返します。次のコードは、このアプリケーションロジックの例を示しています。
...
private function startUpload():void
{
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener("uploadCompleteData", completeHandler);
try
{
var success:Boolean = fileRef.browse();
}
catch (error:Error)
{
trace("Unable to browse for files.");
}
}
private function selectHandler(event:Event):void
{
var authTokenService:RemoteObject = new RemoteObject("LC.FileUploadAuthenticator");
authTokenService.addEventListener("result", authTokenReceived);
authTokenService.channelSet = cs;
authTokenService.getFileUploadToken();
}
private function authTokenReceived(event:ResultEvent):void
{
var token:String = event.result as String;
var request:URLRequest = DocumentReference.constructRequestForUpload("http://localhost:8080", token);
try
{
fileRef.upload(request);
}
catch (error:Error)
{
trace("Unable to upload file.");
}
}
private function completeHandler(event:DataEvent):void
{
var params:Object = new Object();
var docRef:DocumentReference = new DocumentReference();
docRef.url = event.data as String;
docRef.referenceType = DocumentReference.REF_TYPE_URL;
}
...
)
セキュリティで保護されているドキュメントと保護されていないドキュメントを受け入れるための AEM Forms の設定 configuring-aem-forms-to-accept-secure-and-unsecure-documents
管理コンソールを使用して、ドキュメントを Flex クライアントアプリケーションから AEM Forms プロセスに渡す際に、ドキュメントをセキュリティで保護するかどうかを指定できます。デフォルトでは、AEM Forms はセキュリティで保護されたドキュメントを受け入れるように設定されています。セキュリティで保護されたドキュメントを受け入れるように AEM Forms を設定するには、次の手順を実行します。
- 管理コンソールにログインします。
- 「設定」をクリックします。
- 「コアシステム設定」をクリックします。
- 「設定」をクリックします。
- 「Flex アプリケーションからのセキュリティで保護されていないドキュメントのアップロードを許可」オプションの選択がオフになっていることを確認します。
- セキュリティで保護されていないドキュメントを受け入れるように AEM Forms を設定するには、「Flex アプリケーションからのセキュリティで保護されていないドキュメントのアップロードを許可」オプションを選択します。次に、アプリケーションまたはサービスを再起動して、設定が有効になることを確認します。
- 「Ctrl + C」コマンドを使用して SDK を再起動することをお勧めします。 Java プロセスの停止など、別の方法を使用して AEM SDK を再起動すると、AEM 開発環境で不整合が生じる場合があります。
クイックスタート:Remoting を使用してセキュリティで保護されたドキュメントを渡すことによる短時間のみ有効なプロセスの呼び出し quick-start-invoking-a-short-lived-process-by-passing-a-secure-document-using-remoting
次のコード例では、MyApplication/EncryptDocument.
を呼び出しています。ユーザーは、ログインして、「ファイルを選択」ボタンをクリックする必要があります。このボタンは、PDF ファイルをアップロードしてプロセスを呼び出すために使用されます。つまり、ユーザーが認証されると、「ファイルを選択」ボタンが有効になります。次の図は、ユーザーが認証された後の Flex クライアントアプリケーションを示しています。Authenticated CheckBox が有効になっていることに注意してください。
AEM Forms がセキュアなドキュメントのみをアップロードするように設定されていて、ユーザーに ドキュメントアップロードアプリケーションユーザー の役割がない場合、例外がスローされます。ユーザーにこの役割が割り当てられている場合は、ファイルがアップロードされ、プロセスが呼び出されます。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns="*"
creationComplete="initializeChannelSet();">
<mx:Script>
<![CDATA[
import mx.rpc.livecycle.DocumentReference;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.DataEvent;
import mx.messaging.ChannelSet;
import mx.messaging.channels.AMFChannel;
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
import mx.rpc.AsyncToken;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.AsyncResponder;
// Classes used in file retrieval
private var fileRef:FileReference = new FileReference();
private var docRef:DocumentReference = new DocumentReference();
private var parentResourcePath:String = "/";
private var now1:Date;
private var serverPort:String = "hiro-xp:8080";
// Define a ChannelSet object.
public var cs:ChannelSet;
// Define an AsyncToken object.
public var token:AsyncToken;
// Holds information returned from AEM Forms
[Bindable]
public var progressList:ArrayCollection = new ArrayCollection();
// Handles a successful login
private function LoginResultEvent(event:ResultEvent,
token:Object=null):void {
switch(event.result) {
case "success":
authenticatedCB.selected = true;
btnFile.enabled = true;
btnLogout.enabled = true;
btnLogin.enabled = false;
break;
default:
}
}
// Handle login failure.
private function LoginFaultEvent(event:FaultEvent,
token:Object=null):void {
switch(event.fault.faultCode) {
case "Client.Authentication":
default:
authenticatedCB.selected = false;
Alert.show("Login failure: " + event.fault.faultString);
}
}
// Set up channel set to invoke AEM Forms
private function initializeChannelSet():void {
cs = new ChannelSet();
cs.addChannel(new AMFChannel("remoting-amf", "https://" + serverPort + "/remoting/messagebroker/amf"));
EncryptDocument2.channelSet = cs;
}
// Call this method to upload the file.
// This creates a file picker and lets the user select a PDF file to pass to the EncryptDocument process.
private function uploadFile():void {
fileRef.addEventListener(Event.SELECT, selectHandler);
fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,completeHandler);
fileRef.browse();
}
// Gets called for selected file. Does the actual upload via the file upload servlet.
private function selectHandler(event:Event):void {
var authTokenService:RemoteObject = new RemoteObject("LC.FileUploadAuthenticator");
authTokenService.addEventListener("result", authTokenReceived);
authTokenService.channelSet = cs;
authTokenService.getFileUploadToken();
}
private function authTokenReceived(event:ResultEvent):void
{
var token:String = event.result as String;
var request:URLRequest = DocumentReference.constructRequestForUpload("https://hiro-xp:8080", token);
try
{
fileRef.upload(request);
}
catch (error:Error)
{
trace("Unable to upload file.");
}
}
// Called once the file is completely uploaded.
private function completeHandler(event:DataEvent):void {
// Set the docRef's url and referenceType parameters
docRef.url = event.data as String;
docRef.referenceType=DocumentReference.REF_TYPE_URL;
executeInvokeProcess();
}
//This method invokes the EncryptDocument process
public function executeInvokeProcess():void {
//Create an Object to store the input value for the EncryptDocument process
now1 = new Date();
var params:Object = new Object();
params["inDoc"]=docRef;
// Invoke the EncryptDocument process
var token:AsyncToken;
token = EncryptDocument2.invoke(params);
token.name = name;
}
// AEM Forms login method
private function ROLogin():void {
// Make sure that the user is not already logged in.
//Get the User and Password
var userName:String = txtUser.text;
var pass:String = txtPassword.text;
if (cs.authenticated == false) {
token = cs.login(userName, pass);
// Add result and fault handlers.
token.addResponder(new AsyncResponder(LoginResultEvent, LoginFaultEvent));
}
}
// This method handles a successful process invocation
public function handleResult(event:ResultEvent):void
{
//Retrieve information returned from the service invocation
var token:AsyncToken = event.token;
var res:Object = event.result;
var dr:DocumentReference = res["outDoc"] as DocumentReference;
var now2:Date = new Date();
// These fields map to columns in the DataGrid
var progObject:Object = new Object();
progObject.filename = token.name;
progObject.timing = (now2.time - now1.time).toString();
progObject.state = "Success";
progObject.link = "<a href='" + dr.url + "'> open </a>";
progressList.addItem(progObject);
}
// Prompt user to login on a fault.
private function faultHandler(event:FaultEvent):void
{
if(event.fault.faultCode=="Client.Authentication")
{
Alert.show(
event.fault.faultString + "\n" +
event.fault.faultCode + "\n" +
"Please login to continue.");
}
}
// AEM Forms logout method
private function ROLogout():void {
// Add result and fault handlers.
token = cs.logout();
token.addResponder(new AsyncResponder(LogoutResultEvent,LogoutFaultEvent));
}
// Handle successful logout.
private function LogoutResultEvent(event:ResultEvent,
token:Object=null):void {
switch (event.result) {
case "success":
authenticatedCB.selected = false;
btnFile.enabled = false;
btnLogout.enabled = false;
btnLogin.enabled = true;
break;
default:
}
}
// Handle logout failure.
private function LogoutFaultEvent(event:FaultEvent,
token:Object=null):void {
Alert.show("Logout failure: " + event.fault.faultString);
}
private function resultHandler(event:ResultEvent):void {
// Do anything else here.
}
]]>
</mx:Script>
<mx:RemoteObject id="EncryptDocument" destination="MyApplication/EncryptDocument" result="resultHandler(event);">
<mx:method name="invoke" result="handleResult(event)"/>
</mx:RemoteObject>
<!--//This consists of what is displayed on the webpage-->
<mx:Panel id="lcPanel" title="EncryptDocument (Deprecated for AEM forms) AEM Forms Remoting Example"
height="25%" width="25%" paddingTop="10" paddingLeft="10" paddingRight="10"
paddingBottom="10">
<mx:Label width="100%" color="blue"
text="Select a PDF file to pass to the EncryptDocument process"/>
<mx:DataGrid x="10" y="0" width="500" id="idProgress" editable="false"
dataProvider="{progressList}" height="231" selectable="false" >
<mx:columns>
<mx:DataGridColumn headerText="Filename" width="200" dataField="filename" editable="false"/>
<mx:DataGridColumn headerText="State" width="75" dataField="state" editable="false"/>
<mx:DataGridColumn headerText="Timing" width="75" dataField="timing" editable="false"/>
<mx:DataGridColumn headerText="Click to Open" dataField="link" editable="false" >
<mx:itemRenderer>
<mx:Component>
<mx:Text x="0" y="0" width="100%" htmlText="{data.link}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
<mx:Button label="Select File" click="uploadFile()" id="btnFile" enabled="false"/>
<mx:Button label="Login" click="ROLogin();" id="btnLogin"/>
<mx:Button label="LogOut" click="ROLogout();" enabled="false" id="btnLogout"/>
<mx:HBox>
<mx:Label text="User:"/>
<mx:TextInput id="txtUser" text=""/>
<mx:Label text="Password:"/>
<mx:TextInput id="txtPassword" text="" displayAsPassword="true"/>
<mx:CheckBox id="authenticatedCB"
label="Authenticated?"
enabled="false"/>
</mx:HBox>
</mx:Panel>
</mx:Application>
関連トピック
(AEM Forms では非推奨 )AEM Forms Remoting を使用した AEM Forms の呼び出し
(AEM Forms では非推奨 )AEM Forms Remoting を使用したドキュメントの処理
(AEM Forms では非推奨)AEM Forms Remoting を使用したセキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出し
Remoting を使用したカスタムコンポーネントサービスの呼び出し invoking-custom-component-services-using-remoting
Remoting を使用して、カスタムコンポーネント内のサービスを呼び出すことができます。例えば、Customer サービスを含む Bank コンポーネントについて考えてみましょう。Flex で記述されたクライアントアプリケーションを使用して、Customer サービスに属する操作を呼び出すことができます。この節に関連するクイックスタートを実行する前に、Bank カスタムコンポーネントを作成する必要があります。
Customer サービスは、createCustomer
を言う名前の操作を公開します。このディスカッションでは、Customer サービスを呼び出して顧客を作成する Flex クライアントアプリケーションの作成方法を説明します。この操作には、新規顧客を表す com.adobe.livecycle.sample.customer.Customer
タイプの複合オブジェクトが必要です。次の図に、Customer サービスを呼び出して新しい顧客を作成するクライアントアプリケーションを示します。createCustomer
操作は顧客識別子の値を返します。識別子の値は「顧客識別子」テキストボックスに表示されます。
次のテーブルに、このクライアントアプリケーションの一部であるコントロールを一覧表示します。
createCustomer
操作の戻り値が入力されます。AEM Forms の複合データタイプのマッピング mapping-aem-forms-complex-data-types
一部の AEM Forms 操作では、入力値として複合データタイプが必要です。これらの複合データタイプは、操作で使用される実行時の値を定義します。例えば、Customer サービスの createCustomer
操作にはサービスに必要な実行時の値を含む Customer
インスタンスが必要です。データタイプがない場合、Customer サービスは例外をスローし、操作を実行しません。
AEM Forms サービスを呼び出す際に、必要な AEM Forms データタイプにマッピングする ActionScript オブジェクトを作成します。操作に必要な複合データタイプごとに、個別の ActionScript オブジェクトを作成します。
ActionScript クラスで、AEM Forms データタイプにマッピングするために RemoteClass
メタデータタグを使用します。例えば、Customer サービスの createCustomer
操作を呼び出す場合、com.adobe.livecycle.sample.customer.Customer
データタイプにマッピングする ActionScript クラスを作成します。
次の Customer という名前の ActionScript クラスは、AEM Forms データタイプ com.adobe.livecycle.sample.customer.Customer
にマッピングする方法を示しています。
package customer
{
[RemoteClass(alias="com.adobe.livecycle.sample.customer.Customer")]
public class Customer
{
public var name:String;
public var street:String;
public var city:String;
public var state:String;
public var phone:String;
public var zip:int;
}
}
AEM Forms データタイプの完全修飾データタイプがエイリアスタグに割り当てられます。
ActionScript クラスのフィールドは、AEM Forms データタイプに属するフィールドと一致します。Customer ActionScript クラスにある 6 つのフィールドは、com.adobe.livecycle.sample.customer.Customer
に属するフィールドと一致します。
https://[yourServer]:[yourPort]/soap/services/CustomerService?wsdl.
が使用されます。Customer ActionScript クラスは、customer という名前のパッケージに属しています。AEM Forms データタイプにマッピングするすべての ActionScript クラスは、独自のパッケージに配置することをお勧めします。次の図に示すように、Flex プロジェクトの src フォルダーにフォルダーを作成し、ActionScript ファイルをそのフォルダーに配置します。
クイックスタート:Remoting を使用した Customer カスタムサービスの呼び出し quick-start-invoking-the-customer-custom-service-using-remoting
次のコード例は、Customer サービスを呼び出して顧客を作成します。このコード例を実行する場合は、必ずすべてのテキストボックスに入力してください。また、com.adobe.livecycle.sample.customer.Customer
にマッピングする Customer.as ファイルを必ず作成してください。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="absolute" backgroundColor="#B1ABAB">
<mx:Script>
<![CDATA[
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.DataEvent;
import mx.messaging.ChannelSet;
import mx.messaging.channels.AMFChannel;
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
import mx.rpc.AsyncToken;
import mx.managers.CursorManager;
import mx.rpc.remoting.mxml.RemoteObject;
// Custom class that corresponds to an input to the
// AEM Forms encryption method
import customer.Customer;
// Classes used in file retrieval
private var fileRef:FileReference = new FileReference();
private var parentResourcePath:String = "/";
private var serverPort:String = "hiro-xp:8080";
private var now1:Date;
private var fileName:String;
// Prepares parameters for encryptPDFUsingPassword method call
public function executeCreateCustomer():void
{
var cs:ChannelSet= new ChannelSet();
cs.addChannel(new AMFChannel("remoting-amf", "https://" + serverPort + "/remoting/messagebroker/amf"));
customerService.setCredentials("administrator", "password");
customerService.channelSet = cs;
//Create a Customer object required to invoke the Customer service's
//createCustomer operation
var myCust:Customer = new Customer();
//Get values from the user of the Flex application
var fullName:String = txtFirst.text +" "+txtLast.text ;
var Phone:String = txtPhone.text;
var Street:String = txtStreet.text;
var State:String = txtState.text;
var Zip:int = parseInt(txtZIP.text);
var City:String = txtCity.text;
//Populate Customer fields
myCust.name = fullName;
myCust.phone = Phone;
myCust.street= Street;
myCust.state= State;
myCust.zip = Zip;
myCust.city = City;
//Invoke the Customer service's createCustomer operation
var params:Object = new Object();
params["inCustomer"]=myCust;
var token:AsyncToken;
token = customerService.createCustomer(params);
token.name = name;
}
private function handleResult(event:ResultEvent):void
{
// Retrieve the information returned from the service invocation
var token:AsyncToken = event.token;
var res:Object = event.result;
var custId:String = res["CustomerId"] as String;
//Assign to the custId to the text box
txtCustId.text = custId;
}
private function resultHandler(event:ResultEvent):void
{
}
]]>
</mx:Script>
<mx:RemoteObject id="customerService" destination="CustomerService" result="resultHandler(event);">
<mx:method name="createCustomer" result="handleResult(event)"/>
</mx:RemoteObject>
<mx:Style source="../bank.css"/>
<mx:Grid>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="New Customer" fontSize="16" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="First Name:" fontSize="12" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput styleName="textField" id="txtFirst"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:Button label="Create Customer" id="btnCreateCustomer" click="executeCreateCustomer()"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="Last Name" fontSize="12" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput styleName="textField" id="txtLast"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="Phone" fontSize="12" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput styleName="textField" id="txtPhone"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="Street" fontSize="12" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput styleName="textField" id="txtStreet"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="State" fontSize="12" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput styleName="textField" id="txtState"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="ZIP" fontSize="12" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput styleName="textField" id="txtZIP"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="City" fontSize="12" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput styleName="textField" id="txtCity"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="Customer Identifier" fontSize="12" fontWeight="bold"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput styleName="textField" id="txtCustId" editable="false"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
</mx:GridItem>
</mx:GridRow>
</mx:Grid>
</mx:Application>
スタイルシート
このクイックスタートには bank.css という名前のスタイルシートが含まれています。次のコードは、使用されるスタイルシートを表しています。
/* CSS file */
global
{
backgroundGradientAlphas: 1.0, 1.0;
backgroundGradientColors: #525152,#525152;
borderColor: #424444;
verticalAlign: middle;
color: #FFFFFF;
font-size:12;
font-weight:normal;
}
ApplicationControlBar
{
fillAlphas: 1.0, 1.0;
fillColors: #393839, #393839;
}
.textField
{
backgroundColor: #393839;
background-disabled-color: #636563;
}
.button
{
fillColors: #636563, #424242;
}
.dropdownMenu
{
backgroundColor: #DDDDDD;
fillColors: #636563, #393839;
alternatingItemColors: #888888, #999999;
}
.questionLabel
{
}
ToolTip
{
backgroundColor: black;
backgroundAlpha: 1.0;
cornerRadius: 0;
color: white;
}
DateChooser
{
cornerRadius: 0; /* pixels */
headerColors: black, black;
borderColor: black;
themeColor: black;
todayColor: red;
todayStyleName: myTodayStyleName;
headerStyleName: myHeaderStyleName;
weekDayStyleName: myWeekDayStyleName;
dropShadowEnabled: true;
}
.myTodayStyleName
{
color: white;
}
.myWeekDayStyleName
{
fontWeight: normal;
}
.myHeaderStyleName
{
color: red;
fontSize: 16;
fontWeight: bold;
}
関連トピック
(AEM Forms では非推奨 )AEM Forms Remoting を使用した AEM Forms の呼び出し
(AEM Forms では非推奨 )AEM Forms Remoting を使用したドキュメントの処理
(AEM Forms では非推奨)AEM Forms Remoting を使用したセキュアでないドキュメントを渡すことによる、短時間のみ有効なプロセスの呼び出し
Remoting を使用してプロセスを呼び出すための安全なドキュメントの受け渡し