PHP API 程式碼範例
請使用下列 PHP API 程式碼範例來執行一般作業,以協助您撰寫自己的 PHP 程式碼來修改型樣實例。
關於此作業
程序
- 執行其他 PHP Script。下列範例顯示如何使用 PHP Script ,利用 mb_pattern_run_template() 函數來執行另一個 PHP Script。 mb_pattern_run_template() 函數使用下列參數:
- mb_pattern_run_template() 所需的第一個參數是包含 PHP 範本的專案名稱; 在此範例中為 Transform 。
- mb_pattern_run_template() 所需的第二個參數是要執行的 PHP Script 名稱; 在此範例中, example.esql.php位於稱為 mqsi的子資料夾中。
- mb_pattern_run_template() 所需的第三個參數是寫入輸出的檔案名稱; 在此範例中為 example.esql,位於子資料夾 mqsi。
<?php if ($_MB['PP']['includeErrorHandling'] == 'true') { mb_pattern_run_template("Transform", "mqsi/example.esql.php", "mqsi/example.esql"); } ?>
- 使用 PHP Script 搭配 ESQL 的標記。在下列範例中,使用者定義型樣包含稱為 errorQueue的型樣參數,其中可以包含值 none 或 errorAction:
BROKER SCHEMA mqsi <?php if ($_MB['PP']['errorAction'] == 'errorQueue') { echo "DECLARE ErrorAction EXTERNAL CHARACTER '".$_MB['PP']['errorAction']."';"; echo <<<ESQL CREATE FILTER MODULE CheckErrorAction CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN IF ErrorAction = 'errorQueue' THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END; END MODULE; ESQL; } ?>
- 使用 PHP Script 從專案移除檔案。 在下列範例中, Script 會先檢查具有型樣參數 ID pp1的勾選框型樣參數值。 如果這個參數設為 false, Script 會從型樣實例專案中刪除 Log.msgflow 和 Log.esql 檔。 必須使用 removeMessageFlow() 函數來刪除訊息流程檔案。 可以使用標準 PHP 函數 unlink()來刪除非訊息流程檔案:
if ($_MB['PP']['pp1'] == 'false') { $pim = $_MB["PATTERN_INSTANCE_MANAGER"]; $logmsgflow = $pim->getMessageFlow("Example_Flows", "mqsi/Log.msgflow"); $pim->removeMessageFlow($logmsgflow); $piworkspace = $pim->getWorkspaceLocation(); $piname = $pim->getPatternInstanceName(); $logesql = $piworkspace . "/" . $piname . "_Example_Flows/mqsi/Log.esql"; unlink($logesql); }
- 使用靜態 Java 方法從 PHP 執行 Java™ 程式碼。 下列範例顯示可從 PHP Script 內執行的 Java 類別 MyClass。 類別包含 static 方法:
package com.your.company.domain.code; import com.ibm.broker.config.appdev.MessageFlow; import com.ibm.broker.config.appdev.patterns.GeneratePatternInstanceTransform; import com.ibm.broker.config.appdev.patterns.PatternInstanceManager; public class MyClass implements GeneratePatternInstanceTransform { public static void doSomethingUseful(String message) { System.out.println("Message received [" + message + "]"); } @Override public void onGeneratePatternInstance(PatternInstanceManager patternInstanceManager) { } }
您可以從 PHP 執行 MyClass 類別,如下列範例所示。 在
$class = $pim->getPluginClass("com.your.company.domain.code", "com.your.company.domain.code.MyClass")
行中,第一個引數com.your.company.domain.code
是包含 Java 類別之外掛程式的 ID。 第二個引數com.your.company.domain.code.MyClass
是類別的名稱。<?php $pim = $_MB["PATTERN_INSTANCE_MANAGER"]; $class = $pim->getPluginClass("com.your.company.domain.code", "com.your.company.domain.code.MyClass"); java_import("com.your.company.domain.code.MyClass"); MyClass::doSomethingUseful("Hello!"); ?>
- 使用非靜態 Java 方法從 PHP 執行 Java 程式碼。 下列範例顯示可從 PHP Script 內執行的 Java 類別 MyClass。 類別包含非 static 的方法:
package com.your.company.domain.code; import com.ibm.broker.config.appdev.MessageFlow; import com.ibm.broker.config.appdev.patterns.GeneratePatternInstanceTransform; import com.ibm.broker.config.appdev.patterns.PatternInstanceManager; public class MyClass implements GeneratePatternInstanceTransform { public void doSomethingUseful(String message) { System.out.println("Message received [" + message + "]"); } @Override public void onGeneratePatternInstance(PatternInstanceManager patternInstanceManager) { } }
您可以從 PHP 執行 MyClass 類別,如下列範例所示。 在
$class = $pim->getPluginClass("com.your.company.domain.code", "com.your.company.domain.code.MyClass")
行中,第一個引數com.your.company.domain.code
是包含 Java 類別之外掛程式的 ID。 第二個引數com.your.company.domain.code.MyClass
是類別的名稱。 即會在第$obj = $class->newInstance()
行中建立類別的新實例。 在範例的最後一行中,會執行類別的doSomethingUseful()
方法。<?php $pim = $_MB["PATTERN_INSTANCE_MANAGER"]; $class = $pim->getPluginClass("com.your.company.domain.code", "com.your.company.domain.code.MyClass"); $obj = $class->newInstance(); $obj->doSomethingUseful("Hello!"); ?>
- 使用 PHP Script 來讀取表格值。 在下列範例中, PHP Script 會從儲存在超廣域變數 $_MB中的陣列擷取值。 首先, Script 會在陣列內搜尋 事件 及 回應 變數中儲存的任何值,然後傳回值:
<?php $pim = $_MB["PATTERN_INSTANCE_MANAGER"]; $table = $pim->getParameterTable("table1"); $count = $table->getRowCount(); for ($j=0;$j<$count ;$j++ ) { echo "".$_MB['PP']['table1'][$j]['event']."';\n"; echo "".$_MB['PP']['table1'][$j]['response']."';\n"; } ?>
陣列具有下列結構:
array(4) { ["PATTERN_INSTANCE_MANAGER"]=> object(Java)#1 (0) { } ["PP"]=> array(10) { ["queueName"]=>string(11) "QP.QUEUE.QS" ["configurePrefixSuffix"]=>string(5) "false" ["queuePrefix"]=>string(3) "QP." ["queueSuffix"]=>string(3) ".QS" ["logging"]=>string(5) "queue" ["generateMessageSet"]=>string(4) "true" ["table1"]=> array(2) { [0]=> array(2) { ["event"]=>string(6) "event1" ["response"]=>string(9) "response1" } [1]=> array(2) { ["event"]=>string(6) "event2" ["response"]=>string(9) "response2" } } }