Criação de um arquivo de lógica Python para aplicativos de processo

Para criar um aplicativo de processo personalizado, você deve criar e carregar um arquivo de lógica Python. O arquivo de lógica Python extrai e transforma seus dados, que se tornam a fonte de dados para seu projeto de mineração de processos.

Conclua as etapas a seguir para criar um arquivo de lógica python:

  1. Faça o download e abra o modelo de arquivo lógico python.
  2. Especifique o ponto de entrada.
  3. Especificar variáveis configuráveis.
  4. Opcional: Defina uma configuração de agenda para as opções de atualização de dados.
  5. Especifique o formato dos dados de saída.
  6. Opcional: tratar exceções no código Python.

Especificando o ponto de entrada

O ponto de entrada ou a função de entrada serve como entrada para o processo de transformação de dados. Sem um ponto de entrada definido no arquivo lógico, a transformação de dados falha antes mesmo de começar.

Esse é o ponto de entrada no modelo de arquivo lógico python:

def execute(context):

Especificação de variáveis configuráveis

As variáveis configuráveis calculam o processo de transformação de dados. Elas incluem variáveis dinâmicas, como token key, server ou systemURL, username, e password, e outros campos de entrada dinâmicos.

Se você especificar as variáveis, posteriormente o usuário poderá configurar os dados do log de eventos quando usar o aplicativo de processo. Para obter mais informações, consulte Definição de entradas de usuário.

A partir de Process Mining 1.14.3, não há mais suporte para a obtenção de variáveis configuráveis como definição de variáveis de ambiente.

Você pode especificar variáveis configuráveis em um aplicativo de processo personalizado usando um objeto configurável dos objetos de contexto. As variáveis de configuração estão disponíveis em um dicionário Python que você pode recuperar usando a sintaxe context.config . No exemplo a seguir, você define a função execute como um parâmetro context :

def execute(context): 
config = context[“config”] 
# example retrieving an input property named ‘URL’ 
url = config[“URL”]

Se a fonte de dados brutos que o usuário do seu aplicativo de processo carrega estiver no formato .CSV , você poderá configurar o arquivo de lógica Python para transformar os dados em fonte para o seu projeto de mineração de processos. Antes de fazer o upload dos dados, o usuário deve transformar o arquivo do formato .CSV para o formato .zip . Em seguida, o arquivo lógico Python acessa o arquivo .zip para realizar a transformação de dados necessária no mesmo local de diretório.

O arquivo lógico também pode recuperar o nome do arquivo .zip carregado a partir do contexto JSON que é passado para a função execute do arquivo lógico. O nome da chave para o nome do arquivo lógico carregado é fileUploadName e o valor é o nome do arquivo .zip carregado. Por exemplo, se o nome do arquivo .zip carregado for "Input_sample.zip", o arquivo lógico poderá recuperar o nome do arquivo .zip usando o seguinte comando:

def execute(context): 
# Example retrieving the name of an uploaded zip file 
myFileUploadName = context[“fileUploadName”] 

Opcional: Definir uma agenda para as opções de atualização de dados

Como usuário de um aplicativo de processo personalizado, você tem duas opções de agendamento para gerenciar as atualizações dos dados do log de eventos do seu processo:

  • O método de substituição, no qual a fonte de dados existente é substituída. A fonte de dados do projeto anterior é desconsiderada. A nova fonte de dados é processada com base em suas necessidades: você pode escolher a frequência com que os dados são substituídos ou usar um calendário para definir um horário preferencial para a substituição de dados.

    Se você quiser usar apenas o método de substituição, não precisará fazer nenhuma alteração adicional no arquivo de lógica Python.

  • O método de atualização incremental, em que novos dados são adicionados à fonte de dados do projeto existente. Tanto os dados anteriores quanto os novos são usados em seu projeto.

    Se quiser usar o método de atualização incremental, você deverá definir o arquivo lógico associado Python para gerar um cronograma para buscar novos dados de uma fonte externa. Para fazer isso, especifique duas variáveis-chave, lastScheduleExecutionDate e lastScheduleExecutionTimezone, que são fornecidas no arquivo lógico Python.

    As variáveis lastScheduleExecutionDate e lastScheduleExecutionTimezone são essenciais para operações lógicas no script Python, permitindo a obtenção incremental de novos dados de registro de eventos com base na última data de execução bem-sucedida do agendamento e no fuso horário.

    Você pode acessar as variáveis lastScheduleExecutionDate e lastScheduleExecutionTimezone por meio do objeto de contexto. Essas variáveis podem ser acessadas no arquivo de lógica Python usando o dicionário de contexto. Isso é passado para a lógica do site Python por meio da função execute:

    last_schedule_execution_date = context["lastSuccessfulExecution"]["lastScheduleExecutionDate"]
    last_schedule_execution_timezone = context["lastSuccessfulExecution"]["lastScheduleExecutionTimezone"]
    …
    # Subsequent code using last_schedule_execution_date and last_schedule_execution_timezone
    if last_schedule_execution_date and last_schedule_execution_timezone:
       # Logic using the last scheduled execution date and timezone
    

Analisar os dados de last_schedule_execution no formato ISO 8601

A data e a hora da última execução programada (ou seja, a last_schedule_execution_date) estão no formato ISO 8601 (aaaa-MM-dd'T' HH:mm:ss.SSS ). Depois de recuperar os dados e o fuso horário, conforme mostrado no exemplo anterior, você pode analisar os dados do site last_schedule_execution em uma cadeia de formato ISO 8601 da seguinte maneira:

from datetime import datetime
import zoneinfo

...

timezone = zoneinfo.ZoneInfo(last_schedule_execution_timezone )

# Parse the ISO 8601 formatted date string
date = datetime.fromisoformat(last_schedule_execution_date ).astimezone(timezone)

Observação: para o processamento de fuso horário, é recomendável usar o módulo Python zoneinfo .

Se o arquivo lógico tiver a intenção de ser incremental, essas variáveis serão declaradas globalmente da seguinte forma:


LAST_SCHEDULE_EXECUTION_DATE = None
LAST_SCHEDULE_EXECUTION_TIMEZONE = None

...

def execute(context):
   LAST_SCHEDULE_EXECUTION_DATE = context["lastSuccessfulExecution"]["lastScheduleExecutionDate"]
   LAST_SCHEDULE_EXECUTION_TIMEZONE = context["lastSuccessfulExecution"]["lastScheduleExecutionTimezone"]

Como o serviço Python chama a função execute , ele passa o contexto para sua função de execução e, como resultado, tanto LAST_SCHEDULE_EXECUTION_DATE quanto LAST_SCHEDULE_EXECUTION_TIMEZONE são definidos.

Para o primeiro ETL, os valores LAST_SCHEDULE_EXECUTION_DATE e LAST_SCHEDULE_EXECUTION_TIMEZONE devem ser None (Nenhum). Portanto, onde quer que você esteja usando essas variáveis em sua lógica. O primeiro ETL é executado sem os valores e uma verificação pode ser usada da seguinte forma:

if LAST_SCHEDULE_EXECUTION_DATE and LAST_SCHEDULE_EXECUTION_TIMEZONE:
   timezone = zoneinfo.ZoneInfo(last_schedule_execution_timezone )
   date = datetime.fromisoformat(last_schedule_execution_date ).astimezone(timezone)  
Observação: se você enviar esse formato de data para uma API remota, a data analisada anterior presumirá que o formato é o esperado pela API remota. Caso contrário, você pode usar a análise para converter para o formato apropriado esperado pela API remota.

Especificação do formato de dados de saída

O ponto de entrada, que você define no arquivo lógico, retorna a saída do processo de transformação de dados. O formato de saída deve ser um objeto Python DataFrame , que é uma estrutura de dados para manipular e armazenar dados em Python. A saída do processo de transformação de dados no arquivo lógico deve ser pandas ou polars, que são os dois módulos DataFrame . No exemplo a seguir, você configura o objeto DataFrame :

   def output(event_list): 
      return pd.DataFrame(event_list) 
   def execute(context): 
      extract_and_transform(context) 
      return output(event_list)
Observação: No exemplo, você precisa alterar as funções de acordo com seus requisitos para o arquivo lógico.

Tratamento de exceções no código Python

Para informar o usuário do aplicativo de processo sobre credenciais inválidas ou perda de conexão com um sistema externo, você pode configurar o código Python para enviar uma exceção dedicada denominada ProcessAppException na interface do usuário do aplicativo de processo. O trecho de código a seguir apresenta um exemplo de configuração do site ProcessAppException :

   from process_app import ProcessAppException 
   def execute(context): 
      # Example raising a ProcessAppException 
      raise ProcessAppException("cannot connect to the system")