AWS Mainframe Modernization Service (受管執行期環境體驗) 不再向新客戶開放。對於與 AWS Mainframe Modernization Service (受管執行期環境體驗) 類似的功能,探索 AWS Mainframe Modernization Service (自我管理體驗)。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS 大型主機現代化可用性變更。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
其他/其他公用程式
本節涵蓋各種無法連接到現有類別的公用程式計劃,具有其他目的
在下列段落中, PICTURE 應理解為 COBOL PICTURE關鍵字,用於描述欄位資料類型和格式。
CBL_AND/CBL_OR/CBL_XOR/CBL_EQ/CBL_IMP/CBL_NOT
用途
這與在某些 COBOL 方言 (Micro Focus) 中找到的資料項目支援位元邏輯操作相關。請注意,使用 AWS Transform 自動重構處理從 Cobol MF 方言到 Java 的位元運算子用量轉換 (請參閱下面的範例用量)。若要讓現代化程式碼正確執行,公用程式應用程式必須同時部署。
支援的運算子:
Unary 運算子:
| Unary 運算子 | 詳細資訊 |
|---|---|
CBL_NOT |
位元補數 (~target) |
二進位運算子:
| 二進位運算子 | 詳細資訊 |
|---|---|
CBL_AND |
位元 AND (來源和目標) |
CBL_OR |
位元 OR (來源 | 目標) |
CBL_XOR |
位元獨佔 OR (來源 ^ 目標) |
CBL_EQ |
位元相等性 (~(來源 ^ 目標)) |
CBL_IMP |
位元隱含 (~source | target) |
簽章
除了只有一個運算元 (目標) 的 CBL_NOT 之外,所有其他操作至少有兩個運算元,也就是資料項目。第一個運算元是來源,第二個運算元是目標。額外的選用引數 (長度) 會提供要處理的位元組數 (從左到右)。如果省略長度,則會預設為來源和目標大小的最小值 (以位元組為單位)。操作的結果會存放在目標中。程式的傳回碼為 0 (除非發生例外狀況)。
檢查/錯誤處理
對於每個可用的運算子,會檢查所需的引數數目。如果不符合所需引數的最小數量,
IllegalArgumentException則會擲出 。選用的長度整數引數會檢查是否為正數。如果提供的長度為負數,則日誌中會顯示訊息,而且不會套用運算子。
範例用量
Unary 運算子範例:
以下是 CBL_NOT 的 Cobol 用量:
* TARGET: 00000101 * OPERATION: NOT * EXPECTED: 11111010 = 64000 dec (2nd byte unchanged - all 0) MOVE X'0500' to TARGET CALL "CBL_NOT" USING TARGET BY VALUE 1.
和對應的 Java 現代化:
/* TARGET: 00000101 OPERATION: NOT EXPECTED: 11111010 = 64000 dec (2nd byte unchanged - all 0) */ ctx.getTarget().getTargetReference().setBytes(new byte[]{ 5, 0 }); ctrl.callSubProgram("CBL_NOT", CallBuilder.newInstance() .byReference(ctx.getTarget().getTargetReference()) .byValue(1) .getArguments(), ctx);
二進位運算子範例:
如需使用 CBL_AND 的執行個體,請參閱下列 COBOL 程式碼:
* SOURCE: 00000011 * OPERATION: AND * TARGET: 00000101 * EXPECTED: 00000001 = 256 dec (2nd byte unchanged - all 0) MOVE X'0300' to SRC MOVE X'0500' to TARGET CALL "CBL_AND" USING SRC TARGET BY VALUE 1.
及其 Java 現代化:
/* SOURCE: 00000011 OPERATION: AND TARGET: 00000101 EXPECTED: 00000001 = 256 dec (2nd byte unchanged - all 0) */ ctx.getSrc().getSrcReference().setBytes(new byte[]{ 3, 0 }); ctx.getTarget().getTargetReference().setBytes(new byte[]{ 5, 0 }); ctrl.callSubProgram("CBL_AND", CallBuilder.newInstance() .byReference(ctx.getSrc().getSrcReference()) .byReference(ctx.getTarget().getTargetReference()) .byValue(1) .getArguments(), ctx);
CEE3ABD
用途
此公用程式程式模擬具有相同名稱的舊版程式行為,其角色是終止具有異常 (異常結束) 程式碼和選用清除時間的程式。AWS 轉換引擎會處理 CEE3ABD 呼叫的自動現代化。若要讓現代化程式碼正確執行,公用程式應用程式必須同時部署。
程式會使用提供的抽象程式碼來停止目前的執行單位。系統會將資訊訊息列印至日誌,並指定已使用指定的程式碼呼叫使用者結束。目前,不會將計時參數納入考量,但基於現代化相容性原因, 會做為引數存在。
簽章
程式接受 0 或 2 個引數。兩個引數為:
中止程式碼 (必須解譯為正整數值的資料項目)
清除時間 (必須解譯為正整數值的資料項目) -- 忽略
未提供引數時,會使用下列預設值:
附加程式碼:0
清除時間:0
檢查/錯誤處理
檢查是否提供 0 或 2 個引數,否則
IllegalArgumentException會擲回 。如果提供兩個引數,請檢查:抽象程式碼介於 0 和 4095 之間 (兩者皆包含);計時介於 0 和 5 之間 (兩者皆包含)
這些測試的任何失敗都會觸發 IllegalArgumentException。
範例用量
以下是 COBOL 程式中的範例用量,來自 Carddemo 應用程式:
9999-ABEND-PROGRAM. DISPLAY 'ABENDING PROGRAM' MOVE 0 TO TIMING MOVE 999 TO ABCODE CALL 'CEE3ABD'.
和對應的現代化 Java 程式碼:
public void _9999AbendProgram(final Cbtrn03cContext ctx, final ExecutionController ctrl) { DisplayUtils.display(ctx, ctrl, LOGGER, "ABENDING PROGRAM"); ctx.getTiming().setTiming(0); ctx.getAbcode().setAbcode(999); ctrl.callSubProgram("CEE3ABD", CallBuilder.newInstance() .getArguments(), ctx); }
CEEDATE
用途
CEEDATE 公用程式會使用提供的格式,將代表 Lilian 日期 (自 1582 年 10 月 15 日起的天數) 的數字轉換為以字元為基礎的日期表示。
它會以相同名稱模擬舊版系統公用程式的行為。
簽章
基於其本質,CEEDATE 公用程式更適合從程式呼叫。
它需要三或四個引數 (最後一個引數是選用的):
強制第一個引數是數值資料項目,其值將做為 Lilian 日期來解釋
強制第二個引數是英數資料項目,其中包含用於日期轉換為字元的
PICTURE字串強制第三個引數是目標英數字元資料項目,保留使用第二個引數做為 轉換第一個引數的結果
PICTURE第四個選用引數是用來存放來自 公用程式之意見回饋碼的資料項目
檢查/錯誤處理
如果傳遞給公用程式的引數數目不是三或四個,
BluageWrapperException則會擲出如果提供的第一個數字引數無法正確評估為 Lilian 日期 (超出邊界),則會記錄錯誤訊息。如果有選用的意見回饋代碼持有者,將會提供嚴重性為 3 的意見回饋代碼和訊息編號 2512
如果因為提供的無效 而在日期轉換期間發生例外狀況
PICTURE,則會記錄錯誤訊息。如果有選用的意見回饋代碼持有者,將會提供嚴重性為 3 的意見回饋代碼和訊息編號 2518如果因任何原因無法正常進行轉換,輸出資料項目會填入空白
如果轉換成功,選用的意見回饋代碼持有者將收到嚴重性為 0 的意見回饋代碼 (且沒有訊息)
範例用量
以下是來自 COBOL 程式的範例呼叫 (意見回饋程式碼持有者 FC 的結構包含省略符號,如同包含數百個此處未顯示的條件 (層級 88) 項目):
WORKING-STORAGE SECTION. 01 LILIANS PIC S9(9) BINARY. 01 TIMESTAMP-OUT PIC X(80). 01 MASK. 05 MASK-LEN PIC S9(4) BINARY. 05 MASK-STR. 10 MASK-CHR PIC X OCCURS 0 TO 256 DEPENDING ON MASK-LEN. 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. 01 FC. ... * lilian date for 4 June 1990 MOVE SPACES TO MASK-STR MOVE 148887 TO LILIANS. MOVE 23 TO MASK-LEN MOVE 'YYYY-MM-DD-HH:MI:SS.999' TO MASK-STR CALL CEEDATE-ROUTINE USING LILIANS MASK TIMESTAMP-OUT FC.
CEELOCT
用途
CEELOCT 公用程式用於以三種格式傳回本機日期/時間:
Lilian 日期 (自 1582 年 10 月 14 日起的天數)
Lilian 秒 (自 1582 年 10 月 14 日 00:00:00 起的秒數)
Gregorian 字元字串 (格式為
YYYYMMDDHHMISS999)
它會以相同名稱模擬舊版系統公用程式的行為。
簽章
基於其本質,CEELOCT 公用程式更適合從程式呼叫。
它需要三或四個引數 (最後一個引數是選用的):
強制第一個引數是資料項目,用於存放 Lilian 日期
強制第二個引數是資料項目,用於存放 Lilian 秒
必要第三個引數是資料項目,用於使用上述格式存放 Gregorian 日期
選用的第四個引數是用來存放來自 公用程式之意見回饋碼的資料項目
檢查/錯誤處理
如果傳遞給公用程式的引數數目不是三或四個,
BluageWrapperException則會擲出如果在處理從本機日期/時間轉換到任何輸出格式期間發生任何例外狀況:第一個和第二個引數將設定為 0,第三個引數將保持不變;將記錄錯誤訊息;或者,將使用嚴重性為 3 的意見回饋代碼和訊息編號 2531 來饋送意見回饋代碼持有者
成功時,所有三個引數都會填入適當的內容,而選用的意見回饋代碼將以嚴重性 0 的代碼提供
範例用量
以下是 COBOL 程式碼片段範例,顯示 CEELOCT 公用程式的使用情況。意見回饋程式碼持有者結構 FC 並未完整提供,因為它包含數百個條件 (層級 88) 項目。
WORKING-STORAGE SECTION. 01 LILIANS PIC S9(9) BINARY. 01 GREGORN PIC X(80). 01 SECONDS COMP-2. 01 FC. ... 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. ... CALL CEELOCT-ROUTINE USING LILIANS SECONDS GREGORN FC.
CEERAN0
用途
呼叫 CEERAN0 程式,使用指定的種子產生介於 0.0 和 1.0 之間的虛擬隨機數字。它以需要使用者指定種子的乘法並行方法演算法為基礎。使用 0 作為種子會觸發特定模式,其中種子實際上是從 Greenwich 平均時間 (在執行程式時) 計算。否則,種子會依原狀使用。虛擬隨機序列是可預測的。
簽章
CEERAN0 程式需要三個參數:
seed (輸入參數),可解譯為正整數的資料項目 (包含 0)
隨機數字 (輸出參數),可解譯為雙精確度浮點數的資料項目 (其值介於 0.0 和 1.0 之間,獨佔);這是程式的結果
選用的意見回饋碼 (輸出參數),為 12 個位元組的資料項目,用於存放程式有關隨機數字運算的意見回饋
檢查/錯誤處理
如果引數數目不是 2 或 3,
IllegalArgumentException則會擲出種子值必須介於 0 和 2147483646 之間,包括在內。如果種子值超出這些範圍,則會記錄錯誤訊息,且回饋代碼會設為嚴重性 3,而訊息號碼會設為 2524。產生的隨機數字將設定為 -1.0 (類比為舊版行為)
如果種子值設為 0,但系統無法擷取 Greewich 平均時間 (基於任何原因),則會使用值 1 進行計算做為備用,且回饋碼會設為嚴重性 1,而訊息號碼設為 2523。隨機數字運算將繼續使用遞迴種子值 (類比傳統行為)
範例用量
這是示範如何使用 CEERAN0 程式的 Java 範例,使用包括意見回饋碼的所有參數,以及來自多個層 (實體、服務) 的位元:
//Entity layer public class Randomin extends RecordEntity { private final Group root = new Group(getData()).named("RANDOMIN"); private final Elementary randomin = new Elementary(root,new BinaryIntegerType(4, true),new BigDecimal("0")).named("RANDOMIN"); ... public class Randomout extends RecordEntity { private final Group root = new Group(getData()).named("RANDOMOUT"); private final Elementary randomout = new Elementary(root,new DoubleFloatingPointType(),new BigDecimal("0")).named("RANDOMOUT"); ... public class Returncode1 extends RecordEntity { private final Group root = new Group(getData()).named("RETURNCODE"); private final Elementary returncode1 = new Elementary(root,new AlphanumericType(12)," ").named("RETURNCODE"); ... // Service layer CallHandler.newInstance(ctrl, ctx, ctx.getErrorContext()) .byReference(ctx.getRandomin().getRandominReference(), ctx.getRandomout().getRandomoutReference(), ctx.getReturncode1().getReturncode1Reference()) .call("CEERAN0");
CEESECS
用途
CEESECS 公用程式會將時間戳記字串表示法轉換為 Lilian 秒 (自 1582 年 10 月 14 日 00:00:00 起的秒數)。
簽章
基於其本質,CEESECS 公用程式更適合從程式呼叫。
它需要三或四個引數 (最後一個引數是選用的):
強制第一個引數是資料項目,其值將做為時間戳記來解釋
強制第二個引數是英數資料項目,其中包含用來指定如何解譯第一個引數的
PICTURE字串必要第三個引數是資料項目,保留使用第二個引數做為 轉換第一個引數的結果
PICTURE第四個選用引數是用來存放來自 公用程式之意見回饋碼的資料項目
檢查/錯誤處理
如果傳遞給公用程式的引數數目不是三或四個,
BluageWrapperException則會擲出如果作為引數傳遞給公用程式的時間戳記無效,則會記錄錯誤訊息,並選擇性地使用嚴重性為 3 的意見回饋代碼和訊息編號 2513 來饋送意見回饋代碼持有者
如果作為引數傳遞給公用程式的圖片無效,則會記錄錯誤訊息,並選擇性地使用嚴重性為 3 的意見回饋代碼和訊息編號 2518 來饋送意見回饋代碼持有者
如果出於任何原因,無法計算百合秒輸出,則第三個引數 (輸出) 將設定為 0
範例用量
以下是 COBOL 程式中 CEESECS 公用程式的範例呼叫:
WORKING-STORAGE SECTION. 01 SECONDS COMP-2. 01 TIMESTAMP-IN. 05 TIMESTAMP-IN-LEN PIC S9(4) BINARY. 05 TIMESTAMP-IN-STR. 10 TIMESTAMP-IN-CHAR PIC X OCCURS 0 TO 256 DEPENDING ON TIMESTAMP-IN-LEN. 01 MASK. 05 MASK-LEN PIC S9(4) BINARY. 05 MASK-STR. 10 MASK-CHR PIC X OCCURS 0 TO 256 DEPENDING ON MASK-LEN. 01 FC. ... 01 ROUTINE-NAMES. 05 CEESECS-ROUTINE PIC X(08) VALUE 'CEESECS '. 05 CEELOCT-ROUTINE PIC X(08) VALUE 'CEELOCT '. 05 CEEDATE-ROUTINE PIC X(08) VALUE 'CEEDATE '. ... ... * date for lilian second 12,799,191,601.123 MOVE '1988-5-16-19:00:01.123' TO TIMESTAMP-IN-STR MOVE 23 TO MASK-LEN MOVE 'YYYY-MM-DD-HH:MI:SS.999' TO MASK-STR CALL CEESECS-ROUTINE USING TIMESTAMP-IN MASK SECONDS FC.
ILBOABN0
用途
ILBOABN0 程式的目的是使用使用者提供的 abend (異常結束) 程式碼,以控制的方式中斷目前的執行單位。常用於處理專用程式的錯誤。
擲回 會中斷目前的執行單位StopRunUnitException。
簽章
ILBOABN0 程式採用單一強制引數,這是包含抽象程式碼的資料項目 (必須可解譯為整數)。
檢查/錯誤處理
擲回 StopRunUnitException 以中斷目前的執行單位執行時,程式會將傳回程式碼設定為第一個引數提供的值。此外,也會記錄資訊訊息。
範例用量
以下是透過 AWS 轉換進行 COBOL 現代化所產生的 ILBOABN0 程式的 Java 範例用量:
77 WS-ABND-CODE COMP PIC S9(4) VALUE +1234. ... ... 1970-ABNDIT. CALL 'ILBOABN0' USING WS-ABND-CODE.
和相符的 Java 現代化:
//Entity layer private final Group root = new Group(getData()); private final Elementary wsAbndCode = new Elementary(root,new BinaryType(4, 0, "STD", false, false, true),Short.valueOf("1234")); ... //Service layer @Override public void _1970Abndit(final MyPgmContext ctx, final ExecutionController ctrl) { ctrl.callSubProgram("ILBOABN0", CallBuilder.newInstance() .byReference(ctx.getWsAbndCode().getWsAbndCodeReference()) .getArguments(), ctx);