Você pode gravar programas em qualquer linguagem que suporte um dos seguintes tipos de programas: executável, programa batch, biblioteca de ligação dinâmica ou procedimento armazenado.
Se o programa definido pelo usuário for do tipo executável, programa batch, arquivo de comandos batch ou biblioteca de ligação dinâmica, ele deverá residir no local do agente. O agente do warehouse inicia o programa no horário programado. No Windows NT, o agente é executado como um processo do sistema por definição, o que significa que o programa não pode acessar recursos ou programas que requerem uma ID de usuário. Além disso, todas as variáveis de ambiente que o programa precisa acessar devem ser variáveis do sistema.
Se você gravar programas definidos pelo usuário usando o Object REXX para Windows, complete o seguinte procedimento para possibilitar que os programas sejam executados no Windows NT:
DB2 CONNECT TO testdb USER db2admin USING db2pass
Se o programa definido pelo usuário tiver o tipo procedimento armazenado, o programa deverá residir no banco de dados do warehouse associado à etapa que executa o programa.
No tempo de execução, o Centro de Data Warehouse gera uma lista de parâmetros da linha de comandos que ele transmite como entrada ao programa definido pelo usuário. Sempre que possível, teste o programa a partir da linha de comandos antes de usá-lo em uma etapa.
Exemplo: Você grava um programa definido pelo usuário que verifica um arquivo em intervalos regulares em uma estação de trabalho Windows NT. Ele usa os seguintes parâmetros:
O programa obtém os parâmetros conforme mostra a Figura 15:
Figura 15. Lendo os parâmetros da linha de comandos
char *remoteFile = argv[1]; int interval = 5; // verificar a cada 5 minutos int timeout = 60; // perído do tempo limite em minutos if( (argc==3) || (argc==4) ) { if( NumStrValidation( argv[2] ) ) // obter intervalo de polling { interval = atoi( argv[2] ); if( interval == 0 ) interval = 5; // usar um original } else { trace << "Invalid value for polling interval\n"; flush(trace); return PARAMETER_ERROR; } if( argc==4 ) // obter o período do tempo limite { if( NumStrValidation( argv[3] ) ) { timeout= atoi( argv[3] ); if( timeout == 0 ) timeout = 480; // usar um original } else { trace << "Invalid value for timeout period\n"; flush(trace); return PARAMETER_ERROR; } } } |
Depois que o programa for executado, ele deverá apresentar um código de retorno à etapa que usa o programa. O código de retorno deve ser um número inteiro positivo. Se o programa não apresentar o código, a etapa que usa o programa poderá falhar. O Centro de Data Warehouse exibe o código de retorno no campo Erro RC2 da janela Detalhes de Log quando o valor do Erro RC1 for 8410. Se o valor do Erro RC2 for 0, o programa terá sido executado com sucesso e sem erros.
O programa pode apresentar outras informações de status ao Centro de Data Warehouse:
O agente do warehouse transfere outras informações de status para o servidor do warehouse.
Para transferir outras informações de status para o agente do warehouse, o programa deve criar um arquivo, chamado arquivo de feedback, que contém informações de status adicionais. O nome de arquivo e o caminho do arquivo de feedback foi especificado na variável de ambiente VWP_LOG, que o agente do warehouse define antes de chamar o programa do warehouse. O programa deve ler o valor dessa variável, usando a chamada de sistema apropriada, para criar o arquivo de feedback. Depois de terminada a execução do programa definido pelo usuário, o agente do warehouse verifica se o arquivo de feedback existe. Se existir, o agente processará o arquivo. Caso contrário, o agente do warehouse não fará nada. Se o programa definido pelo usuário não puder criar o arquivo, ele deverá continuar a execução.
O programa definido pelo usuário pode gravar outras informações de
status no arquivo de feedback em qualquer ordem, mas deve usar o seguinte
formato para identificar as informações. Coloque cada item apresentado
entre a tag inicial <tag> e a tag final
</tag> na seguinte lista. Todas as tags iniciais devem
ser seguidas pela sua tag final; você não pode incluir duas tags iniciais
em uma linha. Por exemplo, este formato de tag é válido:
<RC>...</RC>...<MSG>...</MSG>
E este formato de tag embutida não é válido:
<RC>...<MSG>...</RC>...</MSG>
Você pode especificar estas informações no arquivo de feedback:
A Figura 16 mostra um exemplo do arquivo de feedback.
Figura 16. Exemplo do arquivo de feedback
<RC> 20</RC> <ROWS>2345</ROWS> <MSG>The parameter type is not correct</MSG> <COMMENT> Please supply the correct parameter type (PASSWORD NOTREQUIRED, GETPASSWORD, ENTERPASSWORD)</COMMENT> <BYTES> 123456</BYTES> <WARNING> 1</WARNING> <SQLSTATE>12345</SQLSTATE> |
Os códigos de retorno e o status da etapa do programa definido pelo usuário que são exibidos no visualizador de log variam, dependendo dos seguintes valores definidos pelo programa:
A Tabela 17 lista as possíveis combinações desses valores e os
resultados que eles produzem.
Tabela 17. Resultados e condições do arquivo de feedback
Condições | Resultados | ||||
---|---|---|---|---|---|
Status da etapa1 | Valores de Erro RC1 e RC2 | ||||
O código de retorno do prog. definido pelo usuário é 0 | Não existe nenhum arquivo de feedback2 | Bem-sucedida |
RC1 = 0; RC2 = 0
| ||
Existe um arquivo de feedback2 | O valor do <RC> no arquivo de feedback é 03 | <WARNING> não foi definido no arquivo de feedback | Bem-sucedida |
RC1 = 0; RC2 = 0
| |
O valor de <WARNING> no arquivo de feedback é 1 | Aviso |
RC1 = 0; RC2 = 0
| |||
O valor de <RC> no arquivo de feedback é não-03 | <WARNING> não foi definido no arquivo de feedback | Com falhas |
RC1 = 8410 (o prog. definido pelo usuário falhou); RC2 = o valor de <RC> no arquivo de feedback
| ||
O valor de <WARNING> no arquivo de feedback é 1 | Aviso |
RC1 = 0; RC2 = o valor de <RC> no arquivo de feedback
| |||
O código de retorno do prog. definido pelo usuário é não-zero | Não existe nenhum arquivo de feedback2 | Com falhas |
RC1 = 8410 (o prog. definido pelo usuário falhou); RC2 = o código apresentado pelo prog. definido pelo
usuário
| ||
Existe um arquivo de feedback2 | O valor do <RC> no arquivo de feedback é 03 | <WARNING> não foi definido no arquivo de feedback | Bem-sucedida |
RC1 = 0; RC2 = 0
| |
O valor de <WARNING> no arquivo de feedback é 1 | Aviso |
RC1 = 0; RC2 = 0
| |||
O valor do <RC> no arquivo de feedback é non-0 | <WARNING> não foi definido no arquivo de feedback | Com falhas |
RC1 = 8410 (o prog. definido pelo usuário falhou); RC2 = o código apresentado pelo prog. definido pelo
usuário
| ||
O valor de <WARNING> no arquivo de feedback é 1 | Aviso |
RC1 = 0; RC2 = o valor de <RC> no arquivo de feedback
|
Notas: