

AWS Mainframe Modernization Service （受管執行期環境體驗） 不再向新客戶開放。對於與 AWS Mainframe Modernization Service （受管執行期環境體驗） 類似的功能，探索 AWS Mainframe Modernization Service （自我管理體驗）。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[AWS 大型主機現代化可用性變更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 資料集公用程式
<a name="system-datasets-utilities"></a>

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

這些公用程式會在 [Blusam 資料集上提供基本資料集](https://docs.aws.amazon.com/m2/latest/userguide/ba-shared-blusam.html)操作函數。

`bypassBluesamStatus` 旗標 （存放在 JobContext 中） 會決定是否略過正常資料集狀態驗證，以防止線上和批次程序之間的並行存取衝突。

當 `bypassBluesamStatus` 為 true 時：
+ 在操作期間略過一般資料集狀態檢查
+ 允許存取通常可能遭到封鎖的資料集

### 藍色SAMCOPY
<a name="bluesamcopy"></a>

BLUESAMCOPY 程式會將資料和中繼資料結構從一個 Bluesam 資料集複製到另一個資料集。

#### Parameters
<a name="bluesamcopy-parameters"></a>

BLUESAMCOPY 程式需要兩個參數：
+ `FROM=<source dataset name>` - 要從中複製的來源資料集
+ `TO=<target dataset name>` - 要複製到的目標資料集

#### Behavior (行為)
<a name="bluesamcopy-behavior"></a>
+ 如果目標資料集不存在， 會使用來源的中繼資料結構建立目標資料集
+ 如果目標存在， 會在複製之前將其清除 （覆寫現有資料）
+ 當線上程序未使用資料集或`bypassBluesamStatus`將 設為 true 時，操作會繼續進行
+ 保留金鑰、壓縮、記錄長度和其他中繼資料屬性

#### 錯誤處理
<a name="bluesamcopy-error"></a>

如果來源資料集不存在或線上程序正在使用任一資料集，則傳回程式碼 1。

#### 範例用量
<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")
```

### 藍色SAMCREATE
<a name="bluesamcreate"></a>

BLUESAMCREATE 程式會使用指定的參數建立 Bluesam 資料集。

#### Parameters
<a name="bluesamcreate-parameters"></a>

BLUESAMCREATE 程式需要七個參數：
+ `name=<dataset name>` - 要建立的資料集 （強制性）
+ `compress=<true/false>` - 啟用壓縮 （選用，預設：false)
+ `fixedLength=<true/false>` - 固定長度記錄狀態 （選用，預設值：false)
+ `recordLength=<integer>` - 以位元組為單位記錄長度 （選用，預設值：-1)
+ `primaryKey=<key id>,duplicates=<true/false>,fields=<offset,length,...>` - 主索引鍵規格 （選用）
+ `key=<altkey id>,duplicates=<true/false>,fields=<offset,length,...>` - 備用金鑰 （可以有多個 或 0)
+ `clearExisting=true/false` - 清除現有的資料集 （選用預設值： true)

 特定金鑰參數說明：
+ `duplicates`：指定金鑰是否允許重複值；
+ `fields`：定義金鑰的欄位位置 (1 型） 和長度；

#### Behavior (行為)
<a name="bluesamcreate-behavior"></a>
+ 如果資料集不存在， 會使用指定的參數建立資料集
+ 如果資料集存在， 會在 `clearExisting=true`
+ 當線上程序未使用資料集或`bypassBluesamStatus`將 設定為 時，操作會繼續進行 `true`

#### 錯誤條件
<a name="bluesamcreate-error"></a>

在所有情況下傳回程式碼 0。

#### 範例用量
<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")
```

### 藍色SAMDELETE
<a name="bluesamdelete"></a>

BLUESAMDELETE 程式會刪除 Bluesam 資料集。

#### Parameters
<a name="bluesamdelete-parameters"></a>

BLUESAMDELETE 程式需要 1 個或多個參數：
+ `<dataset name>` - 要刪除的資料集 （可以有多個）

#### Behavior (行為)
<a name="bluesamdelete-behavior"></a>
+ 當線上程序未使用資料集或`bypassBluesamStatus`將 設定為 時，操作會繼續進行 `true`
+ 如果資料集存在，請將其刪除

#### 錯誤條件
<a name="bluesamdelete-error"></a>

在所有情況下傳回程式碼 0。

#### 範例用量
<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")
```

### 藍色SAMCLEAR
<a name="bluesamclear"></a>

BLUESAMCLEAR 程式會從現有資料集移除所有資料，同時保留其結構和中繼資料。

#### Parameters
<a name="bluesamclear-parameters"></a>

BLUESAMCLEAR 程式需要 1 個或多個參數：
+ `<dataset name>` - 要清除的資料集 （可以有多個）

#### Behavior (行為)
<a name="bluesamclear-behavior"></a>
+ 當線上程序未使用資料集或`bypassBluesamStatus`將 設定為 時，操作會繼續進行 `true`
+ 如果資料集存在，請將其清除

#### 錯誤條件
<a name="bluesamclear-error"></a>

在所有情況下傳回程式碼 0。

#### 範例用量
<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>

此公用程式會模擬動態資料集配置和解除配置的 z/OS BPXWDYN 服務。在現代應用程式中，檔案配置會透過`FileConfigurationUtils`建置器 API 在 Groovy 指令碼中完成。此程式允許在沒有 Groovy 的情況下動態管理這些配置，這對於現代化應用程式中的互動式或條件式檔案處理至關重要。

### Parameters
<a name="bpxwdyn-parameters"></a>

會保留舊版引數格式。預期單一引數包含 2 位元組大小的標頭，後面接著命令字串。

用於配置的命令字串格式： `ALLOC DD(<name>) DSN('<dsn>') SHR?`

解除配置的命令字串格式： `FREE DD(<name>)`

### 錯誤處理
<a name="bpxwdyn-error"></a>
+ 設定錯誤代碼 0 表示成功，設定 1 表示失敗
+ 針對無效的命令或參數擲回 RuntimeException 

### 範例用量
<a name="bpxwdyn-sample"></a>

以下是透過 AWS 轉換進行 COBOL 現代化所產生的 BPXWDYN 程式 Java 範例用量：

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.
```

和相符的 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());
```

## GDGUTILS
<a name="gdgutils"></a>

GDGs（世代資料群組） 允許應用程式使用版本控制的資料集，其中每次執行都會建立新的世代，同時維持對上一代的存取。此公用程式會建立和管理這些資料集的產生。此公用程式旨在以 groovy 指令碼呼叫。

### Parameters
<a name="gdgutils-parameters"></a>

參數順序無關緊要
+ `action=<create|refreshevents>` - 要執行的操作 （強制性）
+ `gdgname=<name>` - GDG 基礎的名稱 （強制性）
+ `storageProvider=<filesystem|bluesam>` - 儲存後端
+ `relativeGeneration=<+integer>` - 相對世代編號 （例如，下一個為 \+1)
+ `absoluteGeneration=integer` - 絕對產生數量
+ `recordLength=<integer>` - 在資料集中記錄大小
+ `fixedLength=<true/false>` - 指定記錄在資料集中有固定的長度
+ `ownerPath=<File system path>` - 存放資料集的路徑 （檔案系統特定，該案例為必要）
+ `compress=<true/false>` - 表示如果資料在資料存放區中壓縮 (bluesam 特定），則資料應保持在記憶體中壓縮 （選用，false 是預設值）
+ `catalog` - 指定要編製目錄的資料集 （選用）
+ `warmUp` - 表示資料集應在開啟時載入記憶體 （藍本特定） （選用）

relativeGeneration 或 absoluteGeneration：需要設定其中一個屬性。

### 作業
<a name="gdgutils-operations"></a>
+ 建立：根據 GDG 中繼資料建立新的 GDG 資料集產生 （同時處理檔案系統和 Bluesam 儲存）
+ refreshevents：調整產生編號 (Gdg Metadata) 而不建立新的資料集 （在重新啟動已建立資料集的失敗任務時使用）

### 錯誤處理
<a name="gdgutils-error"></a>
+ 設定錯誤代碼 0 表示成功，設定 1 表示失敗
+ 針對無效的命令或參數擲回 RuntimeException 

### 範例用量
<a name="gdgutils-sample"></a>

Gdg 建立操作：下列程式碼會建立`IC.PLI.GDGTEST`資料集的 bluesam 產生 (43)

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

Gdg refreshevents 操作：只有 relativeGeneration 與此操作相關。下列程式碼會更新`IC.PLI.GDGTEST`資料集的產生編號 (\+1 相較於目前世代）

```
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/SYNCGENR
<a name="icegener"></a>

此公用程式程式模擬 z/OS 系統公用程式 ICEGENER 的行為，它會將資料集從輸入 (SYSUT1 資料集） 複製到輸出 (SYSUT2 資料集）。此 Java 實作提供同等功能，同時支援檔案系統和 Bluesam 儲存。

### Parameters
<a name="icegener-parameters"></a>

無引數

### 必要的資料集
<a name="icegener-datasets"></a>
+ SYSUT1：輸入資料集/檔案
+ SYSUT2：輸出資料集/檔案

### SYSUT2 資料集的處置處理
<a name="icegener-disposition"></a>
+ 新功能：建立新的資料集/檔案
+ OLD/SHR：使用現有的資料集/檔案 （必須存在）
+ MOD：修改，如果遺失則建立，如果存在則附加

### 錯誤處理
<a name="icegener-error"></a>
+ 如果複製成功，請設定錯誤代碼 0；如果失敗，請設定 1
+ 拋棄`IllegalStateException`無效使用 Bluseam 資料集

### 範例用量
<a name="icegener-sample"></a>

以下是透過 AWS 轉換進行 JCL 現代化所產生的 ICEGENER 程式的 Groovy 範例用量：

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)
/*
```

和相符的 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>

此公用程式程式模擬舊版程式 IDCAMS 的行為，這是用於 VSAM （虛擬儲存存取方法） 檔案操作的大型主機資料管理工具。它會處理舊版 IDCAMS 命令，維護與原始 SYSIN 輸入相同的語法。

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

您可以透過 中定義的兩個參數來設定程式行為`application-utility-pgm.yml`：
+ jclType：JCL 類型識別符 (vse 或 mvs)。如果非 vse jcl 的檔案為空，IDCAMS 公用程式 PRINT/REPRO 命令會傳回 4
+ forcedCharsetIdcams：IDCAMS 處理的選用字元集覆寫

### Parameters
<a name="idcams-parameters"></a>

無引數。操作會透過 SYSIN 資料集傳遞。

### 必要的資料集
<a name="idcams-datasets"></a>
+ SYSIN - 包含 IDCAMS 命令陳述式
+ 輸入/輸出資料集 - 如 IDCAMS 命令中所參考 （取決於 IDCAMS 陳述式）

### 主要功能/支援的命令
<a name="idcams-commands"></a>

此處不提供 SYSIN 控制卡中 IDCAMS 命令的詳細資訊，但應從現有的相關舊版平台文件中擷取。
+ DEFINE - 建立 VSAM 叢集和資料集
+ DELETE - 移除資料集 （支援萬用字元）
+ REPRO - 在資料集之間複製資料
+ 列印 - 顯示資料集內容
+ VERIFY - 驗證資料集是否存在和完整性
+ ALTER - 修改資料集屬性 （重新命名）
+ ALLOC - 動態配置資料集
+ SET - 管理條件代碼 (LASTCC/MAXCC)
+ IF-THEN-ELSE - 條件式命令執行
+ CANCEL - 終止任務執行

### 錯誤處理
<a name="idcams-error"></a>
+ 如果最後一個命令成功，請設定錯誤碼 0；如果失敗，請設定 -1
+ SET (LASTCC) 命令可用來覆寫錯誤碼，例如 `SET LASTCC = 0`

### 範例用量
<a name="idcams-sample"></a>

以下是透過 AWS 轉換進行 JCL 現代化所產生的 IDCAMS 程式的 Groovy 範例用量：

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)
/*
```

和相符的 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>

此程式會複寫 IEBGENER 公用程式。它用於複製和操作循序資料集。此實作支援進階資料處理操作的 IEBGENER 控制陳述式，以擴展基本的複製功能。

### Parameters
<a name="iebgener-parameters"></a>

無引數。操作會透過 SYSIN 資料集傳遞。

### 必要的資料集
<a name="iebgener-datasets"></a>
+ SYSIN：包含控制項陳述式 （選用，如果未定義，則 IEBGENER 程式與 ICEGENER 相同）
+ SYSUT1：輸入資料集/檔案
+ SYSUT2：輸出資料集/檔案

### 主要功能/支援的 IEBGENER 控制陳述式
<a name="iebgener-commands"></a>

此處不提供 SYSIN 控制卡中 IEBGENER 控制陳述式的詳細資訊，但應從現有的相關舊版平台文件中擷取。
+ GENERATE - 透過指定要處理的記錄類型 (MAXNAME) 和欄位 (MAXFLDS) 數目上限，定義資料處理程序的整體結構
+ 記錄 - 透過指定將從輸入資料集複製或以特定值產生之個別欄位的位置、長度和格式，定義每個記錄類型的實際配置和內容
+ 不支援 LABEL/MEMBER/EXIT 

範例：

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

### 錯誤處理
<a name="iebgener-error"></a>

如果複製成功，請設定錯誤代碼 0；如果失敗，請設定 1。

### 範例用量
<a name="iebgener-sample"></a>

以下是透過 AWS 轉換進行 JCL 現代化所產生的 IEBGENER 程式的 Groovy 範例用量：

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 */
/*
```

和相符的 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 是一個「什麼都不做」程式，只需傳回傳回的傳回碼為 0 （零）。其主要用途是透過 DD 陳述式進行資料集分配、刪除或目錄維護，而無需執行任何實際的資料處理。

### Parameters
<a name="iefbr14-parameters"></a>

無引數

### 錯誤處理
<a name="iefbr14-error"></a>

一律設定錯誤代碼 0。

### 範例用量
<a name="iefbr14-sample"></a>

以下是透過 AWS 轉換進行 JCL 現代化所產生的 IEFBR14 程式的 Groovy 範例用量：

建立新循序資料集的 JCL 程式碼：

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

和相符的 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")
```

刪除現有資料集的 JCL 程式碼：

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

和相符的 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>

此程式會管理資料集狀態，並根據組態啟用/停用資料集，同時支援個別檔案和萬用字元模式：它會變更 JICS 資料表 file\_table 中的 STATUS 欄位。

### Parameters
<a name="jclbcics-parameters"></a>

無引數。操作會透過`DatasetsConfiguration`物件傳遞，例如

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

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

程式行為可由兩個參數設定：

在 `application-utility-pgm.yml` 中：
+ `jclbcics.ddname.size` （預設值為 8)：它會全域設定資料集名稱大小；如果設定此值且資料集名稱長度小於此值，則會截斷資料集名稱。

在呼叫程式的 Groovy 檔案的個別步驟中
+ `JCLBCICS_OVERRIDDEN_SIZE`：它會覆寫全域資料集名稱大小：

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

如果調整後的 dd 名稱大小 （截斷後） 小於 8，則 dd 名稱會被視為萬用字元，且函數會針對以此 dd 名稱開頭的所有資料集運作。

### 主要功能
<a name="jclbcics-features"></a>

支援的操作包括：
+ OPEN：將資料集設定為 ENABLED 狀態
+ CLOSE：將資料集設定為 DISABLED 狀態

這些操作會透過`DatasetsConfiguration`建置器類別宣告：

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

DD 名稱：資料集的名稱，如果 dd 名稱大小小於 dd 名稱大小上限 (8)，則會接受萬用字元 \*。

### 錯誤處理
<a name="jclbcics-error"></a>

設定錯誤代碼 0

### 範例用量
<a name="jclbcics-sample"></a>

以下是 JCLBCICS 計劃的 Groovy 範例用量：

它會停用資料集 `UFOLJ3P`，啟用以 AX 開頭的所有資料集，啟用以 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")
```