PHP API 程式碼範例

請使用下列 PHP API 程式碼範例來執行一般作業,以協助您撰寫自己的 PHP 程式碼來修改型樣實例。

關於此作業

下列範例顯示建立使用者定義型樣時可用來完成一般作業的 PHP 程式碼:

程序

  • 執行其他 PHP Script。
    下列範例顯示如何使用 PHP Script ,利用 mb_pattern_run_template() 函數來執行另一個 PHP Script。 mb_pattern_run_template() 函數使用下列參數:
    1. mb_pattern_run_template() 所需的第一個參數是包含 PHP 範本的專案名稱; 在此範例中為 Transform
    2. mb_pattern_run_template() 所需的第二個參數是要執行的 PHP Script 名稱; 在此範例中, example.esql.php位於稱為 mqsi的子資料夾中。
    3. mb_pattern_run_template() 所需的第三個參數是寫入輸出的檔案名稱; 在此範例中為 example.esql,位於子資料夾 mqsi
    此範例中的使用者定義型樣包含稱為 includeErrorHandling的布林型樣參數。 此型樣參數用來在型樣中建立勾選框:
    <?php
        if ($_MB['PP']['includeErrorHandling'] == 'true') {
            mb_pattern_run_template("Transform", "mqsi/example.esql.php", "mqsi/example.esql");
        }
    ?>
  • 使用 PHP Script 搭配 ESQL 的標記。
    在下列範例中,使用者定義型樣包含稱為 errorQueue的型樣參數,其中可以包含值 noneerrorAction:
    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.msgflowLog.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"
    				  }
    			}
    	}