

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](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

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 conjuntos de dados
<a name="system-datasets-utilities"></a>

## BLUESAMCOPY/BLUESAMCREATE/BLUESAMDELETE/BLUESAMCLEAR
<a name="bluesam-utilities"></a>

Esses programas utilitários fornecem funções essenciais de manipulação de conjuntos de dados em conjuntos de dados [Blusam](https://docs.aws.amazon.com/m2/latest/userguide/ba-shared-blusam.html).

O `bypassBluesamStatus` sinalizador (armazenado em JobContext) determina se a validação normal do status do conjunto de dados deve ser ignorada, o que evita conflitos de acesso simultâneo entre processos on-line e em lote.

Quando `bypassBluesamStatus` for verdadeiro:
+ Ignora as verificações normais do status do conjunto de dados durante as operações
+ Permite acesso a conjuntos de dados que normalmente podem ser bloqueados

### SAMCOPIA AZUL
<a name="bluesamcopy"></a>

O programa BLUESAMCOPY copia dados e estrutura de metadados de um conjunto de dados Bluesam para outro.

#### Parâmetros
<a name="bluesamcopy-parameters"></a>

O programa BLUESAMCOPY usa dois parâmetros:
+ `FROM=<source dataset name>`- Conjunto de dados de origem do qual copiar
+ `TO=<target dataset name>`- Conjunto de dados de destino para o qual copiar

#### Comportamento
<a name="bluesamcopy-behavior"></a>
+ Se o conjunto de dados de destino não existir, crie-o com a estrutura de metadados da fonte
+ Se o destino existir, limpe-o antes de copiar (sobrescreve os dados existentes)
+ A operação prossegue quando os conjuntos de dados não estão em uso por processos on-line ou quando `bypassBluesamStatus` são definidos como verdadeiros
+ Preserva chaves, compactação, tamanho do registro e outras propriedades de metadados

#### Tratamento de erros
<a name="bluesamcopy-error"></a>

Retorna o código 1 se o conjunto de dados de origem não existir ou se um dos conjuntos de dados estiver sendo usado por processos on-line.

#### Uso da amostra
<a name="bluesamcopy-sample"></a>

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

// copy bluesam dataset
res = mpr.withArguments("FROM=MYBLUESAMTABLE","TO=MYBLUESAMTABLE2").runProgram("BLUESAMCOPY")
```

### BLUESAM CREATE
<a name="bluesamcreate"></a>

O programa BLUESAMCREATE cria um conjunto de dados Bluesam com os parâmetros especificados.

#### Parâmetros
<a name="bluesamcreate-parameters"></a>

O programa BLUESAMCREATE usa sete parâmetros:
+ `name=<dataset name>`- Conjunto de dados a ser criado (obrigatório)
+ `compress=<true/false>`- Ativar compressão (opcional, padrão: false)
+ `fixedLength=<true/false>`- Status de registros de tamanho fixo (opcional, padrão: falso)
+ `recordLength=<integer>`- Tamanho do registro em bytes (opcional, padrão: -1)
+ `primaryKey=<key id>,duplicates=<true/false>,fields=<offset,length,...>`- Especificação da chave primária (opcional)
+ `key=<altkey id>,duplicates=<true/false>,fields=<offset,length,...>`- Chave alternativa (pode ter várias ou 0)
+ `clearExisting=true/false`- Limpar o conjunto de dados existente (padrão opcional: verdadeiro)

 Explicações específicas dos parâmetros-chave:
+ `duplicates`: se valores duplicados são permitidos ou não para a chave fornecida;
+ `fields`: Posições de campo (baseadas em 1) e comprimentos que definem a chave;

#### Comportamento
<a name="bluesamcreate-behavior"></a>
+ Se o conjunto de dados não existir, crie-o com parâmetros especificados
+ Se o conjunto de dados existir, limpa-o se `clearExisting=true`
+ A operação prossegue quando os conjuntos de dados não estão em uso por processos on-line ou quando `bypassBluesamStatus` estão definidos como `true`

#### Condições de erro
<a name="bluesamcreate-error"></a>

Retorna o código 0 em todos os casos.

#### Uso da amostra
<a name="bluesamcreate-sample"></a>

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

// create bluesam dataset
mpr.withArguments(
      "name=MYBLUESAMTABLE",
      "compress=FALSE", 
      "fixedLength=true", 
      "recordLength=54",
      "primaryKey=MYKEY_PK,duplicates=FALSE,fields=0,6")
    .runProgram("BLUESAMCREATE")
```

### BLUESAMDELETE
<a name="bluesamdelete"></a>

O programa BLUESAMDELETE exclui os conjuntos de dados do Bluesam.

#### Parâmetros
<a name="bluesamdelete-parameters"></a>

O programa BLUESAMDELETE usa 1 ou mais parâmetros:
+ `<dataset name>`- conjunto de dados a ser excluído (pode ter vários)

#### Comportamento
<a name="bluesamdelete-behavior"></a>
+ A operação prossegue quando os conjuntos de dados não estão em uso por processos on-line ou quando `bypassBluesamStatus` estão definidos como `true`
+ Se o conjunto de dados existir, exclua-o

#### Condições de erro
<a name="bluesamdelete-error"></a>

Retorna o código 0 em todos os casos.

#### Uso da amostra
<a name="bluesamdelete-sample"></a>

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

// delete bluesam datasets
res = mpr.withArguments("MYBLUESAMTABLE","MYBLUESAMTABLE2","MYBLUESAMTABLE3").runProgram("BLUESAMDELETE")
```

### AZUL SAM TRANSPARENTE
<a name="bluesamclear"></a>

O programa BLUESAMCLEAR remove todos os dados dos conjuntos de dados existentes, preservando sua estrutura e metadados.

#### Parâmetros
<a name="bluesamclear-parameters"></a>

O programa BLUESAMCLEAR usa 1 ou mais parâmetros:
+ `<dataset name>`- conjunto de dados para limpar (pode ter vários)

#### Comportamento
<a name="bluesamclear-behavior"></a>
+ A operação prossegue quando os conjuntos de dados não estão em uso por processos on-line ou quando `bypassBluesamStatus` estão definidos como `true`
+ Se o conjunto de dados existir, limpe-o

#### Condições de erro
<a name="bluesamclear-error"></a>

Retorna o código 0 em todos os casos.

#### Uso da amostra
<a name="bluesamclear-sample"></a>

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

// clear bluesam datasets
res = mpr.withArguments("MYBLUESAMTABLE","MYBLUESAMTABLE2").runProgram("BLUESAMCLEAR")
```

## BPXWDYN
<a name="bpxwdyn"></a>

Esse programa utilitário simula o serviço z/OS BPXWDYN para alocação e desalocação dinâmica de conjuntos de dados. Em aplicativos modernos, as alocações de arquivos são feitas em scripts Groovy por meio `FileConfigurationUtils` da API do construtor. Esse programa permite o gerenciamento dinâmico dessas alocações sem o Groovy, o que é essencial para o processamento interativo ou condicional de arquivos em aplicativos modernizados.

### Parâmetros
<a name="bpxwdyn-parameters"></a>

O formato do argumento legado é preservado. Espera um único argumento contendo um cabeçalho de 2 bytes seguido pela string de comando.

formato de cadeia de comando para alocação: `ALLOC DD(<name>) DSN('<dsn>') SHR?`

formato de cadeia de comando para desalocação: `FREE DD(<name>)`

### Tratamento de erros
<a name="bpxwdyn-error"></a>
+ Defina o código de erro 0 para sucesso, 1 para falha
+ Lança RuntimeException comandos ou parâmetros inválidos

### Uso da amostra
<a name="bpxwdyn-sample"></a>

Aqui está um exemplo de uso do programa BPXWDYN em Java, resultante de uma modernização do COBOL por meio da transformação da AWS:

O código COBOL:

```
   01  WK-AREA.
       03  DS-ALLOC-STRING.
           05  DS-LENGTH          PIC S9(004) COMP VALUE 100.
           05  DS-TEXT            PIC  X(100) VALUE
            "ALLOC DD(INFILE) DSN('A.B.JCLLIB(XYZ470)') SHR".
...
           01  RC-RETURN-CODE-AREA.
       03  RC-RETURN-CODE         PIC S9(008) COMP.
...
     CALL  'BPXWDYN'  USING  DS-ALLOC-STRING RETURNING RC-RETURN-CODE.
```

e a modernização correspondente do Java:

```
private final Group dsAllocString = new Group(root).named("DS-ALLOC-STRING");
private final Elementary dsLength = new Elementary(dsAllocString,new BinaryType(4, 0, "STD", false, false, true),Short.valueOf("100")).named("DS-LENGTH");
private final Elementary dsText = new Elementary(dsAllocString,new AlphanumericType(100),"ALLOC DD(INFILE) DSN('A.B.JCLLIB(XYZ470)') SHR").named("DS-TEXT");
...
private final Group root = new Group(getData()).named("RC-RETURN-CODE-AREA"); 
private final Elementary rcReturnCode = new Elementary(root,new BinaryType(8, 0, "STD", false, false, true)).named("RC-RETURN-CODE");
...
    // Call to utility program  BPXWDYN
ctrl.callSubProgram(
       "BPXWDYN", 
        CallBuilder.newInstance().byReference(ctx.getWkArea().getDsAllocStringReference()).getArguments(), ctx);
 
ctx.getRcReturnCodeArea().setRcReturnCode(NumberUtils.convert(ctx.getProgramReturned()).intValue());
```

## GDGU TILS
<a name="gdgutils"></a>

GDGs (Generation Data Group) permite que os aplicativos trabalhem com conjuntos de dados versionados em que cada execução cria uma nova geração enquanto mantém o acesso às gerações anteriores. Esse utilitário cria e gerencia essas gerações de conjuntos de dados. Esse utilitário deve ser chamado em scripts groovy.

### Parâmetros
<a name="gdgutils-parameters"></a>

a ordem dos parâmetros não importa
+ `action=<create|refreshevents>`- Operação a ser executada (obrigatória)
+ `gdgname=<name>`- Nome da base do GDG (obrigatório)
+ `storageProvider=<filesystem|bluesam>`- Backend de armazenamento
+ `relativeGeneration=<+integer>`- Número relativo da geração (por exemplo, \+1 para a próxima)
+ `absoluteGeneration=integer`- Número absoluto de geração
+ `recordLength=<integer>`- Tamanho do registro no conjunto de dados
+ `fixedLength=<true/false>`- Especifica que os registros têm um tamanho fixo no conjunto de dados
+ `ownerPath=<File system path>`- O caminho para armazenar o conjunto de dados (específico do sistema de arquivos, obrigatório para esse caso)
+ `compress=<true/false>`- Indica que os dados devem permanecer compactados na memória se forem compactados no armazenamento de dados (específico do bluesam) (opcional, false é o valor padrão)
+ `catalog`- Especifica que o conjunto de dados deve ser catalogado (opcional)
+ `warmUp`- Indica que o conjunto de dados deve ser carregado na memória quando aberto (específico para bluesam) (opcional)

RelativeGeneration ou AbsoluteGeneration: uma dessas propriedades precisa ser definida.

### Operações
<a name="gdgutils-operations"></a>
+ criar: cria uma nova geração de conjunto de dados GDG de acordo com os metadados do GDG (lida com o sistema de arquivos e o armazenamento Bluesam)
+ refreshevents: ajusta o número de geração (metadados Gdg) sem criar novos conjuntos de dados (usado ao reiniciar trabalhos com falha que já criaram conjuntos de dados)

### Tratamento de erros
<a name="gdgutils-error"></a>
+ Defina o código de erro 0 para sucesso, 1 para falha
+ Lança RuntimeException comandos ou parâmetros inválidos

### Uso da amostra
<a name="gdgutils-sample"></a>

Operação de criação de Gdg: o código a seguir cria uma geração bluesam (43) para o conjunto de dados `IC.PLI.GDGTEST`

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

Map params = new Hashtable()
params.put("jobContext", jobContext)
Object[] args =["action=create","gdgname=IC.PLI.GDGTEST","absoluteGeneration=43","storageProvider=bluesam","recordLength=80"]
mpr.withParameters(params).withArguments(args).runProgram("GDGUTILS")
```

Operação Gdg refreshevents: somente RelativeGeneration é relevante para esta operação. O código a seguir atualiza o número da geração (\+1 em comparação com a geração atual) do `IC.PLI.GDGTEST` conjunto de dados

```
import ...

mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)

Map params = new Hashtable()
params.put("jobContext", jobContext)
Object[] args =["action=refreshevents","gdgname=IC.PLI.GDGTEST","relativeGeneration=1","storageProvider=bluesam"]
mpr.withParameters(params).withArguments(args).runProgram("GDGUTILS")
```

## ICEGENER/SYNCGEN
<a name="icegener"></a>

Este programa utilitário imita o comportamento do utilitário de z/OS sistema ICEGENER, ele copia conjuntos de dados da entrada (conjunto de dados) para a saída (SYSUT1 conjunto de dados). SYSUT2 Essa implementação Java fornece funcionalidade equivalente, suportando tanto o sistema de arquivos quanto o armazenamento Bluesam.

### Parâmetros
<a name="icegener-parameters"></a>

Sem discussão

### Conjuntos de dados necessários
<a name="icegener-datasets"></a>
+ SYSUT1: conjunto de dados/arquivo de entrada
+ SYSUT2: conjunto de dados/arquivo de saída

### Tratamento de disposição para conjunto de dados SYSUT2
<a name="icegener-disposition"></a>
+ NOVO: Crie um novo conjunto de dados/arquivo
+ OLD/SHR: Use existing dataset/file(deve existir)
+ MOD: Modifique, crie se estiver faltando, anexe se existir

### Tratamento de erros
<a name="icegener-error"></a>
+ Defina o código de erro 0 se a cópia for bem-sucedida, 1 se falhar
+ Lança `IllegalStateException` por uso inválido do conjunto de dados Bluseam

### Uso da amostra
<a name="icegener-sample"></a>

Aqui está um exemplo do uso do programa ICEGENER pelo Groovy, resultante de uma modernização da JCL por meio da transformação da AWS:

O código JCL:

```
//STEP01    EXEC PGM=ICEGENER
//SYSUT1   DD DSN=POI.INPUT,DISP=SHR
//SYSUT2   DD DSN=POI.OUTPU,
//            DISP=(,CATLG,DELETE),
//            UNIT=3490,
//            DCB=(RECFM=FB,LRECL=100)
/*
```

e a modernização correspondente do Groovy:

```
mpr
    .withFileConfigurations(new FileConfigurationUtils()
        .withJobContext(jobContext)
        .bluesam("SYSUT1")
        .dataset("POI.INPUT")
        .disposition("SHR")
        .build()
        .bluesam("SYSUT2")
        .dataset("POI.OUTPU")
        .normalTermination("CATLG")
        .abnormalTermination("DELETE")
        .build()
        .getFileConfigurations())
    .withParameters(params)
    .runProgram("ICEGENER")
```

## IDCAMS/KQCAMS
<a name="idcams"></a>

Esse programa utilitário imita o comportamento dos programas legados IDCAMS, que é uma ferramenta de gerenciamento de dados de mainframe usada para operações de arquivos VSAM (Virtual Storage Access Method). Ele processa os comandos IDCAMS antigos, mantendo a mesma sintaxe das entradas SYSIN originais.

### Contexto
<a name="idcams-context"></a>

O comportamento do programa pode ser configurado por dois parâmetros definidos em`application-utility-pgm.yml`:
+ JCLType: identificador do tipo JCL (vse ou mvs). Os PRINT/REPRO comandos do utilitário IDCAMS retornam 4 se o arquivo estiver vazio para não-vse jcl
+ forcedCharsetIdcams: Substituição opcional do conjunto de caracteres para processamento de IDCAMS

### Parâmetros
<a name="idcams-parameters"></a>

Sem discussão. As operações são passadas pelo conjunto de dados SYSIN.

### Conjuntos de dados necessários
<a name="idcams-datasets"></a>
+ SYSIN - Contém instruções de comando IDCAMS
+ Conjuntos de dados de entrada/saída - conforme referenciado nos comandos IDCAMS (dependendo da declaração IDCAMS)

### Principais características/Comandos suportados
<a name="idcams-commands"></a>

Os detalhes sobre os comandos IDCAMS encontrados na placa de controle SYSIN não são fornecidos aqui, mas devem ser obtidos nas documentações de plataformas legadas relevantes existentes.
+ DEFINE - Cria clusters e conjuntos de dados VSAM
+ EXCLUIR - Remove conjuntos de dados (suporta curingas)
+ REPRO - Copia dados entre conjuntos de dados
+ IMPRIMIR - Exibe o conteúdo do conjunto de dados
+ VERIFY - Valida a existência e a integridade do conjunto de dados
+ ALTER - Modifica os atributos do conjunto de dados (renomeação)
+ ALLOC - Aloca conjuntos de dados dinamicamente
+ SET - Gerencia códigos de condição (LASTCC/MAXCC)
+ IF-THEN-ELSE - Execução condicional de comandos
+ CANCELAR - Encerra a execução do trabalho

### Tratamento de erros
<a name="idcams-error"></a>
+ Defina o código de erro 0 se o último comando for bem-sucedido, -1 se falhar
+ Os comandos SET (LASTCC) podem ser usados para substituir o código de erro, por exemplo `SET LASTCC = 0`

### Uso da amostra
<a name="idcams-sample"></a>

Aqui está um exemplo do uso do programa IDCAMS pelo Groovy, resultante de uma modernização da JCL por meio da transformação da AWS:

O código JCL:

```
//STEP15 EXEC PGM=IDCAMS
//SYSPRINT DD   SYSOUT=*
//ACCTDATA DD DISP=SHR,
//         DSN=AWS.M2.CARDDEMO.ACCTDATA.PS
//ACCTVSAM DD DISP=SHR,
//         DSN=AWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDS
//SYSIN    DD   *
  REPRO INFILE(ACCTDATA) OUTFILE(ACCTVSAM)
/*
```

e a modernização correspondente do Groovy:

```
mpr.withFileConfigurations(new FileConfigurationUtils()
    .withJobContext(jobContext)
    .systemOut("SYSPRINT")
    .output("*")
    .build()
    .bluesam("ACCTDATA")
    .dataset("AWS.M2.CARDDEMO.ACCTDATA.PS")
    .disposition("SHR")
    .build()
    .bluesam("ACCTVSAM")
    .dataset("AWS.M2.CARDDEMO.ACCTDATA.VSAM.KSDS")
    .disposition("SHR")
    .build()
    .fileSystem("SYSIN")
    .stream("REPRO INFILE(ACCTDATA) OUTFILE(ACCTVSAM)", getEncoding())
    .build()
    .getFileConfigurations())
.withParameters(params)
.runProgram("IDCAMS")
```

## IEBGENER/JSDGENER
<a name="iebgener"></a>

Este programa replica o utilitário IEBGENER. É usado para copiar e manipular conjuntos de dados sequenciais. Essa implementação amplia a funcionalidade básica de cópia ao oferecer suporte às instruções de controle do IEBGENER para operações avançadas de processamento de dados.

### Parâmetros
<a name="iebgener-parameters"></a>

Sem discussão. As operações são passadas pelo conjunto de dados SYSIN.

### Conjuntos de dados necessários
<a name="iebgener-datasets"></a>
+ SYSIN: contém instruções de controle (opcional, se não definido, o programa IEBGENER é idêntico ao ICEGENER)
+ SYSUT1: conjunto de dados/arquivo de entrada
+ SYSUT2: conjunto de dados/arquivo de saída

### Principais características/Declarações de controle IEBGENER suportadas
<a name="iebgener-commands"></a>

Os detalhes sobre a declaração de controle do IEBGENER encontrados nos cartões de controle SYSIN não são fornecidos aqui, mas devem ser obtidos nas documentações de plataformas legadas relevantes existentes.
+ GENERATE - define a estrutura geral do processo de manipulação de dados especificando o número máximo de tipos de registro (MAXNAME) e campos (MAXFLDS) a serem processados
+ REGISTRO - define o layout e o conteúdo reais de cada tipo de registro especificando a posição, o comprimento e o formato dos campos individuais que serão copiados do conjunto de dados de entrada ou gerados com valores específicos
+ LABEL/MEMBER/EXITnão são suportados

exemplo:

```
GENERATE MAXNAME=3,MAXFLDS=5
RECORD TYPE=1,
       FIELD=(1,1,CH,VALUE='H'),
       FIELD=(2,30,CH,VALUE='EMPLOYEE REPORT 2024         ')
RECORD TYPE=2,
       FIELD=(1,1,CH,VALUE='D'),
       FIELD=(2,10,CH),              /* Name */
       FIELD=(12,8,CH),             /* Birth date */
       FIELD=(20,8,CH,VALUE='ACTIVE')
RECORD TYPE=3,
       FIELD=(1,1,CH,VALUE='F'),
       FIELD=(2,30,CH,VALUE='END OF REPORT              ')
```

### Tratamento de erros
<a name="iebgener-error"></a>

Defina o código de erro 0 se a cópia for bem-sucedida, 1 se falhar.

### Uso da amostra
<a name="iebgener-sample"></a>

Aqui está um exemplo do uso do programa IEBGENER pelo Groovy, resultante de uma modernização da JCL por meio da transformação da AWS:

O código JCL:

```
//GENDATA  EXEC PGM=IEBGENER
//SYSUT1   DD DSN=INPUT.EMPLOYEE.DATA,
//            DISP=SHR
//SYSUT2   DD DSN=OUTPUT.EMPLOYEE.FILE,
//            DISP=(NEW,CATLG,DELETE),
//            SPACE=(TRK,(1,1)),
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)
//SYSIN    DD *
  GENERATE MAXNAME=2,MAXFLDS=5
  RECORD TYPE=1,
         FIELD=(1,1,CH,VALUE='H'),
         FIELD=(2,30,CH,VALUE='EMPLOYEE SALARY REPORT 2024    ')
  RECORD TYPE=2,
         FIELD=(1,1,CH,VALUE='D'),
         FIELD=(2,10,CH),              /* Name from input */
         FIELD=(12,8,CH),             /* Birth date from input */
         FIELD=(20,8,CH),             /* Dept from input */
         FIELD=(28,8,CH)              /* Salary from input */
/*
```

e a modernização correspondente do Groovy:

```
mpr
    .withFileConfigurations(new FileConfigurationUtils()
        .withJobContext(jobContext)
        .systemOut("SYSPRINT")
        .output("*")
        .build()
        .bluesam("SYSUT1")
        .dataset("INPUT.EMPLOYEE.DATA")
        .disposition("SHR")
        .build()
        .bluesam("SYSUT2")
        .dataset("OUTPUT.EMPLOYEE.FILE")
        .disposition("NEW")
        .normalTermination("CATLG")
        .abnormalTermination("DELETE")
        .build()
        .fileSystem("SYSIN")
        .stream( """GENERATE MAXNAME=2,MAXFLDS=5
  RECORD TYPE=1,
         FIELD=(1,1,CH,VALUE='H'),
         FIELD=(2,30,CH,VALUE='EMPLOYEE SALARY REPORT 2024    ')
  RECORD TYPE=2,
         FIELD=(1,1,CH,VALUE='D'),
         FIELD=(2,10,CH),              /* Name from input */
         FIELD=(12,8,CH),             /* Birth date from input */
         FIELD=(20,8,CH),             /* Dept from input */
         FIELD=(28,8,CH)              /* Salary from input */""", getEncoding())
        .build()
        .getFileConfigurations())
    .withParameters(params)
    .runProgram("IEBGENER")
```

## IEFBR14
<a name="iefbr14"></a>

IEFBR14 é um programa de “não fazer nada” que simplesmente retorna com um código de retorno de 0 (zero). Seu uso principal é para alocação, exclusão ou manutenção de catálogos de conjuntos de dados por meio de instruções DD, sem realizar nenhum processamento real de dados.

### Parâmetros
<a name="iefbr14-parameters"></a>

Sem discussão

### Tratamento de erros
<a name="iefbr14-error"></a>

Defina sempre o código de erro 0.

### Uso da amostra
<a name="iefbr14-sample"></a>

Aqui está um exemplo do uso do IEFBR14 programa pelo Groovy, resultante de uma modernização da JCL por meio da transformação da AWS:

O código JCL para criar um novo conjunto de dados sequencial:

```
//STEP1    EXEC PGM=IEFBR14
//NEWSEQ   DD DSN=USER.NEW.SEQ.DATA,
//            DISP=(NEW,CATLG,DELETE),
//            SPACE=(TRK,(10,5)),
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)
```

e a modernização correspondente do Groovy:

```
mpr
    .withFileConfigurations(new FileConfigurationUtils()
        .withJobContext(jobContext)
        .bluesam("NEWSEQ")
        .dataset("USER.NEW.SEQ.DATA")
        .disposition("NEW")
        .normalTermination("CATLG")
        .abnormalTermination("DELETE")
        .build()
        .getFileConfigurations())
    .withParameters(params)
    .runProgram("IEFBR14")
```

O código JCL para excluir um conjunto de dados existente:

```
//STEP3    EXEC PGM=IEFBR14
//DELDD    DD DSN=USER.OLD.DATASET,
//            DISP=(OLD,DELETE,DELETE)
```

e a modernização correspondente do Groovy:

```
mpr
    .withFileConfigurations(new FileConfigurationUtils()
        .withJobContext(jobContext)
        .bluesam("DELDD")
        .dataset("USER.OLD.DATASET")
        .disposition("OLD")
        .normalTermination("DELETE")
        .abnormalTermination("DELETE")
        .build()
        .getFileConfigurations())
    .withParameters(params)
    .runProgram("IEFBR14")
```

## JCLBCICS
<a name="jclbcics-utility"></a>

Este programa gerencia o status dos conjuntos de dados, define enables/disables conjuntos de dados com base na configuração, suportando arquivos individuais e padrões curinga: ele altera o campo STATUS na tabela JICS file\_table.

### Parâmetros
<a name="jclbcics-parameters"></a>

Sem discussão. As operações são passadas por um `DatasetsConfiguration` objeto, por exemplo

```
mpr.withDatasetsConfiguration(new DatasetsConfiguration().close(<Dataset Name>)
```

### Contexto
<a name="jclbcics-context"></a>

O comportamento do programa pode ser configurado por dois parâmetros:

Em `application-utility-pgm.yml`:
+ `jclbcics.ddname.size`(o padrão é 8): configura globalmente o tamanho do nome do conjunto de dados; se esse valor for definido e o tamanho do nome do conjunto de dados for menor que esse valor, o nome do conjunto de dados será truncado.

Na etapa individual do arquivo Groovy chamando o programa
+ `JCLBCICS_OVERRIDDEN_SIZE`: ele substitui o tamanho do nome do conjunto de dados global:

```
TreeMap stepMapTransfo = [:]
Map stepParams = ["MapTransfo":stepMapTransfo]
stepParams["MapTransfo"]["JCLBCICS_OVERRIDDEN_SIZE"] = '6'
```

Se o tamanho do nome dd ajustado (após o truncamento) for menor que 8, o nome dd será considerado um curinga e a função funcionará para todos os conjuntos de dados que começam com esse nome dd.

### Recursos principais
<a name="jclbcics-features"></a>

As operações suportadas são:
+ ABERTO: define conjuntos de dados para o status HABILITADO
+ FECHAR: define os conjuntos de dados para o status DESATIVADO

Essas operações são declaradas por meio da classe `DatasetsConfiguration` builder:

```
new DatasetsConfiguration().close(<DD name>).open(<DD name>)
```

Nome do DD: nome do conjunto de dados, o caractere curinga \* é aceito se o tamanho do nome dd for menor que o tamanho máximo do nome dd (8).

### Tratamento de erros
<a name="jclbcics-error"></a>

Definir código de erro 0

### Uso da amostra
<a name="jclbcics-sample"></a>

Aqui está um exemplo do uso do programa JCLBCICS pelo Groovy:

ele desativa o conjunto de dados`UFOLJ3P`, habilita todos os conjuntos de dados começando com AX, habilita todos os conjuntos de dados começando com DX

```
import com.netfective.bluage.gapwalk.rt.call.MainProgramRunner
import com.netfective.bluage.gapwalk.rt.call.ProgramExecutionResult
import com.netfective.bluage.gapwalk.rt.io.support.DatasetsConfiguration

MainProgramRunner mpr = applicationContext.getBean("com.netfective.bluage.gapwalk.rt.call.ExecutionController",MainProgramRunner.class)
def TreeMap stepMapTransfo = [:]
def Map stepParams = ['MapTransfo':stepMapTransfo]
stepParams['MapTransfo']['JCLBCICS_OVERRIDDEN_SIZE'] = '7'

ProgramExecutionResult res = mpr
.withDatasetsConfiguration(new DatasetsConfiguration().close("UFOLJ3P").open("AX*").open("DX"))
.withParameters(stepParams)
.runProgram("JCLBCICS")
```