Utilisation des Actions dans PowerApps

Les actions sont une fonctionnalité introduite dans CRM 2013 pour étendre les capacités standard du système. Elles permettent aux utilisateurs métier d'implémenter la logique métier, que les développeurs peuvent ensuite utiliser dans des événements système tels que l'update ou le create. Les utilisateurs métier peuvent modifier la logique métier directement sans intervention du développeur. Les actions peuvent être appliquées à un entité spécifique ou de manière globale, et s'exécutent au stade 30 du pipeline, participant aux transactions de base de données. Elles supportent les paramètres d'entrée et de sortie, ainsi que l'appel d'autres plugins ou workflows avant ou après leur exécution. Elles peuvent être appelées depuis C# ou JavaScript, mais pas directement depuis un workflow, et ne supportent pas la définition de portée (organisation ou utilisateur).

Quand Utiliser les Actions

Les actions sont utiles lorsque vous devez exécuter une série d'étapes sous certaines conditions, par exemple, si un cas (case) est ouvert pendant un certain nombre de jours sans aucune autre action. Vous pouvez implémenter la logique métier basée sur le nombre de jours d'ouverture du cas, puis exécuter cette logique sur le enregistrement du cas. Par exemple, vous pouvez envoyer un e-mail au gestionnaire de service senior, changer la priorité, et affecter le cas à une file d'attente. Ces étapes peuvent toutes être regroupées dans une action. Dans les versions précédentes, on utilisait des workflows pour cela.

Création d'une Action

  1. Allez dans Paramètres -> Processus, cliquez sur le bouton Nouveau pour créer une action.
  2. Après avoir cliqué sur OK, une interface vous permettant de définir les paramètres d'entrée, de sortie, et d'autres options apparaîtra.
  3. Ajoutez les étapes nécessaires, comme l'envoi d'un e-mail, la mise à jour d'une entité, la création d'une file d'attente, etc.

Appel d'une Action

1. Appel depuis un Plugin

Voici un exemple de code pour appeler une action depuis un plugin:


public class ActionsSample : IPlugin
{
   public void Execute(IServiceProvider serviceProvider)
   {
       IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
       EntityReference caseRecord = context.InputParameters["Target"] as EntityReference;
       EntityReference escalatedBy = context.InputParameters["EscalatedBy"] as EntityReference;
       string priority = context.OutputParameters["Priority"].ToString();
   }
}
 

Vous pouvez également appeler une action dans des messages comme update ou create:


OrganizationRequest req = new OrganizationRequest("new_Escalate");
req["EscalatedBy"] = new EntityReference("systemuser", context.InitiatingUserId);
req["Target"] = new EntityReference(context.PrimaryEntityName, context.PrimaryEntityId);
OrganizationResponse response = service.Execute(req);
 

2. Appel depuis JavaScript

Ajoutez un bouton à l'interface utilisateur et utilisez la fonction suivante pour appeler l'action:


function Escalate() {
   var recordId = Xrm.Page.data.entity.getId();
   var userId = Xrm.Page.context.getUserId();
   EscalateRequest(userId, recordId);
}

function EscalateRequest(EscalatedById, CaseId) {
   var postUrl = Xrm.Page.context.getClientUrl() + "/XRMServices/2011/Organization.svc/web";
   var requestText = "<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>";
   requestText += "<s:Body>";
   requestText += "<Execute xmlns='http://schemas.microsoft.com/xrm/2011/Contracts/Services'>";
   requestText += "<request xmlns:a='http://schemas.microsoft.com/xrm/2011/Contracts'>";
   requestText += "<a:Parameters>";
   requestText += "<a:KeyValuePairOfstringanyType><c:key>EscalatedBy</c:key><c:value i:type='a:EntityReference'><a:Id>" + EscalatedById + "</a:Id><a:LogicalName>systemuser</a:LogicalName></c:value></a:KeyValuePairOfstringanyType>";
   requestText += "<a:KeyValuePairOfstringanyType><c:key>Target</c:key><c:value i:type='a:EntityReference'><a:Id>" + CaseId + "</a:Id><a:LogicalName>incident</a:LogicalName></c:value></a:KeyValuePairOfstringanyType>";
   requestText += "</a:Parameters>";
   requestText += "<a:RequestId i:nil='true'/>";
   requestText += "<a:RequestName>new_Escalate</a:RequestName>";
   requestText += "</request>";
   requestText += "</Execute>";
   requestText += "</s:Body>";
   requestText += "</s:Envelope>";

   var requestXML = new XMLHttpRequest();
   requestXML.open("POST", postUrl, true);
   requestXML.setRequestHeader("Accept", "application/xml, text/xml, */*");
   requestXML.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
   requestXML.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
   requestXML.send(requestText);

   requestXML.onreadystatechange = function() {
       if (requestXML.readyState == 4 && requestXML.status == 200) {
           var x = requestXML.responseXML.getElementsByTagName("a:KeyValuePairOfstringanyType");
           for (var i = 0; i < x.length; i++) {
               if (x[i].childNodes[0].textContent == "Priority") {
                   alert("The case has been assigned to " + x[i].childNodes[1].textContent + " priority.");
               }
           }
       }
   };
}
 

Étiquettes: PowerApps CRM 2013 Actions workflow plugins

Publié le 1 octobre à 06h03