Acerca dos Plug-Ins de Ações de Dados e da Estrutura de Ações de Dados

Os plug-ins de ações de dados tiram partido da estrutura de ações de dados para fornecer ações orientadas por dados customizadas que estão profundamente integradas na interface do utilizador do Oracle Analytics.

Quando um utilizador invoca uma ação de dados, o Gestor de Ações de Dados transmite o contexto do pedido (por exemplo, referência de dados qualificada, valores de medidas, filtros e metadados) ao plug-in de ação de dados responsável pelo processamento do pedido. A Oracle fornece quatro tipos de plug-ins de ações de dados: CanvasDataAction, URLNavigationDataAction, HTTPAPIDataAction e EventDataAction. Pode alargar estes tipos de plug-in de ação de dados juntamente com as respetivas classes base abstratas para fornecer as suas próprias ações de dados.

Categorias de Ações de Dados

As categorias de ações de dados incluem Navegar para URL, API HTTP, Navegar para Tela e Ações do Evento:

  • Navegar para URL: Abre o URL especificado num novo separador do browser.
  • API HTTP: Utiliza os comandos GET/POST/PUT/DELETE/TRACE para definir uma API HTTP de destino e não resulta num novo separador. Em vez disso, o código de estado de HTTP é examinado e é apresentada uma mensagem de êxito ou falha transitória.
  • Navegar para Tela: Permite ao utilizador navegar de uma tela de origem para uma tela de destino na mesma visualização ou numa visualização diferente. Quaisquer filtros em vigor na tela de origem são transmitidos à tela de destino como filtros externos. Quando a tela de destino é aberta, tenta aplicar os filtros externos à visualização. O mecanismo através do qual os filtros externos são aplicados não é descrito aqui.
  • Ações do Evento: Publica um evento utilizando o router de eventos do Oracle Analytics. Qualquer código JavaScript (por exemplo, um plug-in de terceiros) pode subscrever estes eventos e processar a respetiva resposta customizada de modo adequado. Assim, é oferecido o máximo de flexibilidade porque o programador do plug-in pode escolher o modo como a ação de dados responde. Por exemplo, pode optar por apresentar uma interface do utilizador ou transmitir dados a vários serviços de uma só vez.

Os tipos de categoria de ação de dados Navegar para URL e API HTTP podem ambos utilizar uma sintaxe de token para injetar dados ou metadados da visualização nos parâmetros URL e POST.

Substituição do Token do URL

As ações de dados de HTTP podem substituir os tokens nos URLs por valores do contexto transmitido à ação de dados. Por exemplo, valores de referência de dados qualificada, valores de filtro, nome de utilizador, percurso do livro e nome da tela.

Token Notas Substituir Por Exemplo Resultado
${valuesForColumn:COLUMN} N/D Valores de apresentação da coluna da referência de dados qualificada. ${valuesForColumn: "Sales"."Products"."Brand"} BizTech,FunPod
${valuesForColumn:COLUMN, separator:"/"} Qualquer token que potencialmente possa ser substituído por vários valores suporta a opção de separador opcional. separator assume por omissão uma vírgula (,), mas pode ser definido como qualquer cadeia de caracteres. Pode identificar as aspas dentro desta cadeia de caracteres utilizando uma barra invertida (\). Valores de apresentação da coluna da referência de dados qualificada. ${valuesForColumn: "Sales"."Products"."Brand"} BizTech,FunPod
${valuesForColumn:COLUMN, separationStyle:individual} Qualquer separationStyle assume por omissão delimited, mas pode ser definido como individual se o utilizador precisar de gerar parâmetros de URL separados para cada valor. Valores de apresentação da coluna da referência de dados qualificada. &myParam=${valuesForColumn: "Sales"."Products"."Brand"} &myParam=BizTech&myParam=FunPod
${keyValuesForColumn:COLUMN} N/D Valores de chave da coluna da referência de dados qualificada. ${keyValuesForColumn:COLUMN} 10001,10002
${env:ENV_VAR} As variáveis de ambiente suportadas são: sProjectPath, sProjectName, sCanvasName, sUserID e sUserName. Uma variável de ambiente. ${env:'sUserID'} myUserName

Contexto da Ação de Dados

Pode definir o contexto que é transmitido quando o utilizador invoca uma ação de dados.

Quando cria a ação de dados, define que elementos do contexto são transmitidos à ação de dados.

Referência de Dados Qualificada

Quando a ação de dados é invocada, é gerada uma referência de dados qualificada para cada ponto de dados marcado utilizando uma matriz de objetos LogicalFilterTree. Um LogicalFilterTree é constituído por vários objetos LogicalFilterNode organizados numa estrutura em árvore. Este objeto inclui:

  • Os atributos nas extremidades de linha ou coluna da disposição dos dados.
  • A medida específica na extremidade das medidas que está relacionada com cada célula marcada.
  • O valor da medida específico para cada célula marcada.
  • Valores de chave e valores de apresentação.

Variáveis de Ambiente

Além dos dados e metadados que descrevem cada ponto de dados marcado, determinadas ações de dados poderão precisar de contexto adicional que descreva o ambiente a partir do qual a ação de dados é invocada. Essas variáveis de ambiente incluem:

  • Percurso do Projeto
  • Nome do Projeto
  • Nome da Tela
  • ID do Utilizador
  • Nome de Utilizador

Conceção do Código da Ação de Dados

Pode criar ações de dados utilizando classes de API.

  • Existem quatro classes concretas de ação de dados que herdam da classe AbstractDataAction:
    • CanvasDataAction
    • URLNavigationDataAction
    • HTTPAPIDataAction
    • EventDataAction
  • Pode criar novos tipos de ações de dados utilizando a API de plug-in de ação de dados.
  • O registo dos tipos de ação de dados é gerido pelo DataActionPluginHandler.
  • O código que cria, lê, edita, apaga ou invoca instâncias de ações de dados fá-lo através da publicação de eventos.
  • Os eventos são tratados pelo DataActionManager.

Classes de Modelos de Ações de Dados

Existem vários tipos diferentes de classes de modelos de ações de dados.

AbstractDataAction

Esta classe é responsável por:

  • Armazenar o Modelo Knockout (as subclasses podem alargá-lo com as suas próprias propriedades).
  • Definir os métodos abstratos que as subclasses devem implementar:
    • + invoke(oActionContext: ActionContext, oDataActionContext:DataActionContext) <<abstract>>

      Invoca a ação de dados com o contexto transmitido - só deve ser chamado pelo DataActionManager.

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

      Constrói e devolve os GadgetInfos responsáveis pela renderização dos campos da interface do utilizador para editar este tipo de ação de dados.

    • + validate() : DataActionError

      Valida a ação de dados e devolve um valor nulo se for válido ou um DataActionError se for inválido.

  • Fornecer a implementação por omissão para os seguintes métodos utilizados para renderizar as partes genéricas dos campos da interface do utilizador da ação de dados:
    • + getSettings():JSON

      Serializa o Modelo Knockout da ação de dados para JSON, pronto para inclusão no relatório (utiliza komapping.toJS(_koModel)).

    • + createNameGadgetInfo(oReport) : AbstractGadgetInfo

      Constrói e devolve o GadgetInfo que pode renderizar o campo Nome da ação de dados.

    • + createAnchorToGadgetInfo(oReport) : AbstractGadgetInfo

      Constrói e devolve o GadgetInfo que pode renderizar o campo Ancorar em da ação de dados.

    • + createPassValuesGadgetInfo(oReport) : AbstractGadgetInfo

      Constrói e devolve o GadgetInfo que pode renderizar o campo Transmitir Valores da ação de dados.

É possível que as subclasses não necessitem de todos os GadgetInfos que a classe base fornece, pelo que poderão não precisar de chamar todos estes métodos. Ao separar a renderização de cada campo desta forma, as subclasses podem escolher os gadgets de que necessitam. Algumas subclasses poderão mesmo optar por fornecer uma implementação diferente destes gadgets de ações de dados comuns.

CanvasDataAction, URLNavigationDataAction, HTTPAPIDataAction, EventDataAction

Estas são as classes concretas para os tipos básicos de ações de dados. Estas classes trabalham sozinhas para fornecer a interface do utilizador genérica para este tipos de ação de dados. Também podem agir como classes base convenientes para os plug-ins de ações de dados customizados a alargar.

  • CanvasDataAction: Utilizado para navegar para uma tela.
  • URLNavigationDataAction: Utilizado para abrir uma página na Web numa nova janela do browser.
  • HTTPAPIDataAction: Utilizado para fazer um pedido GET/POST/PUT/DELETE/TRACE a uma API HTTP e processar a HTTP Response programaticamente.
  • EventDataAction: Utilizado para publicar eventos de JavaScript através do Router de Eventos.

Cada classe é responsável por:

  • Implementar os métodos abstratos a partir da classe base.
    • invoke(oActionContext: ActionContext, oDataActionContext:DataActionContext)

      Este método deve invocar a ação de dados combinando as propriedades definidas no KOModel com o objeto DataActionContext especificado.

    • getGadgetInfos(oReport): AbstractGadgetInfo[]

      Este método deve:

      • Criar uma matriz que contenha AbstractGadgetInfos.
      • Chamar métodos createXXXGadgetInfo() individuais efetuando push de cada AbstractGadgetInfo para a matriz.
      • Devolver a matriz.
  • Fornecer os métodos adicionais para criar os gadgets individuais específicos de uma determinada subclasse de ação de dados.

As subclasses destas classes concretas poderão não necessitar de utilizar todos os gadgets fornecidos pelas respetivas superclasses nas interfaces do utilizador customizadas. Ao separar a criação de cada gadget desta forma, as subclasses podem escolher os gadgets de que necessitam.

DataActionKOModel, ValuePassingMode

A classe DataActionKOModel fornece o KOModel base partilhado pelas diferentes subclasses de AbstractDataAction. Consulte Classe DataActionKOModel.

Classes de Serviços de Ações de Dados

Existem várias classes de serviços de ações de dados diferentes.

DataActionManager

Toda a comunicação com DataActionManager utiliza ClientEvents.DataActionManager que implementa rotinas de tratamento de eventos para:

  • Gerir o conjunto de ações de dados definidas no livro atual.
  • Invocar uma ação de dados.
  • Obter todas as ações de dados definidas no livro atual.
  • Obter todas as ações de dados aplicáveis aos pontos de dados marcados atuais.

DataActionContext, EnvironmentContext

Quando uma ação de dados é invocada, a classe DataActionContext contém o contexto que é transmitido ao destino.

  • getColumnValueMap()

    Devolve um mapa de valores da coluna de atributos pelos nomes da coluna de atributos. Estes definem a referência de dados qualificada para os pontos de dados a partir dos quais a ação de dados é invocada.

  • getLogicalFilterTrees()

    Devolve um objeto LogicalFilterTrees que descreve as referências de dados qualificadas para os pontos de dados específicos a partir dos quais a ação de dados é invocada (consulte o InteractionService para obter detalhes).

  • getEnvironmentContext()

    Uma instância da classe EnvironmentContext que descreve o ambiente de origem tal como:

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

    Devolve o relatório a partir do qual a ação de dados é invocada.

DataActionHandler

A classe DataActionHandler regista os vários plug-ins de ações de dados. A respetiva API é globalmente consistente com as outras rotinas de tratamento de plug-ins (por exemplo, VisualizationHandler).

A classe DataActionHandler fornece os seguintes métodos públicos:

  • getClassName(sPluginType:String) : String

    Devolve o nome da classe totalmente qualificado para o tipo de ação de dados especificado.

  • getDisplayName(sPluginType:String) : String

    Devolve o nome de apresentação traduzido para o tipo de ação de dados especificado.

  • getOrder(sPluginType:String) : Number

    Devolve um número utilizado para ordenar listas dos tipos de ação de dados pela ordem preferida.

A classe DataActionHandler fornece os seguintes métodos estáticos:

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

    Devolve um mapa de dependências que abrange todos os tipos de ação de dados registados.

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

    Constrói e devolve uma nova instância da classe DataActionHandler.

DataActionUpgradeHandler

A classe DataActionUpgradeHandler é chamada pelo UpgradeService quando um relatório é aberto.

A classe DataActionHandler fornece dois métodos principais:

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

    Devolve um Promise que é decifrado para um valor Booleano a indicar se a ação de dados especificada deve ser atualizada (true) ou não (false). O método decide se a ação de dados deve ser atualizada comparando a instância da ação de dados com o criador da ação de dados.

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

    Executa a atualização na ação de dados especificada e decifra o valor de Promise. A atualização em si é executada chamando o método upgrade() na ação de dados (apenas a subclasse específica da ação de dados a ser atualizada está qualificada para atualização).

  • getOrder(sPluginType:String) : Number

    Devolve um número utilizado para ordenar listas dos tipos de ação de dados pela ordem preferida.

Interações do Código da Ação de Dados

Uma ação de dados interage com o código do Oracle Analytics quando cria um campo da interface do utilizador e quando um utilizador invoca uma ação de dados.

Criar o Campo para uma Nova Instância da Ação de Dados

Esta interação é iniciada quando o Oracle Analytics pretende renderizar um campo da interface do utilizador da ação de dados. Para tal, o Oracle Analytics Cloud:

  1. Cria um PanelGadgetInfo que age como GadgetInfo pai para os GadgetInfos que a ação de dados devolve.
  2. Chama getGadgetInfos() na ação de dados.
  3. Acrescenta os GadgetInfos da ação de dados como filhos do PanelGadgetInfo criado no primeiro passo.
  4. Cria o PanelGadgetView que renderiza o PanelGadgetInfo.
  5. Define o HTMLElement que é o container do PanelGadgetView.
  6. Regista o PanelGadgetView como um HostedComponent filho de um HostedComponent que já está anexado à árvore HostedComponent.

    Isto renderiza os gadgets da ação de dados dentro do gadget Secção, pela ordem em que aparecem na matriz devolvida por getGadgetInfos().

Invocar uma Ação de Dados

Esta interação é iniciada quando o utilizador invoca uma ação de dados através da interface do utilizador do Oracle Analytics (por exemplo, a partir do menu de contexto num ponto de dados de uma visualização).

Em resposta à interação do utilizador, o código:

  1. Publica um evento INVOKE_DATA_ACTION com a ID da ação de dados, o DataVisualization a partir do qual a ação de dados é invocada e um objeto TransientVizContext.
  2. O DataActionManager trata deste evento ao:
    1. Obter a instância da ação de dados a partir da respetiva ID.
    2. Obter os LogicalFilterTrees para os pontos de dados marcados no DataVisualization especificado.
    3. Construir um DataActionContext com todas as informações a transmitir ao destino da ação de dados.
    4. Chamar invoke(oDataActionContext) na ação de dados.

Ficheiro plugin.xml de Ação de Dados de Exemplo

Este tópico mostra um ficheiro plugin.xml de exemplo para uma ação de dados CanvasDataAction.

plugin.xml de Exemplo

<?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>

Ficheiros e Pastas de Plug-Ins de Ações de Dados

Os ficheiros e pastas seguintes são utilizados para implementar plug-ins de ações de dados.

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