|
Um die Verarbeitung einer benutzerdefinierten Aktion zu implementieren, definieren Sie eine Klasse, die IActionHandler implementiert. Diese Klasse muss über einen Konstruktor ohne Argumente verfügen. package com.adobe.acm.solutions.authoring.domain.extensions
{
import com.adobe.icc.vo.CustomAction;
import flash.events.IEventDispatcher;
/**
* Interface for adding and handling custom actions in Extensible Toolbar.
* One instance of handler will be created for each action.
*/
public interface IActionHandler extends IEventDispatcher
{
/**
* Set action associated with this handler instance.
*/
function set action(value:CustomAction):void;
[Bindable(event="actionChange")]
/**
* Fetch action associated with this handler instance.
*/
function get action():CustomAction;
/**
* Set Flex Domain Model for on which the action is being taken
*/
function set model(value:*):void;
[Bindable(event="modelChange")]
/**
* Get Flex Domain Model for on which the action is being taken
*/
function get model():*;
/**
* Called when user user click an action
*/
function handleAction(extraParams:Object=null):void;
[Bindable(event="actionEnabledChange")]
/**
* Should the action be enabled in toolbar
*/
function actionEnabled(extraParams:Object=null):Boolean;
[Bindable(event="actionVisibleChange")]
/**
* Should the action be visible in toolbar
*/
function actionVisible(extraParams:Object=null):Boolean;
}
}
Die Anwendung „Korrespondenz erstellen“ wird mit einer Standardimplementierung von IActionHandler com.adobe.acm.solutions.ccr.domain.extensions.CCRDefaultActionHandler geliefert, die Teil der Datei „adobe-acm-ccr-domain-impl.swc“ ist. Diese Datei liegt im Ordner „[SDK]\riaservices\assetcomposer\10.0.0.0\flex“. Jeder Handler für benutzerdefinierte Aktionen erweitert diese Klasse. Um die Implementierung zu starten, öffnen Sie das Flex-Projekt der Create Correspondence Solution Template, das in Flash Builder installiert wurde. Erstellen Sie anschließend die erforderlichen Klassen in einem benutzerdefinierten Paket.
Erweitern Sie den CCRDefaultActionHandler, damit die neu hinzugefügte Aktion unterstützt wird. Hierfür sind drei Punkte erforderlich: Logik für die Einblendung oder Ausblendung der neu hinzugefügten Aktion, indem die Funktion „actionVisible(extraParams:Object=null):Boolean“ überschrieben wird
Logik für das Aktivieren oder Deaktivieren der neu hinzugefügten Aktion, indem die Funktion „actionEnabled(extraParams:Object=null):Boolean“ überschrieben wird
Die Verarbeitung der Aktion, wenn ein Benutzer auf die Schaltfläche klickt, indem die Implementierung für Funktion „handleAction(extraParams:Object=null):void“ überschrieben wird
Die folgende Beispielimplementierung von com.adobe.solutions.cmg.ccr.custom.CCRCustomActionHandler erweitert CCRDefaultActionHandler. package com.adobe.solutions.cmg.ccr.custom
{
import com.adobe.acm.solutions.ccr.domain.extensions.CCRDefaultActionHandler;
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.display.DisplayObject;
import flash.events.Event;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import mx.controls.Alert;
import mx.core.FlexGlobals;
import mx.managers.PopUpManager;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.utils.ObjectUtil;
public class CCRCustomActionHandler extends CCRDefaultActionHandler
{
protected static const SEND_FOR_REVIEW:String = "sendForReview";
public var encodedString:String = "";
public var mailTo:String = "";
public function CCRCustomActionHandler()
{
super();
}
override public function handleAction(extraParams:Object=null):void
{
if(action.name == SEND_FOR_REVIEW)
{
//open the Send For Review Pop-up on click of newly added action
var addDocPopUp:SendForReviewPopUp = SendForReviewPopUp(PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject ,SendForReviewPopUp, true));
//sendforreview listens the 'onClose' event dispatched when user clicks on Send button in the Pop-up.
addDocPopUp.addEventListener('onClose',sendforreview);
//referencing to update the 'encodedString' and 'mailTo' variables when user clicks on Send button in the Pop-up.
addDocPopUp.ccrCustomObject = this;
}
}
override public function actionEnabled(extraParams:Object=null):Boolean
{
//can be customized as per user requirement
return true;
}
override public function actionVisible(extraParams:Object=null):Boolean
{
//Show the added button only when Letter is opened in Non-Preview mode.
return (invokeParams && !invokeParams.preview);
}
protected function sendforreview(ev:Event):void
{
var service:ISubmitService = ServiceProvider.getSubmitService();
var params:Object = new Object();
if(action.actionConfig)
params = ObjectUtil.copy(action.actionConfig);
//Add additional custom params here which will be available under <icc:meta> tag.
if(encodedString.length>0)
{
//the encodedString contains base64 encoded string of the supporting document attached
params["cm_supportDoc"] = encodedString;
}
params["cm_mailTo"] = mailTo;
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 will be 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('Letter Sent for Review - Successful');
},
// fault handler
function(event:FaultEvent):void
{
Debug.error("failed to send " + letterVO + ":\n\t", event);
Alert.show('Letter Sent for Review - Failed');
}
);
}
}
}
|
|
|