PHP 5, DvAPI, Feld schreiben

  • Hallo, Zusammen.


    Ich möchte mit PHP das globale Adressbuch aus David.fx auslesen und bei jeder Adresse ein einzelnes Feld schreiben/setzen.
    Das Auslesen funktioniert soweit - nur mit dem Schreiben des Feldes klappt es nicht. Kann mir hier jemand den entscheidenden Hinweis geben?


    Mein Code sieht (auf das Minimale gekürzt) so aus:



    Es geht um das Feld "PDACategory" - es wird zwar ausgelesen und angezeigt, doch auch nach dem eigentlichen Ändern, steht immer noch der alte Wert drinnen.
    Auch ein Blick über David, in die Adresse, zeigt, dass das Feld unverändert bleibt.


    Hat jemand eine Idee, woran es noch hakt?


    Danke, Sandro

  • Das globale Addressbuch liefert Dir nur Address Objekte. Die sind temporär und können nicht verändert werden. Dein Code iteriert über Objekte vom Typ Address und nicht vom Typ AddressItem.

  • Leider bin ich mit PhP garnicht bewandert. Kann Dir nur ein Java Schnipsel anbieten. So würde ich zum Beispiel eine Adresse in mein Adressbuch schreiben:


    Archive archive = account.getGetSpecialArchive(DvArchiveTypes.DvArchivePersonalAddress);
    AddressItem item = archive.newAddressItem();
    item.putDisplayName("Max Muster");
    item.putEMail("info@ed.com");
    item.save();


    Versuche doch mal das AddressItem in einer Variable abzulegen. Ich habe den Verdacht dass $item->AddressItem->Company Dir jedesmal ein neues Objekt erzeugt.


    So in der Art:


    foreach ($Archive as $item)
    {
    $addressItem = $item->AddressItem;
    $addressItem->SetField('PDACategory', 'Kategorie A');
    $addressItem->Save();
    }


    Mir sagt auch die Methode setField nix. Dachte die existiert nur bei IMessageItem2 und nicht bei AddressItem.

  • Hallo Zusammen,

    $item->AddressItem->SetField('PDACategory', 'Kategorie A');

    Aus der API Hilfe


    SetField
    (AddressItem)SetField

    Since David(R)zehn! are new extended Address Fields avalable,
    AddressItem allows access to seperate UserFields as properties of the object itself and fields can be addressed by their name.



    Bedeutet für mich, dass diese Methode nur für selbsterzeugte Felder genutzt werden soll (in Verbindung mit GetField).


    Um die PDA Category zu setzen, sollte das einfach mit

    PHP
    $item->AddressItem->PDACategory = "Kategorie A"


    Wobei ich mir gerade nicht sicher bin, welche Werte hier zulässig sind (the PDACategory field value as string)


    Beachte dazu auch den Thread (zweiter in diesem Forum):
    Adressen schreiben - Probleme bei einigen Feldern


    Generell funktionieren die Zugriff über MessageItem2 Objekte besser. Auch bei Adressen scheint das so zu sein, wie der verlinkte Threadstarter herausgefunden hat.

    Das globale Addressbuch liefert Dir nur Address Objekte. Die sind temporär und können nicht verändert werden.


    Woher hast Du das denn?



    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.


    Danke für die ersten Tipps.


    Das Java Skript erstellt eine NEUE Adresse - ich will ja eine bestehende ändern. Daher funktioniert das so nicht.


    Dann habe ich den Tipp von Jens ausprobiert. Aber auch


    PHP
    $item->AddressItem->PDACategory = "Kategorie A";
    $item->AddressItem->Save;


    speichert die neue Information nicht.


    Hat noch jemand eine Idee, wie ich die Adresse auslesen und entweder die PDACategory - oder wegen mir auch ein komplett neues Feld - ändern kann?


    Danke!

  • Hallo Sandro,

    Hat noch jemand eine Idee, wie ich die Adresse auslesen und entweder die PDACategory - oder wegen mir auch ein komplett neues Feld - ändern kann?


    hast Du den von mir verlinkten Thread angesehen und es mal wie dort beschrieben mit dem MessageItem2 versucht?


    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

  • Ja, den Artikel habe ich gelesen.


    Doch weiß ich nicht wirklich, wie ich Address2Item initialisieren soll.
    So, wie ich es gemacht habe, klappt das nicht:


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


    Hast Du eine Idee???

  • Hallo Sandro,

    $Archive = $Acc->GlobalAddressBook();


    das hier gibt Dir ein AdressBook-Object zurück (wie Hapacur oben übrigens auch schon einmal erwähnt hat) und wenn Du Dir das Object Diagram in der API Hilfe anschaust, dann siehst Du, dass dies kein MessageItem2 Object ist. ;)


    Probiers also mal mit

    PHP
    $Archive = $Acc->ArchiveFromID("\\server\david\archive\address");


    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

  • Woher hast Du das denn?


    GlobalAddressBook ist vom Typ AddressBook. Die Item Methode von Addressbook liefert Address Objekte und die sind im Gegensatz zu AddressItem nicht editierbar.


    The Address object is a temporary object. You can retrieve the AdressItem object from the Address object. This is not possible when working with a local address book. Unlike the AddressItem Object the Address Object does not necessarily correspond to any item within the Tobit Archive System.

Jetzt mitmachen!

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