

AWS La **experiencia autogestionada de modernización de mainframes** ya no está abierta a nuevos clientes. Para obtener funcionalidades similares a la experiencia autogestionada de modernización de AWS mainframes, explore las capacidades de las ofertas directas del proveedor y de. AWS Transform Los clientes existentes pueden seguir utilizando el servicio con normalidad. [Para obtener más información, consulte AWS Cambio en la disponibilidad de la modernización del mainframe.](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html) 

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

AWS El **servicio de modernización de mainframe (experiencia en entornos de ejecución gestionados)** ya no está abierto a nuevos clientes. Para obtener prestaciones similares a las del Servicio de modernización de AWS mainframe (experiencia en entornos de ejecución gestionados), explore el Servicio de modernización de AWS mainframe (Self-ManagedExperience). Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte Cambio en la disponibilidad de la [modernización de AWS mainframes](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html). 

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Comandos y utilidades
<a name="system-commands-utilities"></a>

Esta sección está relacionada con los programas utilitarios cuya función es gestionar los comandos del usuario, proporcionados mediante tarjetas de control.

## IKJEFT1A/IKJEFT1B/KEQEFT01/IKJEFT01/DSNDBTCH
<a name="ikjeft1a-ikjeft1b-keqeft01-ikjeft01-dsndbtch"></a>

### IKJEFT1Un propósito
<a name="ikjeft1a-purpose"></a>

IKJEFT1A y sus alias ejecutan comandos de TSO (opción **T** time **S** Sharing **O**) en trabajos por lotes sin necesidad de una sesión de TSO interactiva, lo que une los entornos de TSO interactivos y por lotes no interactivos.

Imita el comportamiento heredado de IKJEFT1 A con diferencias específicas del entorno: por ejemplo, los comandos DB2 TERM (inate) se ignoran en los entornos modernos (se registran como informativos).

**nota**  
La sintaxis de los comandos no se detalla aquí: A utiliza conjuntos de datos IKJEFT1 de comandos antiguos sin cambios. Consulte la documentación de la plataforma anterior para obtener detalles sobre los comandos de la TSO.

### IKJEFT1Una firma
<a name="ikjeft1a-signature"></a>

Utiliza un `SYSTSIN` conjunto de datos para la entrada de comandos (definido mediante la `DD` directiva JCL). La versión modernizada usa el mismo conjunto de datos sin cambios. Se invoca solo en los scripts modernizados de Groovy Jobs.

### IKJEFT1A: parámetros de configuración relacionados
<a name="ikjeft1a-configuration"></a>

El comportamiento de la utilidad depende del siguiente parámetro de configuración:
+ `systin.encoding`

Consulte [Propiedades disponibles para las aplicaciones web opcionales](ba-runtime-key-value.md#ba-runtime-key-value-web) para obtener más información sobre la configuración de este parámetro.

### IKJEFT1Un Checks/Error manejo
<a name="ikjeft1a-error-handling"></a>

Cuando hay un comando no compatible en el conjunto de datos SYSTSIN, `RuntimeException` se lanza un.

### IKJEFT1Un ejemplo de usos
<a name="ikjeft1a-sample-usages"></a>

El script JCL heredado (que utiliza un contenido en línea del `SYSTSIN` conjunto de datos, mediante una directiva) `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                                                                        
//*********************************************************************
```

y el script modernizado correspondiente (en groovy) (el contenido en línea del `SYSTSIN` conjunto de datos se representa mediante una «secuencia»)

```
// 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")
                })
        }
    }
}
```

## QCMDEC
<a name="qcmdexc"></a>

### Propósito de QCMDEXC
<a name="qcmdexc-purpose"></a>

Este programa de utilidad emula el comportamiento de la utilidad del sistema AS/400 QCMDEXC, que se utiliza para ejecutar comandos del sistema de forma dinámica en tiempo de ejecución.

Características:
+ Analiza y ejecuta comandos de forma dinámica.
+ Admite formatos de parámetros posicionales y con nombre.

### Firma QCMDEXC
<a name="qcmdexc-signature"></a>

Acepta de 1 a 2 parámetros:
+ Primero: datos alfanuméricos que contienen los comandos a ejecutar
+ Segundo (opcional): longitud en bytes que se debe leer desde el primer parámetro (el valor predeterminado es la longitud completa)

### Manejo de QCMDEXC Checks/Error
<a name="qcmdexc-error-handling"></a>

En los siguientes casos, se `RuntimeException` lanzará un:
+ Cuando el número de argumentos proporcionados no es uno o dos;
+ Si el argumento del comando está vacío o si no se reconoce el comando que se va a ejecutar;
+ Si la ejecución del comando falla por algún motivo, el código de retorno del programa se establecerá en 1.

### Ejemplos de usos de QCMDEC
<a name="qcmdexc-sample-usages"></a>

Este es un ejemplo de uso de un programa COBOL antiguo: el elemento de datos `CL-COMMANDX` está equipado con comandos antes de ser utilizado como argumento para la llamada al 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.
```

Una vez modernizado a código java, se convierte en:

```
    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);
```

Tenga en cuenta que el contenido de los comandos antiguos se utiliza «tal cual» en el código modernizado, sin ninguna modificación.