MAPI Schnittstelle in Microsoft Dynamics NAV verwenden

  • Hallo Zusammen,


    wir haben durch einen Kunden die Anforderung, Emails aus dem ERP System Microsoft Dynamics NAV heraus zu versenden. Dafür will ich gern die MAPI Schnittstelle von DAVID FX 12 (DVAPI32) verwenden.


    [Blockierte Grafik: http://tearvolt.de/bilder/davidfx_2.png]


    [Blockierte Grafik: http://tearvolt.de/bilder/davidfx_1.png]



    Jedoch bekomme ich es nicht hin, eine Instanz zu erstellen. Es scheint mir so, als ob die DLL's bei der DAVID FX Client Installation nicht richtig registriert wurden.
    Beim erneuten Versuch, die DLL's zu registrieren, erscheint immer wieder die Meldung:


    [Blockierte Grafik: http://tearvolt.de/bilder/davidfx_3.png]



    Zur Info:


    Ich verwende folgenden Funktionen aus einem anderem Forum als Basis:


    oApp = CREATEOBJECT("DVOBJAPILib.DvISEAPI")
    oAccount = oApp.Logon("", "", "", "", "", "AUTH")
    oArchive = oAccount.GetSpecialArchive(102)



    *-- neues Email Object erstellen
    oMailItem = oArchive.NEWITEM(2)


    *-- Alle evtl. Einstellungen löschen
    oMailItem.Recipients.CLEAR()
    oMailItem.bcc.CLEAR()


    *-- Mail Empfänger
    oMailItem.Recipients.ADD(ALLTRIM(THISFORM.mail_receivers))
    *-- Mail Blind Copy Empfänger
    IF !EMPTY(ALLTRIM(THISFORM.mail_bccs))
    oMailItem.bcc.ADD(ALLTRIM(THISFORM.mail_bccs))
    ENDIF


    *-- Mail Betreff
    IF !EMPTY(ALLTRIM(THISFORM.mail_subject))
    oMailItem.Subject = ALLTRIM(THISFORM.mail_subject)
    ENDIF


    *-- Mail Body (nur Text)
    oMailItem.Bodytext.plaintext = ALLTRIM(THISFORM.mail_body)


    *-- Mail senden
    oMailItem.SEND()




    Bin für jede(n) Hinweis oder Idee dankbar.

  • Okay, dann erlaube ich mir mal einen Hinweis an den "Fachinformatiker":



    Nicht böse gemeint, aber:


    Einerseits postest Du uralten Visual FoxPro Code (den Ihr irgendwo als sogenannte "Basis" im Netz gefunden habt),
    wobei FoxPro schon seit 2004 nicht weiterentwickelt wird und mit dem sich max. die schlecht programmierte COM-
    Schnittstelle (DvAPI32) ansprechen lässt, und dann schreibst Du wieder was von der MAPI???


    Das ist ähnlich als wollte man einen USB-Stick am DVI-Port der Grafikkarte betreiben. Ich schlage daher vor
    erstmal die grundlegenden Basics zu lernen, sonst wird das nämlich nichts mit einer brauchbaren Kundenlösung.


    Ferner stellt sich mir die Frage, ob mittels COM auf das VFP-Form zugegriffen wird und bei den Mitarbeitern des
    Kunden auf jedem Arbeitsplatz neben dem NAV-Client auch tatsächlich ein 10 Jahre altes VFP installiert ist, das
    (mit etwas Glück) vielleicht noch auf der kommenden Windows Plattform läuft. Falls das nicht der Fall ist, könnt
    Ihr Eure sogenannte 15-zeilige "Basis" mal ganz schnell und tief im Müll versenken.


    PS: Auf einem 64-bit Windows den RegServer im \Windows\SysWow64 Verzeichnis nehmen und nicht vergessen
    die evtl. bereits registrierte Version zuerst de-registrieren. Leichter lässt sich das allerdings mit der dvsmapi.exe
    im \David\Clients\Windows\DVSMAPI Verzeichnis bewerkstelligen.



    Edit: Völlig falsch!

    Zitat

    Dafür will ich gern die MAPI Schnittstelle von DAVID FX 12 (DVAPI32) verwenden.


    API
    (Advanced Programming Interface) = DvAPI32.dll
    MAPI (Messaging Application Programming Interface) = DvMapi32.dll




    Also dann, viel Glück :D

    2 Mal editiert, zuletzt von Peter Lustig ()

  • Hallo Peter,


    danke für dein Feedback. Da habe ich wohl noch etwas nachzuholen. Leider hilft mir aber deine Aussage nicht bei meiner Lösung weiter.


    Den Code, den ich mitgeschickt hatte, soll nicht 1 zu 1 übernommen werden, sondern als Vorlage beziehungsweise Denkanstoß dienen. Als Quellcode verwende ich "C/AL".


    Ich kann bereits auf die MAPI (DvMapi32.dll) zugreifen, jedoch gelingt es mir nicht, das Objekt zu instanziieren.


    Wie es dann tatsächlich programmcode technisch umgesetzt wird, soll erstmal nicht primär betrachtet werden.
    Gerade weil ich in der Thematik nicht sehr tief drin Stecke, will ich mich dort einarbeiten und benötige daher einen Tipp.


    Eine Idee?


    Gibt es eine Befehlsliste, mit welchen Parametern man die dvsmapi.exe ansteuern kann?


    Danke und Grüße,


    Hannes

  • Hallo Hannes,


    die DvMapi32.dll exportiert folgende Funktionen, aber das wird
    Dir sicherlich ebenso wenig helfen wie meine vorherige Antwort:


    Code
    Funktion:				Ordinal:cmc_act_on				229 (0xe5)cmc_free				230 (0xe6)cmc_list				231 (0xe7)cmc_logoff				232 (0xe8)cmc_logon				233 (0xe9)cmc_look_up				234 (0xea)cmc_query_configuration			235 (0xeb)cmc_read				236 (0xec)cmc_send				237 (0xed)cmc_send_documents			238 (0xee)FreePadrlist@4				139 (0x8b)FreeProws@4				140 (0x8c)HexFromBin@12				045 (0x2d)HrGetOneProp@12				135 (0x87)HrQueryAllRows@24			075 (0x4b)HrSetOneProp@8				136 (0x88)MailtoURL				110 (0x6e)MAPIAddress				217 (0xd9)MAPIAllocateBuffer@8			013 (0x0d)MAPIAllocateMore@12			015 (0x0f)MAPIDeleteMail				215 (0xd7)MAPIDetails				218 (0xda)MAPIFindNext				214 (0xd6)MAPIFreeBuffer				016 (0x10)MAPIFreeBuffer@4			017 (0x11)MAPIInitialize				020 (0x14)MAPIInitialize@4			021 (0x15)MAPILogoff				210 (0xd2)MAPILogon				209 (0xd1)MAPILogonEx@20				011 (0x0b)MAPIOpenLocalFormContainer@4		032 (0x20)MAPIReadMail				213 (0xd5)MAPIResolveName				219 (0xdb)MAPISaveMail				212 (0xd4)MAPISendDocuments			208 (0xd0)MAPISendMail				211 (0xd3)MAPIUninitialize@0			023 (0x17)OpenStreamOnFile@24			147 (0x93)OpenTnefStreamEx@32			151 (0x97)RTFSync@12				183 (0xb7)ScCreateConversationIndex@16		244 (0xf4)SendToShortcut                   	111 (0x6f)WrapCompressedRTFStream@12		185 (0xb9)


    C/AL ist eher dazu geegnet um mit Datensätzen zu arbeiten, daher wird es aufgrund fehlender Kenntnis schwer für Dich dort anzusetzen.


    Mein Ratschlag ist der, dass Du die Mails ins Import-Verzeichnis schreibst und den Rest via FileScan-Service vom David Server erledigen
    lässt. Achte darauf, dass Du beim Schreiben der Steuerdatei möglichst exklusiven Zugriff darauf hast, dann sollte es keine Probleme geben.



    Edit:

    Zitat

    Gibt es eine Befehlsliste, mit welchen Parametern man die dvsmapi.exe ansteuern kann?

    Installation: Kein Parameter / Deinstallation: "dvsmapi.exe -U". Mehr braucht man eigentlich auch nicht.


    Wozu auch?


    Bei der Tobit MAPI handelt es sich (wie der Name schon sagt) um eine "Simple MAPI" (dvsmapi), daher stellt
    sie natürlich nicht sämtliche Funktionen bereit, die man von einer vollwertigen Schnittstelle erwarten könnte.



    Zitat

    Wie es dann tatsächlich programmcode technisch umgesetzt wird, soll erstmal nicht primär betrachtet werden.

    Das ist aber das Einzige, was wirklich zählt!!!
    Denk dran: 1.000 Wege führen nach Rom, daher ist nicht der Weg das Ziel, sondern die programmatische Umsetzung.




    Edit 2: Ein weiterer Ansatz wäre eine kleine eigene DLL. Hier mal ein ungetestetes Beispiel als "Denkanstoß" (Interface fehlt) in C#:



    Musst halt schauen was Du brauchst (SSL, Port etc. lassen sich jederzeit implementieren),
    nur ohne irgendwelchen Code (außer dem gefundenen FoxPro gedönse) ist es schwierig zu helfen.

    3 Mal editiert, zuletzt von Peter Lustig ()

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!