|
Extension du gestionnaire d’action : Dans Flash Builder, ouvrez le projet CreateCorrespondence dans la vue Explorateur de package.
Accédez à CreateCorrespondence > src > com.adobe.solutions.cmg.Create Correspondence > presentation
Créez la classe ActionScript (SaveAsDraftActionHandler), qui permet d’étendre la classe com.adobe.acm.solutions.ccr.domain.extensions.CCRDefaultActionHandler. Pour que la nouvelle action soit prise en charge, les deux éléments suivants sont nécessaires :
La logique d’activation et de désactivation de la nouvelle action en remplaçant la fonction actionEnabled(extraParams:Object=null):Boolean.
Le traitement de l’action lorsque l’utilisateur clique sur le bouton au moment du remplacement de l’implémentation pour la fonction handleAction(extraParams:Object=null):void.
L’exemple suivant est un modèle d’implémentation de com.adobe.solutions.cmg.ccr.presentation.SaveAsDraftActionHandler qui étend CCRDefaultActionHandler : 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");
}
);
}
}
}
Déclarez une variable privée de type SaveAsDraftActionHandler dans le fichier CreateCorrespondence > src > com.adobe.solutions.cmg.Create Correspondence > presentation > CCRApplication.as. Cette variable permet de s’assurer que la nouvelle classe est compilée dans Flash Builder.
private var saveActionHandler:SaveAsDraftActionHandler;
Modifiez le fichier acmExtensionsConfig.xml afin d’ajouter le bouton d’action personnalisé. La balise modelExtension du fichier CorrespondenceManagementSolutionTemplate\package-resources\etc\aep\config\assetcomposer\apps\cm\acmExtensions\acmExtensionsConfig.xml peut comporter un ensemble de balises enfant customAction associées. Chaque élément customAction représente une action qui s’affiche dans la barre d’outils de l’interface utilisateur de création de correspondance en fonction des autorisations qui y sont associées. Chacun d’entre eux peut disposer d’attributs permettant la configuration de l’action. Ces attributs sont listés ci-dessous :
Nom
|
Description
|
name
|
Nom alphanumérique de l’action qui doit commencer par un caractère. Le nom est un paramètre obligatoire qui doit être unique dans la balise modelExtensions.
|
label
|
Nom qui s’affiche sur le bouton d’action. Cette propriété peut être localisée.
|
tooltip
|
Info-bulle de l’action. Cette propriété peut être localisée.
|
styleName
|
Nom du style personnalisé qui est appliqué au bouton d’action faisant partie du package de l’application du modèle de solution.
|
permissionName
|
L’action correspondante s’affiche uniquement si l’utilisateur dispose de l’autorisation spécifiée par permissionName.
|
actionHandler
|
Nom complet de la classe ActionHandler appelée lorsque l’utilisateur clique sur l’action. Cette classe doit implémenter l’interface IActionHandler. Le constructeur de la classe doit être sans argument.
|
Ajoutez les paramètres de configuration spéciaux additionnels dans la configuration d’extension : serviceName : si une action personnalisée comprend une balise enfant avec le nom serviceName. Cliquer sur cette action appelle un processus et le nom est représenté par la balise serviceName. Ce processus dispose de la même signature que le post-processus de lettre (Letter PostProcess).
Paramètres contenant le préfixe cm_ dans le nom de la balise : si une action personnalisée (customAction) contient des balises enfant avec le préfixe cm_, au moment du post-traitement, ces paramètres sont disponibles dans les données XML d’entrée sous la balise <icc:meta> sans le préfixe cm_.
actionName : lorsqu’un post-processus est appelé à la suite d’un clic sur une action, les données XML soumises (contenant une balise spéciale nommée <actionName> sous la balise <icc:meta>) contient le nom de l’action effectuée par l’utilisateur.
Dans cet exemple, pour ajouter le bouton SaveAsDraft, modifiez CorrespondenceManagementSolutionTemplate\package-resources\etc\aep\config\assetcomposer\apps\cm\acmExtensions\acmExtensionsConfig.xml et ajoutez l’élément customAction correspondant au bouton SaveAsDraft. Le nom du processus LiveCycle appelé peut être mentionné dans la balise <servicename>. Par exemple, dans ce cas, cliquer sur le bouton SaveAsDraft appelle le processus LiveCycle avec le nom SaveLetterDraft/SaveLetterDraftProcess. L’emplacement où la correspondance est enregistrée peut être mentionné dans la balise <cm_path>. L’extrait de code ci-dessous est un exemple du nouvel élément d’action : <?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>
Régénérez et redéployez le modèle de solution pour afficher les changements. Pour plus d’informations sur la régénération et le redéploiement, voir Génération et déploiement du modèle de solution.
La partie inférieure de la barre d’outils de l’interface utilisateur de création de correspondance comprend désormais le nouveau bouton SaveAsDraft. Cliquer sur ce bouton permet d’enregistrer la correspondance au format XML. Le nom du fichier enregistré est composé du nom de la lettre suivi de l’extension XML. Il est possible d’améliorer cette action pour qu’une fenêtre contextuelle saisisse le nom du fichier enregistré en ajoutant cette fonctionnalité dans la fonction handleAction de SaveAsDraftActionHandler.as.
Pour charger la correspondance enregistrée, saisissez l’URL suivante de l’instance publiée dans le navigateur : http://<nom_hôte>:<port>/content/cm/createcorrespondence.html?cmDataUrl=file:///<chemin_fichier>/ClaimSubrogation.xml&cmUseLatest=1.
Le bouton SaveAsDraft est applicable uniquement aux instances publiées.
|
|
|