Beiträge von Janosch

    Vor allem übergibst Du hier ja auch die Anzahl und nicht die ID...oder sehe ich das falsch? Er erwartet aber den Pfad und den Dateinamen ohne Endung (ID) von Dir.

    Stimmt da hab ich wohl etwas falsch verstanden. Obwohl in der Doku "//Get entry based on filename" steht. Na dann werd ich mir jetzt einmal Gedanken machen wie ich an den Dateinamen ran komme.


    Gruß Janosch



    EDIT:
    Leider klappt es mit Datei und Pfadnamen bei mir nicht ?(
    hier mal ein Auszug aus der API-Doku, wobei oItem das MessageItem2 sein soll und ich bei mir natürlich noch den Servernamen eingetragen habe und "in" mit "out" ausgetauscht habe und dazu ein existierenden Filenamen mir rausgesucht habe.

    Zitat

    Set oItem = oArchive.GetArchiveEntryByID (“\\Server\david\archive\user\10004000\in\filename.001”)

    Hast Du es mal über das MessageItem2 probiert wie Manfred und ich es empfohlen haben? Da hast Du noch nichts zu geschrieben.

    Habe ich so eben getestet


    Set objMessageItem2 = objArchive.GetArchiveEntryByID(objArchive.AllItems.Count)
    RecNo = objMessageItem2.RecNo


    Das kuriose ist das die RecNo mir den gleichen Wert liefert wie AllItems.Count - 1 !


    Ich glaube ich schilder mein Problem noch einmal im Detail.


    Ich möchte ein generiertes eMail zum bearbeiten automatisch anzeigen lassen.


    Weil es keine Möglichkeit gibt ein MailItem über eine Methode zu öffnen muss man wie Du schon richtig vermutet hast das ganze über die File Ebene machen


    Da gibt es laut meinen Erkenntnissen 2 Möglichkeiten


    1. eMail als EML speichern und öffnen.


    Wie ich jedoch in meinem vorherigen Post erwähnt habe ist dies nicht möglich, da Tobit in der Hinsicht einen Bug hat(der seit 2007 bekannt ist), der es nicht ermöglicht ein EML File im Bearbeitenmodus zu öffnen.



    2. eMail nach speichern aus Archive.DAT öffnen


    Syntax: DVWIN32.EXE [PATH] /POS=n /SA=n [*]POS = Position in Archive.DAT[*] SA = Typ (9 = Job, 34 = Archive)


    Hier ist mein Problem das es mir nicht möglich ist POS zu ermitteln, wenn ein eMail gelöscht wird.



    Gruß Janosch

    Wenn ich es richtig verstanden habe, willst Du mit Deinem Programm eine E-Mail erzeugen und diese dann zum bearbeiten öffnen, richtig?

    Richtig


    Zitat

    Wie wäre es mit Erzeugen,Speichern,Öffnen? Da Du mit dem Save ja immer noch das gleiche ItemObject hast, solltest Du es einfach wieder öffnen können wenn ich mich nicht irre.

    Genau das versuche ich doch :D Leider klappt es mit den Öffnen bis jetzt nicht. Mit AllItems werde ich wohl nicht weit kommen da ich nach jedem löschen einer Nachricht, keine Datenbereinigung durchführen kann. Zuvor hatte ich noch die Idee die Nachricht als EML zu speichern und diese wieder über die DVWIN32 Parameter zu öffnen. Das laut Tobit KB-Artikel so funktionieren soll:


    DVWIN32 /EML C:\TEMP\PRICELIST.EML


    Um diese EML auch noch im Bearbeitenmodus zu öffnen muss man laut Tobit ein /I anhängen.


    Zitat

    /I Ignoring Received Status of the mail (Open in Edit Mode)

    Leider klappt das nicht, anstatt die Nachricht im Bearbeitenmodus zu öffnen bekommt man ein leeres Mail angezeigt. Das Problem ist bekannt, ich habe in einen anderen Forum gelesen das sich Tobit zwar dessen bewusst ist jedoch nichts dagegen unternommen hat.


    Ich habe zwar das ItemObject, jedoch kann ich es nicht über die Methode eines Objektes öffnen. Mir ist zumindestens keine bekannt. Ich bin aber für jeden Hinweis dankbar :D

    Ja, genau bis 3 Uhr Nachts bei einer standardmäßigen David Installation. Dann läuft die Datenbereinigung und die Infos sind weg.

    Ok da ich in meiner Entwicklungsumgebung Client & Server gleichzeitig am laufen habe und ich Nachts um 3 Uhr im Bett liege ;) erklärt das natürlich einiges.


    Zitat

    Womit programmierst Du?

    VB6

    Zitat

    Mein PHP Beispiel zeigt, wie es normalerweise geht, so gehts auch mit .NET (mit der entsprechenden Syntax natürlich).

    So klappt es auch (wie in der API-Doku beschrieben), dass war ja auch mein erster Ansatz.


    Zitat

    Beim löschen im Client werden die Nachrichten nur als gelöscht geflaggt und die nächtliche Datenbereinigung löscht die Dateien dann tatsächlich.

    Damit habe ich leider noch ein Problem. Wenn ich eine Nachricht lösche, zählt objArchive.AllItems.Count diese Nachricht nicht mit. Und dadurch bekomme ich das falsche eMail auf dem Bildschrim angezeigt.


    Gruß Janosch

    Hallo Jens,


    Danke für deine Antwort

    Die Archive.dat ist die Indexdatei eines Archives im David. Das was Du über den Count von Allitems bekommst, sollte identisch sein mit der Anzahl der Einträge im Archive.

    Davon bin ich eigentlich auch ausgegangen. Jedoch wenn ich einen Count auf Allitems mache bekomme ich die Anzahl der eMails die im Verzeichnis "Out" liegen (wenn: Set objArchive = objAccount.GetSpecialArchive(DvApi32.DvArchiveTypes.DvArchivePersonalOut).
    Jedoch habe ich festgestellt das unter "David\Archive\USER\10004000\out\Archive.dat" (objArchive.ID) auch noch die gelöschten eMails vorhanden sind (Was ja nicht unbedingt verkehrt ist, da Geschäftsmails aufbewahrungspflichtig sind).


    Mein eigentliches Problem ist ähnlich wie das von DonManfred war, ich möchte die Position nach dem generieren einer eMail wissen.
    DonManfred hat ja diesbezüglich eine Lösung vorgestellt, die ich übernommen habe.


    Code
    For i = 0 To objFields.Count - 1
       Set objField = objFields.Item(i)
       If objField.Name = "RecNo" Then
     recno = CStr(objField.Value)
       End If
     Next i


    Leider bekomme ich immer, wenn ich den Wert vom Feld "RecNo" abrufe, den Fehler "Methode 'Value' für das Objekt 'Field' fehgeschlagen" Was mich ziemlich verwundert hat, zum Test habe ich einfach mal ein anderes Feld der 138 Felder gewählt z.B. "MessageID". Bei dem Feld mir sogar die komplette Entwicklungsumgebung flöten geht.


    Deswegen bin ich auf die Idee gekommen einfach mal zu fragen ob es möglich ist alle Items in \Out\Archive.dat zu ermitteln, da ich dann mit einem Shell Befehl mit Hilfe der DVWIN32 Parameter


    DVWIN32.EXE \\SERVER\DAVID\archive\user\10004000\out /SA=34 /POS= hier die höchste Stelle von Archive.dat



    das eben generierte eMail auf den Bildschirm anzeigen kann. Was ich manuell schon getestet habe, in dem ich einfach per Schleife POS hochgezählt habe bis es zur Fehlermeldung des InfoCenter kam weil die POS nicht bekannt ist. Mit dieser POS konnte ich dann das nächste generierte eMail auf dem Bildschirm anzeigen.


    Ich möchte ein generiertes eMail das noch nicht gesendet wurde auf dem Bildschirm anzeigen um es gegebenenfalls zu bearbeiten. objMailItem.Options.UserHold = True hilft mir in dem Fall leider nicht weiter da, dass eMail nicht angezeigt wird sondern nur im Wartemodus im jeweiligen Verzeichnis liegt.


    Gruß Janosch

    Hallo,


    ist es auch möglich die Anzahl der Items in Archive.dat zu ermitteln? Mein Ziel ist es die Anzahl der Mails des jeweiligen User's zu erhalten.
    Wenn ich auf objMessageItems (Set objMessageItems = objArchive.AllItems) einen COUNT mache bekomme ich ja nur die Mails die ich im Info Center liegen habe.