Microtech büro+ und PHP
Unter Windows kann man relativ einfach per PHP auf die Büro Plus Next COM-Aktiv-Schnittstelle zugreifenSeid Version 5 besitzt PHP eine sehr weitreichende Unterstützung des Component-Object-Model (COM). Da der Zugriff auf die Daten und Funktionen in Microtech büro+ über einen COM-Server in bpnext.exe realisiert ist, sind alle Vorraussetzungen erfüllt um die COM-Aktiv-Schnittstelle zu verwenden.
Die Vorgehensweise ist hier analog zu den Windows-Scripting-Host (WSH) Beispielen, die im Bonus-Material der Installations-CD mit geliefert werden. Ein PHP-Skript zum Abrufen aller Adressnummern Adressen.AdrNr könnte wie folgt aussen:
DataSetInfos("Adressen") ->CreateDataSet(); $adrDs->First(); while(! $adrDs->Eof) { $adrNr = $adrDs->Fields("AdrNr")->AsString; printf("\t> AdrNr %s\n", $adrNr); $adrDs->Next(); } } printf("-- COM Aktiv mit PHP ---\n"); $bpnt = new COM("BpNT.Application"); $bpnt->Init("FIRMENNAME","","BENUTZER", "PASSWORT"); $bpnt->SelectMand("MANDANT"); printf(">verbunden.\n"); printAllAdrNr($bpnt); $bpnt->LogOff(); printf(">abgemeldet.\n");
Falls PHP mit Unterstützung für das COM kompiliert wurde, sollte obiger Quelltext nach Ersetzten von jeweiligem Benutzername, Passwort, Firma und Mandanten problemlos funktionieren. Eine guter Ausgangspunkt für weitere Entwicklungen ist die XAMPP USB litte Distribution für Windows.
Ich habe den Source Code mit der Demo Version (TEST-PRF, Rand) getestet und schaffe es allerdings nicht mich anzumelden.
„Fatal error: Uncaught exception 'com_exception' with message 'Source: BpNT.Application
Description: Anmeldung ungültig (ConnectionName/ConnectionKey ungültig)' in C:Users…“
Vielen Dank für Ideen.
Nachtrag: „Buero+Zugriff.php(19): com->Init('TEST-PRF', '', 'thaeusler', 'res…“
Löst den Fehler aus !!!
Danke für deine rasche Antwort und gleich die nächste Frage:
Fields(„AdrNr“)->AsString
Welche anderen Typen als AsString werden hier verarbeitet.
Wie kann ich z.B. ein BLOB eines Bildes auslesen. (AsBlob ?)
Danke Tom aus Wien
Hallo,
Bilder sind leider nicht mehr so einfach auszulesen. Stichwort ist hier „Special Objects“.
Mehr Infos dazu findest Du im „COM Aktiv Kompendium“, einem PDF Dokument, dass der Installations CD beiliegt. Hier werden die Fähigkeiten der Schnittstelle und die API genauer Beschrieben. Fuer die Bilder gibt es hier auch Beispiele.
Gruesse
—
Joachim
Danke für die Hinweise, die habe ich gesehen.
Mein Problem ist, das wenn ich das nach dem einem Beispiel für das Einlesen der Bilder nach BüroPlus nachbaue, ich im COM Object z.b. kein SaveFileEx oder SaveFile zu stande bringe.
Es scheitertt Quasi schon beim Initialisieren des Objects.
$Bild = $PKat->Fields(„Bild“);
$IMG = $Bild->GetEditObject(etImage)
Uncaught exception 'com_exception' with message 'Parameter 0: Typenkonflikt. ' in … variant->GetEditObject('etImage')
Vorlage aus dem Beispiel:
Dim Bild
Set Bild = Art.Fields(„Bild“)
Dim Image
Set Image = Bild.GetEditObject(etImage)
Die Lösung:
etImage = INT und hat den Wert 4
Super. Danke!
Hi! Das ist ein sehr interessanter Artikel, welcher mir
schon weiter geholfen hat. Allerdings steht ich aktuell vor dem Problem einen bestimmten
Datensatz aus vielen suchen zu müssen. Die geht so weit ich weiß mit Rages,
allerding bekomme ich das in PHP nicht hin. Hast du einen Ansatz wir ich das machen
kann?
$ds->SetRangeStart();
$ds->SetRangeEnd();
$ds->ApplyRange();
Das sollte vermutlich so stimmen, aber wie setze ich nun den Wert für das Feld
in dem ich suchen möchte?
Viele Grüße
War ja fast richtig. Hier die Lösung:
$ds->Indices(„BelegNr“)->Select();
$ds->SetRangeStart();
$ds->Fields(„BelegNr“)->AsString = 'RE123456';
$ds->SetRangeEnd();
$ds->Fields(„BelegNr“)->AsString = 'RE123456';
$ds->ApplyRange();
Viele Grüße
Meine Frage hierzu wäre noch:
Wie sieht die Abfrage aus, wenn das Textfeld „“ (leer) ist.
Ich habe hier schon einiges Versucht, aber …
Hi, ist es möglich Datensätze nicht nur auszulesen, sondern auch zu schreiben? Beste Grüße
Hallo Tom, hast du mir eine Info wie du das gelöst hast? ich bekomme hier auch einen Fehler: Fatal error: in
$bpnt->Init(„FIRMENNAME“,““,“BENUTZER“, „PASSWORT“);