quarta-feira, 31 de março de 2021

Como disparar ação dinâmica quando fecho o modal no X

 Olá pessoal,

espero que todos estejam bem.

Hoje vamos falar sobre uma dúvida recorrente que é como disparar uma ação dinâmica quando fechamos a caixa de diálogo modal no X.

Antes de dar a solução, primeiro vamos explicar alguns conceitos.

Há duas opções de ações que podem ocorrem quando uma caixa de diálogo é fechada: Close Dialog (Fechar Caixa de Diálogo) e Cancel Dialog (Cancelar Caixa de Diálogo).


O Close Dialog é um evento que deve ser acionado quando você fez alguma ação na página modal e agora quer fechá-la. Este evento é disparado normalmente quando você pressiona um botão, por exemplo o botão "Criar", "Excluir", "Aplicar alterações" etc.

O Cancel Dialog é um evento que deve ser acionado quando você simplesmente quer fechar sem ter feito ação alguma no modal. Normalmente ocorre quando o modal é fechado no "X" ou no botão de "Cancelar".

Um problema comum é que muitos usuários querem disparar ação dinâmica quando o evento Cancel Dialog é disparado, normalmente quando o usuário fecha a caixa de diálogo modal no "X". Como os dois eventos (Close Dialog e Cancel Dialog) internamente são acionados pelo evento javascript personalizado "dialogclose" do APEX, a solução é bem simples: você deve criar na página que abre o modal uma ação dinâmica que seja acionada pelo Evento Personalizado: "dialogclose" para o Seletor JQuery: body.


Espero que tenha gostado!

Até a póxima.



sábado, 7 de novembro de 2020

Itens do aplicativo - diferença entre escopo global vs aplicativo

 Olá pessoal,


sabia que o valor de um item do aplicativo pode ser compartilhado entre aplicações do mesmo espaço de trabalho?

Para demonstrar isso, iremos criar duas aplicações em que cada uma delas conterá 2 itens: um com escopo global e outro de aplicativo.

Veremos que o item com escopo de aplicativo só é válido em uma sessão de um único aplicativo e o item com escopo global pode ser compartilhado com outra aplicação desde que compartilhe a mesma sessão.

Detalhe: o compartilhamento de sessão só é permitido entre aplicações do mesmo espaço de trabalho!

Iremos criar um processo para incrementar o valor dos itens e apresentar os valores na tela para ver a diferença.

(Caso queira apenas ver o resultado final, acesse os Passos 8, 12, 13, 14)

Para isso vamos fazer o seguinte:

Criação da aplicação 1

Passo 1 - Acesse "App Builder" > "Criar" > "Novo Aplicativo", defina o Nome para "Aplicação 1" e pressione "Criar Aplicativo".




Após isso, vamos criar um item de aplicativo com escopo global

Passo 2 - Acesse "Componentes compartilhados" > "Itens do Aplicativo" >  "Criar", defina o Nome como "G_GLOBAL", o Escopo para "Global" e pressione "Criar Item do Aplicativo".

Após isso, vamos criar um item de aplicativo com escopo de aplicativo

Passo 3 - Acesse "Componentes compartilhados" > "Itens do Aplicativo" >  "Criar", defina o Nome como "G_APLICATIVO", o Escopo para "Aplicativo" e pressione "Criar Item do Aplicativo".

Para poder compartilhar um item global é necessário habilitar o compartilhamento de sessão.

Passo 4 - Acesse "Componentes compartilhados" > "Esquemas de Autenticação" > Selecione o esquema de autenticação atual > Em Compartilhamento de Sessão escolha o Tipo: "Compartilhamento de Espaço de Trabalho" e clique em "Aplicar Alterações".

Agora vamos criar uma região para exibir o valor dos itens.

Passo 5 - Acesse a página 1 no Designer de Página, clique com o botão direito do mouse em Content Body, escolha "Criar Região", defina como Texto de Origem da região com o código abaixo. (IMPORTANTE: Substitua XYZ pelo id da aplicação que será criada nos próximos passos.


<a href="f?p=XYZ::&APP_SESSION.">Acessar outra aplicação na mesma sessão</a>

<p><p>Global: &G_GLOBAL.

<p>Aplicativo:&G_APLICATIVO.



Agora vamos criar um botão para manipular o valor dos itens.

Passo 6 - Crie um botão na nova região e coloque como Nome do Botão: "INCREMENTAR".

Vamos agora definir o processo que será executado ao clicar no botão.

Passo 7 - Na aba Processamento, crie um Processo chamado "Incrementa itens" e defina para executar o código abaixo:

:G_GLOBAL := NVL(:G_GLOBAL,0) + 1;

:G_APLICATIVO := NVL(:G_APLICATIVO,0) + 1;


Passo 8 Execute a aplicação e clique 5 vezes no botão para incrementar os dois itens para o valor 5.


Agora vamos duplicar a aplicação

Passo 9 - Acesse a página de edição do aplicativo e no canto direito clique em "Copiar este Aplicativo", siga o wizard definindo o novo nome do aplicativo para "Aplicação 2" e o id do aplicativo para o mesmo id definido como XYZ no Passo 5.


Vamos trocar as referências ao termo "Aplicação 1" para "Aplicação 2".

Passo 10 - Na Aplicação 2, clique no ícone de pesquisa no canto superior direito e pesquise pelo termo "Aplicação 1". No relatório que aparece vá clicando no botão "Exibir" e troque todas as referências ao termo "Aplicação 1" por "Aplicação 2".



Agora na Aplicação 2 vamos trocar o link que se encontra na página 1 para que aponte para a Aplicação 1.

Passo 11 - Acesse a página 1 no Designer de Página, na região nova, altere o link para ABC, onde ABC representa o id da Aplicação 1.



Vamos testar?


Passo 12 - Volte para a Aplicação 1 e clique no link para ir para a Aplicação 2 e repare que o item global já está com o valor 5, ou seja, o item foi compartilhado entre as aplicações na mesma sessão. Entretanto, o item de aplicativo não foi inicializado ainda.


Passo 13 - Clique em Incrementar 10 vezes até o item Global ter o valor 15 e o item de aplicativo o valor 10.


Passo 14 - Clique no link para voltar para a Aplicação 1 e veja que o valor do item global também estará 15 e o valor do item com escopo de aplicativo permaneceu com o valor 5.



Espero que tenha gostado.

Até a próxima!


sexta-feira, 25 de setembro de 2020

Explorando o código das páginas do APEX

 Olá,


já precisou saber como o APEX implementa determinada funcionalidade?

Recentemente precisei saber como o App Builder do APEX fazia a exportação e importação de uma aplicação, entretanto, como consultar o código do App Builder?

Como você deve saber, o App Builder é uma aplicação APEX. Basta reparar na URL o "f?p=4000".





Para entender como as aplicações do APEX (App Builder, SQL Workshop etc) funcionam por dentro faça o seguinte:

1) Baixe o arquivo de instalação da versão desejada do APEX em http://apex.oracle.com/download

2) Descompacte o arquivo baixado

3) Acesse a pasta apex > builder

Repare acima que os arquivos na pasta "apex > builder" são fXXXX.sql onde XXXX é o número da aplicação APEX. Essas aplicações são acessadas quando você utiliza o APEX.

4) Logue em algum espaço de trabalho, acesse o App Builder e clique no botão "Importar"

5) Selecione o arquivo desejado e clique em "Próximo >". 

(Na imagem abaixo foi selecionado o AppBuilder, que é a aplicação f4000.sql)

Obs: Esta tela de importação é do APEX 20.1. Em outras versões do APEX a tela pode ser ligeiramente diferente.

6) Clique novamente em "Próximo >"



7) Como sugestão é interessante alterar o ID do aplicativo para um número similar ao da aplicação APEX original. Para isso, selecione "Alterar ID da aplicação" e no campo "Novo Aplicativo" digite 100 antes do número do aplicativo original. No nosso exemplo 1004000, pois a aplicação original tinha o ID 4000.



8) Clique em "Instalar Aplicativo"


Pronto! Agora você pode acessar a aplicação recém-instalada e verificar o código de cada uma das páginas.

Um detalhe é que você provavelmente não conseguirá executar a aplicação, pois deverá faltar privilégios nos objetos de banco internos do APEX, mas isso não impedirá de explorar o código de cada uma das páginas!

Espero que tenha sido útil!

Até a próxima!

terça-feira, 21 de julho de 2020

Número máximo de requisições de serviços Web por espaço de trabalho

Olá pessoal,

A partir da versão 18, o APEX implantou funcionalidade de serviços Web que utiliza recursos do ORDS (Oracle REST Data Service).

Como segurança, uma das alterações que foram implementadas foi o controle no número máximo de requisições de serviços Web por espaço de trabalho.

Quando o número máximo de requisições é atingido, ocorre o erro:

ORA-20001: Você excedeu o número máximo de mensagens de solicitações de serviço Web por espaço de trabalho.

A mesma mensagem em inglês é:

ORA-20001: You have exceeded the maximum number of web service requests per workspace


Para verificar quantas requisições foram feitas nas últimas 24 horas, utilize  a seguinte consulta no Comandos SQL:

select count(*)
from APEX_WEBSERVICE_LOG 
where REQUEST_DATE > sysdate - 1

Caso seja necessário, aumente o número máximo de requisições de serviços Web permitidos em 24 horas para todos os espaços de trabalho nesta instância do APEX. Esta definição é feita em um único local e vale para todos os espaços de trabalho. Entretanto, é possível configurar um valor mais específico para um determinado espaço de trabalho.


Para fazer o aumento do número máximo de requisições permitidas para todos os espaços de trabalho no nível da instância, acesse o Internal > "Gerenciar Instância" > "Segurança" na seção "Isolamento de Espaço de Trabalho" defina para o valor desejado a propriedade "Número Máximo de Solicitações de Serviço Web"



No exemplo acima, definimos para 100000 o número máximo de requisições para cada espaço de trabalho.

Caso queira definir um valor diferenciado apenas para um determinado espaço de trabalho, acesse o Internal > "Gerenciar Espaços de Trabalho" > "Espaços de Trabalho Existentes", pesquise pelo espaço de trabalho desejado, clique no link da coluna "Nome do Espaço de Trabalho", na seção "Isolamento de Espaço de Trabalho" defina para o valor desejado a propriedade "Número Máximo de Solicitações de Serviço Web"



Na imagem acima, definimos para 500.000 o número máximo de requisições de Solicitações de Serviço Web para um espaço de trabalho específico, enquanto os outros continuam como o número máximo em 100.000.

Espero que tenha gostado.

Até a próxima!

domingo, 31 de maio de 2020

URL amigável do APEX

Olá pessoal,

há algum tempo fiz uma postagem sobre como funciona a URL "f?p=" do APEX. Na versão 20.1, surgiu a Friendly URL, que numa tradução literal seria URL amigável, mas a equipe do APEX traduziu para URL simples.

Veja um exemplo da nova URL:

https://apex.oracle.com/pls/apex/meu_workspace/r/minha_aplicacao/minha_pagina
?P2_COD=1
&P2_OUTRO_ITEM=10
&debug=YES
&request=minha_requisicao
&clear=RR
&printerFriendly=YES
&session=32902354289930
&cs=89A65BDFDA2EE4DF932C09E678

Onde está escrito "meu_workpace" é o Prefixo de Caminho e deve ser definido no menu "Administração" que fica no canto superior direito do APEX.
Após isso, selecione a opção "Gerenciar Serviço" > "Definir Preferências do Espaço de Trabalho"

Veja na imagem abaixo que definimos para MEU_WORKSPACE.
Observação: Mesmo que o Prefixo de Caminho seja definido em maiúscula, o APEX considera minúscula na URL. Se utilizar letras maiúsuclas na URL no Prefixo de Caminho, NÃO funciona!


O "r" é um termo obrigatório no APEX e não podemos alterar.

O termo "minha_aplicacao" é o apelido da aplicação.  Veja que definimos o apelido com letras maiúsculas, mas na URL utilizamos minúsculas. Neste caso, o APEX não é case sensitive (não é sensível a maiúsculas e minúsculas). Tanto faz utilizar maiúsculas ou minúsculas na URL que vai funcionar.
Obs: Caso não seja definido um alias, o APEX utiliza o número da aplicação na URL.


O próximo termo é o apelido da página, que também não é case sensitive.
Obs: Caso não tenha definido um apelido para a página, o APEX utilizará o número de página.

Repare que os outros parâmetros na URL são os mesmos que eram definidos antes de maneira posicional. Agora a ordem dos parâmetros não importa!

Por que o APEX fez esta funcionalidade de URLs mais amigáveis?

Não é só para ficar mais bonitinho! O principal objetivo foi permitir a indexação das aplicações pelos sites de busca.

Espero que tenha gostado!

Até mais!

terça-feira, 26 de maio de 2020

Criando conjunto de dados de amostra no APEX

Olá,

vamos mostrar como criar um Conjunto de Dados de Amostra (ou Sample Dataset) no APEX.

A funcionalidade "Conjuntos de Dados de Amostra" surgiu na versão APEX 18.1 e permite a criação de tabelas e de dados de demonstração relacionados a um determinado tema, como por exemplo: Dados de RH, Dados de Projeto, EMP/DEPT, Países, Pedidos de Clientes, Planilha de Tarefas.

Os dados estão disponíveis em diversos idiomas. Até a versão 20.1 infelizmente NÃO há a possibilidade do idioma Português.

É possível instalar, atualizar ou remover os dados e os objetos de banco de dados.

Neste post iremos instalar as tabelas EMP/DEPT em inglês e depois em espanhol, seguindo o passo a passo a seguir.

1) Para acessar esta funcionalidade acesse: SQL Workshop > Utilitários > Conjunto de Dados de Amostra.


2) Clique no botão "Instalar" a frente da linha do conjunto "EMP/DEPT".


3) Selecione o idioma (English) e o esquema. Clique "Próximo".
Obs: Repare que há diversas opções de idiomas para os dados das tabelas EMP/DEPT, mas NÃO há a opção de Português.



4) Confira os objetos de banco que serão instalados e clique em "Instalar Conjunto de Dados".


 5) A tela a seguir indica que os objetos foram instalados com sucesso.
Há duas opções: "Criar Aplicativo" a partir destes objetos ou "Sair".
Como o escopo deste post é apenas os dados, clicaremos "Sair".
Obs: Em algumas versões do APEX, caso você clique no X em vez do botão Sair, os objetos NÃO são criados! Portanto, para sair, sempre clique no botão "Sair"!

6) Para conferir os dados, vá para o Comandos SQL e execute consulta na tabela EMP.

SELECT * FROM EMP;



7) Agora vamos alterar o idioma dos dados. Para isso, vá novamente em SQL Workshop > Utilitários > Conjunto de Dados de Amostra e clique no botão "Atualizar" a frente da linha do Conjunto EMP/DEPT.


8) Selecione o Novo idioma (Neste post vamos selecionar Spanish - Espanhol) e clique no botão "Próximo".

Obs: Caso queira Remover o Conjunto de Dados, há um botão no rodapé desta tela.



9) Verifique os objetos que estão sendo atualizados e clique "Substituir Idioma".


10) Na tela de resultado do carregamento, verifique se ficou tudo ok e clique em "Sair".


11) Ao executar novamente a consulta na tabela EMP no Comandos SQL, verifique que os nomes e os "jobs" dos empregados estão em espanhol. (Compare com o resultado obtido no item 6).


Pronto! Agora você sabe como incluir um conjunto de dados para amostra (ou teste).

Espero que tenha gostado!

Até a próxima!