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.
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 :
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é.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 |
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 :
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 :
Pour créer des actions de données, vous utilisez des classes d'API.
AbstractDataAction
:
CanvasDataAction
URLNavigationDataAction
HTTPAPIDataAction
EventDataAction
DataActionPluginHandler
.DataActionManager
.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 :
+ 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.
+ 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.
GET/POST/PUT/DELETE/TRACE
à une API HTTP et gérer la réponse HTTP (HTTP Response
) par programmation.Chaque classe est en charge des opérations suivantes :
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 :
AbstractGadgetInfos
.createXXXGadgetInfo()
individuelles répercutant chaque élément AbstractGadgetInfo
dans le tableau.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.
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 :
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.
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 :
PanelGadgetInfo
faisant office de GadgetInfo
parent des GadgetInfos
renvoyés par l'action de données.getGadgetInfos()
sur l'action de données.GadgetInfos
de l'action de données en tant qu'enfants de PanelGadgetInfo
créé lors de la première étape.PanelGadgetView
qui affiche PanelGadgetInfo
.HTMLElement
, conteneur de PanelGadgetView
.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 :
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
.DataActionManager
gère l'événement en :
LogicalFilterTrees
des points de données marqués de l'élément DataVisualization
indiqué.DataActionContext
qui contient toutes les informations à transmettre à la cible de l'action de données.invoke(oDataActionContext)
sur l'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>
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