Hallo alle miteinander,
ich hatte mich auch schon länger mit dem Gedanken getragen, eine Flashoberfläche für IPS zu entwickeln. Ich bin mit Actionscript 3.0 ganz gut vertraut, habe auch schon so einige Erfahrungen was die Programmierung von Oberflächen anbelangt. Ich würde gern einen mehr oder minder universellen Dashboard-Ersatz in Flash kreieren, der dynamisch zunächst über ein Settings-File und später am besten auch innerhalb der Oberfläche angepasst werden kann. Das Know How ist wie gesagt vorhanden, außer…
Die SOAP-Schnittstelle. Eine Katastrophe, ich komme da seit zwei Tagen keinen Schritt weiter. Der jetzige Stand:
import mx.rpc.soap.*;
import mx.core.*;
import mx.rpc.events.*;
import fl.data.DataProvider;
//import mx.logging;
//Security.loadPolicyFile("http://192.168.0.26/crossdomain.xml");
var svc:WebService = new WebService();
svc.addEventListener(LoadEvent.LOAD, svcLoaded);
svc.addEventListener(FaultEvent.FAULT, svcError);
svc.loadWSDL("http://192.168.0.26:3773/wsdl/IIPSVariableManager");
function svcLoaded(evt:LoadEvent):void
{
trace("loading complete.");
ipsCall("GetVariableList", gotVariableList);
function gotVariableList(evt:ResultEvent):void
{
ipsCall("GetVariable", undefined, undefined, "VariableID", 29028);
}
}
function svcError(evt:FaultEvent):void
{
trace("svc fault", evt);
}
function ipsCall(fnName:String, fnSuccess:Function = undefined, fnError:Function = undefined, ... parArray):void
{
var op:Operation = new Operation();
var i:int;
op = Operation(svc.getOperation(fnName));
trace("calling", fnName, fnSuccess);
op.addEventListener(ResultEvent.RESULT, opResult);
op.addEventListener(FaultEvent.FAULT, opFault);
op.ignoreWhitespace = true;
op.resultFormat = "object";
op.forcePartArrays = true;
//op.headerFormat = "e4x";
for(i = 0; i < parArray.length; i += 2)
{
op.addSimpleHeader(parArray[i], svc.wsdl, parArray[i], parArray[i + 1])
trace(parArray[i], "=", parArray[i + 1]);
}
op.send();
function opResult(evt:ResultEvent):void
{
trace(evt);
trace(evt.result);
if(fnSuccess is Function)
fnSuccess(evt);
op.removeEventListener(ResultEvent.RESULT, opResult);
op.removeEventListener(FaultEvent.FAULT, opFault);
}
function opFault(evt:FaultEvent):void
{
trace(evt);
if(fnError is Function)
fnError(evt);
op.removeEventListener(ResultEvent.RESULT, opResult);
op.removeEventListener(FaultEvent.FAULT, opFault);
}
}
Während der erste Call zu GetVariableList auf Anhieb problemlos funktionierte, ist beim GetVariable Zickenalarm angesagt. Ich bekomme ein Fault zurück mit dem Namen „Encoding Error“. Ich habe keine Ahnung woher dieser Fehler kommt (Client? Server? Disneyland?) und es gibt auch, typisch Flash, keine hilfreichen Informationen darüber. Unter soapUI (ein Testprogramm für Webservices) läuft das ganze. Ist also definitiv nicht IPS’ Schuld.
Also, falls jemand Lust haben sollte, oder sich ohnehin gerade mit ähnlichen „spaßigen“ Herausforderungen beschäftigt, herzlich willkommen! Wenn ich die Kommunikation mit IPS erstmal hinbekomme, kann ich mich austoben aber bis dahin beiß ich hier vor Frust in die Tischplatte…
Ich denke aber, der Reiz einer Flashoberfläche im Gegensatz zum Dashboard dürfte einem schnell klar werden wenn man mal ein IPhone und ein Symbian-Gerät nebeneinander in der Hand hatte…