人間中心の長期間有効なプロセスの呼び出し

次のクライアントアプリケーションを使用して、Workbenchで作成された人間中心の長期間有効なプロセスをプログラムで呼び出すことができます。

  • 呼び出しAPIを使用するJava Webベースのクライアントアプリケーション。 (Java API(/docs/experience-manager-65/forms/developer-reference/programming-aem-forms-jee/invoking-aem-forms-jee-apis/invoking-aem-forms-using-java.html?lang=ja#invoking-aem-forms-using-the-java-api)を使用したAEM Formsの呼び出しを参照)。
  • Webサービスを使用するASP.NETアプリケーション。 (Webサービスを使用したAEM Formsの呼び出しを参照)。
  • Remotingを使用するFlexで構築されたクライアントアプリケーション。 (「(AEM formsでは非推奨)AEM Forms Remotingを使用したAEM Formsの呼び出し」を参照)。

呼び出される長期間有効なプロセスの名前は​FirstAppSolution/PreLoanProcess​です。 このプロセスは、最初のAEM Formsアプリケーションの作成で指定したチュートリアルに従って作成できます。

人間中心のプロセスでは、Workspaceを使用してユーザーが応答できるタスクが必要です。 例えば、Workbenchを使用して、銀行の管理者がローン申し込みを承認または拒否できるプロセスを作成できます。 次の図に、プロセス​FirstAppSolution/PreLoanProcess​を示します。

FirstAppSolution/PreLoanProcess​プロセスは、データ型がXMLである​formData​という入力パラメーターを受け取ります。 このXMLデータは、PreLoanForm.xdp​という名前のフォームデザインとマージされます。 次の図に、ローン申し込みの承認または拒否をユーザーに割り当てられたタスクを表すフォームを示します。 ユーザーは、Workspaceを使用してアプリケーションを承認または拒否します。 Workspaceユーザーは、次の図に示す「承認」ボタンをクリックして、ローン申し込みを承認できます。 同様に、ユーザーは拒否ボタンをクリックしてローン要求を拒否できます。

長期間有効なプロセスは非同期で呼び出され、次の要因により、同期的に呼び出すことはできません。

  • 1つのプロセスは相当な時間を要する場合があります。
  • プロセスは組織の境界をまたぐ場合があります。
  • プロセスを終了するには、外部入力が必要です。 例えば、不在の管理者にフォームが送信される場合を考えます。 この場合、マネージャーがフォームに入力して戻るまで、プロセスは完了しません。

長期間有効なプロセスが呼び出されると、AEM Formsは、レコードの作成の一環として呼び出し識別子の値を作成します。 このレコードは、長期間有効なプロセスのステータスを追跡し、AEM Formsデータベースに保存されます。 呼び出し識別子の値を使用して、長期間有効なプロセスのステータスを追跡できます。 また、プロセス呼び出し識別子の値を使用して、実行中のプロセスインスタンスの終了など、Process Managerの操作を実行できます。

メモ

短時間のみ有効なプロセスが呼び出された場合、AEM Formsは呼び出し識別子の値やレコードを作成しません。

FirstAppSolution/PreLoanProcessプロセスは、XMLデータで表されたアプリケーションを申込者が送信すると呼び出されます。 入力プロセス変数の名前はformDataで、データ型はXMLです。 この説明の目的で、次のXMLデータがFirstAppSolution/PreLoanProcessプロセスの入力として使用されると仮定します。

 <?xml version="1.0" encoding="UTF-8"?>
 <LoanApp>
 <Name>Sam White</Name>
 <LoanAmount>250000</LoanAmount>
 <PhoneOrEmail>(555)555-5555</PhoneOrEmail>
 <ApprovalStatus>PENDING APPROVAL</ApprovalStatus>
 </LoanApp>

プロセスに渡されるXMLデータは、プロセスで使用されるフォーム内のフィールドと一致する必要があります。 そうしないと、データはフォーム内に表示されません。 FirstAppSolution/PreLoanProcessプロセスを呼び出すすべてのアプリケーションは、このXMLデータソースを渡す必要があります。 人間中心の長期間有効なプロセス​の呼び出しで作成されたアプリケーションは、ユーザーがWebクライアントに入力した値からXMLデータソースを動的に作成します。

クライアントアプリケーションを使用して、必要なXMLデータを​FirstAppSolution/PreLoanProcess​プロセスに送信できます。 長期間有効なプロセスは、呼び出し識別子の値を戻り値として返します。 次の図に、*FirstAppSolution/PreLoanProcess長期間有効なプロセスを呼び出すクライアントアプリケーションを示します。 クライアントアプリケーションはXMLデータを送信し、呼び出し識別子の値を表すstring値を返します。

関連トピック

人間中心の長期間有効なプロセスを呼び出す Java Web アプリケーションの作成

人間中心の長期間有効なプロセスを呼び出すASP.NET Webアプリケーションの作成

人間中心の長期間有効なプロセスを呼び出すFlexで構築されたクライアントアプリケーションの作成

人間中心の長期間有効なプロセスを呼び出す Java Web アプリケーションの作成

Javaサーブレットを使用してFirstAppSolution/PreLoanProcessプロセスを呼び出すWebベースのアプリケーションを作成できます。 Javaサーブレットからこのプロセスを呼び出すには、Javaサーブレット内で呼び出しAPIを使用します。 (Java APIを使用したAEM Formsの呼び出しを参照)。

次の図に、名前、電話(またはEメール)および金額の値を投稿するWebベースのクライアントアプリケーションを示します。 これらの値は、ユーザーが「アプリケーションを送信」ボタンをクリックすると、Javaサーブレットに送信されます。

Javaサーブレットは、次のタスクを実行します。

  • HTMLページからJavaサーブレットに投稿された値を取得します。
  • FirstAppSolution/PreLoanProcess​プロセスに渡すXMLデータソースを動的に作成します。 名前、電話(または電子メール)、金額の値は、XMLデータソースで指定します。
  • AEM Forms呼び出しAPIを使用して、FirstAppSolution/PreLoanProcess​プロセスを呼び出します。
  • 呼び出し識別子の値をクライアントWebブラウザーに返します。

手順の概要

FirstAppSolution/PreLoanProcessプロセスを呼び出すJava Webベースのアプリケーションを作成するには、次の手順を実行します。

  1. Webプロジェクトの作成を参照してください。
  2. サーブレット用のJavaアプリケーションロジックを作成します
  3. Webアプリケーション用のWebページの作成
  4. WebアプリケーションをWARファイルにパッケージ化します
  5. AEM FormsをホストするJ2EEアプリケーションサーバーにWARファイルをデプロイします。
  6. Webアプリケーションをテストします
メモ

これらの手順の一部は、AEM Formsのデプロイ先のJ2EEアプリケーションに依存します。 例えば、WARファイルのデプロイ方法は、使用しているJ2EEアプリケーションサーバーによって異なります。 AEM FormsがJBoss®にデプロイされていることを前提とします。

Webプロジェクトの作成

Webアプリケーションを作成する最初の手順は、Webプロジェクトを作成することです。 このドキュメントの基になるJava IDEはEclipse 3.3です。Eclipse IDEを使用して、Webプロジェクトを作成し、必要なJARファイルをプロジェクトに追加します。 index.html​という名前のHTMLページとJavaサーブレットをプロジェクトに追加します。

次のリストは、Webプロジェクトに含めるJARファイルを指定します。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • J2EE.jar

これらのJARファイルの場所については、「AEM Forms Javaライブラリファイルを含める」を参照してください。

メモ

J2EE.jarファイルは、Javaサーブレットで使用されるデータ型を定義します。 このJARファイルは、AEM FormsがデプロイされているJ2EEアプリケーションサーバーから取得できます。

Webプロジェクトの作成

  1. Eclipseを起動し、File > New Project​をクリックします。
  2. 新しいプロジェクト​ダイアログボックスで、Web/動的Webプロジェクト​を選択します。
  3. プロジェクト名に「InvokePreLoanProcess」と入力し、「完了」をクリックします。

必要なJARファイルをプロジェクトに追加する

  1. 「プロジェクトエクスプローラ」ウィンドウでInvokePreLoanProcessプロジェクトを右クリックし、「プロパティ」を選択します。
  2. Javaビルドパス」をクリックし、「ライブラリ」タブをクリックします。
  3. 外部JARを追加」ボタンをクリックし、含めるJARファイルを参照します。

プロジェクトにJavaサーブレットを追加する

  1. 「プロジェクトエクスプローラ」ウィンドウで、InvokePreLoanProcessプロジェクトを右クリックし、新規/その他​を選択します。
  2. Web​フォルダーを展開し、「Servlet」を選択して、「次へ」をクリックします。
  3. 「サーブレットを作成」ダイアログで、サーブレットの名前に「SubmitXML」と入力し、「完了」をクリックします。

プロジェクトへのHTMLページの追加

  1. 「プロジェクトエクスプローラ」ウィンドウで、InvokePreLoanProcessプロジェクトを右クリックし、新規/その他​を選択します。
  2. Web​フォルダーを展開し、「HTML」を選択して、「次へ」をクリックします。
  3. 新しいHTMLダイアログボックスで、ファイル名に「index.html」と入力し、「完了」をクリックします。
メモ

SubmitXML Javaサーブレットを呼び出すHTMLコンテンツの作成について詳しくは、WebアプリケーションのWebページの作成を参照してください。

サーブレットのJavaアプリケーションロジックの作成

Javaサーブレット内からFirstAppSolution/PreLoanProcessプロセスを呼び出すJavaアプリケーションロジックを作成します。 次のコードは、SubmitXML Javaサーブレットの構文を示しています。

     public class SubmitXML extends HttpServlet implements Servlet {
         public void doGet(HttpServletRequest req, HttpServletResponse resp
         throws ServletException, IOException {
         doPost(req,resp);
 
         }
         public void doPost(HttpServletRequest req, HttpServletResponse resp
         throws ServletException, IOException {
             //Add code here to invoke the FirstAppSolution/PreLoanProcess process
             }

通常、クライアントコードはJavaサーブレットのdoGetまたはdoPostメソッド内に配置しません。 より良いプログラミング方法は、このコードを別のクラスに配置することです。 次に、 doPostメソッド(またはdoGetメソッド)内からクラスをインスタンス化し、適切なメソッドを呼び出します。 ただし、コードを簡潔にするために、コード例は最小限に抑えられ、doPostメソッドに配置されます。

呼び出しAPIを使用してFirstAppSolution/PreLoanProcessプロセスを呼び出すには、次のタスクを実行します。

  1. Javaプロジェクトのクラスパスに、adobe-livecycle-client.jarなどのクライアントJARファイルを含めます。 これらのファイルの場所については、AEM Forms Java ライブラリファイルを含めるを参照してください。

  2. HTMLページから送信される名前、電話、金額の値を取得します。 これらの値を使用して、FirstAppSolution/PreLoanProcessプロセスに送信されるXMLデータソースを動的に作成します。 org.w3c.domクラスを使用して、XMLデータソースを作成できます(このアプリケーションロジックは次のコード例に示します)。

  3. 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。(接続プロパティの設定を参照。)

  4. コンストラクタを使用して ServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。ServiceClient オブジェクトを使用すると、サービス操作を呼び出すことができます。呼び出し要求の検索、ディスパッチ、ルーティングなどのタスクを処理します。

  5. コンストラクタを使用して java.util.HashMap オブジェクトを作成します。

  6. 各入力パラメーターに対して java.util.HashMap オブジェクトの put メソッドを呼び出して、長期間有効なプロセスに渡します。プロセスの入力パラメーターの名前を必ず指定してください。 FirstAppSolution/PreLoanProcessプロセスにはXML型(formDataという名前)の入力パラメーターが1つ必要なので、putメソッドを呼び出す必要があるのは1回だけです。

     //Get the XML to pass to the FirstAppSolution/PreLoanProcess process
     org.w3c.dom.Document inXML = GetDataSource(name,phone,amount);
     
     //Create a Map object to store the parameter value
     Map params = new HashMap();
     params.put("formData", inXML);
    
  7. ServiceClientFactoryオブジェクトのcreateInvocationRequestメソッドを呼び出し、次の値を渡して、InvocationRequestオブジェクトを作成します。

    • 長期間有効なプロセスを指定する文字列値。FirstAppSolution/PreLoanProcessプロセスを呼び出すには、FirstAppSolution/PreLoanProcessを指定します。
    • プロセス操作名を表す文字列値。長期間有効なプロセス操作の名前はinvokeです。
    • サービス操作に必要なパラメーター値を含む java.util.HashMap オブジェクト。
    • falseを指定するBoolean値。非同期リクエストを作成します(この値は長期間有効なプロセスを呼び出す場合に適用されます)。
    メモ

    短時間のみ有効なプロセスは、 createInvocationRequestメソッドの4番目のパラメーターに値trueを渡すことで呼び出すことができます。値trueを渡すと、同期リクエストが作成されます。

  8. ServiceClientオブジェクトのinvokeメソッドを呼び出し、InvocationRequestオブジェクトを渡すことで、呼び出し要求をAEM Formsに送信します。 invokeメソッドは、InvocationReponseオブジェクトを返します。

  9. 長期間有効なプロセスは、呼び出し識別値を表すstring値を返します。 InvocationReponseオブジェクトのgetInvocationIdメソッドを呼び出して、この値を取得します。

     //Send the invocation request to the long-lived process and
     //get back an invocation response object
     InvocationResponse lcResponse = myServiceClient.invoke(lcRequest);
     String invocationId = lcResponse.getInvocationId();
    
  10. 呼び出し識別値をクライアントWebブラウザーに書き込みます。 java.io.PrintWriterインスタンスを使用して、この値をクライアントWebブラウザーに書き込むことができます。

クイックスタート:呼び出しAPIを使用した長期間有効なプロセスの呼び出し

次のJavaコードの例は、FirstAppSolution/PreLoanProcessプロセスを呼び出すJavaサーブレットを表しています。

 /*
     * This Java Quick Start uses the following JAR files
     * 1. adobe-livecycle-client.jar
     * 2. adobe-usermanager-client.jar
     *
     * (Because this  quick start is implemented as a Java servlet, it is
     * not necessary to include J2EE specific JAR files - the Java project
     * that contains this quick start is exported as a WAR file which
     * is deployed to the J2EE application server)
     *
     * These JAR files are located in the following path:
     * <install directory>/sdk/client-libs/common
     *
     * For complete details about the location of these JAR files,
     * see "Including AEM Forms library files" in Programming with AEM forms
     * */
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;
 import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
 import com.adobe.idp.dsc.InvocationRequest;
 import com.adobe.idp.dsc.InvocationResponse;
 import com.adobe.idp.dsc.clientsdk.ServiceClient;
 import org.w3c.dom.Element;
 
     public class SubmitXML extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
       static final long serialVersionUID = 1L;
 
        public SubmitXML() {
         super();
     }
 
 
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         doPost(request,response);
     }
 
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
         try{
             //Set connection properties required to invoke AEM Forms
             Properties connectionProps = new Properties();
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "jnp://localhost:1099");
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_EJB_PROTOCOL);
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator");
             connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password");
 
             //Create a ServiceClientFactory object
             ServiceClientFactory myFactory = ServiceClientFactory.createInstance(connectionProps);
 
             //Create a ServiceClient object
             ServiceClient myServiceClient = myFactory.getServiceClient();
 
             //Get the values that are passed from the Loan HTML page
             String name = (String)request.getParameter("name");
             String phone = (String)request.getParameter("phone");
             String amount = (String)request.getParameter("amount");
 
             //Create XML to pass to the FirstAppSolution/PreLoanProcess process
             org.w3c.dom.Document inXML = GetDataSource(name,phone,amount);
 
             //Create a Map object to store the XML input parameter value
             Map params = new HashMap();
             params.put("formData", inXML);
 
             //Create an InvocationRequest object
             InvocationRequest lcRequest =  myFactory.createInvocationRequest(
                 "FirstAppSolution/PreLoanProcess", //Specify the long-lived process name
                     "invoke",           //Specify the operation name
                     params,               //Specify input values
                     false);               //Create an asynchronous request
 
             //Send the invocation request to the long-lived process and
             //get back an invocation response object
             InvocationResponse lcResponse = myServiceClient.invoke(lcRequest);
             String invocationId = lcResponse.getInvocationId();
 
             //Create a PrintWriter instance
             PrintWriter pp = response.getWriter();
 
             //Write the invocation identifier value back to the client web browser
             pp.println("The job status identifier value is: " +invocationId);
 
         }catch (Exception e) {
              System.out.println("The following exception occurred: "+e.getMessage());
       }
     }
 
 
      //Create XML data to pass to the long-lived process
      private static org.w3c.dom.Document GetDataSource(String name, String phone, String amount)
      {
             org.w3c.dom.Document document = null;
 
             try
             {
                 //Create DocumentBuilderFactory and DocumentBuilder objects
                 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                 DocumentBuilder builder = factory.newDocumentBuilder();
 
                 //Create a new Document object
                 document = builder.newDocument();
 
                 //Create MortgageApp - the root element in the XML
                 Element root = (Element)document.createElement("LoanApp");
                 document.appendChild(root);
 
                 //Create an XML element for Name
                 Element nameElement = (Element)document.createElement("Name");
                 nameElement.appendChild(document.createTextNode(name));
                 root.appendChild(nameElement);
 
                 //Create an XML element for Phone
                 Element phoneElement = (Element)document.createElement("PhoneOrEmail");
                 phoneElement.appendChild(document.createTextNode(phone));
                 root.appendChild(phoneElement);
 
                 //Create an XML element for amount
                 Element loanElement = (Element)document.createElement("LoanAmount");
                 loanElement.appendChild(document.createTextNode(amount));
                 root.appendChild(loanElement);
 
                 //Create an XML element for ApprovalStatus
                 Element approveElement = (Element)document.createElement("ApprovalStatus");
                 approveElement.appendChild(document.createTextNode("PENDING APPROVAL"));
                 root.appendChild(approveElement);
 
               }
          catch (Exception e) {
                   System.out.println("The following exception occurred: "+e.getMessage());
                }
         return document;
          }
         }

WebアプリケーションのWebページを作成します。

index.html Webページは、FirstAppSolution/PreLoanProcessプロセスを呼び出すJavaサーブレットへのエントリポイントを提供します。 このWebページは、HTMLフォームと送信ボタンを含む基本的なHTMLフォームです。 ユーザーが「送信」ボタンをクリックすると、フォームデータがSubmitXML Javaサーブレットに送信されます。

Javaサーブレットは、次のJavaコードを使用して、HTMLページから投稿されるデータをキャプチャします。

 //Get the values that are passed from the Loan HTML page
 String name = request.getParameter("name");
 String phone = request.getParameter("phone");
 String amount = request.getParameter("amount");

次のHTMLコードは、開発環境のセットアップ中に作成されたindex.htmlファイルを表しています。 (Webプロジェクトの作成を参照)。

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <title>Insert title here</title>
 </head>
 <body>
 <table>
     <TBODY>
         <TR>
             <td><img src="financeCorpLogo.jpg" width="172" height="62"></TD>
             <td><FONT size="+2"><strong>Java Loan Application Page</strong></FONT></TD>
             <td> </TD>
             <td> </TD>
         </TR>
 
     </TBODY>
 </TABLE>
     <FORM action="https://hiro-xp:8080/PreLoanProcess/SubmitXML" method="post">
        <table>
          <TBODY>
                <TR>
                      <td><LABEL for="name">Name: </LABEL></TD>
                  <td><INPUT type="text" name="name"></TD>
                  <td><input type="submit" value="Submit Application"></TD>
                  </TR>
            <TR>
                  <td> <LABEL for="phone">Phone/Email: </LABEL></TD>
              <td><INPUT type="text" name="phone"></TD>
                  <td></TD>
              </TR>
 
            <TR>
                  <td><LABEL for="amount">Amount: </LABEL></TD>
              <td><INPUT type="text" name="amount"></TD>
                 <td></TD>
             </TR>
          </TBODY>
 </TABLE>
       </FORM>
 </body>
 </html>

WebアプリケーションをWARファイルにパッケージ化します。

FirstAppSolution/PreLoanProcessプロセスを呼び出すJavaサーブレットをデプロイするには、WebアプリケーションをWARファイルにパッケージ化します。 コンポーネントのビジネスロジックが依存する外部JARファイル( adobe-livecycle-client.jarやadobe-usermanager-client.jarなど)もWARファイルに含めるようにします。

次の図は、WARファイルにパッケージ化されたEclipseプロジェクトのコンテンツを示しています。

メモ

前の図では、JPGファイルを任意のJPG画像ファイルに置き換えることができます。

WebアプリケーションをWARファイルにパッケージ化します。

  1. プロジェクトエクスプローラー​ウィンドウで、InvokePreLoanProcessプロジェクトを右クリックし、エクスポート/WARファイル​を選択します。
  2. Web module」テキストボックスに、Javaプロジェクトの名前としてInvokePreLoanProcessと入力します。
  3. 宛先」テキストボックスに、ファイル名にPreLoanProcess.war​と入力し、WARファイルの場所を指定して、「完了」をクリックします。

AEM FormsをホストするJ2EEアプリケーションサーバーにWARファイルをデプロイします。

AEM FormsをデプロイするJ2EEアプリケーションサーバーにWARファイルをデプロイします。 WARファイルをJ2EEアプリケーションサーバーにデプロイするには、書き出しパスのWARファイルを[AEM Forms Install]\Adobe\Adobe Experience Manager Forms\jboss\server\lc_turnkey\deployにコピーします。

メモ

AEM FormsがJBossにデプロイされていない場合は、AEM FormsをホストするJ2EEアプリケーションサーバーに準拠してWARファイルをデプロイする必要があります。

Webアプリケーションのテスト

Webアプリケーションをデプロイした後は、Webブラウザーを使用してテストできます。 AEM Formsをホストするコンピューターを使用している場合は、次のURLを指定できます。

  • http://localhost:8080/PreLoanProcess/index.html

    HTMLフォームフィールドに値を入力し、「アプリケーションを送信」ボタンをクリックします。 問題が発生した場合は、J2EEアプリケーションサーバーのログファイルを参照してください。

メモ

Javaアプリケーションがプロセスを呼び出したことを確認するには、Workspaceを起動し、ローンを受け入れます。

人間中心の長期間有効なプロセスを呼び出すASP.NET Webアプリケーションの作成

FirstAppSolution/PreLoanProcessプロセスを呼び出すASP.NETアプリケーションを作成できます。 ASP.NETアプリケーションからこのプロセスを呼び出すには、Webサービスを使用します。 (Webサービスを使用したAEM Formsの呼び出しを参照)。

次の図は、ASP.NETクライアントアプリケーションがエンドユーザーからデータを取得する様子を示しています。 データはXMLデータソースに配置され、ユーザーが「Submit Application」ボタンをクリックするとFirstAppSolution/PreLoanProcessプロセスに送信されます。

プロセスの呼び出し後に、呼び出し識別子の値が表示されます。 呼び出し識別子の値は、長期間有効なプロセスのステータスを追跡するレコードの一部として作成されます。

ASP.NETアプリケーションは、次のタスクを実行します。

  • ユーザーがWebページに入力した値を取得します。
  • ​* FirstAppSolution/PreLoanProcess *processに渡されるXMLデータソースを動的に作成します。 3つの値は、XMLデータソースで指定されます。
  • Webサービスを使用して、* FirstAppSolution/PreLoanProcess *processを呼び出します。
  • 呼び出し識別子の値と、長期間有効な操作の状態をクライアントWebブラウザーに返します。

手順の概要

FirstAppSolution/PreLoanProcessプロセスを呼び出すASP.NETアプリケーションを作成するには、次の手順を実行します。

  1. ASP.NET Webアプリケーションを作成します
  2. FirstAppSolution/PreLoanProcessを呼び出すASPページを作成します
  3. ASP.NETアプリケーションを実行します

ASP.NET Webアプリケーションの作成

Microsoft .NET C# ASP.NET Webアプリケーションを作成します。 次の図は、InvokePreLoanProcess​という名前のASP.NETプロジェクトの内容を示しています。

「サービス参照」の下に、2つの項目があります。 最初の項目はJobManagerという名前です。 この参照により、ASP.NETアプリケーションがJob Managerサービスを呼び出すことが可能になります。 このサービスは、長期間有効なプロセスのステータスに関する情報を返します。 例えば、プロセスが現在実行中の場合、このサービスは現在実行中のプロセスを指定する数値を返します。 2つ目の参照は、PreLoanProcess​という名前です。 このサービスリファレンスは、* FirstAppSolution/PreLoanProcess *processへの参照を表します。 サービス参照を作成すると、AEM Formsサービスに関連付けられたデータ型を.NETプロジェクト内で使用できるようになります。

ASP.NETプロジェクトを作成します。

  1. Microsoft Visual Studio 2008を起動します。
  2. ファイル​メニューから、新規Webサイト​を選択します。
  3. テンプレート」リストで、「ASP.NET Web Site」を選択します。
  4. 場所」ボックスで、プロジェクトの場所を選択します。 プロジェクトに​InvokePreLoanProcess​という名前を付けます。
  5. 言語」ボックスで、「ビジュアルC#」を選択します。
  6. 「OK」をクリックします。

サービス参照の追加:

  1. 「プロジェクト」メニューで、「サービス参照を追加」を選択します。

  2. Address​ダイアログボックスで、Job ManagerサービスのWSDLを指定します。

     https://hiro-xp:8080/soap/services/JobManager?WSDL&lc_version=9.0.1
    
  3. 「名前空間」フィールドに「JobManager」と入力します。

  4. ​移動」をクリックし、「OK」をクリックします。

  5. プロジェクト​メニューで、「サービス参照を追加」を選択します。

  6. アドレス​ダイアログボックスで、FirstAppSolution/PreLoanProcessプロセスのWSDLを指定します。

     https://hiro-xp:8080/soap/services/FirstAppSolution/PreLoanProcess?WSDL&lc_version=9.0.1
    
  7. 「名前空間」フィールドに「PreLoanProcess」と入力します。

  8. ​移動」をクリックし、「OK」をクリックします。

メモ

hiro-xpを、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスに置き換えます。 lc_versionオプションを使用すると、MTOMなどのAEM Forms機能が使用可能になります。 lc_versionオプションを指定しないと、MTOMを使用してAEM Formsを呼び出すことはできません。 (MTOMを使用したAEM Formsの呼び出しを参照)。

FirstAppSolution/PreLoanProcessを呼び出すASPページを作成します

ASP.NETプロジェクト内に、ローン申込者にHTMLページを表示するWebフォーム(ASPXファイル)を追加します。 Webフォームは、System.Web.UI.Pageから派生したクラスに基づいています。 FirstAppSolution/PreLoanProcessを呼び出すC#アプリケーションロジックは、Button1_Clickメソッドに配置されます(このボタンは「アプリケーションを送信」ボタンを表します)。

次の図は、ASP.NETアプリケーションを示しています

次の表に、このASP.NETアプリケーションの一部であるコントロールの一覧を示します。

コントロール名

説明

TextBoxName

顧客の姓名を指定します。

TextBoxPhone

顧客の電話または電子メールアドレスを指定します。

TextBoxAmount

ローン金額を指定します。

Button1

「アプリの送信」ボタンを表します。

LabelJobID

呼び出し識別子の値を指定するLabelコントロール。

LabelStatus

ジョブステータスの値を指定するLabelコントロール。 この値は、Job Managerサービスを呼び出して取得されます。

ASP.NETアプリケーションの一部であるアプリケーションロジックは、FirstAppSolution/PreLoanProcessプロセスに渡すXMLデータソースを動的に作成する必要があります。 申込者がHTMLページに入力した値は、XMLデータソース内で指定する必要があります。 これらのデータ値は、フォームがWorkspaceで表示されるときに、フォームにマージされます。 System.Xml名前空間にあるクラスを使用して、XMLデータソースが作成されます。

ASP.NETアプリケーションからXMLデータを必要とするプロセスを呼び出す場合、XMLデータ型を使用できます。 つまり、System.Xml.XmlDocumentインスタンスをプロセスに渡すことはできません。 プロセスに渡すXMLインスタンスの完全修飾名はInvokePreLoanProcess.PreLoanProcess.XMLです。 System.Xml.XmlDocumentインスタンスをInvokePreLoanProcess.PreLoanProcess.XMLに変換します。 このタスクは、次のコードを使用して実行できます。

 //Create the XML to pass to the FirstAppSolution/PreLoanProcess process
 XmlDocument myXML = CreateXML(userName, phone, amount);
 
 //Convert the XML to a InvokePreLoanProcess.PreLoanProcess.XML instance
 StringWriter sw = new StringWriter();
 XmlTextWriter xw = new XmlTextWriter(sw);
 myXML.WriteTo(xw);
 
 InvokePreLoanProcess.PreLoanProcess.XML inXML = new XML();
 inXML.document = sw.ToString();

FirstAppSolution/PreLoanProcessプロセスを呼び出すASPページを作成するには、Button1_Clickメソッドで次のタスクを実行します。

  1. デフォルトのコンストラクターを使用してFirstAppSolution_PreLoanProcessClientオブジェクトを作成します。

  2. System.ServiceModel.EndpointAddressコンストラクターを使用してFirstAppSolution_PreLoanProcessClient.Endpoint.Addressオブジェクトを作成します。 WSDLをAEM Formsサービスに渡すstring値とエンコードの種類を渡します。

     https://hiro-xp:8080/soap/services/FirstAppSolution/PreLoanProcess?blob=mtom
    

    lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます。 ただし、必ず?blob=mtomを指定してください。

    メモ

    hiro-xpを、AEM FormsをホストするJ2EEアプリケーションサーバーのIPアドレスに置き換えます。

  3. FirstAppSolution_PreLoanProcessClient.Endpoint.Bindingデータメンバーの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

  4. System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingデータメンバーをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

  5. 次のタスクを実行して、基本的なHTTP認証を有効にします。

    • AEM formsのユーザー名をデータメンバーFirstAppSolution_PreLoanProcessClient.ClientCredentials.UserName.UserNameに割り当てます。
    • 対応するパスワード値をデータメンバーFirstAppSolution_PreLoanProcessClient.ClientCredentials.UserName.Passwordに割り当てます。
    • 定数値HttpClientCredentialType.BasicをデータメンバーBasicHttpBindingSecurity.Transport.ClientCredentialTypeに割り当てます。
    • 定数値BasicHttpSecurityMode.TransportCredentialOnlyをデータメンバーBasicHttpBindingSecurity.Security.Modeに割り当てます。

    次のコードの例は、これらのタスクを示しています。

     //Enable BASIC HTTP authentication
     BasicHttpBinding b = (BasicHttpBinding)mortgageClient.Endpoint.Binding;
     b.MessageEncoding = WSMessageEncoding.Mtom;
     mortgageClient.ClientCredentials.UserName.UserName = "administrator";
     mortgageClient.ClientCredentials.UserName.Password = "password";
     b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
     b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
     b.MaxReceivedMessageSize = 2000000;
     b.MaxBufferSize = 2000000;
     b.ReaderQuotas.MaxArrayLength = 2000000;
    
  6. ユーザーがWebページに入力した名前、電話、金額の値を取得します。 これらの値を使用して、FirstAppSolution/PreLoanProcessプロセスに送信されるXMLデータソースを動的に作成します。 プロセスに渡すXMLデータソースを表すSystem.Xml.XmlDocumentを作成します(このアプリケーションロジックは次のコード例に示します)。

  7. System.Xml.XmlDocumentインスタンスをInvokePreLoanProcess.PreLoanProcess.XMLに変換します(このアプリケーションロジックは次のコード例に示します)。

  8. FirstAppSolution_PreLoanProcessClientオブジェクトのinvoke_Asyncメソッドを呼び出して、FirstAppSolution/PreLoanProcessプロセスを呼び出します。 このメソッドは、長期間有効なプロセスの呼び出し識別子の値を表すstring値を返します。

  9. isコンストラクターを使用してJobManagerClientを作成します。 (Job Managerサービスへのサービス参照が設定されていることを確認してください)。

  10. 手順1 ~ 5を繰り返します。 手順2で次のURLを指定します。https://hiro-xp:8080/soap/services/JobManager?blob=mtom.

  11. コンストラクタを使用して JobId オブジェクトを作成します。

  12. JobIdオブジェクトのidデータメンバーに、FirstAppSolution_PreLoanProcessClientオブジェクトのinvoke_Asyncメソッドの戻り値を設定します。

  13. value trueをJobIdオブジェクトのpersistentデータメンバーに割り当てます。

  14. JobManagerServiceオブジェクトのgetStatusメソッドを呼び出し、JobIdオブジェクトを渡して、JobStatusオブジェクトを作成します。

  15. JobStatusオブジェクトのstatusCodeデータメンバの値を取得して、ステータス値を取得します。

  16. LabelJobID.Textフィールドに呼び出し識別子の値を割り当てます。

  17. LabelStatus.Textフィールドにステータス値を割り当てます。

クイックスタート:WebサービスAPIを使用した長期間有効なプロセスの呼び出し

次のC#コードの例は、FirstAppSolution/PreLoanProcessプロセスを呼び出します。

 ???/**
     * Ensure that you create a .NET project that uses
     * MS Visual Studio 2008 and version 3.5 of the .NET
     * framework. This is required to invoke a
     * AEM Forms service using MTOM.
 
 
 using System;
 using System.Collections;
 using System.Configuration;
 using System.Data;
 using System.Linq;
 using System.Web;
 using System.ServiceModel;
 using System.Web.Security;
 using System.Web.UI;
 using System.Web.UI.HtmlControls;
 using System.Web.UI.WebControls;
 using System.Web.UI.WebControls.WebParts;
 using System.Xml.Linq;
 using System.Xml;
 using System.IO;
 
 //A reference to FirstAppSolution/PreLoanProcess
 using InvokePreLoanProcess.PreLoanProcess;
 
 //A reference to JobManager service
 using InvokePreLoanProcess.JobManager;
 
 
 namespace InvokePreLoanProcess
 {
        public partial class _Default : System.Web.UI.Page
        {
            //This method is called when the Submit Application button is
            //Clicked
            protected void Button1_Click(object sender, EventArgs e)
            {
                //Create a FirstAppSolution_PreLoanProcessClient object
                FirstAppSolution_PreLoanProcessClient mortgageClient = new FirstAppSolution_PreLoanProcessClient();
                mortgageClient.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://hiro-xp:8080/soap/services/FirstAppSolution/PreLoanProcess?blob=mtom");
 
                //Enable BASIC HTTP authentication
                BasicHttpBinding b = (BasicHttpBinding)mortgageClient.Endpoint.Binding;
                b.MessageEncoding = WSMessageEncoding.Mtom;
                mortgageClient.ClientCredentials.UserName.UserName = "administrator";
                mortgageClient.ClientCredentials.UserName.Password = "password";
                b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
                b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
                b.MaxReceivedMessageSize = 2000000;
                b.MaxBufferSize = 2000000;
                b.ReaderQuotas.MaxArrayLength = 2000000;
 
                //Retrieve values that user entered into the web page
                String userName = TextBoxName.Text;
                String phone = TextBoxPhone.Text;
                String amount = TextBoxAmount.Text;
 
                //Create the XML to pass to the FirstAppSolution/PreLoanProcess process
                XmlDocument myXML = CreateXML(userName, phone, amount);
 
                StringWriter sw = new StringWriter();
                XmlTextWriter xw = new XmlTextWriter(sw);
                myXML.WriteTo(xw);
 
                InvokePreLoanProcess.PreLoanProcess.XML inXML = new XML();
                inXML.document = sw.ToString();
 
                //INvoke the FirstAppSolution/PreLoanProcess process
                String invocationID =  mortgageClient.invoke_Async(inXML);
 
                //Create a JobManagerClient object to obtain the status of the long-lived operation
                JobManagerClient jobManager = new JobManagerClient();
                jobManager.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://hiro-xp:8080/soap/services/JobManager?blob=mtom");
 
                //Enable BASIC HTTP authentication
                BasicHttpBinding b1 = (BasicHttpBinding)jobManager.Endpoint.Binding;
                b1.MessageEncoding = WSMessageEncoding.Mtom;
                jobManager.ClientCredentials.UserName.UserName = "administrator";
                jobManager.ClientCredentials.UserName.Password = "password";
                b1.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
                b1.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
                b1.MaxReceivedMessageSize = 2000000;
                b1.MaxBufferSize = 2000000;
                b1.ReaderQuotas.MaxArrayLength = 2000000;
 
 
                //Create a JobID object that represents the status of the
                //long-lived operation
                JobId jobId = new JobId();
                jobId.id = invocationID;
                jobId.persistent = true;
                JobStatus jobStatus = jobManager.getStatus(jobId);
                System.Int16 val2 = jobStatus.statusCode;
                LabelJobID.Text = "The job status identifier value is " + invocationID;
                LabelStatus.Text = "The status of the long-lived operation is " + getJobDescription(val2);
 
            }
 
            private static XmlDocument CreateXML(String name, String phone, String amount)
            {
                //This method dynamically creates a DDX document
                //to pass to the FirstAppSolution/PreLoanProcess process
                XmlDocument xmlDoc = new XmlDocument();
 
                //Create the root element and append it to the XML DOM
                System.Xml.XmlElement root = xmlDoc.CreateElement("LoanApp");
                xmlDoc.AppendChild(root);
 
                //Create the Name element
                XmlElement nameElement = xmlDoc.CreateElement("Name");
                nameElement.AppendChild(xmlDoc.CreateTextNode(name));
                root.AppendChild(nameElement);
 
                //Create the LoanAmount element
                XmlElement LoanAmount = xmlDoc.CreateElement("LoanAmount");
                LoanAmount.AppendChild(xmlDoc.CreateTextNode(amount));
                root.AppendChild(LoanAmount);
 
                //Create the PhoneOrEmail element
                XmlElement PhoneOrEmail = xmlDoc.CreateElement("PhoneOrEmail");
                PhoneOrEmail.AppendChild(xmlDoc.CreateTextNode(phone));
                root.AppendChild(PhoneOrEmail);
 
                //Create the ApprovalStatus element
                XmlElement ApprovalStatus = xmlDoc.CreateElement("ApprovalStatus");
                ApprovalStatus.AppendChild(xmlDoc.CreateTextNode("PENDING APPROVAL"));
                root.AppendChild(ApprovalStatus);
 
                //Return the XmlElement instance
                return xmlDoc;
            }
 
 
            //Returns the String value of the Job Manager status code
            private String getJobDescription(int val)
            {
                switch(val)
                {
                    case 0:
                        return "JOB_STATUS_UNKNOWN";
 
                    case 1:
                        return "JOB_STATUS_QUEUED";
 
                    case 2:
                        return "JOB_STATUS_RUNNING";
 
                    case 3:
                        return "JOB_STATUS_COMPLETED";
 
                    case 4:
                        return "JOB_STATUS_FAILED";
 
                     case 5:
                        return "JOB_STATUS_COMPLETED";
 
                    case 6:
                        return "JOB_STATUS_SUSPENDED";
 
                    case 7:
                        return "JOB_STATUS_COMPLETE_REQUESTED";
 
                    case 8:
                        return "JOB_STATUS_TERMINATE_REQUESTED";
 
                     case 9:
                        return "JOB_STATUS_SUSPEND_REQUESTED";
 
                       case 10:
                        return "JOB_STATUS_RESUME_REQUESTED";
                }
 
                return "";
            }
       }
 }
 
メモ

getJobDescriptionユーザー定義メソッド内の値は、Job Managerサービスによって返される値に対応します。

ASP.NETアプリケーションを実行します。

ASP.NETアプリケーションをコンパイルして展開した後、Webブラウザを使用して実行できます。 ASP.NETプロジェクトの名前が​InvokePreLoanProcess​の場合、Webブラウザー内で次のURLを指定します。

*http://localhost:1629/InvokePreLoanProcess/*Default.aspx

localhostはASP.NETプロジェクトをホストするWebサーバーの名前で、1629はポート番号です。 ASP.NETアプリケーションをコンパイルしてビルドすると、Microsoft Visual Studioによって自動的にデプロイされます。

メモ

ASP.NETアプリケーションがプロセスを呼び出したことを確認するには、Workspaceを起動し、ローンを受け入れます。

人間中心の長期間有効なプロセスを呼び出すFlexで構築されたクライアントアプリケーションの作成

Flexで構築したクライアントアプリケーションを作成して、FirstAppSolution/PreLoanProcess​プロセスを呼び出すことができます。 このアプリケーションは、リモート処理を使用して​FirstAppSolution/PreLoanProcess​プロセスを呼び出します。 (「(AEM formsでは非推奨)AEM Forms Remotingを使用したAEM Formsの呼び出し」を参照)。

次の図に、Flexでエンドユーザーからデータを収集して構築されたクライアントアプリケーションを示します。 データはXMLデータソースに配置され、プロセスに送信されます。

プロセスの呼び出し後に、呼び出し識別子の値が表示されます。 呼び出し識別子の値は、長期間有効なプロセスのステータスを追跡するレコードの一部として作成されます。

Flexで構築されたクライアントアプリケーションは、次のタスクを実行します。

  • ユーザーがWebページに入力した値を取得します。
  • FirstAppSolution/PreLoanProcess​プロセスに渡されるXMLデータソースを動的に作成します。 3つの値は、XMLデータソースで指定されます。
  • Remotingを使用して、FirstAppSolution/PreLoanProcess​プロセスを呼び出します。
  • 長期間有効なプロセスの呼び出し識別子の値を返します。

手順の概要

FirstAppSolution/PreLoanProcessプロセスを呼び出すことができるFlexで構築されたクライアントアプリケーションを作成するには、次の手順を実行します。

  1. 新しいFlexプロジェクトを開始します。

  2. プロジェクトのクラスパスにadobe-remoting-provider.swcファイルを含めます。 (AEM Forms Flexライブラリファイルを含めるを参照)。

  3. mx:RemoteObjectインスタンスをActionScriptまたはMXMLを使用して作成します。 (mx:RemoteObjectインスタンスの作成を参照)。

  4. AEM Formsと通信するChannelSetインスタンスを設定し、mx:RemoteObjectインスタンスに関連付けます。 (AEM Formsへのチャネルの作成を参照)。

  5. ChannelSetのloginメソッドまたはサービスのsetCredentialsメソッドを呼び出して、ユーザー識別子の値とパスワードを指定します。 (シングルサインオンの使用を参照)。

  6. XMLインスタンスを作成し、FirstAppSolution/PreLoanProcessプロセスに渡すXMLデータソースを作成します。 (このアプリケーションロジックは次のコード例に示します)。

  7. コンストラクタを使用して、Object型のオブジェクトを作成します。 次のコードに示すように、プロセスの入力パラメーターの名前を指定して、XMLをオブジェクトに割り当てます。

     //Get the XML data to pass to the AEM Forms process
     var xml:XML = createXML();
     var params:Object = new Object();
     params["formData"]=xml;
    
  8. mx:RemoteObjectインスタンスのinvoke_Asyncメソッドを呼び出して、FirstAppSolution/PreLoanProcessプロセスを呼び出します。 入力パラメーターを含むObjectを渡します。 (入力値を渡すを参照)。

  9. 次のコードに示すように、長期間有効なプロセスから返される呼び出し識別値を取得します。

     // Handles async call that invokes the long-lived process
     private function resultHandler(event:ResultEvent):void
     {
     ji = event.result as JobId;
     jobStatusDisplay.text = "Job Status ID: " + ji.jobId as String;
     }
    

リモート処理を使用した長期間有効なプロセスの呼び出し

次のFlexコードの例は、FirstAppSolution/PreLoanProcessプロセスを呼び出します。

 <?xml version="1.0" encoding="utf-8"?>
 
 <mx:Application  xmlns="*" backgroundColor="#FFFFFF"
      creationComplete="initializeChannelSet();">
 
 <mx:Script>
          <![CDATA[
 
             import mx.controls.Alert;
             import mx.rpc.events.FaultEvent;
             import mx.rpc.events.ResultEvent;
             import flash.net.navigateToURL;
             import mx.messaging.ChannelSet;
             import mx.messaging.channels.AMFChannel;
             import mx.collections.ArrayCollection;
             import mx.rpc.livecycle.JobId;
             import mx.rpc.livecycle.JobStatus;
             import mx.rpc.livecycle.DocumentReference;
             import mx.formatters.NumberFormatter;
 
             // Holds the job ID returned by LC.JobManager
             private var ji:JobId;
 
             private function initializeChannelSet():void
              {
              var cs:ChannelSet= new ChannelSet();
         cs.addChannel(new AMFChannel("remoting-amf", "https://hiro-xp:8080/remoting/messagebroker/amf"));
         LC_MortgageApp.setCredentials("tblue", "password");
         LC_MortgageApp.channelSet = cs;
              }
 
            private function submitApplication():void
             {
             //Get the XML data to pass to the AEM Forms process
             var xml:XML = createXML();
             var params:Object = new Object();
             params["formData"]=xml;
             LC_MortgageApp.invoke_Async(params);
             }
 
             // Handles async call that invokes the long-lived process
             private function resultHandler(event:ResultEvent):void
             {
                ji = event.result as JobId;
                jobStatusDisplay.text = "Job Status ID: " + ji.jobId as String;
             }
 
             private function createXML():XML
             {
                //Calculate the Mortgage value to place in the XML data
                var propertyPrice:String = txtAmount.text ;
                var name:String = txtName.text ;
                var phone:String = txtPhone.text ;;
 
                var model:XML =
 
                  <LoanApp>
                           <Name>{name}</Name>
                           <LoanAmount>{propertyPrice}</LoanAmount>
                           <PhoneOrEmail>{phone}</PhoneOrEmail>
                           <ApprovalStatus>PENDING APPROVAL</ApprovalStatus>
                  </LoanApp>
 
              return model;
             }
 
 
          ]]>
       </mx:Script>
 
       <!-- Declare the RemoteObject and set its destination to the mortgage-app remoting endpoint defined in AEM Forms. -->
       <mx:RemoteObject id="LC_MortgageApp" destination="FirstAppSolution/PreLoanProcess" result="resultHandler(event);">
          <mx:method name="invoke_Async" result="resultHandler(event)"/>
      </mx:RemoteObject>
 
 
     <mx:Grid x="229" y="186">
         <mx:GridRow width="100%" height="100%">
             <mx:GridItem width="100%" height="100%">
                 <mx:Image>
                     <mx:source>file:///D|/LiveCycle_9/FirstApp/financeCorpLogo.jpg</mx:source>
                 </mx:Image>
             </mx:GridItem>
             <mx:GridItem width="100%" height="100%">
                 <mx:Label text="Flex Loan Application Page" fontSize="20"/>
             </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="Name:" fontSize="12" fontWeight="bold"/>
             </mx:GridItem>
             <mx:GridItem width="100%" height="100%">
                 <mx:TextInput id="txtName"/>
             </mx:GridItem>
             <mx:GridItem width="100%" height="100%">
                 <mx:Button label="Submit Application" click="submitApplication()"/>
             </mx:GridItem>
         </mx:GridRow>
         <mx:GridRow width="100%" height="100%">
             <mx:GridItem width="100%" height="100%">
                 <mx:Label text="Phone/Email:" fontSize="12" fontWeight="bold"/>
             </mx:GridItem>
             <mx:GridItem width="100%" height="100%">
                 <mx:TextInput 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="Amount:" fontSize="12" fontWeight="bold"/>
             </mx:GridItem>
             <mx:GridItem width="100%" height="100%">
                 <mx:TextInput id="txtAmount"/>
             </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:GridItem>
             <mx:GridItem width="100%" height="100%">
                 <mx:Label text="Label" id="jobStatusDisplay" enabled="true" fontSize="12" fontWeight="bold"/>
             </mx:GridItem>
             <mx:GridItem width="100%" height="100%">
             </mx:GridItem>
         </mx:GridRow>
     </mx:Grid>
 
 </mx:Application>
 

このページ