Páginas filhas
  • ER_PCREQ_9904_exposicao_servicos_logix_getschema

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Migration of unmigrated content due to installation of a new plugin

Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.

Informações Gerais


Especificação

Produto

Logix

Módulo

Foundation

Segmento Executor

Tecnologia

Projeto 

LD_FRW_FRW002

IRM 

PCREQ-9903

Requisito

 

Subtarefa

PCREQ-9904

Sub tarefa

PDR_LD_FRW001-241 

País

(X) Brasil  (  ) Argentina  (  ) Mexico  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colombia   (  ) Outro ______________.

Objetivo

Desenvolver uma ferramenta que efetue a exportação e publicação das estruturas das APIs Logix permitindo a execução das mesmas a partir de Web Services. A publicação deverá possibilitar que ferramentas como EAI e o TOTVS HTML Framework possam executar as APIs através de serviços SOAP ou REST, desenvolvidos nos padrões determinados em Desenvolvimento de API - LGX e o novo serviço, denominado GetSchema, que provê a consulta às estruturas publicadas retornando-as no formato de XML Schema (XSD).

Definição da Regra de Negócio

Introdução

RotinaTipo de OperaçãoOpção de Menu

LOG00070 - Publicação de APIs

CriaçãoAdministração Logix > Controle Geral > Desenvolvimento


Índice
minLevel3

1. Introdução

Recentemente foram definidos novos padrões para o desenvolvimento de APIs API na tecnologia 4GL que permitam sua publicação para utilização Logix 4GL, disponível em Desenvolvimento de API - LGX, permitindo sua execução através de Web Services, porém . Porém, para permitir a execução desta API é necessária a uma ferramenta que permita a exportação destas.

Tal ferramenta será responsável por efetuar a leitura do código fonte que possui as funcionalidades que serão publicadas e gerar suas estruturas em JSON e XML. Com estas estruturas geradas, a ferramenta deverá criar também duas novas funções ao final do código fonte para retorná-las no formato texto, possibilitando rápida recuperação destas no produto Logix.

Nomenclatura das Funções

Para gerar a estrutura e os pontos de entrada, a ferramenta deverá verificar os padrões de nomenclatura de funções - conforme descritos no documento TODO. O nome da função indicará como ficará o nome e o método de chamada da funcionalidade da API.

Exemplo:

Image Removed

Sempre delimitada pelo caractere underscore, o nome da função indica como será a estrutura da função a partir de cada delimitador:

  1. Código da API (logr4)
  2. Identificador de publicação da funcionalidade (se a FUNCTION não possuir o identificador pub ela não será publicada)
  3. Método de execução da funcionalidade (create - verificar o item Métodos de Execução)
  4. Nome da funcionalidade (companies)

Métodos de Execução

Os métodos de execução definem qual método de requisição HTTP será utilizado para executar a funcionalidade, atualmente é possível definir um alias, como create para POST e update para PUT - uma função definida com o nome logr4_pub_create_companies seria igual a uma função com o nome logr4_pub_post_companies por exemplo. Os métodos de execução disponíveis atualmente são:

  • POSTCREATE ou PROCESS: para inclusão ou processamento
  • PUT ou UPDATE: para modificação
  • DELETE: para exclusão
  • GET ou QUERY: para recuperar uma ou mais informações

    TODO

    Opcional

    Protótipo de Tela

     

    <Caso necessário inclua protótipos de telas com o objetivo de facilitar o entendimento do requisito, apresentar conceitos e funcionalidades do software>.

     

    Protótipo 01

     

     

     Image Removed

     

     

     

     

     

     

    Opcional

    Fluxo do Processo

     

    <Nesta etapa incluir representações gráficas que descrevam o problema a ser resolvido e o sistema a ser desenvolvido. Exemplo: Diagrama - Caso de Uso, Diagrama de Atividades, Diagrama de Classes, Diagrama de Entidade e Relacionamento e Diagrama de Sequência>. 

    Opcional

    Dicionário de Dados

     

    Arquivo ou Código do Script: AAA – Negociação Financeira / *Versao=CP.2014.12_03*/

      

    Índice

    Chave

    01

    <FI9_FILIAL+FI9_IDDARF+FI9_STATUS>

    02

    <FI9_FILIAL+FI9_FORNEC+ FI9_LOJA+FI9_EMISS+FI9_IDDARF>

    03

    <FI9_FILIAL+FI9_FORNEC+ FI9_LOJA+FI9_PREFIX+FI9_NUM+FI9_PARCEL+FI9_TIPO>

    Campo

    <AAA_PERESP>

    Tipo

    <N>

    Tamanho

    <6>

    Valor Inicial

    <Varia de acordo com o tipo informado. Por exemplo, quando o campo “tipo” for date, neste campo pode ser informado uma data>. 

    Mandatório

    Sim (  ) Não (  )

    Descrição

    <Referência Mínima para Cálculo>

    Título

    <Ref.Calc.>

    Picture

    <@E999.99>

    Help de Campo

    <Informar o % que o aluno pagará em dinheiro. Esse % poderá ser alterado durante a negociação>

     

    (Opcional)

    Grupo de Perguntas

     

    <Informações utilizadas na linha Protheus>.

     

    Nome: FINSRF2

    X1_ORDEM

    01

    X1_PERGUNT

    Emissão De

    X1_TIPO

    D

    X1_TAMANHO

    8

    X1_GSC

    G

    X1_VAR01

    MV_PAR01

    X1_DEF01

    Comum

    X1_CNT01

    '01/01/08'

    X1_HELP

    Data inicial do intervalo de emissões das guias de DARF a serem consideradas na seleção dos dados para o relatório 

     

    (Opcional)

    Consulta Padrão

    <Informações utilizadas na linha Protheus>

     

    Consulta: AMB

    Descrição

    Configurações de Planejamento

    Tipo

    Consulta Padrão

    Tabela

    “AMB”

    Índice

    “Código”

    Campo

    “Código”; ”Descrição”

    Retorno

    AMB->AMB_CODIGO

     

    efetue a exportação e publicação de sua estrutura de dados para que os serviços externos (como o TOTVS HTML Framework e EAI) saibam quais parâmetros de entrada e de saída deverão ser informados para a execução da mesma.

    2. Funcionamento

    A ferramenta de publicação será responsável por ler o conteúdo do código fonte da API e gerar a estrutura de todos os métodos públicos encontrados e seus respectivos parâmetros de entrada e saída. Após gerada a estrutura no formato JSON, a ferramenta deve disponibilizar esta estrutura em um arquivo, a API ficará disponível publicamente para execução apenas após a compilação deste arquivo no RPO.

    3. Serviço GetSchema

    O serviço GetSchema será responsável por retornar a estrutura das APIs públicas, este fará parte da nova arquitetura de integração EAI, a qual está sendo denominada Mensageria TOTVS e que visa, entre outras coisas, definir os responsáveis de uma integração e reduzir o custo total de suporte em situações de inconsistências. O GetSchema será desenvolvido utilizando uma transação do tipo Mensagem Única TOTVS utilizando o a estrutura do XSD disponível neste link.

    O fluxo abaixo demonstra como o serviço GetSchema será utilizado no contexto das integrações:

    Image Added

    No lado Logix, que no fluxo acima é representado como ERP, será desenvolvido um adapter seguindo os padrões de Mensagem Única TOTVS, o qual utilizará a classe Helper gerada a partir do XSD da transação GetSchema versão 1.000. O adapter, de nome EAIAdapterGetSchema, receberá o XML com o nome do objeto de negócio e a resposta será um XML com o XSD da estrutura contendo os parâmetros de entrada e saída do objeto solicitado.

    Informações
    titleHelpers e Adapters

    A geração do XSD se dará a partir da conversão da execução da função responsável por retornar a estrutura em JSON gerada através da ferramenta de publicação de API (item 2.Funcionamento deste documento).

     

    3.1 Mensagem de Envio

    Segue abaixo um exemplo do XML que deverá ser enviado pelo aplicativo que deseja obter o XSD de determinado objeto de negócio, seguindo o padrão definido para uma mensagem do tipo BusinessMessage.

    Bloco de código
    languagexml
    titleGetSchemaIn
    linenumberstrue
    <?xml version="1.0" encoding="UTF-8"?>
    <TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xsi:noNamespaceSchemaLocation="../../../xmlschema/general/requests/getSchema_1_000.xsd">
        <MessageInformation version="1.000">    
            <UUID>a8eef627-a4f7-47ad-97dc-706ab15b995d</UUID>
            <Type>BusinessMessage</Type>
            <Transaction>GetSchema</Transaction>
            <StandardVersion>1.000</StandardVersion>
            <SourceApplication>SoapUI</SourceApplication>
            <Product name="SoapUI" version="5.2.1"/>
            <GeneratedOn>2016-01-01T00:00:00.000-00:00</GeneratedOn>
            <DeliveryType>sync</DeliveryType>
        </MessageInformation>
        <BusinessMessage>
            <BusinessRequest>
                <Operation>GetSchema</Operation>
            </BusinessRequest>
            <BusinessContent>
                <Adapter>Logix/logr2.logr2_pub_create_companies</Adapter>
            </BusinessContent>
        </BusinessMessage>
    </TOTVSMessage>

    Observe na mensagem acima que no elemento <Adapter> o nome do objeto de negócio deve vir precedido do nome do produto (Logix) e do nome da API (logr2) sempre que for realizada a requisição do XSD.

     

    3.2 Mensagem de Reposta

    Segue abaixo um exemplo do XML de retorno, o qual segue o padrão definido para uma mensagem do tipo ResponseMessage.

    Bloco de código
    languagexml
    titleGetSchemaOut
    linenumberstrue
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TOTVSMessage>
        <MessageInformation version="1.000">
            <UUID>66567771-f4b2-77f7-94f6-9dd1c22c3dbf</UUID>
            <Type>Response</Type>
            <Transaction>GetSchema</Transaction>
            <StandardVersion>1.000</StandardVersion>
            <SourceApplication>SoapUI</SourceApplication>
            <BranchId/>
            <Product name="SoapUI" version="5.1.2"/>
            <GeneratedOn>2016-00-00T00:00:00</GeneratedOn>
            <DeliveryType>sync</DeliveryType>
        </MessageInformation>
        <ResponseMessage>
            <ReceivedMessage>
                <SentBy>SoapUI</SentBy>
                <UUID>a8eef627-a4f7-47ad-97dc-706ab15b995d</UUID>
                <MessageContent>
                    <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
                    <TOTVSMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                  xsi:noNamespaceSchemaLocation="../../../xmlschema/general/requests/getSchema_1_000.xsd">
                        <MessageInformation version="1.000">    
                            <UUID>a8eef627-a4f7-47ad-97dc-706ab15b995d</UUID>
                            <Type>BusinessMessage</Type>
                            <Transaction>GetSchema</Transaction>
                            <StandardVersion>1.000</StandardVersion>
                            <SourceApplication>SoapUI</SourceApplication>
                            <Product name="SoapUI" version="5.1.2"/>
                            <GeneratedOn>2016-00-00T00:00:00</GeneratedOn>
                            <DeliveryType>sync</DeliveryType>
                        </MessageInformation>
                        <BusinessMessage>
                            <BusinessRequest>
                                <Operation>GetSchema</Operation>
                            </BusinessRequest>
                            <BusinessContent>
                                <Adapter>Logix/logr2.logr2_pub_create_companies</Adapter>
                            </BusinessContent>
                        </BusinessMessage>
                    </TOTVSMessage>]]>
                </MessageContent>
            </ReceivedMessage>
            <ProcessingInformation>
                <ProcessedOn>2016-00-00T00:00:00</ProcessedOn>
                <Status>ok</Status>
            </ProcessingInformation>
            <ReturnContent>
                <XSD>
                    <Adapter>logr2_pub_create_companies</Adapter>
                    <Schema>
                        <![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
                            <xs:element name="logr2_pub_create_companies">
                                <xs:complexType>
                                    <xs:choice>
                                        <xs:element name="input" minOccurs="1" maxOccurs="1">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="lr_empresa" type="lr_empresa" minOccurs="1" maxOccurs="1" />
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="output" minOccurs="1" maxOccurs="1">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="lr_return" type="lr_return"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:choice>
                                    <xs:attribute name="api" type="xs:string" fixed="logr2"/>
                                </xs:complexType>
                            </xs:element>
                            <xs:complexType name="lr_empresa">
                                <xs:sequence>
                                    <xs:element name="cod_empresa" type="xs:string"/>
                                    <xs:element name="den_empresa" type="xs:string"/>
                                    <xs:element name="den_reduz" type="xs:string"/>
                                    <xs:element name="end_empresa" type="xs:string"/>
                                    <xs:element name="den_bairro" type="xs:string"/>
                                    <xs:element name="den_munic" type="xs:string"/>
                                    <xs:element name="uni_feder" type="xs:string"/>
                                    <xs:element name="ins_estadual" type="xs:string"/>
                                    <xs:element name="num_cgc" type="xs:string"/>
                                    <xs:element name="num_caixa_postal" type="xs:string"/>
                                    <xs:element name="cod_cep" type="xs:string"/>
                                    <xs:element name="num_telefone" type="xs:string"/>
                                    <xs:element name="num_telex" type="xs:string"/>
                                    <xs:element name="num_fax" type="xs:string"/>
                                    <xs:element name="end_telegraf" type="xs:string"/>
                                    <xs:element name="num_reg_junta" type="xs:string"/>
                                    <xs:element name="dat_inclu_junta" type="xs:date"/>
                                    <xs:element name="ies_filial" type="xs:string"/>
                                    <xs:element name="dat_fundacao" type="xs:date"/>
                                    <xs:element name="cod_cliente" type="xs:string"/>
                                </xs:sequence>
                            </xs:complexType>
                            <xs:complexType name="lr_return">
                                <xs:sequence>
                                    <xs:element name="status" type="xs:integer"/>
                                    <xs:element name="retmsg" type="xs:string"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:schema>]]>
                    </Schema>
                </XSD>
            </ReturnContent>
        </ResponseMessage>
    </TOTVSMessage>

    No elemento <ReturnContent> encontra-se o elemento <XSD> e logo abaixo encontram-se os elementos <Adapter> e <Schema>, no qual se encontra o conteúdo do XSD correspondente com a estrutura do objeto de negócio e seus respectivos parâmetros de entrada e saída. O XSD gerado terá dois grupos de parâmetros, sendo um para os de entrada (representado pelo elemento <input>) e outro para os de saída (representado pelo elemento <output>).

    4. Considerações Finais

    A transação GetSchema, assim como a transação WhoIs, deve ser considerada padrão do EAI e, portanto, não necessita ser habilitada e deve ser aceita por outros EAI de forma anônima, ou seja, sem que o aplicativo de origem esteja cadastrado no destino.

     

    Protótipo de Tela

    Imagem 1: tela para informação do código fonte da API e exibindo as APIs já publicadas.

    Image Added

     

    (Opcional)

    Estrutura de Menu

     

    <Informações utilizadas na linha Datasul>.

     

    Procedimentos

     

    Procedimento

     

     

     

    Descrição

    (Max 40 posições)

    (Max 40 posições)

    (Max 40 posições)

    Módulo

     

     

     

    Programa base

     

     

     

    Nome Menu

    (Max 32 posições)

    (Max 32 posições)

    (Max 32 posições)

    Interface

    GUI/WEB/ChUI/Flex

    GUI/WEB/ChUI/Flex

    GUI/WEB/ChUI/Flex

    Registro padrão

    Sim

    Sim

    Sim

    Visualiza Menu

    Sim/Não

    Sim/Não

    Sim/Não

    Release de Liberação

     

     

     

     

     

     

    Programas

     

    Programa

     

     

     

    Descrição

    (Max 40 posições)

    (Max 40 posições)

    (Max 40 posições)

    Nome Externo

     

     

     

    Nome Menu/Programa

    (Max 32 posições)

    (Max 32 posições)

    (Max 32 posições)

    Nome Verbalizado[1]

    (Max 254 posições)

    (Max 254 posições)

    (Max 254 posições)

    Procedimento

     

     

     

    Template

    (Verificar lista de opções no man01211)

    (Verificar lista de opções no man01211)

    (Verificar lista de opções no man01211)

    Tipo[2]

    Consulta/Manutenção/ Relatório/Tarefas

    Consulta/Manutenção/ Relatório/Tarefas

    Consulta/Manutenção/ Relatório/Tarefas

    Interface

    GUI/WEB/ChUI/Flex

    GUI/WEB/ChUI/Flex

    GUI/WEB/ChUI/Flex

    Categoria[3]

     

     

     

    Executa via RPC

    Sim/Não

    Sim/Não

    Sim/Não

    Registro padrão

    Sim

    Sim

    Sim

    Outro Produto

    Não

    Não

    Não

    Visualiza Menu

    Sim/Não

    Sim/Não

    Sim/Não

    Query on-line

    Sim/Não

    Sim/Não

    Sim/Não

    Log Exec.

    Sim/Não

    Sim/Não

    Sim/Não

    Rotina (EMS)

     

     

     

    Sub-Rotina (EMS)

     

     

     

    Localização dentro da Sub Rotina (EMS)

     

     

     

    Compact[4]

    Sim/Não

    Sim/Não

    Sim/Não

    Home[5]

    Sim/Não

    Sim/Não

    Sim/Não

    Posição do Portlet[6]

    0 – Top Left

    1 – Top Right

    2 – Bottom Left

    3 – Bottom Right

    0 – Top Left

    1 – Top Right

    2 – Bottom Left

    3 – Bottom Right

    0 – Top Left

    1 – Top Right

    2 – Bottom Left

    3 – Bottom Right

    Informar os papeis com os quais o programa deve ser vinculado

     

     

     

     

    Cadastro de Papéis

    <O cadastro de papéis é obrigatório para os projetos de desenvolvimento FLEX a partir do Datasul 10>.

    <Lembrete: o nome dos papeis em inglês descrito neste ponto do documento, devem ser homologados pela equipe de tradução>.

     

    Código Papel

    (máx 3 posições)

    Descrição em Português*

     

    Descrição em Inglês*

     

    [1] Nome Verbalizado é obrigatório para desenvolvimentos no Datasul 10 em diante.

    [2] Tipo é obrigatório para desenvolvimento no Datasul 10 em diante

    [3] Categorias são obrigatórias para os programas FLEX.

    [4] Obrigatório quando o projeto for FLEX

    [5] Obrigatório quando o projeto for FLEX

    [6] Obrigatório quando o projeto for FLEX

     Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.