Wie verwende ich SOAP - ExecuteScriptEx

Hallo…

SOAP ExecuteScript funktioniert bei mir problemlos, ich würde jedoch gerne in der Art der PHP Funktion „IPS_RunScript(Wait)Ex“ gleichzeitig eine Variable setzen.
Ich nehme an dafür könnte man in „IIPSScriptEngine“ das „ExecuteScriptEx“ verwenden - den Namen „RunScript“ hab ich in der WSDL nicht gefunden.

Nun komme ich einfach auf keinen grünen Zweig, wie ich das Variablen - Array angeben kann (zum Beispiel : Array(„Command“ => „On“) )

Ich verwende übrigen Powershell um die SOAP requests abzusetzen, und generiere die XML Requests ganz primitiv durch Zusammensetzen von Text Fragmenten. Ein Beispiel mit ExecuteScript habe ich mir mit dem kostenlosen soapUI 4 generieren lassen - das hat auch sehr zügig geklappt. Bei ExecuteScriptEx kriege ich aber einfach nicht mehr raus wo die zusätzlichen Parameter hingehören.

Danke im Voraus für jeden Tipp (ein Beispiel wäre natürlich perfekt)! - bin mit der Suche im Forum nun erstmals in meinem IPS - Abenteuer nicht wirklich weitergekommen…
Ich bin auch schon dankbar für einen Tipp wo ich suchen muss, oder wie ich mir die Info erarbeiten könnte - stehe momentan einfach auf dem Schlauch.

Vielen Dank im Voraus,
hixgy

Unten mein Beispiel wo ich nicht weiss wohin mit dem Array (und in welcher Form)


<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:urn="urn:UIPSTypes-IIPSScriptEngine" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:ExecuteScriptEx soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <ScriptID xsi:type="xsd:unsignedShort">12345</ScriptID>
         <Sender xsi:type="xsd:string">?</Sender>
         <DoWait xsi:type="xsd:boolean">1</DoWait>
         <ExecuteInfo xsi:type="urn:TIPSExecuteInfo" xmlns:urn="urn:UIPSTypes">
            <ServerVariables xsi:type="urn:TIPSPHPVariables" soapenc:arrayType="urn:TIPSPHPVariable[]"/>
            <ScriptResult xsi:type="xsd:string">?</ScriptResult>
            <ScriptHeaders xsi:type="urn:TStringArray" soapenc:arrayType="xsd:string[]"/>
         </ExecuteInfo>
      </urn:ExecuteScriptEx>
   </soapenv:Body>
</soapenv:Envelope>

Im ExecuteInfo musst du die ServerVariables ausfüllen. Dort kannst du dann solch Dinge wie Name/Typ und Wert angeben.


<ServerVariables xsi:type="urn:TIPSPHPVariables" soapenc:arrayType="urn:TIPSPHPVariable[]"/> 

paresy

Ich kriegs nicht hin, das XML selber zusammenzustellen, mir scheinen da ehrlich gesagt die Hirnzellen zu fehlen die Notation komplett zu verstehen…:mad:

Nun wollte ich mal ein Beispiel in PHP erstellen und dann die Nachricht „mitschneiden“, aber auch da komm ich auf keinen grünen Zweig - habe auch keine Beispiele gefunden… :frowning:

:loveips: <- zur zeit sind das also bei mir nur die beiden ersten Bilder im Loop :slight_smile:

Wie schreib ich das richtig, wenn ich ne Variable mit Namen „command“ und Wert „test“ setzen will? (Dies ist nur das einfachste Beispiel von vielen Veruschen die ich bereits gemacht hab…)


<?
$soap = new SoapClient("http://127.0.0.1:3773/wsdl/IIPSScriptEngine");
$result = $soap->ExecuteScriptEx(46130 ,'TestSender',true,Array('command'=>'test'));
echo base64_decode($result);
?>

Ich hab die Vermutung, dass ich einfach noch nicht realisiert habe wie das mit TIPSPHPVariable funktioniert…

Danke im Voraus ! Ihr könnt mir gerne auch einfach nur Links um die Ohren hauen, ich halte gerne hin :o

Hallo nochmal

Die Frage war wahrscheinlich nicht so klar gestellt, darum nochmal;
Wäre es vielleicht möglich dass jemand ein Beispiel produzieren könnte wie man „ExecuteScriptEx“ über SOAP aus IPS verwendet?
So in der Art wie auf
Datenaustausch: IP-Symcon :: Automatisierungssoftware
?
Ich komm einfach nicht klar wie ich da das Array für die Variablen formatieren muss.
Ich hab hier jetzt schon Stunden verbraten und wäre wirklich froh um eine kleine Starthilfe…

Danke im Voraus,
Chris

Wie das ganze in XML aussehen muss, hab ich unterdessen herausgefunden, würde mich jedoch trotzdem noch brennend interessieren wie ich das aus PHP bewerkstellige (voriger Post).

Poste hier mal das funktionierende XML Beispiel, auch wenn’s wahrscheinlich für die meisten klar ist, oder keine interessiert (vielleicht aber doch wenn ich die Anzahl der Aufrufe sehe, oder waren das etwa alles meine Eigenen? :rolleyes:);

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:urn="urn:UIPSTypes-IIPSScriptEngine" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:ExecuteScriptEx soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <ScriptID xsi:type="xsd:unsignedShort">[i]12345[/i]</ScriptID>
         <Sender xsi:type="xsd:string"></Sender>
         <DoWait xsi:type="xsd:boolean">[i]1[/i]</DoWait>
         <ExecuteInfo xsi:type="urn:TIPSExecuteInfo" xmlns:urn="urn:UIPSTypes">
          <ServerVariables xsi:type="urn:TIPSPHPVariables" soapenc:arrayType="urn:TIPSPHPVariable[0]">
           <TIPSPHPVariable xsi:type="NS2:TIPSPHPVariable">
            <VariableName xsi:type="xsd:string">[i]Variablenname[/i]</VariableName>
            <VariableValue xsi:type="TIPSVarValue">
             <ValueType xsi:type=":TIPSVarType">vtString</ValueType>
             <ValueString xsi:type="xsd:string">[i]VariablenWert[/i]</ValueString>
            </VariableValue>
           </TIPSPHPVariable>
          </ServerVariables>
            <ScriptResult xsi:type="xsd:string">?</ScriptResult>
            <ScriptHeaders xsi:type="urn:TStringArray" soapenc:arrayType="xsd:string[]"/>
         </ExecuteInfo>
      </urn:ExecuteScriptEx>
   </soapenv:Body>
</soapenv:Envelope>

Hier ein Beispiel. Leider funktioniert in PHP nicht, dass man das ScriptResult bekommt und der Wait Parameter muss true sein, sonst gibt es auch einen wundersamen Fehler.



$soap = new SoapClient("http://127.0.0.1:3773/wsdl/IIPSScriptEngine");

$SV = Array(
	Array(
	   'VariableName' => 'Bla',
	  /* 'VariableType' => 'pvtIPS', //Uncomment for 2.5 */
	   'VariableValue' => Array(
	      'ValueIndex' => 'itInt',
	      'ValueType' => 'vtInteger',
	      'ValueBoolean' => false,
	      'ValueInteger' => 1000,
	      'ValueFloat' => 0,
	      'ValueString' => '',
	      'ValueVariant' => 0,
	      'ValueArray' => Array()
	   )
	)
);

$EI = array(
		'ServerVariables' => $SV,
		'ScriptResult' => '?',
		'ScriptHeaders' => Array()
	);

$soap->ExecuteScriptEx(24806, "Test", true, $EI);

paresy

Hallo Paresy

Merke in diesem Moment dass ich hier noch was vergessen hab:
Dankeschön! :slight_smile:

Das Beispiel war für mich bereits sehr hilfreich - ich hab davor die Formatierung des „doppelten Arrays“ einfach nicht geschnallt.

Gruss,
Chris

Hallo,

einiges habe ich (inzwischen) verstanden:

  1. Der zweite Parameter von ExcecuteScriptEx enthält die Identifikation des Aufrufers. Im aktuellen Beispiel ist das „Test“. Das Scirpt könnte daher wie folgt beginnen:
    if ($_IPS[‚SENDER‘] == „Test“) { // Script wurde über SOAP von „Test“ aufgerufen
    $ParamBla = $_IPS[‚Bla‘]; // Variable abfragen, die übergeben wurde …

    }

FRAGE: Wie kann man bei ExecuteScritpEx einen Wert zurückgeben? Bei ExecuteScript über SOAP funktioniert das Prima, Wait-Parameter auf True das Funktionsergebnis mit „base64_decode“ transformieren. Leider funktioniert das nicht mit ExceuteScriptEx. Was muss man hier noch beachten?

Gruß Manger

Hallo,

gerade habe ich es herausgefunden. ExecuteScriptEx liefert eine Klasse zurück von Typ stdClass …

$fres = $soap->ExecuteScriptEx(…);
$ReturnValue = base64_decode($fres->ScriptResult);

Super, jetzt geht alles!

Gruß Mangar