5 de dezembro de 2023

Aumente sua produtividade usando as APIs APEX_STRING

 


Por John Dixon - Blog CLOUDNUEVA

Neste post, o autor revisa um série de exemplos das APIs PL/SQL APEX_STRING e APEX_STRING_UTIL.

apex_string.get_initials

Esta API permite extrair iniciais de uma determinada string. Isso pode ser útil ao exibir um nome de usuário abreviado em um ícone de avatar ou janela de bate-papo.

SELECT apex_string.get_initials(p_str => 'John Doe', p_cnt => 2) initials 
FROM dual UNION ALL
SELECT apex_string.get_initials(p_str => 'John doe', p_cnt => 3) initials 
FROM dual UNION ALL
SELECT apex_string.get_initials(p_str => 'John Frank Doe', p_cnt => 2) initials 
FROM dual UNION ALL
SELECT apex_string.get_initials(p_str => 'John Frank Doe', p_cnt => 3) initials 
FROM dual;
INITIALS
JD
JD
JF
JFD

apex_string_util.to_display_filesize

Esta API exibe um tamanho de arquivo legível pelo usuário. Ele altera dinamicamente a unidade de medida (GB, MB, KB, etc.) com base no número de bytes fornecidos. Isso é útil ao exibir uma lista de arquivos do SharePoint e seus tamanhos.

SELECT apex_string_util.to_display_filesize(p_size_in_bytes => 1312312312) file_size_dsp 
FROM dual UNION ALL
SELECT apex_string_util.to_display_filesize(p_size_in_bytes => 13123123) file_size_dsp
FROM dual UNION ALL
SELECT apex_string_util.to_display_filesize(p_size_in_bytes => 131231) file_size_dsp
FROM dual UNION ALL
SELECT apex_string_util.to_display_filesize(p_size_in_bytes => 1312) file_size_dsp
FROM dual;
FILE_SIZE_DSP
1.2GB
12.5MB
128.2KB
1,312 bytes

apex_string_util.get_domain

Esta API retorna a parte do domínio de um endereço de e-mail ou URL. Eu usei isso ao implementar o Social Sign-on com o Office 365. Eu o uso para determinar se o usuário conectado tem um endereço de email em uma lista de domínios de email com permissão para usar um aplicativo.

SELECT apex_string_util.get_domain (p_string => 'jon@cloudnueva.com') domain_name 
FROM  dual UNION ALL
SELECT apex_string_util.get_domain (p_string => 'https://www.cloudnueva.com/djddjdhjdhd') domain_name 
FROM  dual;
DOMAIN_NAME
cloudnueva.com
cloudnueva.com

apex_string.formato

Eu uso essa API principalmente para formatar mensagens de log. Isso me permite escrever a mensagem em inglês simples e injetar variáveis ​​na mensagem. Acho isso mais fácil de ler (e manter) do que concatenar valores.

BEGIN
  dbms_output.put_line (apex_string.format('Customer Number [%s], is invalid. Message [%s]',
                        '2226S', 'Customer Disabled'));
  -- The code below produces the same result but I find
  --  the above code easier to read and maintain.
  dbms_output.put_line ('Customer Number [' || '2226S' || 
                        '], is invalid. Message [' || 'Customer Disabled' ||']');
END;
/
Customer Number [2226S], is invalid. Message [Customer Disabled]
Customer Number [2226S], is invalid. Message [Customer Disabled]

apex_string.split

Mais: split_numbers e split_clobs

Esta API é o pão com manteiga dos desenvolvedores APEX. É benéfico ao implementar APEX Popup LOV ou Combo Boxes (novo no APEX 23.2) que permitem seleção múltipla. Eles permitem que você pegue uma string delimitada e transforme-a em uma tabela.

Por exemplo, podemos pegar a seguinte lista de IDs de itens retornados de uma LOV Popup: 233:528:971:1868:2232:3067:4656e transformá-los em uma tabela da seguinte forma:

SELECT column_value
FROM   TABLE(apex_string.split_numbers(p_str => '233:528:971:1868:2232:3067:4656', 
                                       p_sep => ':'));
COLUMN_VALUE
233
528
971
1868
2232
3067
4656

Isso nos permite usar a lista em nosso SQL assim:

SELECT *
FROM   mdm_items
WHERE  item_id MEMBER OF 
  (SELECT apex_string.split_numbers(p_str => :P10_ITEM_IDS, 
                                    p_sep => ':') FROM dual);

Resultados de apex_string.split_number

apex_string_util.find...

A série de APIs 'find' ajuda você a encontrar objetos específicos dentro de uma string.

Por exemplo, eu uso apex_string_util.find_linkspara encontrar URLs em um campo APEX Rich Text. Isso pode ser útil se você precisar verificar os links inseridos por um usuário em um campo Rich Text antes de permitir que ele seja salvo.

SELECT column_value
FROM   apex_string_util.find_links
         (p_string => '<p>Click <a href="https://www.google.com">here</a> or Click <a href="https://www.abc.com">here</a></p>');
COLUMN_VALUE
https://www.google.com
https://www.abc.com

Da mesma forma, apex_string_util.find_email_addressesextrai uma matriz de endereços de e-mail de uma string:

SELECT column_value
FROM   apex_string_util.find_email_addresses
         (p_string => 'Email Jon at jon@cloudnueva.com and Bill at bill@abc.com tomorrow.');
COLUMN_VALUE
jon@cloudnueva.com
bill@abc.com

Finalmente, apex_string_util.find_tags extrai uma lista de Tags de uma string:

SELECT column_value
FROM   apex_string_util.find_tags (p_string => 'We love #orclAPEX# and #orclORDS!',
                                   p_prefix => '#');
COLUMN_VALUE
#ORCLAPEX
#ORCLORDS

apex_string.push

Esta API permite manter uma matriz simples de valores. Isso pode ser útil se você precisar capturar valores durante um processo PL/SQL de longa execução para poder retornar a eles mais tarde. Forneci um exemplo detalhado em uma postagem anterior Trabalhando com Arrays em APEX e PL/SQL .

apex_string.plist...

plistsérie de APIs permite manter pares de valores-chave em um array PL/SQL. Também forneci um exemplo detalhado dessa API no post anterior, Trabalhando com Arrays em APEX e PL/SQL .

apex_string_util.get_slug

Esta API remove espaços, pontuação e caracteres especiais de uma string. Ele retorna no máximo 255 caracteres. Um Slug é a parte de identificação exclusiva de um endereço da web, normalmente no final do URL. Também usei essa API para gerar uma string exclusiva com base em uma string de entrada.

select apex_string_util.get_slug (p_string => 'Jon Dixon', p_hash_length => 10) from dual
union all
select apex_string_util.get_slug (p_string => 'Jon Dixon', p_hash_length => 10) from dual
union all
select apex_string_util.get_slug (p_string => 'This is a sentence. Some random characters ~!@#$%^&*()-=') from dual;
COLUMN_VALUE
jon-dixon-0168304377
jon-dixon-2968790994
this-is-a-sentence-some-random-characters

apex_string_util.replace_whitespace

Finalmente, a API apex_string_util.replace_whitespace permite remover espaços em branco de uma string e substituí-la por outro caractere. Nota: esta API não remove todos os caracteres especiais da string original.

select apex_string_util.replace_whitespace
 (p_string => 'This is a sentence. Some random characters ~!@#$%^&*()-=',
  p_whitespace_character => '+') from dual;
REPLACED_WHITESPACE
+this+is+a+sentence+some+random+characters+~+@+$%^&*+=+

Conclusão

Vale sempre a pena lembrar das APIs (PL/SQL e JavaScript) que o APEX tem a oferecer. Mesmo que sejam necessárias apenas dez linhas de código para escrever uma função utilitária, é melhor usar uma função APEX e deixar a equipe de desenvolvimento do APEX se preocupar em mantê-la e aprimorá-la.

.

📌
Deixarei para você um URL para fixar na barra de favoritos. Este URL sempre levará você à documentação das APIs PL/SQL da versão atual do APEX: https://apex.oracle.com/api

Nenhum comentário:

Postar um comentário