David API gibt nicht alle Informationen (Entries) zurück

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • David API gibt nicht alle Informationen (Entries) zurück

      Moinsen zusammen,
      die David-API gibt bei einigen Entries nichts
      zurück, obwohl sie bei einigen Entries alles perfekt so darstellt, wie
      es im David-Client angezeigt wird. Das heißt, bei einigen Elementen habe
      ich also einen komplett leeren <div> und bei einigen "hunderte"
      verschachtelte Tabellen, in der alles perfekt dargestellt wird.

      Ich schreibe einen PHP-Client und dieser Source-Code funktioniert nicht, wie er soll:
      [PHP]
      $id = $_GET['id'];
      $oArchive = $oAcc->GetArchive[$aArchives[$_SESSION['id_navigation1']]['path']];
      $oEntry = $oArchive->GetArchiveEntries("default");
      echo $oEntry->Item(intval($id))->HTML;
      [/PHP]

      $id wird über einen Mausklick erzeugt mithilfe von jQuery.

      Ich freue mich schon auf Antworten :D
      Mfg, Lamarn
    • Hallo,

      kann es sein, dass die leeren Mails reine Textmails sind? Du greifst hier ja nur den HTML Teil ab, der ist bei Plaintext Mails leer.

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

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Moin,
      du meinst also, dass ich:

      PHP Source Code

      1. echo $oEntry->Item(intval($id))->HTML;

      ändern muss, damit etwas angezeigt wird?
      Den Versuch würde ich gerne wagen, nur welche Field-ID gibt alles aus; also Mails mit HMTL-Teilen und Plaintext-Mails?

      Gruß, Lev

      Edit: Mir schien es, dass "HTML" dafür steht, dass der Inhalt in Form von HTML ausgegeben wird. Aber wenn es eine andere Möglichkeit gibt, dann immer her damit :D

      The post was edited 1 time, last by Lamarn ().

    • Hallo Lev,

      HTML steht dafür, dass dort der HTML Teil geholt wird. ;-)

      Field_Content

      The Field_Content value is from Type VARIANT
      (VT_BSTR). The returned value is the PlainText part from the message. Is the
      current selected entry a HTML message you will get the plain text part without
      the HTML Tags. To get the HTML Text use the [url='']Field_HTML[/url]


      Ich glaube das Content Feld ist immer gefüllt, bin aber nicht sicher. Sonst musst Du beide prüfen.


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

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Moinsen,
      ich verlaute mal einen kleinen Statusbericht:
      - Zeilenumbrüche werden nicht angezeigt. Sie werden anscheinend auch nicht von der API geladen. Vllt. muss ich \n zu <br> umwandeln.
      - Bilder erscheinen gar nicht, aber hier muss ich wohl nach Attachments suchen?
      - Der mit Adressen verknüpfte Inhalt wird anscheinend nicht angezeigt.
      - Umlaute werden als Fragezeichen angezeigt.

      Habe ich vllt. einen Fehler in dem Code, den ich gepostet habe? Eigentlich dürfte der richtig sein, da die richtigen Archive geladen werden.

      Viele Grüße Lev

      Edit: Anscheindend extrahiert die API auch keinen Inhalt aus HTML-Tags. Somit werden Mails in diesem Format komplett ignoriert.
    • Hallo Lev

      bei Deinen Fragen stellt sich mir die Frage auf welche Eigenschaft Du diese beziehst (Content, HTML, etc.).

      Lamarn wrote:

      - Zeilenumbrüche werden nicht angezeigt. Sie werden anscheinend auch nicht von der API geladen. Vllt. muss ich \n zu
      umwandeln.
      Im Content werden ziemlich sicher \n stehen, da es Plaintext ist. Wenn Du eine Ausgabe in Deinem Programm (PHP) mit HTML machst, wird \n nur im Quellcode ausgeführt. Das ist vollkommen normal und hat nichts mit der David API zu tun. nl2br($content) sollte hier Abhilfe schaffen.

      Lamarn wrote:

      - Bilder erscheinen gar nicht, aber hier muss ich wohl nach Attachments suchen?
      Korrekt. Im Plaintext gibt es keine Bilder. Im HTML Teil gibt es nur "URLs" / Verknüpfungen auf Bilder in Form von img-Tags o.ä.

      Lamarn wrote:

      - Der mit Adressen verknüpfte Inhalt wird anscheinend nicht angezeigt.
      Keine Ahnung was Du damit meinst.

      Lamarn wrote:

      - Umlaute werden als Fragezeichen angezeigt.
      Dann nutzt Du eine falsche Zeichenkodierung. Auch kein Problem der David API. Versuchs mal mit utf8 Konvertierung o.ä.

      Lamarn wrote:

      Anscheindend extrahiert die API auch keinen Inhalt aus HTML-Tags. Somit werden Mails in diesem Format komplett ignoriert.
      Du hattest doch bereits die HMTL Mails mit ->HTML...


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

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Moin Jens,
      1. Habe ich mir auch so gadacht aber nicht mit str_replace hinbekommen. Aber vielen Dank für den Hinweis auf nl2br. Die Funktion kannte ich noch nicht und sie funktioniert perfekt.
      2. Mit den Attachment bin ich noch nicht weitergekommen. Melde mich aber wieder, wenn ich das hinbekommen habe.
      3. Vllt. zum Verständnis: Das ist nicht mein David-Server, den ich benutze und ich arbeite mit David erst seitdem ich den Auftrag bekommen habe, den Client zu programmieren. Deswegen bitte ich ein bisschen um Verständnis, dass ich nicht alle Archivtypen kenne etc. Ich habe hier in dem Ordner "Adressen" im Root des David-Servers Adressen. Wenn ich im David auf eine Adresse klicke, bekomme ich einige Daten zu der Person etc. Es ist aber auch Text hinzugefügt worden. Kann es eine Art Beschreibung sein? Ich wüsste jetzt nicht, wo ich den Text einordnen sollte, also ob bei HMTL oder Content etc. Bei Content wird auf jeden Fall nichts angezeigt. Der Inhalt sieht auf jeden Fall aus, wie Plaintext. Ich hoffe Du verstehst jetzt, was für Elemente ich meine.
      4. Hier hat UTF8_Encode geholfen. Ich lade die Dateien nach, wodurch wahrscheinlich die Angabe für die Kodierung nicht beachtet wird. Ist aber auch egal, wenn es mit der PHP-Funktion arbeitet. Vielen Dank!
      5. Ich hatte gehofft, dass aus den HTML-Mails der Content extrahiert wird, da der Field_Type HTML nicht immer greift. Es sieht vor Allem total schrecklich aus, wenn diese unterschiedlichen "Mail-Typen" ganz anders dargestellt werden. Meinst Du, ich solle überprüfen, ob bei Content etwas zurückgegeben wird. Und wenn nichts zurückgegeben wird, ich HTML benutzen soll?

      Viele Grüße Lev
    • Hallo erneut,
      Ich habe jetzt mittlerweile diesen Code:

      PHP Source Code

      1. $id = $_GET['id'];
      2. $oArchive = $oAcc->GetArchive[$aArchives[$_SESSION['id_navigation1']]['path']];
      3. $oEntry = $oArchive->GetArchiveEntries("default");
      4. if(strlen($oEntry->Item(intval($id))->Content) == 0){
      5. echo utf8_encode(nl2br($oEntry->Item(intval($id))->Content));
      6. }
      7. else{
      8. echo utf8_encode($oEntry->Item(intval($id))->HTML);
      9. }
    • Hallo Lev

      Lamarn wrote:

      1. Habe ich mir auch so gadacht aber nicht mit str_replace hinbekommen. Aber vielen Dank für den Hinweis auf nl2br. Die Funktion kannte ich noch nicht und sie funktioniert perfekt.
      es kann sein das dort nicht nur \n sondern \r oder \n\r o.ä. verwendet wird. nl2br ist bei Steuerzeichen in diesem Falle immer vorzuziehen. Da muss man sich keinen weiteren Kopf drum machen, welche Steuerzeichen da wirklich stehen.

      Lamarn wrote:

      3. Vllt. zum Verständnis: Das ist nicht mein David-Server, den ich benutze und ich arbeite mit David erst seitdem ich den Auftrag bekommen habe, den Client zu programmieren. Deswegen bitte ich ein bisschen um Verständnis, dass ich nicht alle Archivtypen kenne etc. Ich habe hier in dem Ordner "Adressen" im Root des David-Servers Adressen. Wenn ich im David auf eine Adresse klicke, bekomme ich einige Daten zu der Person etc. Es ist aber auch Text hinzugefügt worden. Kann es eine Art Beschreibung sein? Ich wüsste jetzt nicht, wo ich den Text einordnen sollte, also ob bei HMTL oder Content etc. Bei Content wird auf jeden Fall nichts angezeigt. Der Inhalt sieht auf jeden Fall aus, wie Plaintext. Ich hoffe Du verstehst jetzt, was für Elemente ich meine.
      Du solltest ggf. mal überlegen bei anderen ItemTypes die entsprechenden Objekte zu nutzen, z.B. AdressItem. Da kannst Du dann mit "FormattedNotes" diese Info holen. Bei MessageItem2 Field würde ich mal auf "Notes" tippen, habs aber nicht getestet.

      Lamarn wrote:

      4. Hier hat UTF8_Encode geholfen. Ich lade die Dateien nach, wodurch wahrscheinlich die Angabe für die Kodierung nicht beachtet wird. Ist aber auch egal, wenn es mit der PHP-Funktion arbeitet. Vielen Dank!
      Mit Ajax? Dann hast Du i.d.R. immer dieses Kodierungsproblem.

      Lamarn wrote:

      5. Ich hatte gehofft, dass aus den HTML-Mails der Content extrahiert wird, da der Field_Type HTML nicht immer greift. Es sieht vor Allem total schrecklich aus, wenn diese unterschiedlichen "Mail-Typen" ganz anders dargestellt werden. Meinst Du, ich solle überprüfen, ob bei Content etwas zurückgegeben wird. Und wenn nichts zurückgegeben wird, ich HTML benutzen soll?
      Ja, ich würde auf beides prüfen.
      Ich habe eben mal einen kleinen Tester gebaut. in meinem Eingang sind bei HTML Mails immer beide Felder gefüllt, bis auf eine Ausnahme. Kann es aber auch nicht festmachen woran es liegt.

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

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Moinsen,
      bist du so nett und zeigst mir deinen Code, mit dem du das realisiert hast bzw. änderst meinen Code so ab?

      Eine Frage ist mir noch gekommen, als du die weiteren ItemTypes erwähnt hast: Kann man irgendwie über die API überprüfen, welcher Typ gerade verwendet wird? Somit könnte man ja auch einfach Typ-spezifischen Code schreiben.

      Liebe Grüße, Lev (nohomo :D)
    • Hallo Lev,

      ich habe bei meinem Test nichts anderes gemacht als Du auch. Einmal das Feld HTML und einmal das Feld Content in eine Textbox geschrieben.

      Wg. der ItemTypes, versuche mal die API Doku zu lesen, wenn man das Prinzip da mal verstanden hat, findet man eigentlich alles.
      Ich musste gerade selbst suchen, und bin wie folgt vorgegangen:

      Abschnitt "Types" öffnen -> DvItemTypes -> Multiple Objects -> IMessageItem2 (weil Du damit aktuell arbeitest) -> get_Type.

      Wichtig ist auch das Object Diagram, hier kannst Du sehr gut die Abhängigkeiten der einzelnen Typen lesen. So siehst Du dort z.B., dass diese spezifischen Typen alle vom MessageItem abgeleitet werden und das MessageItem2 nicht kompatibel ist. Um also vom MessageItem2 zum MessageItem oder einem abgeleiteten Typ zu kommen, musst Du Dir die ID holen und damit ein neues Object erzeugen.

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

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Moinsen Jens,
      ja es geht mit dem get_Type "Befehl". Er heißt nur "Type" bzw. schätze ich, dass es eine Eigenschaft des Entries ist, die ausgegeben werden kann. Das macht die Sache natürlich sehr viel einfacher :D. Es gibt ja zum Glück nur 12 verschiedene Item-"Sorten". Ich frage dann jetzt einfach den Typ ab bevor ich etwas ausgebe. Nun muss ich halt nur herausbekommen, welche Befehle am besten mit einem bestimmten Typ interagieren.

      PHP Source Code

      1. $type = $oEntry->Item(intval($id))->Type;
      2. if($type == 0){ // DvUnknownItem
      3. }elseif($type == 1){ //DvAddressItem
      4. }elseif($type == 2){ //DvEMailItem
      5. }elseif($type == 3){ //DvFaxItem
      6. }elseif($type == 4){ //DvSMSItem
      7. }elseif($type == 5){ //DvVoiceItem
      8. }elseif($type == 6){ //DvTMailItem
      9. }elseif($type == 7){ //DvCalendarItem
      10. }elseif($type == 8){ //DvLinkItem
      11. }elseif($type == 9){ //DvVideoItem
      12. }elseif($type == 10){ //DvAudioItem
      13. }elseif($type == 11){ //DvTVProgramItem
      14. }elseif($type == 12){ //DvTaskItem
      15. }else{
      16. echo "Diesen Archiv-Typ gibt es nicht!";
      17. }
      Display All

      ps. Es sollte also auch so klappen :D Yeyh! Ich melde mich, wenn etwas wieder nicht klappt, haha.
      Viele Grüße, Lev

      edit: Bisher vielen, vielen Dank! Du hast mir sehr weitergeholfen!

      The post was edited 1 time, last by Lamarn ().

    • Hallo Lev,


      schöner wäre


      Source Code

      1. $type = $oEntry->Item(intval($id))->Type;
      2. switch ($type)
      3. {
      4. default:
      5. echo "Diesen Archiv-Typ gibt es nicht!";
      6. break;
      7. case '0':
      8. break;
      9. case '1':
      10. break;
      11. ...
      12. }
      Display All





      ja es geht mit dem get_Type "Befehl". Er heißt nur "Type" bzw. schätze ich, dass es eine Eigenschaft des Entries ist, die ausgegeben werden kann.
      Die Doku bezieht sich auf C und dort ist es get_Type soweit ich weiß.







      Nun muss ich halt nur herausbekommen, welche Befehle am besten mit einem bestimmten Typ interagieren.
      Was genau meinst Du hiermit? Die Typen ergeben sich doch ziemlich eindeutig aus dem Namen und für fast jeden gibt es ein entsprechendes Objekt.




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

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Moin Jens,

      Oh, dass es switch bei PHP gibt, wusste ich nicht bzw. ich habe es nicht überprüft :D Aber ja, die Methode finde ich auch übersichtlicher... Danke, für den Tipp.

      Ich meinte mit dem "herausfinden" die entsprechenden Befehle aus der API (edit: Dokumentation der API) auslesen, da ja nicht alles benutzt werden muss.

      Mfg, Lev

      EDIT: Also bei AdressItem stimmt "Notes", also war deine Vermutung richtig.

      The post was edited 2 times, last by Lamarn ().

    • Moin Jens,
      also es läuft alles rund jetzt. VoiceItem etc. werde ich später noch hinzufügen, aber Dokumente, SMS, etc. laufen alle. Nun möchte ich mich dem anderen Problem widmen (Ordnerstruktur auslesen und ausgeben).

      ps. Ich starte dort einen neuen Beitrag, in dem ich das Problem etwas genauer beschreibe.
      Viele Grüße, Lev
      ________________________________________________

      Für alle, die nachvollziehen wollen, was das Problem war bzw. wie es gelöst werden kann:

      Das Problem war im Prinzip, dass ich versucht habe "Content" aus allen Archiv-Typen auszulesen, was jedoch nicht so einfach geht. Einige Archiv-Typen zB. brauchen eine andere Funktion, um den richtigen Inhalt anzuzeigen. Das AddressItem kennt kein "Content", sondern zeigt seinen Inhalt mit "Notes" an.

      Das Problem haben wir jetzt gelöst, indem wir den Archiv-Typ erfragen und dann entsprechend reagieren.
      Um die E-Mails richtig anzuzeigen, habe ich jetzt zuerst nach "Content" gefragt und anschließend, im Falle eines leeren Strings, nach "HTML".

      The post was edited 2 times, last by Lamarn ().