您可以使用 IBM® Toolbox for Java™ AS400DataType 類別及 ProgramCall,以提供資料給程式參數,並解譯程式參數中傳回的資料。
下列範例將說明如何使用 ProgramCall 呼叫系統 API、 QUSRMBRD「擷取成員說明」,藉以使用 AS400DataType 類別。QUSRMBRD API 會擷取資料庫檔案中特定成員的說明。範例後的表格將列出必要的 QUSRMBRD 參數以及範例擷取的資訊類型。
// Create a ProgramCall object. We will set the program name and // parameter list later. ProgramCall qusrmbrd = new ProgramCall(new AS400()); // Create an empty program parameter list ProgramParameter[] parms = new ProgramParameter[6]; // Create AS400DataTypes to convert our input parameters from Java types // to server data AS400Bin4 bin4 = new AS400Bin4(); // We need a separate AS400Text object for each parameter with a // different length because the AS400Text class requires the length to // be specified. AS400Text char8Converter = new AS400Text(8) AS400Text char20Converter = new AS400Text(20); AS400Text char10Converter = new AS400Text(10); AS400Text char1Converter = new AS400Text(1); // Populate our parameter list; we use the AS400DataType objects to // convert our Java values to byte arrays containing server data. // For the output parameter we need only specify how many bytes will // be returned parms[0] = new ProgramParameter(135); parms[1] = new ProgramParameter(bin4.toBytes(new Integer(135))); parms[2] = new ProgramParameter(char8Converter.toBytes("MBRD0100")); parms[3] = new ProgramParameter(char20Converter.toBytes("MYFILE MYLIB ")); parms[4] = new ProgramParameter(char10COnverter.toBytes("MYMEMBER ")); parms[5] = new ProgramParameter(char1Converter.toBytes("0")); // Set the program name and parameter list qusrmbrd.setProgram("/qsys.lib/qusrmbrd.pgm", parms); // Call the program try { qusrmbrd.run(); } catch (Exception e) { // Handle any exceptions } // Get the information retrieved. Note that this is raw server data. byte[] receiverVar = parms[0].getOutputData(); // We need this to convert the time and date data AS400Text char13Converter = new AS400Text(13); // We need this to convert the text description data AS400Text char50Converter = new AS400Text(50); // Create an AS400Structure to handle the returned information AS400DataType[] dataTypeArray = new AS400DataType[11]; dataTypeArray[0] = bin4; dataTypeArray[1] = bin4; dataTypeArray[2] = char10Converter; dataTypeArray[3] = char10Converter; dataTypeArray[4] = char10Converter; dataTypeArray[5] = char10Converter; dataTypeArray[6] = char10Converter; dataTypeArray[7] = char13Converter; dataTypeArray[8] = char13Converter; dataTypeArray[9] = char50Converter; dataTypeArray[10] = char1Converter; AS400Structure returnedDataConverter = new AS400Structure(dataTypeArray); // Convert the data returned to an array of Java Objects using our // returnedDataConverter Object[] qusrmbrdInfo = dataConverter.toObject(receiverVar, 0); // Get the number of bytes returned Integer bytesReturned = (Integer)qusrmbrdInfo[0]; Integer bytesAvailable = (Integer)qusrmbrdInfo[1]; if (bytesReturned.intValue() != 135) { System.out.println("Wrong amount of information returned."); System.exit(0); } String fileName = (String)qusrmbrdInfo[2]; String libName = (String)qusrmbrdInfo[3]; String mbrName = (String)qusrmbrdInfo[4]; String fileAttribute = (String)qusrmbrdInfo[5]; String sourceType = (String)qusrmbrdInfo[6]; String created = (String)qusrmbrdInfo[7]; String lastChanged = (String)qusrmbrdInfo[8]; String textDesc = (String)qusrmbrdInfo[9]; String isSourceFile = (String)qusrmbrdInfo[10]; // We will just output all the information to the screen System.out.println(fileName + " " + libName + " " + mbrName + " " + fileAttribute + sourceType + " " + created + " " + lastChanged + " " + textDesc + " " + isSourceFile);
下列表格將列出用於前述範例的 QUSRMBRD API 必要參數。
QUSRMBRD 參數 | 輸入或輸出 | 類型 | 說明 |
---|---|---|---|
接收器變數 | 輸出 | Char(*) | 將包含所擷取資訊的字元緩衝區。 |
接收器變數的長度 | 輸入 | Bin(4) | 提供給接收器變數的字元緩衝區長度。 |
格式名稱 | 輸入 | Char(8) | 指定要擷取之資訊類型的格式。必須是下列其中一項:
|
限定資料庫檔案名稱 | 輸入 | Char(20) | 指限定的檔案名稱。此為填好 10 個字元的檔案名稱空格, 後面跟著填好 10 個字元的檔案庫名稱空格。檔案庫名稱可以使用 *CURLIB 及 *LIBL 的特殊值。 |
資料庫成員名稱 | 輸入 | Char(10) | 填好 10 個字元的成員名稱空格。容許使用 *FIRST 及 *LAST 的特殊值。 |
置換處理程序 | 輸入 | Char(1) | 是否要處理置換。0 指出不處理置換。這是我們將指定的值。 |
下列表格將列出範例擷取的資訊類型(根據前述範例中指定的格式 MBRD0100):
擷取的資訊 | 類型 |
---|---|
傳回的位元組 | Bin(4) |
可用的位元組 | Bin(4) |
資料庫檔案名稱 | Char(10) |
資料庫檔案程式庫名稱 | Char(10) |
成員名稱 | Char(10) |
檔案屬性﹝檔案的類型:PF、LF 及 DDMF﹞ | Char(10) |
來源類型﹝如果此為原始檔,則指來源成員的類型﹞ | Char(10) |
建立日期與時間 | Char(13) |
上次變更來源的日期與時間 | Char(13) |
成員本文說明 | Char(50) |
原始檔﹝檔案是否為原始檔:0=資料檔、1=原始檔﹞ | Char(1) |