AWS Mainframe Modernization 自我管理體驗不再開放給新客戶。如需類似 AWS Mainframe Modernization 自我管理體驗的功能,請從廠商導向產品和來源探索功能 AWS Transform。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS 大型主機現代化可用性變更。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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);