Artigo
· Maio 12 9min de leitura

Python BPL em pré-visualização

BPL a 10.000 pés

BPL é uma sigla para Business Process Language (Linguagem de processamento de negócio).
Isso é um arquivo em formato XML para descrever a orquestração complexa de interações de informações entre sistemas.
A máquina de integração da InterSystems tem, há duas décadas, fornecido um editor visual para construir, configurar e manter o BPL usando uma interface gráfica. Você pode pensar nisso como se fosse desenhar um diagrama de fluxo de processo que pode ser compilado e implementado.

Um exemplo: faça uma xícara de chá


Componentes BPL são adicionados a produções de integração como qualquer outro componente de negócio embutido (fornecido pronto pela ferramenta) ou customizado.

Teste de exemplo de input (entrada) e output (saída)


Alguns desenvolvedores podem ter um estranhamento ao usar os diagramas BPL, pois podem ser favoráveis ao uso de Business Process em código puro. Entretanto, quando a a experiência da solução é aberta para outros conjuntos de habilidades num time (Analistas, Gerentes de projetos, testes e suporte), esses diagramas podem ser mais acessíveis e visualmente auto-descritivos do que comentários de código. Simplesmente mais pessoas podem ler e compreender uma visão de alto nível do que seguir um código. Isso reduz o tempo gasto pelo desenvolvedor para explicar a solução existente. Um diagrama BPL é um sumário técnico que está sempre atualizado.
Visualmente:

  • Avaliar o que foi implementado
  • Entender como as soluções existentes podem acomodar novas necessidades de negócio
  • Ver as dependências, critérios e escopo das colaborações de testes
  • Relembrar e guiar intervenções do suporte para soluções implementadas

Um diagrama BPL fornece várias construções importantes:

Requisição Um tipo de mensagem inicial de um Serviço ou Processo anterior que inicia o trabalho. Isso poderia ser, por exemplo, uma mensagem de admissão de um sistema de informação de um hospital.
Resposta Um tipo de mensagem opcional que pode ser populada durante, para transmitir  uma mensagem final a um processo subsequente ao completar o trabalho.
Contexto Uma coleção de propriedades utilizada para guardar o estado entre os passos lógicos de atividades em um diagrama BPL.
Atividades De atribuições, execução de SQL, ramificações e decisões lógicas a chamadas a outros processos das produções.

Abrindo o editor pelo Portal de Administração

Considerações para Python em BPL


Um princípio essencial para adicionar a nova competência de Python para o BPL é:


Empoderar soluções BPL existentes para serem melhoradas de maneira incremental com a nova funcionalidade de Python
 


Considere um só processo BPL que interage com 5 sistemas externos diferentes. Se houvesse sido escolhida uma abordagem de BPL desenvolvido inteiramente em Python, a reescrita e novos testes de um BPL completo existente seria inevitável.

Mesmo se uma conversão total de um BPL de ObjectScript para Python fosse trivial, um teste completo UAT de uma solução pode ser desafiador. Isso pode consumir muito tempo e ser restrito por disponibilidade de sistemas de teste retrógrados ou progressivos, além de especialistas de domínio departamental. Então, de um modo geral, "converter para Python" pode não valer o custo-benefício para melhorar BPLs existentes.
Portanto, uma abordagem de mistura de linguagens foi seguida.
Anteriormente, um BPL podia ser implementado em ObjectScript puro ou básico.
Agora um BPL pode ter uma linguagem de alto nível de ObjectScript, mas dentro desse escopo é livre para implementar ou configurar atividades específicas em Python usando sobreposição de linguagem. Isso facilita o acesso para competências de libraries Python disponíveis para BPLs existentes.

Combinações de linguagens:

Linguagem principal Sobreposição de Linguagem Comentários
Object Script  -  
Basic Não disponível  
Python  -  
Object Script Python Misturado
Python Object Script Misturado

Nova opção de linguagem principal para Python


Nova linguagem de sobreposição para atividades para misturar ObjectScript e Python.


Diagramas BPL agora incluem um novo ícone de linguagem Python. Uma discreta, porém familiar dica de onde a linguagem Python é usada pelas atividades. Isso é útil durante o desenvolvimento incremental, mas também ajuda a guiar consultas de melhora e suporte futuras. Esse ícone vai aparecer sempre que a respectiva Atividade de Linguagem de Sobreposição estiver definida como Python.

Reutilização da declaração de importação Python 
Expressões para Atividades no editor tem espaço limitado. Por exemplo:

Em Python, a expectativa é aproveitar alguma library. Contudo, expressões e condições foram encurtadas anteriormente.
Portanto, na Aba Geral do BPL existe uma nova sessão de importação para declarações de importação do Python.
Por trás dos panos, as importações são automaticamente ligadas ao contexto para cada expressão Python ou ativiade e código.

  • Portanto, isso possibilita o reuso, ao gerenciar importações em comum num mesmo lugar
  • Encurta as expressões de Python 

 

Adicionalmente, quando um código é implantado a um sistema em produção, existe uma chance de que alguma library de Python customizada ou de terceiros não esteja disponível. Nesse caso, um erro especial é escrito no log de eventos normal da integração para o time de suporte.
or exemplo: importação de library faltando na produção.

Quando falta alguma library Python, o business process será finalizado pela máquina de integração por padrão. Contudo, o time de suporte pode achar utilidade em lidar com erros específicos de uma maneira particular, enquanto uma remediação de longo prazo é providenciada. Com isso em mente, a importação Python tem um erro específico que pode ser tratado pelas configurações padrão da produção. Por exemplo:


Isso captura o erro de import e escreve uma advertência para o log de eventos da integração. Mantém o processo BPL rodando em produção.

A ação de resposta "S" suspende a mensagem atual e segue para a próxima. O processo continua rodando.

 

Código acontece

Ao invés de desencorajar atividades de código Python, a ideia é fazer a entrada de Python no editor BPL mais produtiva.
Por trás dos panos, cada bloco de código Python é envolto em um Try-Except do que retorna um erro específico de integração.
De uma maneira similar às importações de código, o suporte pode gerenciar os erros de código em tempo de execução configurando o código de ação de resposta E#2603.
Isso permite reportar alertas para diferenciar entre erros de importação de pacotes (DevOps) e tempo de execução (código de desenvolvedor), para que o suporte escolha  o recurso secundário correto para resolução. I.e.:
Um código de atividade em Python que lança um erro de "dividir por zero" durante a execução.


Configure o processo para suspender a mensagem para tratar quando erro de execução ocorre:


Detalhe do exemplo de erro capturado no Log de Eventos de Integração.

 

Indentação de Código

 O editor BPL facilita a normalizar o caractere usado para indentação. Isso é necessário para envolver códigos de desenvolvimento em blocos de try-except. Assim, se o código é copiado e colado dentro do editor, o caractere de indentação será normalizado para um só espaço, o que deixa os compiladores de Python alegres.

O editor fornece auto-indentação preambular enquanto você digita, para prestar assistência à entrada de código Python.
Exemplificando, o código a seguir pode ser entrado sem usar a barra de espaço para indentar.
 

Se a indentação de código está incorreta, o editor valida enquanto salva e aponta a linha de código com o problema. A validação de indentação é oferecida tanto no painel de atividade quanto no editor de valor pop-out.


O erro de validação mostra:

  • O número da linha do código fonte que contém o problema
  • O código fonte real
  • O erro de sintaxe Python

 

Câmbio de código ( Object Script para Python )

Object script usa apenas um "=" operador para igualdade e atribuição.
Enquanto isso, o Python usa "=" para atribuição e "==" para teste de igualdade.
Para mitigar esse tipo de problema de câmbio de contexto, o código Python é validado para sintaxe bem formada, de moto que qualquer ajuda de erro é exibida através do editor.
Exemplo: Python sugere o use de " == " ao invés de "=".

O erro mostra:

  • O número da linha do código fonte que contém o problema
  • O código fonte real
  • O erro de sintaxe Python e uma possível resolução.

Verificação de digitação e dicas para nome de classe IRIS e nome de método 

Não há prompt do intellisense para nomes de classe e de métodos.
Assim, a validação do editor foi estendida para capturar e sugerir nomes corretos quando o código Python é salvo.
Isso deve reduzir o número de operações de salvar / compilar durante o desenvolvimento, reduzir testes incrementais e dar mais confiança à qualidade do código.
O significado de verificação de digitação nesse contexto é para ajudar com diferenças comuns de grafia entre o inglês estadunidense e o inglês britânico.
Por exemplo, considere a palavra "Color" (cor) nos Estados Unidos, que é escrita como "Colour" no Reino Unido.
Nomes de classe e método são sensíveis a capitalização e isso é validado ao salvar.
Exemplo: capitalização incorreta em nome de classe.

Exemplo: uso de "s" ao invés de "z" no nome do método.


Operações de dicas de substituição:

Sequência parcial do nome Dicas de combinações sugeridas
$ or _ %
ise ize
tor ter
cie cei
our or
1 l


A detecção de "1" numérico para substituir pela letra "I" pode ser difícil de notar manualmente.
Se classes ou métodos IRIS estão faltando, estes serão sinalizados.

Esse comportamento funciona quando aspas simples ou duplas são usadas para especificar nomes de classes em código Python.
A validação ignora comentários de uma ou mais linhas para não atrapalhar a iteração de entrada de código.
Uma linha ignorada:

Linhas múltiplas ignoradas:

Variáveis de atividade do código

O editor fornece uma aba de contexto para configurar o tipo da requisição, resposta e contexto base, e propriedades de contexto.

As variáveis a seguir estão no escopo do Python, para serem utilizadas em códigos e expressões:

Nome da variável Tipo
process Ens.BusinessProcess
context Ens.BP.Context ou subclasse
request %Library.Persistent ou subclasse
response %Library.Persistent ou subclasse
status Ens.Util.PyByRef

Essas podem ser descobertas em código gerado e são usadas como qualquer outro método de Python embutido.
Note que métodos podem ser gerados em ambas as classes Thread e Contexto.

A variável de status é apoiada por um novo tipo de integração: PyByRef. Isso permite que os valores de status sejam passados de volta para o código de tratamento do BPL de integração.
Atribuir manualmente um status para uma nova mensagem de erro, por exemplo, em código Python:

status.value=iris.cls('%SYSTEM.Status').Error(5001,"My custom error message")

Note que o pacote "iris" está disponível em códigos ou expressões Python sem importação explícita. Isso é fornecido automaticamente pelo tratamento do BPL de integração. I.e.:

import iris
import traceback


Atividades de BPL possíveis em Python:

  • Alert (alerta)
  • Assign (atribuição)
  • Code (código)
  • Trace (rastreio)
  • If (se)
  • Case (caso) 
  • Branch (ramificação)
  • Milestone (marco)
  • While (enquanto)
  • Until (até)

Algumas mudanças às quais se atentar

O schema BPL agora suporta um novo atributo para sobreposição de linguagem.

O arquivo estático de aplicação web csp que dá suporte ao editor BPL mudou para contemplar as novas edições de Python e capacidade de validação.

Conclusões

Sejam Object Script, ou Python, ou uma mistura, escolhidos para implementação da integração, o BPL pode fazer a solução mais acessível e passível de suporte para uma mistura de habilidades e times.
O BPL trata de delegar o container de código, que normalmente seria uma classe, para a máquina de integração, com o objetivo de focar mais nas atividades que representam o problema de domínio do negócio.
A importação de Python reuse.helps simplifica expressões de ação. Isso automaticamente fornece tratamentos de erros que ajudam a informar o time de suporte e gerenciar soluções alternativas para dependências faltantes do Python em produção.
O edito ajuda via validação ao salvar, para dar qualidade aos blocos de código e expressões Python ao evidenciar a localização de problemas detectados e onde é possível providenciar uma sintaxe ou dicas de digitação de nomes de tipos IRIS. Isso deve reduzir testes iterativos e melhorar a produtividade do primeiro rascunho de código durante a implementação.

Para explorar mais as capacidades do BPL Python, leia a prévia em containers.intersystems.com

Discussão (0)1
Entre ou crie uma conta para continuar