実装の概要

アクションハンドラーの拡張:
  1. Flash Builder で、CreateCorrespondence プロジェクトをパッケージエクスプローラービューで開きます。

  2. CreateCorrespondence/src/com.adobe.solutions.cmg.Create Correspondence/presentation に移動します。

  3. SaveAsDraftActionHandler などの ActionScript クラスを作成します。このクラスは、com.adobe.acm.solutions.ccr.domain.extensions.CCRDefaultActionHandler クラスを拡張します。新しく追加されたアクションをサポートするには、次の 2 つが必要です。

    1. 新しく追加されたアクションを有効/無効にするロジック。actionEnabled(extraParams:Object=null):Boolean 関数をオーバーライドします。

    2. ユーザーがボタンをクリックするときのアクションの処理(handleAction(extraParams:Object=null):void 関数の実装をオーバーライドする場合)。

      次の例は、CCRDefaultActionHandler を拡張するcom.adobe.solutions.cmg.ccr.presentation.SaveAsDraftActionHandler のサンプル実装です。
      package com.adobe.solutions.cmg.ccr.presentation 
      { 
          import com.adobe.acm.solutions.ccr.domain.extensions.CCRDefaultActionHandler; 
          import com.adobe.icc.external.dc.ExternalApi; 
          import com.adobe.icc.external.dc.InvokeParams; 
          import com.adobe.icc.services.ServiceProvider; 
          import com.adobe.icc.services.submit.ISubmitService; 
          import com.adobe.icc.util.Debug; 
          import com.adobe.icc.util.UrlHelper; 
           
          import flash.net.URLRequest; 
          import flash.net.navigateToURL; 
           
              import mx.controls.Alert; 
          import mx.rpc.events.FaultEvent; 
          import mx.rpc.events.ResultEvent; 
          import mx.utils.ObjectUtil; 
           
          public class SaveAsDraftActionHandler extends CCRDefaultActionHandler 
          { 
              public static const SAVE_AS_DRAFT_ACTION:String = "SaveAsDraft"; 
               
              public function SaveAsDraftActionHandler() 
              { 
                  super(); 
                  var htmlUrl:String = ExternalApi.getInstance().htmlGetUrl(); 
                  Debug.info("invoke url: " + htmlUrl); 
                  invokeParams = new InvokeParams(htmlUrl); 
                   
              } 
               
              /** 
               * Called when the user clicks an action 
               * @param extraParams additional arguments that may be passed to handler (For future use) 
               * 
               */ 
              override public function handleAction(extraParams:Object=null):void 
              { 
                  if(action && action.name == SAVE_AS_DRAFT_ACTION) 
                  { 
                      //Additional logic to show popup to ask file save name goes here. 
                      var saveName:String = letterVO.name; 
                      submitLetter(saveName); 
                  } 
              } 
               
              [Bindable(event="actionEnabledChange")] 
              /** 
               * Should the action be enabled in toolbar 
               * @param extraParams 
               * @return flag indicating whether the action should be enabled 
               * 
               */ 
              override public function actionEnabled(extraParams:Object=null):Boolean 
              { 
                  //Always enable the Action. 
                  return true; 
              } 
               
              private function submitLetter(saveName: String):void 
              { 
                  var service:ISubmitService = ServiceProvider.getSubmitService(); 
                   
                  var params:Object = new Object(); 
                  if(action.actionConfig) 
                      params = ObjectUtil.copy(action.actionConfig); 
                  params["cm_actionName"] = action.name; 
                  //Add additional custom params here which is available under <icc:meta> tag. 
                  params["cm_saveName"] = saveName; 
                   
                  var reload:Boolean = false; 
                  if(!(invokeParams.letterId) && !(invokeParams.letterName)) 
                  { 
                      //If Letter is loaded without letterName or letterId then it must be reload 
                      reload = true; 
                  } 
                  //Invoke the default letter post process 
                  service.submitLetterWithParams(letterVO, letterData, 
                      false, invokeParams.useLatest, reload, null, params).addHandlers 
                      ( 
                          // result handler 
                          function(event:ResultEvent):void 
                          { 
                              var response:Object = event.result as Object; 
                              //Redirect to success page if mentioned 
                              if (response.redirect) 
                              { 
                                  // redirect via new window or else the user is prompted to close the DC window before proceeding 
                                  if (UrlHelper.isValid(response.redirect)) 
                                      navigateToURL((new URLRequest(response.redirect)), "_blank"); 
                                  else 
                                      Debug.error("server returned invalid redirect URL: " + response.redirect); 
                              } 
                                                      Alert.show("Save Successful"); 
                          }, 
                          // fault handler 
                          function(event:FaultEvent):void 
                          { 
                              Debug.error("failed to submit " + letterVO + ":\n\t", event); 
                                                      Alert.show("Save Failed"); 
       
                          } 
                      ); 
                   
              } 
          } 
      }
  4. CreateCorrespondence/src/com.adobe.solutions.cmg.Create Correspondence/presentation/CCRApplication.as ファイルで、タイプ SaveAsDraftActionHandle のプライベート変数を宣言します。この変数は、新しいクラスが FlashBuilder で確実にコンパイルされるようにします。

    private var saveActionHandler:SaveAsDraftActionHandler;
  5. acmExtensionsConfig.xml を変更して、カスタムアクションボタンを追加します。CorrespondenceManagementSolutionTemplate\package-resources\etc\aep\config\assetcomposer\apps\cm\acmExtensions\acmExtensionsConfig.xmlcan にある modelExtension タグには、関連付けられた customAction 子タグのセットがあります。各 customAction 要素が、関連付けられている権限に応じて通信を作成ユーザーインターフェイスツールバーに表示されるアクションを表します。それぞれに属性があり、そのアクションの設定を行うことができます。これらの属性を次に示します。

    名前

    説明

    name

    アクションの名前。英数字で設定され、文字で開始する必要があります。Name は必須パラメーターで、modelExtensions タグ内で一意である必要があります。

    label

    アクションボタンに表示するラベル。このプロパティはローカライズできます。

    tooltip

    アクションのツールヒント。このプロパティはローカライズできます。

    styleName

    カスタムスタイルの名前。Solution Template アプリケーションの一部としてパッケージ化されたアクションボタンに適用されます。

    permissionName

    permissionName で指定されている権限をユーザーが持つ場合にのみ、対応するアクションが表示されます。

    actionHandler

    ActionHandler クラスの完全修飾名。ユーザーがアクションをクリックすると呼び出されます。このクラスは IActionHandler インターフェイスを実装する必要があります。また、引数なしのコンストラクターが必要です。

  6. 拡張設定の特別な追加設定パラメーターを追加します。
    • serviceName:customAction に serviceName という名前の子タグが含まれる場合、そのアクションをクリックすると、serviceName タグで表される名前でプロセスが呼び出されます。このプロセスの署名は、Letter PostProcess の署名と同じです。

    • タグ名に cm_ プレフィックスが含まれるパラメーター:customAction に cm_ で始まる子タグが含まれる場合、これらのパラメーターは、後処理で入力 xml の <icc:meta> タグの下で使用できます。その際、cm_ プレフィックスは削除されます。

    • actionName:クリックアクションの結果として後処理が呼び出された場合、送信された xml には、<icc:meta> タグの下に <actionName> という特別なタグが含まれ、ユーザーによって実行されたアクションの名前が含まれます。

  7. この例では、SaveAsDraft ボタンを追加するには、CorrespondenceManagementSolutionTemplate¥package-resources¥etc¥aep¥config¥assetcomposer¥apps¥cm¥acmExtensions¥acmExtensionsConfig.xml を変更し、SaveAsDraft に対応する customAction 要素を追加します。呼び出された LiveCycle プロセスの名前は、<servicename> タグに記述できます。例えば、この場合は、SaveAsDraft ボタンをクリックすると、SaveLetterDraft/SaveLetterDraftProcess という名前の LiveCycle プロセスが呼び出されます。通信が保存されているパスは、<cm_path> タグに記述できます。次のコードスニペットは、新しいアクション要素の例です。
    <?xml version="1.0" encoding="utf-8"?> 
    <extensionsConfig> 
        <modelExtensions> 
            <modelExtension type="LetterInstance"> 
                <customAction name="Submit" label="loc.letterInstance.submit.label" tooltip="loc.letterInstance.submit.tooltip" styleName="submitButton" permissionName="CM Letter Template Submit"/> 
                <customAction name="Close" label="loc.letterInstance.close.label" tooltip="loc.letterInstance.close.tooltip" styleName="closeButton"/> 
                <customAction name="SaveAsDraft" label="SaveAsDraft" tooltip="SaveAsDraft"  styleName="closeButton" actionHandler="com.adobe.solutions.cmg.ccr.presentation.SaveAsDraftActionHandler"> 
                    <serviceName>SaveLetterDraft/SaveLetterDraftProcess</serviceName> 
                        <cm_path>d:\savedCorrespondence\</cm_path> 
                </customAction>    
            </modelExtension> 
        </modelExtensions> 
    </extensionsConfig>
  8. ソリューションテンプレートを再構築および再デプロイして変更を確認します。再構築および再デプロイについては、Solution Template の構築とデプロイを参照してください。

通信を作成ユーザーインターフェイスの下部にあるツールバーに、新しい SaveAsDraft ボタンが追加されました。このボタンをクリックすると、通信が XML 形式で保存されます。保存されたファイルの名前は、xml 拡張子を持つレター名です。保存ファイル名を取得するためのポップアップを表示するように拡張するには、SaveAsDraftActionHandler.as の handleAction 関数に機能を追加します。

保存された通信を再読み込みするには、発行されたインスタンスの URL http://<hostname>:<port>/content/cm/createcorrespondence.html?cmDataUrl=file:///<filepath>/ClaimSubrogation.xml&cmUseLatest=1 をブラウザーで入力します。

SaveAsDraft は、発行されたインスタンスだけに適用できます。