Grundlagen DvAPI per PHP, IIS, etc. zwecks Automation Zugriff

  • Dieser Thread wurde der Übersicht halber aus unten stehendem abgetrennt und hier neu erzeugt.


    Hallo Holger,


    normalerweise kann David keine Strukturen erkennen, die nicht über den Client erstellt wurden, da hier die Indexdateien nicht erzeugt werden und die kann man auch nicht von Hand erzeugen.
    Irgendwo habe ich mal gelesen, dass man eigene html Seiten ablegen kann, das ist aber eine Ewigkeit her...


    Warum ein echter Webserver?
    Weil die Webbox nur sehr eingeschränkte Möglichkeiten bietet, z.B. keine echte Scriptsprache, keine Datenbankanbindung, etc. Vielleicht willst Du ja zu Statistikzwecken mal etwas langfristig speichern, Energiebedarf oder ähnliches um dann vergleiche heranziehen zu können. Da wärst Du schon am Ende, es sei denn Du schreibst alles in Dateien...urghs.


    Und fang nicht mit dem IIS an, es sei denn, Du willst mit Silverlight und ASP arbeiten.
    Wir haben schon einige Portalseiten in David realisiert, die auf einen im Hintergrund arbeitenden Webserver aufsetzen. Wir nutzen dazu meisten "AppServ" (frag Google), das bringt in einem Installer gleich alles mit was man benötigt und die Konfiguration ist auch nicht so unsicher wie bei XAMPP. Beides läuft auf Windows.
    Bei der Installation dann von Port 80 auf einen Alternativen wechseln oder den Standardport der Webbox (wg. Webaccess, IPhone, etc.) anpassen.


    Zugriff auf das Statearchive per API
    In der Webbox hat man wie erwähnt keine Möglichkeit die API auszuführen, da die API immer ein InfoCenter Objekt benötigt. D.h. Deine Anwendung muss entweder die DVAPI als COM Objekt o.ä. einbinden oder direkt im David Client ausgeführt werden (wie z.B. ein DFML Formular).
    PHP kann COM Objekte laden und da der Webserver auf dem gleichen Server läuft wo auch David installiert ist, hat er Zugriff auf die API und somit auf jedes Verzeichnis in der David Struktur.


    Voraussetzung ist, dass der Server / PC auf dem der Webserver der die API nutzen soll läuft, eine Verbindung zum David Server hat. Es muss dort also z.B. ein David Client installiert sein, der auf den David Server zugreifen kann.
    Damit fallen die meisten Webserver beim Provider schon mal flach.


    Übrigens findest Du hier im Forum im API Board auch einige Infos zu PHP, z.B. hier: Archiveinhalt mit PHP anzeigen lassen


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

    Einmal editiert, zuletzt von Teardrop ()

  • .. soweit verstanden!


    Ich habe mir mal die DvAPI Dok runtergeladen. Wenn ich das recht verstehe, kann ich auch per Java Script auf die API zu greiffen.


    Das würde mir ja genügen, da ich ja nur das State-Archiv lesen/schreiben will. Und wenn alle Stricke reissen mach ich es wie Rene, aber das ist viel Handarbeit. Die letzte Alternative wäre David ganz zu eliminieren und sich den für den Buszugriff notwendigen Falcon-Treiber mit API zu besorgen. Aber bis das läuft ist Weichnachten - 2015.


    Ich will das ganze noch nicht aufgeben ...


    Gruß Holger

  • Oder eher Weihnachten 2020. ;)


    Ich denke die Programmierung direkt mit dem Bussystem wird noch einiges aufwendiger sein.
    Javascript kannst Du auch nehmen, ja. Das wiederum funktioniert aber nur, wenn es auch im David Client ausgeführt wird, da Javascript nicht auf dem Server sondern nur im Clientbrowser ausgeführt wird. Und ich denke Du willst ja von unterwegs drauf zugreifen, also auch ohne den David Client.


    M.E. ist PHP hier die Sprache der Wahl. Da hast Du alle Möglichkeiten. PHP ist auch einfacher als Javascript, weil Du Dich nicht um Typen und sowas kümmern musst, es gibt Debugger und verdammt viele Infos im Netz.


    Übrigens auch wieder das Datenbank Thema. Mit Javascript machst Du da nichts in der Richtung.


    Gruß Jens


    PS: Was spricht gegen PHP? Bzw. inwieweit hast Du generell Erfahrung in der Programmierung?

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Hallo Jens,


    tausend Dank für die tolle Unterstützung in 2011 ... hoffe auch auf 2012 ...


    Programmiererfahrung habe ich als Dipl.-Ing. hauptsächlich mit C, allerdings ist das ewig her - vielleicht einer der Gründe warum ich privat mich gerne mit solchen Dingen beschäftige. Ich habe inzwischen einiges an Web-Design gemacht (NOF und Dreamweaver), aber mehr leider auch nicht.


    Fassen wir zusammen:


    Wenn wir mit David an den Bus wollen muss die SW auf dem Server laufen auf dem David installiert ist -> damit fallen Webhoster aus
    Wenn wir vom Inet aus zugreiffen wollen müssen wir PHP verwenden, da auf dem Server ausgeführt, und nicht JS.


    Fazit:
    Da ich ja einen WHS habe auf dem David läuft, werde ich ganz einfach diesen verwenden und nicht noch einen Webserver aufsetzen. Dazu habe ich heute mal PHP auf dem WHS nachinstalliert. Meine erste Automations-Webseite habe ich erstellt und ich kann darauf per WHS-Intranet oder Internet darauf zugreiffen. Der INternetzugriff ist noch ein Problem, da ich hier noch keinen Schutzmechanismus gefunden habe (so wie beim Hoster .htaccess geht es leider nicht) - aber das sollte später zu lösen sein.


    Nun muss ich es "nur" noch schaffen per PHP auf das State Archiv zuzugreiffen, bzw. Befehle auf den Bus zhu senden ... dann kann ich richtig loslegen.


    Guten Rutsch - Gruß Holger


    ======================================


    Das Beispielscript läuft noch nicht so richtig ... ich habe die Zeilen 8nach EIntrag meines Servers) mal in mein html File gepackt und es erscheint folgender Text:



    Admin Edit: Code formatiert, geht mit dem #-Zeichen im Editor, liest sich einfacher.

  • Hallo Holger,


    frohes Neues Jahr. Wollen wir doch mal so weiter machen wie in 2011. :)


    Ich empfehle zunächst mal ein Einsteiger Tutorial für PHP. Mit Deiner C Erfahrung wirst Du mit der Syntax schnell klar kommen, aber man muss ein paar Dinge wissen.


    Zum Beispiel musst Du wissen, dass standardmäßig nur Dateien mit der Endung .php vom Interpreter geparsed werden. Immer dann wenn Du in der Ausgabe der Webseite oder im Quelltext den Code siehst, hat das Parsen nicht funktioniert.
    Da PHP serverseitig ausgeführt wird, also vor der Auslieferung der Webseite, ist der PHP Quelltext nach aussen nicht sichtbar, anders als bei Javascript. Daher kann man dort auch ohne weiteres Zugangsdaten hinterlegen, muss man z.B. für Datenbankverbindungen machen.


    .htaccess sollte funktionieren, auch unter Windows. Mit dem Appserv (Apache) gehts auf jeden Fall. Das einzige Problem ist, dass man im Explorer keine Datei die mit einem Punkt beginnt anlegen darf. Dazu musst Du einach ein andere Tool nutzen. Ich glaube mit Total Commander kann man Dateien entsprechend umbenennen ohne dass es einen Fehler gibt.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • So ...


    PHP läuft auf meinem WHS zusammen mit IIS - die Funktionsweise ist verstanden - soweit so gut.


    Das Test-Script um das State Archive auszulesen funktioniertleider nicht richtig.


    <?php


    $dvApi = new COM("DVOBJAPILib.DvISEApi") or die("Cannot create DVApi object");
    $Acc = $dvApi->Logon('','','','','','AUTH') or die("kein Logon");


    $str_archive = "\\\\hsahp\\david\\archive\\common\\";


    if ($Acc->ValidArchive($str_archive))
    {
    $Archive = $Acc->ArchiveFromID($str_archive);
    echo "Archive gefunden";
    } else {
    echo "Archive nicht gefunden";
    die ("Archive nicht gefunden {$str_archive}");
    }


    echo "\n\n<h2>Alle Eintr&auml;ge</h2>\n";
    $arr_entries = $Archive->GetArchiveEntries("default");
    echo "Array Entries: ";
    foreach ($arr_entries as $item)
    {
    echo "Zeile";
    echo $item->Subject;
    echo "\n";
    }
    echo "ENDE";


    $Acc->Logoff();
    ?>


    Das Archive wird gefunden, aber die Schleife läuft leer (GetArchiveEntries scheint NULL zurückzuliefern) - Nun sollte man debuggen können!


    Debuggen von PHP
    Ich habe mir den CodeLobster installiert, aber ich bekomme den Debugger nicht zum laufen. Obwohl die Foren sagen, dass man auch IIS debuggen kann scheint es am fehlende Apache Server zu scheitern - somit arbeite ich momentan im Blindflug mit der russischen Debug Methode echos"" einzubauen.


    Mit welchem Debugger arbeitest Du Jens? Hast Du eine Idee warum das mit dem State Archiv nicht klappt?


    Grüße


    Holger

  • Hallo Holger,


    habe hin und wieder XDebug benutzt, aber mache es meist auch per Try&Error und der guten alten Echo-Methode bei PHP. ;)


    Unter welcher Dienstanmeldung läuft der IIS? Wie erwähnt muss man beim Apache die Dienstanmeldung auf einen User stellen, der Zugriff auf David hat. Wobei, wenn das nicht gegeben wäre, kämst Du vermutlich nicht so weit...


    Hab das Skript mal bei mir getestet, habe nur den Servernamen ersetzt, sonst nichts angepackt, läuft:




    Der David Client ist auf dem Server auch installiert?


    Gruß Jens


    PS: Stell PHP mal so ein, dass es alle Error, Warnungen und Hinweise auswirft. Das geht in der PHP.ini, such mal nach dem Stichwort "php error_reporting" und "php display errors" bei Google.


    PPS: Ich sag doch nimm den Apache! ;)

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Hmmm ...


    Der WWW-Publishing Dienst läuft wie falst alles als "Lokales Systemkonto". Auf dem Server ist ein David-Client installiert, aber es ist ja lokal niemand angemeldet, ausser wenn ich mit der Remote-Console als Admin auf den Server zugreiffe. Dann arbeite ich im lokalen Server Client als Administrator (was ich auch sei muss, um im State-Archiv zu schreiben).


    Ich werde dann mal probieren was passiert, wenn ich dem WWW-Dienst einen user zuordne ...


    Was mich etwas beunruhigt, ist, dass man dann ja per PHP als Admin auf meine David Archive zugreiffen kann, oder?

  • Das Problem liegt wohl wiklich beim Logon beim David-Server. Immer wenn ich das .php Script aufrufe erzeugt mir David einen neuen Benutzer (Internetbenutzer) im Archiv. Im IIS ist der Zugriff auf meine Web-Seiten für Anonymen Zugriff eingerichtet. der WHS nutz dann immer ein Gastkonto mit dem User IUSR_servername - und genau dieser User wird dann als David-Benutzer hinzugefügt. Trage ich hier einen bekannten User ein geht es dennoch nicht :(


    Display errors ist off, aber log_error ist on -> Fehler werden in eine Datei geschrieben (steht aber nix hilfreiches drin)


    Muss der korrekte Logon nicht mit diesem Befehl erfolgen?


    Logon('','','','','','AUTH');


    Wo finde ich denn die Dokumentation für diese Befehle?


    Danke und Gruß


    Holger

  • Hallo Holger,


    ich fange mal hinten an. ;)


    Alles was es an Doku gibt, steht in der Hilfedatei zur API die in dem Downloadpaket drin ist.
    Und dort steht zur Logon-Methode:

    Wenn Du also keine Userdaten eines bestehenden David Users übergibst, solltest Du NoAuth verwenden (und in Deinem Beispiel übergibst Du auch keine Daten). Die Sache mit der Useranmeldung ist etwas kompliziert, da es bei David zwischen David-API-Zugriff und Verzeichnisberechtigungen zu unterscheiden gilt.
    Mit der Angabe des Users im Logon kann man einen David User mit der eigenen Anwendung simulieren, so z.B. beim holen des Archive Objektes mit DvPersonalIn oder ähnlichen Eigenschaften arbeiten.
    Man hat dann aber trotzdem keinen Zugriff auf das Verzeichnis des Users, wenn man den nicht mit dem ausführenden Windows User hat (der User der die Anwendung ausführt). Bei nem Dienst der als Admin läuft ist das natürlich immer der Fall.


    ---


    Automatisch angelegt User
    Standardmäßig steht in der david.ini das Flag Autovalidation auf True. Dadurch werden Windows Benutzer die den David Client starten (oder eine API Anwendung) automatisch als David Benutzer angelegt. Dieser Wert sollte auf FALSE gestellt werden.


    Beim Apache ist das immer der User, der den Apache Dienst startet, standardmäßig das Lokale System Konto (David legt dann einen User SYSTEM an) oder eben der Admin den ich dann immer eintrage, da es den in der Regel immer im David gibt.


    Wie sich das beim IIS verhält weiß ich nicht.


    Du hast mir aber auch noch immer nicht beantwortet, was gegen die Nutzung des Apache spricht? Du hättest Dir vermutlich schon Stunden an Zeit sparen können und hast mit dem Apache sowieso den sichereren Webserver am Start...


    ---


    Display Errors solltest Du aktivieren, dann siehst Du die PHP Fehlermeldungen direkt auf der Webseite, das erleichtert das debuggen.


    ---

    Zitat

    Was mich etwas beunruhigt, ist, dass man dann ja per PHP als Admin auf meine David Archive zugreiffen kann, oder?


    Das verstehe ich nicht...was genau meinst Du damit?
    Klar kann man per PHP auf das Archive zugreifen, darum geht es doch...? Da PHP eine serverseitig ausgeführte Sprache ist (im Gegensatz zu Javascript, und hier kann man Deinen obigen Gedanken mal weiterdenken, mehr sag ich nicht dazu...) ist das doch unkritisch, da niemand ausserhalb Deines Systems ein PHP Skript bei Dir ändern kann (es sei denn er hätte Deinen Server gehackt, aber dann hast Du eh ein anderes Problem ;) ).



    Gruß Jens


    PS: Bitte nutz beim einfügen von Codesnippets immer das Code- bzw. PHP-Tag. Dazu musst Du über den normalen Antworten-Button (nicht Schnellantwort) in den Editor wechseln und oben siehst Du dann einen Button mit einem #-Zeichen oder den mit dem PHP-Open Tag (
    Alternativ kann man die Tags selbst schreiben:


    [ code ]Hier steht ein Code[ /code ] - natürlich ohne die Leerzeichen
    [ php ]Hier steht mein PHP Code[ /php ]

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

    2 Mal editiert, zuletzt von Teardrop ()

  • So, ich habe es nun geschafft das Script zum Laufen zubringen.


    Vorab, den Apache will ich bnicht installieren, weil ich den IIS am Laufen habe - ich habe schlichtweg Bedenken, dass ich irgendwann meinen WHS in einen Zustand installiert habe, dass er nicht mehr sauber läuft - und da habe ich dann ein Thema.
    Also reine Angst und die Meinung, dass der IIS für diese einfache Web-Anwendung genügt.


    Das Script läuft und der Hauptgrund warum nichts angezeigt wurde lag im Pfad zum Archiv. Hier habe ich nun einen gültigen Pfad eingetragen

    Code
    $str_archive = "\\\\hsahp\david\\Archive\\SYSTEM\\DAVID\\AUTOMTN\\STATE\\";

    und schon listet mein Script in Klarschrift alle Namen der State Variablen auf.


    Nu muss ich noch zwei Dinge schaffen, und mir ist klar hier heisst es jetzt auch die Doku zu wälzen (was ich bisher ohne Erfolg auch mache) ...
    1. Alle Daten aus dem State Archiv auszulesen
    Der erste Versuch mit $item->Value; oder $item->To; zuzugreiffen sind gescheitert (ich dachte ich kann Subject ersetzen durch die Namen der anderen Felder). Leider schint ausser Subject nicht zu funktionieren. In der Referenz finde ich nur Methoden mit get und put. Wie komme ich an die anderen Informationen???
    Nachtrag: mit $item->_ID; bekomme ich eine ID ausgelesen ... mal sehen was mit einem vorangestellten _ noch so alles geht - leider steht das nirgends in der Doku - und warum heisst es dann nicht _Subject ... ?
    Nachtrag2: Nur Type geht noch - ich komme einfach nicht auf die Feldinhalte ... Verzweifel ..



    2. Einen Wert auf den Bus zu senden (oh jeh)



    Als dritten Punkt ist mir noch nicht ganz klar, ob ich dieses php Script dann in jede Datei einbinden muss, oder ob es sowas wie einen Funktionsaufruf geben kann den ich von jeder Stelle der Webseite anspringen kann (also so was in der Art setSTATEvalue(BusAdr, Wert) und getSATEvalue(BusAdr, Wert).


    Thema Sicherheit habe ich jetzt verstanden. Das Script läuft auf dem Server und macht imer nur das was programmiert ist. OK!


    Dann mach ich mal weiter! Wenn das alles klappt bekomme ich eine geniale Steuerungswebseite!!


    Danke und Gruß


    Holger

  • Hallo Holger,


    aaaalsoooo...


    wenn Du Dir mal das MessageItem2 in der Doku anschaust (mit dem arbeite ich in dem obigen Beispiel was Du benutzt, das erkennt man an der Archive-Methode GetArchiveEntries(), die gibt ein MessageItems2 Objekt zurück), dann wirst Du sehen, dass dieses Objekt nur einige wenige Methoden und Eigenschaften hat. Vergleiche dazu mal das MailItem, welches sich aus dem MessageItem (nicht MessageItem2!) ableitet. Das hat viel mehr Eigenschaften auf die man direkt zugreifen kann.


    Für die Zusammenhänge und Abhängigkeiten empfehle ich das Object Diagram mal mal genau zu studieren. Da sieht man sehr schön was von wem abgeleitet ist und damit auch was Du wie casten bzw. konvertieren kannst.


    Wenn Du also mit dem MessageItem2 arbeitest (was sinnvoll ist, da es ca. 10x schneller ist das alle MessageItem-basierenden Objekte), dann musst Du über die Fields gehen um an die Daten zu kommen.
    Und das macht man dann z.B. so:


    PHP
    $oMessageItem2->Fields('Subject')->value;


    Die verfügbaren Felder findest Du in der Doku unter "Field ID's". Aber Achtung, nicht jedes Feld ist gefüllt oder im MessageItem2 verfügbar. Das musst Du testen.


    Jetzt kommt eine zweite Sache auf die Du aufpassen musst.
    Im David basieren alle Datentypen auf dem gleichen Strukturmodell, d.h. dass z.B. bei der Automation Felder "mißbraucht" werden um Informationen darzustellen. So steht der "Wert" eines Eintrages z.B. im "An" Feld.
    Oder ist im Falle einer Adresse der "Angezeigte Name" eigentlich der "Betreff" der Nachricht.


    Um an den Wert zu kommen, solltest Du also das Feld "To" oder "SRTo" testen.
    Dabei ist zu beachten, dass "SRTo" ein String ist, "To" aber ein zweidimensionales Array!


    Soviel zu Teil eins Deiner Frage und unserer kleinen Grundlagenschulung. ;)


    ---


    Diesen Punkt hast Du selbst im Prinzip in Deinem Beitrag Interessenanfrage: Anbindung von Homematic an David und erstellen individueller Steuerungen schon beantwortet. ;)


    Hier schreibst Du folgendes Codesnippet:


    Code
    @@dataformat automation@@
    @@an EIB:##bus_Adr##@@
    @@value ##var_Wert##@@
    @@jobende@@


    Und genau damit macht man das. Du musst eine neue Nachricht zum Versand erzeugen und diese dann mit obigem Inhalt füllen.


    PHP
    $command = "@@dataformat automation@@\n@@an EIB:{$busAdr}@@\n@@value {var_Wert}@@\n@@jobende@@";
    $MessageItem2 = oArchive->CreateJob(DvEMailItem);
    $MessageItem2->Fields('Content')->Value = $command;
    $MessageItem2->Send();


    Bin grad nicht sicher, ob man "->Value" noch anfügen muss, oder direkt nach der schließenden Klammer die Zuweisung machen kann. Musst Du mal testen.


    ---


    Die dritte Frage verstehe ich ehrlich gesagt nicht. Wo willst Du die PHP Datei einbinden?
    Mit PHP kannst Du ja auch eine Ausgabe (auch HTML Code) erzeugen, Stichwort echo, print, etc.


    Und klar kannst Du Dir eine Funktionsdatei bauen die Du immer wieder einbindest. In PHP kann man auch objektorientiert programmieren (muss man aber nicht). So kannst Du Dir z.B. eine eigene Klasse dafür programmieren und dann deren Methoden aufrufen und Parameter übergeben...da gibt es eigentlich nicht viele Limits...


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Hallo Jens,


    das hat mir nun enorm weitergeholfen - um es vorweg zu nehmen, ich kann nun per PHP State-Werte auslesen udn ich kann Werte auf den Bus senden (zumindest ein Lampe ein/aus) habe ich realisiert. Bis hierher sage ich einfach mal ein ganz herzliches Danke-Schön an Dich - das ist wirklich ein exzellentes Forum und ich hoffe, dass der ein oder andere nach mir auch davon profitieren wird. Anmerkung:
    Eine Anomalie habe ich noch - immer wenn mit dem Script ein Befehl auf den Bus gesendet wird, bekomme ich eine leere Nachricht/Meldung (rotes Ausrufezeichen, Fehlernummer 90) in meine InBx, mit dem Status "Nummer fehlt" - hast Du ne Ahnung woher die kommt?


    Mitunter ein Problem für mich war, dass die Doku für C geschrieben ist und wir aber eben mit PHP arbeiten. Die Field-IDs beispielsweise lauten in der Doku z.B. Field_Subject und sind als Hex-Werte definiert, in PHP muss ich aber 'Subject' eintragen (also ohen Filed_, dafür aber mit Hochkommas. Das muss man erst mal wissen.


    Einen ähnlichen Fall hatte ich noch mit dem Script für den Sendeauftrag. Die Konstante DvEMailItem ist leider nicht definiert. Hiefür habe ich nun einfach den Wert 2 eingetragen, wie in den DvItemTypes als enum definiert. Aber das sind so kleine Probleme, wo man viel Zeit verlieren kann wenn man nicht weiss was ist defineirt und was nicht und wie heisst das Feld und wann brauch ich Hochkommas, ....


    Die nächsten Schritte sind:
    - herauszufinden, wie ich aus der Internetseite heraus Variable an die php Skripte übergeben kann
    - herausfinden, wie man am besten die Adressen als Konstate definiert
    - herausfinden wie die Gültigkeiten der Variablen sind, reicht es das Archiv einmal auf der Seite zu öffen?
    - wie gehe ich mit Pop-ups und Unterseiten um
    - wie kann ich auf Datenzugreiffen, die auf einer anderen Seite definiert wurden (xy.php ruft seite zz.php auf - in xy.php ist etwas definiert, gilt das auch auf der Seite zz?)
    - u.s.w.


    Jedenfalls war es ein erhebendes Gefühl, als sich die Arbeitszimmerbeleuchtung nach einem Scriptaufruf einschaltete.


    Soviel für heute - Danke und Gruß


    Holger

  • Hallo Holger,


    schön das es Vorwärts geht. Bin mal gespannt wo das noch hinführen wird.

    Eine Anomalie habe ich noch - immer wenn mit dem Script ein Befehl auf den Bus gesendet wird, bekomme ich eine leere Nachricht/Meldung (rotes Ausrufezeichen, Fehlernummer 90) in meine InBx, mit dem Status "Nummer fehlt" - hast Du ne Ahnung woher die kommt?

    Das ist, soweit ich weiß, ein normales Verhalten. Du erzeugst ja einen Job der keine Adresse hat, also kommt es zum Fehler.
    Nach dem senden musst Du den Eintrag suchen und löschen. Vielleicht geht auch .Save() statt .Send(), dann hättest Du zumindest das Objekt noch und könntest es direkt löschen.
    Oder Du übergibst den @@-Befehl @@archive und schiebst die Nachricht direkt in den Papierkorb nach dem versenden.

    Mitunter ein Problem für mich war, dass die Doku für C geschrieben ist und wir aber eben mit PHP arbeiten. Die Field-IDs beispielsweise lauten in der Doku z.B. Field_Subject und sind als Hex-Werte definiert, in PHP muss ich aber 'Subject' eintragen (also ohen Filed_, dafür aber mit Hochkommas. Das muss man erst mal wissen.

    Ja, man muss umdenken und wenn man die Syntax der verwendeten Sprache noch nicht gut kennt, ist das schwierig.
    Aber das ist dann mehr ein Grundlagenproblem. ;)

    Aber das sind so kleine Probleme, wo man viel Zeit verlieren kann wenn man nicht weiss was ist defineirt und was nicht und wie heisst das Feld und wann brauch ich Hochkommas, ....

    Definitiv, das ist letztlich immer das Problem wenn man neue Projekte angeht und dabei neue Techniken verwendet. Geht mir ständig so, gerade dieses Wochenende noch eine kleine Anwendung programmiert, bei der ich wieder Dinge realisieren musste, die ich vorher noch nie gemacht habe...

    - herauszufinden, wie ich aus der Internetseite heraus Variable an die php Skripte übergeben kann

    Google mal nach den Stichworten GET oder POST. Ist nichts PHP spezielles sondern ein Teil des HTTP Protokolls.
    Per GET werden Variablen z.B. an die URL angehangen (siehe z.B. oben in der Adresszeile Deines Browsers wenn Du das hier liest).
    Bei POST sieht man nichts in der Adresszeile. Lass Dich aber nicht täuschen, das ist dadurch nicht sicherer, da man das jederzeit mit ein paar Webbrowser Dev Tools umwandeln kann. Wenn Du etwas sichereres brauchst, dann suche mal nach "Sessions". Das ist aber schon etwas fortgeschrittener, dazu solltest Du zunächst mal das Prinzip von GET und POST beherrschen.


    Dazu ein kleines Beispiel:



    Erklärung:
    Hier wurde eine PHP Seite aufgerufen und per GET (also in der Adresszeile) zwei Variablen mit entsprechenden Werten übergeben.
    In der Seite selbst werden per echo die übergebenen Daten ausgegeben.
    Die vordefinierte Variable $_REQUEST beinhaltet sowohl die GET als auch die POST Daten. Wenn man also nicht genau weiß ob Daten per POST oder GET gesendet werden, macht die Verwendung von REQUEST Sinn. Oder wenn man das ggf. nochmal ändern will, etc.
    Da hier Daten per GET übergeben wurden, ist die POST Variable leer.



    Alternativ könntest Du Daten in einer Session oder sogar in einer Datenbank speichern. Ich denke aber dass die Übergabe per GET für den Einstieg am einfachsten ist.


    Für die Nutzung von POST musst Du mit HTML Formularen ( ) arbeiten.

    - herausfinden, wie man am besten die Adressen als Konstate definiert

    PHP unterstützt auch Konstanten, einfach mal nach googlen.
    Aber Du willst das System doch dynamisch machen und nicht alles hart verdrahten? Mach Dir entweder eine Datei wo Du diese Konstanten definierst, oder direkt über eine Datenbanktabelle.


    Andere PHP Dateien kannst Du wie folgt includieren


    PHP
    require_once('meineIncludeDatei.inc.php');


    Das "inc" im Dateinamen ist nicht notwendig, mache ich aber immer so, damit man sieht, dass diese Datei nur zum includieren verwendet wird.
    Alle Inhalte der includierten Datei werden an der Stelle implementiert, wo der Aufruf erfolgt. Genauso als ob die Daten dort stehen würden. In dem Beispiel der Konstanten würde man diese Datei also ganz am Anfang laden/includieren, damit man alle Konstanten im Zugriff hat.

    - herausfinden wie die Gültigkeiten der Variablen sind, reicht es das Archiv einmal auf der Seite zu öffen?

    PHP ist eine Interpretersprache und läuft daher Zeilenweise von oben nach unten ab. Ist das Skript zu ende, werden alle Ressourcen wieder freigegeben.
    Die Gültigkeit der Variablen innerhalb eines Skriptes hängt von verschiedenen Faktoren ab, u.a. vom Ort der Definition und auch von der Art der Programmierung. Beim OO Ansatz gelten hier größtenteils die gleichen Ansätze wie bei anderen Sprachen auch.

    - wie gehe ich mit Pop-ups und Unterseiten um

    Keine Ahnung was Du meinst. ;)

    - wie kann ich auf Datenzugreiffen, die auf einer anderen Seite definiert wurden (xy.php ruft seite zz.php auf - in xy.php ist etwas definiert, gilt das auch auf der Seite zz?)

    Siehe oben. Übergabe, includieren, Sessions, Datenbanken...

    Jedenfalls war es ein erhebendes Gefühl, als sich die Arbeitszimmerbeleuchtung nach einem Scriptaufruf einschaltete.

    Auf jeden Fall. Bei der Programmierung "(er)schafft" man ja auch immer etwas, und wenn sich dass dann noch mit Hardware kombiniert wirds richtig cool (fange gerade an mich mit Arduino und .NET Gagdeteer zu beschäftigen ;) ).


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

    Einmal editiert, zuletzt von Teardrop ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!