Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

 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

Datasul

Módulo

Framework

Segmento Executor

Tecnologia

Projeto1

PDR_LD_FRW001

IRM1

PCREQ-3617

Requisito1

PCREQ-6063

Subtarefa1

PDR_LD_FRW001-84

Release de Entrega Planejada

12.1.8

Réplica

Não se aplica.

País

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

(  ) USA  (  ) Colombia   (  ) Outro _____________.

Outros

Não se aplica.

   Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos). 


Objetivo

 

Fornecer uma alternativa de sincronização das alterações realizadas no Identity com o Datasul quando estes estiverem integrados.

Atualmente, após ativar a integração entre Identity e Datasul, as operações de provisionamento como habilitar um usuário para utilizar o Datasul, inclui-lo em um grupo de segurança ou atribuir um item de menu ao mesmo são executadas exclusivamente no Identity, sendo necessário replicar estas alterações no Datasul para manter a consistência dos dados.

Esta replicação se dá com o Identity "empurrando" as alterações para o Datasul através de requisições HTTP usando o padrão REST (o que denominaremos como "modo push"). Como o Identity localiza-se na "nuvem", torna-se imprescindível que o Datasul esteja acessível a partir da internet, o que obriga aos clientes exporem o servidor de aplicação do Datasul.

Obviamente, esta exposição exige um cuidado maior com segurança de acesso (ajustes das políticas de acesso com liberação de portas especificas no firewall, por exemplo), o que nem sempre é possível ou aceitável pelos clientes. Neste cenário, a alternativa proposta é fazer com que o Datasul consulte o Identity, "puxando" as alterações realizadas e efetivando-as do seu lado (modo pull).


Definição da Regra de Negócio

Visão Geral

O novo modelo de sincronização, em oposição à atual técnica de pushing (empurrar, em português), utiliza a técnica de pulling (puxar), que consiste em requisições periódicas do Datasul ao Identity, com o objetivo de consumir uma fila de operações pendentes. Havendo itens nesta fila, o Datasul as recupera, efetivando-as no banco de dados. Por fim, sinaliza para o Identity que a operação foi replicada com sucesso, e este remove a operação pendente da fila.

As operações realizadas no Identity serão encaminhadas para duas filas: de aplicativo e de usuários. A fila de aplicativo conterá operações como:

  • Criação de papel (grupo de segurança) no aplicativo;
  • Alteração de dados do papel;
  • Eliminação do papel;
  • Habilitar consulta rápida ou item de menu no papel do aplicativo;
  • Desabilitar consulta rápida ou item de menu no papel do aplicativo.

A fila de usuários conterá operações como:

  • Associar (provisionar) um usuário ao aplicativo;
  • Desassociar (desprovisionar) um usuário do aplicativo;
  • Provisionar um usuário a um papel do aplicativo;
  • Desprovisionar um usuário de um papel do aplicativo;
  • Provisionar uma empresa do aplicativo a um usuário;
  • Desprovisionar uma empresa do aplicativo de um usuário.

Em relação a fila de usuários, será possível consultar previamente a lista de usuários que possuem operações pendentes no Identity. Com esta lista, o Datasul poderá buscar apenas as operações de um usuário específico, quando necessário.

A recuperação das operações pendentes nas filas ocorrerá de duas formas:

  • Periodicamente, em intervalos de 15 segundos para a fila do aplicativo, e intervalos de 30 segundos, para a fila de usuários;
  • Quando o usuário acessar o Datasul;

A recuperação periódica iniciará assim que o servidor de aplicação do Datasul (JBoss) for iniciado, caso o modo "pull" esteja ativado. Os valores dos intervalos são sugestões iniciais, que podem ser alteradas pelo usuário administrador. Serão recuperadas as operações de ambas as filas. Ao recuperar as operações da fila de usuários, serão consideradas as de todos os usuários.

A recuperação das operações no momento do acesso ao Datasul também se dará para ambas as filas. Entretanto, para a fila de usuários, serão consideradas apenas as operações do usuário que está acessando o Datasul.

A ativação do modo "pull" se dará, primeiramente, pela configuração do aplicativo no Identity, o qual passará a enviar as operações para as filas citadas, em vez de fazer requisições diretas ao Datasul. No lado do Datasul, a ativação ocorrerá atualizando-se as configurações realizadas no Identity através do Fluig Configurator, pelo recurso "One Click Configuration". Com isso, o serviço de busca das operações é iniciado, respeitando a periodicidade definida.

O serviço de busca das operações, no lado do Datasul, pode ser interrompido a qualquer tempo, editando o parâmetro correspondente no Fluig Configurator. Porém, isso não altera a parametrização do lado do Identity, que continuará enfileirando as operações realizadas. Para desativar o modo "pull" no Identity, será necessário alterar o parâmetro correspondente nas configurações do aplicativo. Em contrapartida, a desativação do modo "pull" do lado do Identity, fará com que as operações sejam enviadas diretamente ao Datasul (modo "push"), que as receberá sem maiores problemas, enquanto, paralelamente, o serviço de busca de operações se manterá ativo, fazendo pesquisas periódicas sem trazer qualquer dado.

Após o processamento das operações, o Datasul comunicará o Identity que aquela operação foi processada com sucesso e pode ser removida da fila. Caso haja algum erro no processamento da operação, ela será mantida na fila do Identity, para ser processada novamente em outra oportunidade. Em caso de erro recorrente da operação, o serviço de busca deve ser interrompido e o usuário administrador deve ser notificado para que possa atuar corretivamente, restabelecendo a normalidade do processo.

Arquitetura


Tecnicamente, a solução que implementa o modo "pull" no Datasul está organizada conforme demonstra a figura 2 da seção Fluxo do Processo.

Os componentes e suas respectivas funções estão descritos a seguir:
  • Fluig Configurator: é o responsável por fornecer a interface de gerenciamento do serviço de busca de operações, permitindo parar ou iniciar o mesmo, bem como verificar o status. É também pelo Fluig Configurator que se ativa e desativa o modo "pull".
  • FluigPullControllerResource: fornece as APIs REST para iniciar, parar e verificar o status do serviço de busca das operações. Por estar desacoplado do Fluig Configurator, pode ser acionado por qualquer outro recurso que implemente o padrão REST.
  • FluigPullApplicationListener: é o responsável por iniciar o serviço de busca das operações quando o servidor de aplicação do Datasul é iniciado, desde que o modo "pull" esteja ativado.
  • FluigPuller: implementa o serviço de busca das operações. É responsável por consultar as filas do Identity, buscar as operações para processamento e avisar ao Identity quando a operação foi processada com sucesso.
  • OperationProcessor: é o responsável por processar as operações obtidas, encaminhando-as para as rotinas correspondentes do Datasul.

Implementação


O Fluig Configurator exibirá um novo campo - Modo Pull - na aba Configurações (ver figura 0 da seção Protótipo de Tela), que exibirá o valor informado nas configurações do aplicativo no Identity, podendo ser modificado para desabilitar temporariamente o modo "pull" do lado do Datasul. Essa alteração também será refletida no arquivo fluig.properties, com a adição da propriedade identity.pullMode, cujos valores possíveis serão "true" ou "false".

Ao salvar as alterações realizadas pelo Fluig Configurator, o serviço de busca das operações deve ser ativado ou desativado conforme o valor da propriedade identity.pullMode. Isso será feito pela classe Java SettingsService, que efetuará a chamada ao serviço REST correspondente (fluig-pull/service/start ou fluig-pull/service/stop), implementado pela classe com.totvs.fluig.idm.pull.resource.FluigPullControllerResource.

A classe FluigPullControllerResource disponibilizará os seguintes serviços REST para gerenciamento do serviço de busca de operações

  • Start (GET /fluig-pull/service/start): inicia o serviço. Retorna "true" quando o modo "pull" está ativado e o serviço foi iniciado com sucesso; e "disabled" quando o modo "pull" estiver desabilitado.
  • Stop (GET /fluig-pull/service/stop): interrompe o serviço. Retorna "true" quando encerrado com sucesso e "false" caso não seja possível encerrar o serviço.
  • Status (GET /fluig-pull/service/status): retorna o status do serviço. Valores possíveis de retorno são "alive", quando o serviço estiver em execução; "stopped", quando estiver parado; e "disabled" quando o modo "pull" estiver desabilitado.

A classe com.totvs.fluig.idm.pull.FluigPuller, que implementa o serviço de busca de operações, utilizará o REST client, versão 1.5.0, disponibilizado pela equipe do Identity, para consumir os serviços REST necessários para verificação e consumo das filas de operação.

A classe que implementa o REST client é com.totvslabs.idm.rest.client.FluigIdentityRestClient. Os métodos que serão utilizados estão listados abaixo:

TarefaMétodoParâmetrosRetorno
Obter as operações pendentes para o aplicativo

client.getCompanyAppService().getPendingOperationsForApplication()

String companyId

String applicationId

List<PendingOperationsDTO>
Endpoint no Identity: GET /rest/v2/companies/{companyId}/apps/{appId}/pending-app-operations
Obter os usuários com operações pendentes

client.getCompanyAppService().getPendingUsersForApplication()

String companyId

String applicationId

List<String>
Endpoint no Identity: GET /rest/v2/companies/{companyId}/apps/{appId}/pending-app-users
Obter operações pendentes para o usuário

client.getCompanyUserService().getPendingUserOperationsForApplication()

String companyId

String userId

String applicationId

List<PendingOperationsDTO>
Endpoint no Identity: GET /rest/v2/companies/{companyId}/users/{userId}/apps/{appId}/pending-user-operations
Limpar a fila de operações do aplicativo

client.getCompanyAppService().clearPendingOperationsForApplication()

String companyId

String applictionId

List<String> operationIds

boolean
Endpoint no Identity: POST /rest/v2/companies/{companyId}/apps/{appId}/clear-app-operations
Limpar a fila de operações do usuário

client.getCompanyUserService().clearPendingUserOperationsForApplication()

 

String companyId

String userId

String applicationId

List<String> operationIds

boolean
Endpoint no Identity: POST /rest/v2/companies/{companyId}/users/{userId}/apps/{appId}/clear-user-app-operations


A classe com.totvslabs.idm.common.model.PendingOperationsDTO conterá os dados das operações obtidas do Identity. Dependendo do valor contido no atributo operationName, o Datasul, através da classe com.totvs.fluig.idm.pull.OperationProcessor, direcionará a operação para a rotina de processamento correspondente. A implementação do modo "push" concentrou o processamento das operações nos serviços REST chamados diretamente pelo Identity e implementados pelas classes com.totvs.fluig.user.resource.UserResourceSCIMv2, com.totvs.fluig.resource.resource.ResourceResouce e com.totvs.fluig.entitlements.resource.EntitlementsResource. Com desenvolvimento do modo "pull", será necessário desacoplar as lógicas de processamento, colocando-as em novas classes, para que sejam reutilizadas pela classe OperationProcessor. As classes originais, dos serviços REST do modo "push", passarão a utilizar as novas classes também. A seguir, a relação entre as classes: 

 

 

Método

Classe Original

Nova Classe

createUser

UserResourceSCIMv2com.totvs.fluig.user.service.UserGroupConnector
inactivateUserUserResourceSCIMv2

com.totvs.fluig.user.service.UserGroupConnector

createResourceResourceResouce

com.totvs.fluig.resource.service.ResourceConnector

updateResourceResourceResoucecom.totvs.fluig.resource.service.ResourceConnector
deleteResourceResourceResoucecom.totvs.fluig.resource.service.ResourceConnector
linkResourceResourceResoucecom.totvs.fluig.resource.service.ResourceConnector
unlinkResourceResourceResoucecom.totvs.fluig.resource.service.ResourceConnector
addEntitlementsEntitlementsResource

com.totvs.fluig.user.service.UserGroupConnector

removeEntitlementsEntitlementsResourcecom.totvs.fluig.user.service.UserGroupConnector


Para cada operação obtida, haverá um tipo de dado associado (atributo dataType), que definirá a forma como os dados da operação estarão estruturados. Na tabela a seguir, é possível ver o relacionamento entre o nome da operação e o tipo de dado (e a respectiva classe Java), bem como o método de processamento que será utilizado.

Operation Name

Data Type (Class)

MétodoColuna 2

PROVISIONING

FLUIG_USER (com.totvslabs.idm.common.extension.FluigUser)UserGroupConnector.createUser() 
DEPROVISIONINGUSER_ID (String)UserGroupConnector.inactivateUser() 
CREATE_RESOURCESRESOURCES_LIST (List<com.totvslabs.idm.common.extension.Resource>)ResourceConnector.createResource() 
UPDATE_RESOURCESRESOURCES_LIST ResourceConnector.updateResource() (List<com.totvslabs.idm.common.extension.Resource>)ResourceConnector.updateResource() 
DELETE_RESOURCESRESOURCES_LIST (List<com.totvslabs.idm.common.extension.Resource>)ResourceConnector.deleteResource() 
LINK_RESOURCESRAC_RESOURCES_DTO (com.totvslabs.idm.common.model.RACeResourceConnector.linkResource() 
UNLINK_RESOURCESRAC_RESOURCES_DTOResourceConnector.unlinkResource() 
ADD_ENTITLEMENTSRAC_RESOURCES_DTO_LISTUserGroupConnector.addEntitlements() 
REMOVE_ENTITLEMENTSRAC_RESOURCES_DTO_LISTUserGroupConnector.removeEntitlements()

 

 

Exemplo de Aplicação:

  • Criar o campo “% Mínimo Espécie” (AAA_PERESP) onde o usuário informará o % que o aluno pagará em dinheiro. Esse % poderá ser alterado durante a negociação.
  • Criar o campo “Referência Mínima para Cálculo” (AAA_REFCAL) onde o usuário informará um dos 4 valores disponíveis para pagamento das mensalidades  como a referência mínima para calcular o débito total do aluno.
  • Criar o parâmetro MV_ACPARNE que definirá se as informações de “% Mínimo Espécie” e “Referência Mínima para Cálculo” serão obrigatórias.
  • O parâmetro MV_ACPARNE deve ter as seguintes opções: 1=Obrigatório e 2=Opcional. Deve ser inicializado como opcional>.

 

Tabelas Utilizadas

  • SE2 – Cadastro de Contas a Pagar
  • FI9 – Controle de Emissão de DARF>.

    Opcional

    Protótipo de Tela

    Fluig Configurator

    Âncora
    pull_mode_field
    pull_mode_field

    Figura X - Novo campo - Modo Pull

     

    Opcional

    Fluxo do Processo 

    Figura 1 - Ações do administrador, relacionadas ao modo pull, executadas tanto no Identity quanto no ERP.

     

    Âncora
    pull_architecture
    pull_architecture

    Figura 2 - Arquitetura básica da solução.

    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

     

    (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.