Utilitários de comandos - AWS Modernização do mainframe

AWS O Mainframe Modernization Service (experiência em Managed Runtime Environment) não está mais aberto a novos clientes. Para recursos semelhantes ao AWS Mainframe Modernization Service (experiência em Managed Runtime Environment), explore o AWS Mainframe Modernization Service (experiência autogerenciada). Os clientes atuais podem continuar usando o serviço normalmente. Para obter mais informações, consulte Alteração na disponibilidade AWS da modernização do mainframe.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Utilitários de comandos

Esta seção está relacionada aos programas utilitários cuja função é manipular os comandos do usuário, fornecidos por meio de cartões de controle.

IKJEFT1A/IKJEFT1B/KEQEFT01/IKJEFT01/DSNDBTCH

IKJEFT1Um propósito

IKJEFT1A e seus aliases executam comandos TSO (T time S Sharing O Option) em trabalhos em lotes sem exigir uma sessão de TSO interativa, unindo ambientes de TSO não interativos e ambientes de TSO interativos.

Imita o comportamento legado IKJEFT1 A com diferenças específicas do ambiente: por exemplo, os comandos DB2 TERM (inate) são ignorados em ambientes modernos (registrados como informativos).

nota

Sintaxe de comando não detalhada aqui - A usa conjuntos IKJEFT1 de dados de comandos legados inalterados. Consulte a documentação da plataforma antiga para obter detalhes sobre os comandos do TSO.

IKJEFT1Uma assinatura

Usa o SYSTSIN conjunto de dados para entrada de comando (definido por meio da DD diretiva JCL). A versão modernizada usa o mesmo conjunto de dados inalterado. Invocado somente em scripts de trabalhos do Groovy modernizados.

IKJEFT1Um parâmetro de configuração relacionado

O comportamento do utilitário é influenciado pelo seguinte parâmetro de configuração:

  • systin.encoding

Consulte Propriedades disponíveis para aplicações web opcionais para obter detalhes sobre a configuração desse parâmetro.

IKJEFT1Um Checks/Error manuseio

Quando um comando não suportado está presente no conjunto de dados SYSTSIN, um RuntimeException é lançado.

IKJEFT1Uma amostra de usos

O script JCL legado (que usa um conteúdo embutido do SYSTSIN conjunto de dados, usando a diretiva) DD *

//********************************************************************* //* READ THE TEMPORARY INPUT FILE * //********************************************************************* // IF IDCM00032.RC = 1 THEN //067FILEKEY EXEC PGM=IKJEFT01,DYNAMNBR=20 //SYSTSIN DD * DSN SYSTEM(DB2P) RUN PROGRAM(067-fileKey) PLAN(FILEKEYPLAN) PARM('RT') END /* //TEMPVSAM DD DSN=IDXVIDEO.TEMPVSAM,DISP=SHR //FKOUT DD DSN=output(out067.txt),DISP=(NEW,CATLG) // ENDIF //*********************************************************************

e o script modernizado correspondente (no groovy) -- o conteúdo embutido do SYSTSIN conjunto de dados é representado por um “stream” --

// STEP 067FILEKEY - PGM - IKJEFT01*********************************************** def step067FILEKEY(Object shell, Map params, Map programResults){ shell.with { if (checkValidProgramResults(programResults)) { return execStep("067FILEKEY", "IKJEFT01", programResults, { mpr .withFileConfigurations(new FileConfigurationUtils() .withJobContext(jobContext) .fileSystem("SYSTSIN") .stream( """ DSN SYSTEM(DB2P) RUN PROGRAM(067-fileKey) PLAN(FILEKEYPLAN) PARM('RT') END """, getEncoding()) .build() .bluesam("TEMPVSAM") .dataset("IDXVIDEO.TEMPVSAM") .disposition("SHR") .build() .fileSystem("FKOUT") .path("output(out067.txt)") .disposition("NEW") .normalTermination("CATLG") .build() .getFileConfigurations()) .withParameters(params) .runProgram("IKJEFT01") }) } } }

QCMDEXC

Objetivo do QCMDEXC

Esse programa utilitário emula o comportamento do utilitário de sistema AS/400 QCMDEXC, usado para executar comandos do sistema de forma dinâmica em tempo de execução.

Recursos:

  • Analisa e executa comandos dinamicamente.

  • Suporta formatos de parâmetros nomeados e posicionais.

Assinatura QCMDEXC

Aceita 1-2 parâmetros:

  • Primeiro: dados alfanuméricos contendo comandos a serem executados

  • Segundo (opcional): comprimento em bytes a ser lido do primeiro parâmetro (o padrão é tamanho total)

Manipulação de QCMDEXC Checks/Error

Nos seguintes casos, um RuntimeException será lançado:

  • Quando o número de argumentos fornecidos não é um ou dois;

  • Se o argumento do comando estiver vazio ou se o comando a ser executado não for reconhecido;

  • Se a execução do comando falhar por qualquer motivo, além disso, o código de retorno do programa será definido como 1.

Exemplos de usos do QCMDEXC

Aqui está um exemplo de uso de um programa COBOL legado: o item de dados CL-COMMANDX é equipado com comandos antes de ser usado como argumento para a chamada do programa QCMDEXC:

INITIALIZE CL-COMMANDX. STRING "CPYF FROMFILE(PLAYERS) TOFILE(" DELIMITED BY SIZE, "NEWFILE" DELIMITED BY SIZE, ") MBROPT(*REPLACE) FMTOPT(*NOCHK) CRTFILE(*YES)" DELIMITED BY SIZE INTO CL-COMMANDX END-STRING. CALL "QCMDEXC" USING CL-COMMANDX CLENGTHX.

Uma vez modernizado em código java, isso se torna:

DataUtils.initialize(ctx.getClCommandx().getClCommandxReference()); StringConcatenationBuilder.newInstance(ctx.getClCommandx().getClCommandxReference()) .addDelimitedBySize("CPYF FROMFILE(PLAYERS) TOFILE(") .addDelimitedBySize("NEWFILE") .addDelimitedBySize(") MBROPT(*REPLACE) FMTOPT(*NOCHK) CRTFILE(*YES)") .end(); ctrl.callSubProgram("QCMDEXC", CallBuilder.newInstance() .byReference(ctx.getClCommandx().getClCommandxReference()) .byReference(ctx.getClengthx().getClengthxReference()) .getArguments(), ctx);

Observe que o conteúdo dos comandos antigos está sendo usado “como está” no código modernizado, sem nenhuma modificação.