Choix des méthodes d'action de données héritées à remplacer

Chaque action de données doit implémenter plusieurs méthodes afin de fonctionner correctement. Vous avez donc seulement besoin de remplacer celles mettant en oeuvre le comportement à modifier.

Méthodes génériques

Si vous étendez l'une des classes d'action de données concrètes, par exemple HTTPAPIDataAction, la plupart des méthodes requises sont déjà implémentées et vous avez seulement besoin de remplacer les méthodes mettant en oeuvre le comportement à modifier.

Cette section décrit les différentes méthodes et ce qui est attendu d'elles.

Tous les types d'action de données doivent implémenter les méthodes décrites ici.

create(sID, sName)

La méthode statique create() est appelée quand vous créez une action de données et sélectionnez son type dans le menu déroulant. Cette méthode est en charge des opérations suivantes :

  • Création de la classe de modèle Knockout utilisée par l'action de données.

    La classe de modèle Knockout doit comporter l'ID et le nom transmis à la méthode create(), ainsi que les valeurs par défaut sensibles de toutes les autres propriétés. Par exemple, pour une action de données de conversion de devise, vous souhaitez peut-être définir la devise par défaut à convertir en dollars. Le modèle Knockout est l'emplacement approprié pour fournir les valeurs par défaut.

  • Création d'une instance de l'action de données à partir du modèle Knockout.
  • Renvoi de l'instance de l'action de données.

invoke(oActionContext, oDataActionContext)

La méthode invoke() est appelée quand l'utilisateur appelle votre action de données à partir du menu contextuel d'un point de données d'une visualisation. La méthode transmet l'argument DataActionContext qui contient des métadonnées décrivant les points de données, la visualisation, les filtres, le classeur et la session sélectionnés. Reportez-vous à Classes de service d'action de données.

validate()

La méthode validate() est appelée pour chaque action de données quand l'utilisateur clique sur OK dans la boîte de dialogue Actions de données. La méthode validate() renvoie null pour indiquer que tout est valide ou DataActionError si un élément au moins n'est pas valide. Si l'une des actions de données de la boîte de dialogue comporte une erreur, cette dernière empêche la fermeture de la boîte de dialogue et un message d'erreur apparaît. Cette méthode valide le nom de l'action de données à l'aide de la méthode this.validateName().

getGadgetInfos(oReport)

La méthode getGadgetInfos() est appelée pour permettre à l'interface utilisateur d'afficher des champs de propriété d'action de données. Elle renvoie un tableau d'éléments GadgetInfos classés dans l'ordre dans lequel ils doivent apparaître dans l'interface utilisateur. Des gadgets sont fournis pour tous les types de champ les plus courants (par exemple, texte, déroulant, mot de passe, sélection multiple, bouton radio, case à cocher). Vous pouvez toutefois créer des gadgets personnalisés si vous voulez des champs plus compliqués (par exemple, regroupement de plusieurs gadgets ou affichage de champs de gadget différents selon l'option sélectionnée). Il est recommandé de créer une méthode construisant chaque élément GadgetInfo voulu dans votre tableau. En effet, il est alors plus simple pour les sous-classes potentielles de faire un choix parmi les éléments GadgetInfo fournis. Si vous procédez ainsi, il existe déjà différentes méthodes implémentées par les diverses classes de base d'action de données qui peuvent renvoyer un élément GadgetInfo pour chacun des champs utilisés dans leurs interfaces utilisateur. Si vous avez également besoin de l'un de ces éléments GadgetInfo, appelez la méthode create****GadgetInfo() correspondante et répercutez la valeur renvoyée dans votre tableau de gadgets.

isAllowedHere(oReport)

La méthode isAllowedHere() est appelée quand l'utilisateur clique avec le bouton droit de la souris sur un point de données dans une visualisation et que l'interface utilisateur commence à générer le menu contextuel. S'il existe une action de données pertinente pour les points de données sélectionnés, la méthode renvoie true et cette action apparaît dans le menu contextuel. Si la méthode renvoie false, l'action de données n'apparaît pas dans le menu contextuel. Envisagez d'accepter le comportement par défaut hérité de la superclasse.

upgrade(oOldDataActionJS)

Si vous créez votre première action de données, n'utilisez pas la méthode upgrade(oOldDataActionJS). N'utilisez cette méthode que si vous avez créé votre premier modèle Knockout et que vous apportez des modifications importantes aux propriétés en vue d'une seconde version du modèle Knockout. C'est le cas par exemple si la première version de votre action de données stocke une URL dans son modèle Knockout, mais que vous souhaitez que la version suivante stocke des parties de composant d'URL dans différentes propriétés (par exemple, protocol, hostname, port, path, queryString et bookmark).

La seconde version de votre code de modèle Knockout nécessiterait l'ouverture d'une action de données enregistrée avec la première version de ce code, ce qui peut être problématique. Pour résoudre ce problème, le système détecte que la version de code d'action de données actuelle est plus récente que celle de l'action de données ouverte, qu'elle appelle la méthode upgrade() pour la nouvelle classe d'action de données et transmet l'ancien modèle Knockout d'action de données (sérialisé en objet JSON). Vous pouvez alors utiliser l'ancien objet JSON pour remplir le nouveau modèle Knockout et renvoyer une version mise à niveau de l'objet JSON. Vous êtes ainsi sûr que les anciennes métadonnées d'action de données continuent à fonctionner au fur et à mesure de l'amélioration du code d'action de données.

Méthodes HTTPAPIDataAction

Si vous étendez la classe HTTPAPIDataAction, elle fournit la méthode supplémentaire suivante, que vous pouvez décider de remplacer :

getAJAXOptions(oDataActionContext)

La méthode getAJAXOptions() est appelée par la méthode invoke() de l'action de données. La méthode getAJAXOptions() crée l'objet AJAX Options qui décrit la demande HTTP que l'action de données doit effectuer. L'objet oDataActionContext, qui contient les métadonnées décrivant les points de données, la visualisation, les filtres, le classeur et la session sélectionnés, est transmis à la méthode getAJAXOptions(). Définissez l'objet AJAX Options tel que requis par l'API HTTP visée par l'intégration et indiquez les fonctions à appeler si HTTPRequest réussit ou génère une erreur. Reportez-vous au site Web jQuery pour plus d'informations sur l'objet jQuery.ajax et ses propriétés.

L'implémentation suivante est héritée de la classe HTTPAPIDataAction. Vous devez réécrire la méthode héritée pour indiquer des exigences. Par exemple, formation de la demande HTTP et du code gérant la réponse HTTP. L'implémentation est utile, car elle montre les paramètres transmis à la fonction getAJAXOptions() et l'objet qui doit être renvoyé, et donne un exemple clair de la manière de structurer le code au sein de la méthode.

1 /**
2  * This method returns an object containing the AJAX settings used when the data action is invoked. 
3  * Subclasses may wish to override this method to provide their own behavior. 
4  * @param {module:obitech-reportservices/dataactionmanager.DataActionContext} oDataActionContext The context metadata describing where the data action was invoked from.  
5  * @returns {?object} A JQuery AJAX settings object (see http://api.jquery.com/jQuery.ajax/ for details) - returns null if there is a problem. 
6  */
7 dataaction.HTTPAPIDataAction.prototype.getAJAXOptions = function (oDataActionContext)
8 {
9    jsx.assertInstanceOfModule(oDataActionContext, "oDataActionContext", "obitech-reportservices/dataactionmanager", "DataActionContext");
10   
11   var oAJAXOptions = null;   
12   var oKOViewModel = this.getKOViewModel();
13   var sURL = oKOViewModel.sURL();
14   if (sURL)
15   {
16      // Parse the URL
17      var sResultURL = this._parseURL(sURL, oDataActionContext);
18      if (sResultURL)
19      {
20         // Parse the POST parameters (if required)
21         var eHTTPMethod = oKOViewModel.eHTTPMethod()[0];
22         var sData = null;
23         if (eHTTPMethod === dataaction.HTTPDataActionKOModel.HTTPMethod.POST)
24         {
25            var sPOSTParams = oKOViewModel.sPOSTParams();
26            sData = sPOSTParams.replace(dataaction.AbstractHTTPDataAction.RegularExpressions.LINE_END, "&");
27            sData = this._parseURL(sData, oDataActionContext, false);
28         }
29         oAJAXOptions = {
30            type: eHTTPMethod,
31            url: sResultURL,
32            async: true,
33            cache: false,
34            success: function (/*oData, sTextStatus, oJQXHR*/)
35            {
36               oDataActionContext.getReport().displaySuccessMessage(messages.HTTP_API_DATA_ACTION_INVOCATION_SUCCESSFUL.format(oKOViewModel.sName()));
37            },
38            error: function (oJQXHR/*, sTextStatus, sError*/)
39            {
40               oDataActionContext.getReport().displayErrorMessage(messages.HTTP_API_DATA_ACTION_INVOCATION_FAILED.format(oKOViewModel.sName(), oJQXHR.statusText, oJQXHR.status));
41            }
42         };
43         if (sData)
44         {
45            oAJAXOptions.data = sData;
46         }
47      }
48   }
49   return oAJAXOptions;
50 };