A propos des modules d'extension d'action de données et de la structure des actions de données

Les modules d'extension d'action de données tirent parti de la structure des actions de données pour fournir des actions orientées données personnalisées étroitement intégrées à l'interface utilisateur Oracle Analytics.

Lorsqu'un utilisateur appelle une action de données, le gestionnaire des actions de données transmet le contexte de demande (par exemple, la qualification d'expression, les valeurs d'indicateur, les filtres et les métadonnées) au module d'extension d'action de données qui est en charge de la gestion de la demande. Oracle fournit quatre types de module d'extension d'action de données : CanvasDataAction, URLNavigationDataAction, HTTPAPIDataAction et EventDataAction. Vous pouvez étendre ces types de module d'extension d'action de données, ainsi que les classes de base abstraites correspondantes, pour fournir vos propres actions de données.

Catégories d'action de données

Les catégories d'action de données incluent les actions d'accès à l'URL, d'API HTTP, d'accès au canevas et d'événement :

  • Accès à l'URL : ouvre l'URL indiquée dans un nouvel onglet de navigateur.
  • API HTTP : utilise les commandes GET/POST/PUT/DELETE/TRACE pour cibler une API HTTP ; n'entraîne pas l'ouverture d'un nouvel onglet. Le code de statut HTTP est examiné et un message de réussite ou d'échec non persistant affiché.
  • Accès au canevas : permet à l'utilisateur de passer d'un canevas source à un canevas cible dans la même visualisation ou une autre. Tous les filtres actifs du canevas source sont transmis au canevas cible en tant que filtres externes. Lors de l'ouverture du canevas cible, celui-ci tente d'appliquer les filtres externes à la visualisation. Le mécanisme d'application des filtres externes n'est pas décrit ici.
  • Actions d'événement : publient un événement à l'aide du routeur d'événements Oracle Analytics. N'importe quel code JavaScript (module d'extension tiers par exemple) peut s'abonner à ces événements et gérer leur réponse personnalisée en conséquence. Les développeurs de module d'extension peuvent ainsi choisir le mode de réponse de l'action de données, ce qui leur offre une flexibilité maximale. Par exemple, ils peuvent opter pour l'affichage d'une interface utilisateur ou pour la transmission des données à plusieurs services simultanément.

Les types de catégorie d'action de données Accès à l'URL et API HTTP peuvent utiliser une syntaxe de jeton pour injecter des données ou des métadonnées de la visualisation dans les paramètres URL et POST.

Remplacement de jetons d'URL

Les actions de données HTTP peuvent remplacer des jetons dans les URL par des valeurs du contexte transmis à l'action de données. Il peut par exemple s'agir de valeurs de référence de données qualifiée, de valeurs de filtre, d'un nom utilisateur, d'un chemin d'accès du classeur et d'un nom de canevas.

Jeton Remarques Remplacer par Exemple Résultat
${valuesForColumn:COLUMN} N/A Des valeurs d'affichage de colonne de la référence de données qualifiée. ${valuesForColumn: "Sales"."Products"."Brand"} BizTech,FunPod
${valuesForColumn:COLUMN, separator:"/"} Tout jeton susceptible d'être remplacé par des valeurs multiples prend en charge l'option de séparateur facultatif. Par défaut, le séparateur (separator) est une virgule (,), mais vous pouvez le définir sur n'importe quelle chaîne. Si la chaîne comporte des guillemets, vous pouvez utiliser la barre oblique inverse (\) en tant que caractère d'échappement. Des valeurs d'affichage de colonne de la référence de données qualifiée. ${valuesForColumn: "Sales"."Products"."Brand"} BizTech,FunPod
${valuesForColumn:COLUMN, separationStyle:individual} Par défaut, le style de séparation (separationStyle) est delimited, mais vous pouvez le définir sur individual si l'utilisateur doit générer des paramètres d'URL distincts pour chaque valeur. Des valeurs d'affichage de colonne de la référence de données qualifiée. &myParam=${valuesForColumn: "Sales"."Products"."Brand"} &myParam=BizTech&myParam=FunPod
${keyValuesForColumn:COLUMN} N/A Des valeurs de clé de colonne de la référence de données qualifiée. ${keyValuesForColumn:COLUMN} 10001,10002
${env:ENV_VAR} Les variables d'environnement prises en charge sont sProjectPath, sProjectName, sCanvasName, sUserID et sUserName. Une variable d'environnement. ${env:'sUserID'} myUserName

Contexte d'action de données

Vous pouvez définir un contexte transmis lorsque l'utilisateur appelle une action de données.

Vous définissez quelle portion du contexte est transmise à l'action de données lors de la création de cette dernière.

Référence de données qualifiée

Lorsque l'action de données est appelée, une référence de données qualifiée est générée pour chaque point de données marqué à l'aide d'un tableau d'objets LogicalFilterTree. Les objets LogicalFilterTree consistent en plusieurs objets LogicalFilterNode présentés dans une structure arborescente. Ils incluent les éléments suivants :

  • Attributs sur les bordures de ligne ou de colonne de la mise en page des données.
  • Indicateur spécifique sur l'extrémité destinée aux indicateurs traitant chaque cellule marquée.
  • Valeur d'indicateur spécifique pour chaque cellule marquée.
  • Valeurs de clé et d'affichage.

Variables d'environnement

Outre les données et métadonnées décrivant chaque point de données marqué, certaines actions de données peuvent nécessiter davantage de contexte pour décrire l'environnement à partir duquel elles sont appelées. Il s'agit par exemple des variables d'environnement suivantes :

  • Chemin d'accès du projet
  • Nom du projet
  • Nom du canevas
  • ID utilisateur
  • Nom utilisateur

Conception de code d'action de données

Pour créer des actions de données, vous utilisez des classes d'API.

  • Quatre classes d'action de données concrètes héritent de la classe AbstractDataAction :
    • CanvasDataAction
    • URLNavigationDataAction
    • HTTPAPIDataAction
    • EventDataAction
  • Vous pouvez créer des types d'action de données à l'aide de l'API de module d'extension d'action de données.
  • Le registre des types d'action de données est géré par DataActionPluginHandler.
  • Tout code qui crée, lit, modifie, supprime ou appelle des instances d'action de données procède en publiant des événements.
  • Les événements sont gérés par DataActionManager.

Classes de modèle d'action de données

Il existe différents types de classe de modèle d'action de données.

AbstractDataAction

Cette classe est en charge des opérations suivantes :

  • Stockage du modèle Knockout (les sous-classes peuvent l'étendre avec leurs propres propriétés).
  • Définition des méthodes abstraites que les sous-classes doivent implémenter :
    • + invoke(oActionContext: ActionContext, oDataActionContext:DataActionContext) <<abstract>>

      Appelle l'action de données avec le contexte transmis. Ne doit être appelé que par DataActionManager.

    • + getGadgetInfos(oReport): AbstractGadgetInfo[] <<abstract>>

      Crée et renvoie les éléments GadgetInfos en charge de l'affichage des champs d'interface utilisateur pour la modification de ce type d'action de données.

    • + validate() : DataActionError

      Valide l'action de données et renvoie NULL en cas de validité ou DataActionError dans le cas contraire.

  • Fourniture de l'implémentation par défaut des méthodes suivantes, utilisées pour l'affichage d'éléments génériques des champs d'interface utilisateur d'action de données :
    • + getSettings():JSON

      Sérialise le modèle Knockout de l'action de données en objet JSON prêt à être inclus dans le rapport (utilise komapping.toJS(_koModel)).

    • + createNameGadgetInfo(oReport) : AbstractGadgetInfo

      Crée et renvoie l'élément GadgetInfo en charge de l'affichage du champ Nom de l'action de données.

    • + createAnchorToGadgetInfo(oReport) : AbstractGadgetInfo

      Crée et renvoie l'élément GadgetInfo en charge de l'affichage du champ Ancrer à de l'action de données.

    • + createPassValuesGadgetInfo(oReport) : AbstractGadgetInfo

      Crée et renvoie l'élément GadgetInfo en charge de l'affichage du champ Transmettre des valeurs de l'action de données.

Les sous-classes n'ont pas forcément besoin de tous les éléments GadgetInfo fournis par la classe de base et peuvent donc ne pas appeler toutes ces méthodes. L'affichage de chaque champ étant distinct, les sous-classes peuvent choisir les gadgets requis en toute liberté. Certaines sous-classes peuvent même opter pour une implémentation différente de ces gadgets d'action de données communs.

CanvasDataAction, URLNavigationDataAction, HTTPAPIDataAction, EventDataAction

Ces noms désignent les classes concrètes des types d'action de données de base. Ces classes fournissent seules l'interface utilisateur générique de ces types d'action de données. Elles peuvent également servir de classes de base pratiques pouvant être étendues par les modules d'extension d'action de données personnalisés.

  • CanvasDataAction : classe utilisée pour accéder à un canevas.
  • URLNavigationDataAction : classe utilisée pour ouvrir une page Web dans une nouvelle fenêtre du navigateur.
  • HTTPAPIDataAction : classe utilisée pour adresser une demande GET/POST/PUT/DELETE/TRACE à une API HTTP et gérer la réponse HTTP (HTTP Response) par programmation.
  • EventDataAction : classe utilisée pour publier des événements JavaScript via le routeur d'événements.

Chaque classe est en charge des opérations suivantes :

  • Implémentation des méthodes abstraites à partir de la classe de base.
    • invoke(oActionContext: ActionContext, oDataActionContext:DataActionContext)

      Cette méthode appelle l'action de données en combinant les propriétés définies dans le modèle Knockout avec l'objet DataActionContext indiqué.

    • getGadgetInfos(oReport): AbstractGadgetInfo[]

      Cette méthode :

      • Crée un tableau contenant des éléments AbstractGadgetInfos.
      • Appelle des méthodes createXXXGadgetInfo() individuelles répercutant chaque élément AbstractGadgetInfo dans le tableau.
      • Renvoie le tableau.
  • Fourniture de méthodes supplémentaires pour créer les gadgets individuels propres à la sous-classe d'action de données considérée.

Les sous-classes de ces classes concrètes n'ont pas forcément besoin d'utiliser tous les gadgets fournis par leurs superclasses dans leurs interfaces utilisateur personnalisées. La création de chaque gadget étant distincte, les sous-classes peuvent choisir les gadgets requis en toute liberté.

DataActionKOModel, ValuePassingMode

La classe DataActionKOModel fournit le modèle Knockout de base partagé par les différentes sous-classes d'AbstractDataAction. Reportez-vous à Classe DataActionKOModel.

Classes de service d'action de données

Il existe différentes classes de service d'action de données.

DataActionManager

Toutes les communications avec DataActionManager utilisent ClientEvents.DataActionManager, qui implémente des gestionnaires d'événements pour les opérations suivantes :

  • Gestion de l'ensemble d'actions de données défini dans le classeur en cours.
  • Appel d'une action de données.
  • Extraction de toutes les actions de données définies dans le classeur en cours.
  • Extraction de toutes les actions de données applicables aux points de données actuellement marqués.

DataActionContext, EnvironmentContext

Lorsqu'une action de données est appelée, la classe DataActionContext contient le contexte transmis à la cible.

  • getColumnValueMap()

    Renvoie une correspondance des valeurs de colonne d'attribut identifiées par les noms de colonne d'attribut. Celles-ci définissent la qualification d'expression des points de données à partir desquels l'action de données est appelée.

  • getLogicalFilterTrees()

    Renvoie un objet LogicalFilterTrees décrivant les qualifications d'expression des points de données spécifiques à partir desquels l'action de données est appelée (reportez-vous à l'élément InteractionService pour plus d'informations).

  • getEnvironmentContext()

    Instance de la classe EnvironmentContext décrivant l'environnement source, par exemple :

    • getProjectPath()
    • getCanvasName()
    • getUserID()
    • getUserName()
  • getReport()

    Renvoie le rapport à partir duquel l'action de données est appelée.

DataActionHandler

La classe DataActionHandler inscrit les différents modules d'extension d'action de données. Son API présente une cohérence globale avec les autres gestionnaires de module d'extension (par exemple, VisualizationHandler).

La classe DataActionHandler fournit les méthodes publiques suivantes :

  • getClassName(sPluginType:String) : String

    Renvoie le nom de classe qualifié complet pour le type d'action de données indiqué.

  • getDisplayName(sPluginType:String) : String

    Renvoie le nom d'affichage traduit pour le type d'action de données indiqué.

  • getOrder(sPluginType:String) : Number

    Renvoie un numéro utilisé pour trier les listes de types d'action de données dans l'ordre voulu.

La classe DataActionHandler fournit les méthodes statiques suivantes :

  • getDependencies(oPluginRegistry:Object) : Object.<String, Array>

    Renvoie une correspondance de dépendance couvrant tous les types d'action de données inscrits.

  • getHandler(oPluginRegistry:Object, sExtensionPointName:String, oConfig:Object) : DataActionPluginHandler

    Crée et renvoie une instance de la classe DataActionHandler.

DataActionUpgradeHandler

La classe DataActionUpgradeHandler est appelée par UpgradeService lorsqu'un rapport est ouvert.

La classe DataActionHandler fournit deux méthodes principales :

  • deferredNeedsUpgrade(sCurrentVersion, sUpgradeTopic, oDataActionJS, oActionContext) : Promise

    Renvoie une promesse (Promise) se résolvant en une valeur booléenne indiquant si l'action de données indiquée doit être mise à niveau (true) ou non (false). La méthode détermine si l'action de données doit être mise à niveau en comparant l'instance d'action de données au constructeur de l'action de données.

  • performUpgrade(sCurrentVersion, sUpgradeTopic, oDataActionJS, oActionContext, oUpgradeContext) : Promise

    Effectue la mise à niveau de l'action de données indiquée et résout la promesse (Promise). La mise à niveau proprement dite s'effectue en appelant la méthode upgrade() sur l'action de données (seule la sous-classe spécifique de l'action de données mise à niveau est qualifiée pour se mettre elle-même à niveau).

  • getOrder(sPluginType:String) : Number

    Renvoie un numéro utilisé pour trier les listes de types d'action de données dans l'ordre voulu.

Interactions de code d'action de données

Les actions de données interagissent avec le code Oracle Analytics lorsqu'un champ d'interface utilisateur est créé et lorsqu'un utilisateur les appelle.

Création du champ d'une nouvelle instance d'action de données

L'interaction commence quand Oracle Analytics cherche à afficher un champ d'interface utilisateur d'action de données. Pour ce faire, l'application :

  1. Crée PanelGadgetInfo faisant office de GadgetInfo parent des GadgetInfos renvoyés par l'action de données.
  2. Appelle getGadgetInfos() sur l'action de données.
  3. Ajoute les GadgetInfos de l'action de données en tant qu'enfants de PanelGadgetInfo créé lors de la première étape.
  4. Crée PanelGadgetView qui affiche PanelGadgetInfo.
  5. Définit HTMLElement, conteneur de PanelGadgetView.
  6. Inscrit PanelGadgetView en tant qu'élément HostedComponent enfant d'un élément HostedComponent déjà attaché à l'arborescence HostedComponent.

    Les gadgets de l'action de données sont alors affichés dans le gadget Panneau, dans l'ordre dans lequel ils figurent dans le tableau renvoyé par getGadgetInfos().

Appel d'une action de données

L'interaction commence quand l'utilisateur appelle une action de données via l'interface utilisateur Oracle Analytics (par exemple, à partir du menu contextuel d'un point de données dans une visualisation).

En réponse à l'interaction utilisateur, le code :

  1. Publie un événement INVOKE_DATA_ACTION contenant l'ID de l'action de données, DataVisualization à partir duquel l'action de données est appelée et un objet TransientVizContext.
  2. DataActionManager gère l'événement en :
    1. Obtenant l'instance d'action de données à partir de son ID.
    2. Obtenant les éléments LogicalFilterTrees des points de données marqués de l'élément DataVisualization indiqué.
    3. Créant un élément DataActionContext qui contient toutes les informations à transmettre à la cible de l'action de données.
    4. Appelant invoke(oDataActionContext) sur l'action de données.

Exemple de fichier plugin.xml d'action de données

Cette rubrique montre un exemple de fichier plugin.xml pour une action de données CanvasDataAction.

Exemple de fichier plugin.xml

<?xml version="1.0" encoding="UTF-8"?>
<tns:obiplugin xmlns:tns="http://plugin.frameworks.tech.bi.oracle"
               xmlns:viz="http://plugin.frameworks.tech.bi.oracle/extension-points/visualization"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               id="obitech-currencyconversion"
               name="Oracle BI Currency Conversion"
               version="0.1.0.@qualifier@"
               optimizable="true"
               optimized="false">
 
 
   <tns:resources>
      <tns:resource id="currencyconversion" path="scripts/currencyconversion.js" type="script" optimizedGroup="base"/>
      <tns:resource-folder id="nls" path="resources/nls" optimizable="true">
         <tns:extensions>
            <tns:extension name="js" resource-type="script"/>
         </tns:extensions>
      </tns:resource-folder>
   </tns:resources>
 
 
   <tns:extensions>
      <tns:extension id="oracle.bi.tech.currencyconversiondataaction" point-id="oracle.bi.tech.plugin.dataaction" version="1.0.0">
         <tns:configuration>
         {
            "resourceBundle": "obitech-currencyconversion/nls/messages",
            "properties":
            {
               "className": "obitech-currencyconversion/currencyconversion.CurrencyConversionDataAction",
               "displayName": { "key" : "CURRENCY_CONVERSION", "default" : "Currency Conversion" },
               "order": 100
            }
         }
         </tns:configuration>
      </tns:extension>
   </tns:extensions>
 
 
</tns:obiplugin>

Fichiers et dossiers de module d'extension d'action de données

Les fichiers et dossiers suivants servent à implémenter des modules d'extension d'action de données.

bitech/client/plugins/src/
  • report
    • obitech-report
      • scripts
        • dataaction
          • dataaction.js
          • dataactiongadgets.js
          • dataactionpanel.js
          • dataactionupgradehandler.js
  • obitech-reportservice
    • scripts
      • dataaction
        • dataactionmanager.js
        • dataactionhandler.js