Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

DragDrop από Outlook σε WinForm

Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος cap στις 03-02-2005, 21:50. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-01-2005, 18:16 1066

    DragDrop από Outlook σε WinForm

    Ενας συνάδελφος έχει ένα θέμα με το εξής:
    Χρειάζεται να κάνει dragdrop ένα μήνυμα από outlook 2003 σε winForms εφαρμογή και να λαμβάνει το .msg αρχείο.

    Επειδή υποψιάζομαι από το ψάξιμο που έκανα οτι προγραμματιστικά σε .net ίσως αυτό να μην είναι δυνατό, αυτό που ζητάω είναι κάποιο component που να εξυπηρετεί τη δουλειά αυτή, αν κάποιος γνωρίζει καποιον που κατασκευάζει τέτοια πράγματα.




    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  29-01-2005, 01:49 1067 σε απάντηση της 1066

    Re: DragDrop από Outlook σε WinForm

    Ετσι που το λες και μόνο θυμίζει DDE. Θες κάτι που να μπορεί να στέλνει εντολές τέτοιες στο Outlook για να μπορεί να λαμβάνει δεδομένα από αυτό. Φαίνεται τέρας μόνο και μόνο σαν σκέψη.

    Δεν μπορώ να σου πω καν αν μπορεί να γίνει κάτι τέτοιο από το .NET. Αν κάποιος έχει κάτι υπόψη του...

    George J.

    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  31-01-2005, 00:49 1075 σε απάντηση της 1067

    Re: DragDrop από Outlook σε WinForm

    Κάποιο control δεν γνωρίζω... Αυτό που γνωρίζω όμως είναι ότι:
     
    Το Drag and Drop σε VB.ΝΕΤ έχει πιο πολύ φασαρία απ' ότι στην VB 6, τουλάχιστον στην περίπτωση που θες να κάνεις απλά πράγματα (δηλαδή όχι OLE DnD). Αυτό όμως είναι καλό για σένα γιατί με τη νέα υλοποίηση, μεταφέρονται πραγματικά τα data που κάνουμε drag. Όπερ σημαίνει ότι όταν μεταφέρεις ένα mail item από το Outlook και το ρίχνεις, για παράδειγμα, πάνω στην φόρμα, τότε μπορείς να έχεις φέρει στην εφαρμογή σου ένα Outlook mail item. Έτσι λοιπόν, απλά χρειάζεται να δηλώσεις την ανάλογη COM library στο project (εδώ είναι που τα χαλάμε, και μόνο γι αυτόν το λόγο εγώ δεν θα το έκανα) και να παίξεις με τα interfaces για να πάρεις το πολυπόθητο mail item. Τώρα, τι θα το κάνεις δεν ξέρω, όταν έπαιξα λίγο με αυτό το σενάριο ξέχασα να κοιτάξω (εντάξει, λάθη είμαστε, ανθρώπους κάνουμε) αν έχει κάποιο save method.

    Επίσης, μπορείς να κοιτάξεις και
    εδώ για να πάρεις μια ιδέα για ένα παρόμοιο πρόβλημα... Όντως είναι κάπως τερατώδης λύση...

    "Όποιος ψάχνει βρίσκει" (Αρχ. Κινέζικη Παροιμία).
    Άλλο ένα link για την επίλυση του παραπάνω προβλήματος. Δεν είναι αυτό που θες, αλλά δείχνει το δρόμο. Είναι και πιο κομψή λύση...


    Vir prudens non contra ventum mingit
  •  31-01-2005, 06:13 1076 σε απάντηση της 1075

    Re: DragDrop από Outlook σε WinForm

    Μμμμ όντως όποιος ψάχνει βρίσκει! Big Smile

    Αλλά από ότι είδα στα παραδείγματα είναι όπως από ότι φανταζόμουνα:

    Και τα δύο παραδείγματα το ίδιο κάνουν, απλά το πρώτο είναι C++ και δεν παίζει Smile. Δεν κάνει OLE Drop αλλά Stream Copy. Αλλάζοντας τα λίγο τα παραδείγματα και ρίχνοντας οποιοδήποτε μήνυμα από το Οutlook, δεν περνάει το GetData("FileContents"). Λογικά αυτό θα έπρεπε να είναι μέσα όλο το μήνυμα σε RFC μορφή-text με όλους τους headers.

    Οπότε ερχόμαστε στην αρχή. Sad Εκτός άμα κάνει Drag & Drop κάπου στο File System και μέτά πάνω στην εφαρμογή, οπότε μπορεί να περάσουν τα μηνύματα μέσα μια χαρά!

    Λογικά κάποια από τα data που περνάει πρέπει να είναι αναγνωριστικό του μηνύματος. που μπορεί να χρησιμοποιηθεί μέσω MAPI32 ή του ίδιου του Outlook application για να μπορέσεις να πάρεις το μήνυμα. Δεν θα χρησιμοποιήσει το DDE αλλά αυτό που κάνει έναρξη το DDE...

    George J.



    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  01-02-2005, 21:45 1084 σε απάντηση της 1076

    Re: DragDrop από Outlook σε WinForm: Πρόβλημα χωρίς λύση

    Γενικά, το όλο θέμα με έβαλε σε σκέψεις και σε ανησυχίες και είπα να το ψάξω λίγο παραπάνω… Ψάξιμο στο ψάξιμο, βρήκα αυτό το άρθρο στο support του office όπου αναφέρει:

    Dragging Outlook Items to an OLE Container Control

    You can use an OLE container control on a Visual Basic form to hold objects that you drag to it. When you drag Outlook items to these controls, Outlook exposes only a few fields, and there is no way to change which fields are exposed.

     

    Το οποίο επιβεβαίωσε τους πειραματισμούς μου που ανέφερα σε προηγούμενο post. Το περίεργο συνέβη όταν έβαλα το keyword FileGroupDescriptor στο Google… Πήρα links που αφορούν το drag-n-drop αλλά και το clipboard… Χμμμ… περίεργο… Και τότε είδα το φως! Μα φυσικά! Το OLE DnD (που μας ενδιαφέρει εδώ και εν διαστάσει με το “File Manager DnD”) είναι μια παραλλαγή του Copy/Paste και χρησιμοποιεί και αυτό το clipboard!

    Αφού αυτομαστιγώθηκα για τιμωρία που δεν το σκέφτηκα νωρίτερα, συνέχισα το ψάξιμο, προς την κατεύθυνση του clipboard. Αν χρησιμοποιήσετε το clipboard viewer και κάνετε copy/paste ένα mail item του outlook θα δείτε τα ίδια ακριβώς data που αναφέρει το άρθρο από το support. Που βρίσκονται λοιπόν τα υπόλοιπα data;

     

    Κατ’ αρχήν, όταν κάνουμε copy κάτι στο clipboard, μεταφέρουμε data τα οποία ενδέχεται να έχουν πολλαπλές όψεις. Για παράδειγμα, αν κάνουμε copy κείμενο, αυτό μπορεί να μπει και με τη Unicode μορφή του αλλά και με την ANSI.

    Για να δούμε λοιπόν αυτά τα data, θα πρέπει να χρησιμοποιήσουμε την κλάση Clipboard που μας παρέχει το Framework για να χειριζόμαστε το clipboard. Αυτή η κλάση έχει δύο methods, την GetData και την SetData που φαντάζεστε τι κάνουν… Αυτά τα δύο methods βγάζουν στο IDataObject interface το οποίο μας παρέχει μερικά πολύ ενδιαφέροντα methods, όπως το GetFormats με το οποίο μπορούμε να κάνουμε ένα iteration στα formats που περιέχει το DataObject.

     

    Έτσι λοιπόν, με αυτόν τον κώδικα

     

            Dim clpbrdDO As IDataObject = Clipboard.GetDataObject

            Dim Frmt() As String = clpbrdDO.GetFormats(False)

     

            Dim strRslt As String

            Dim i As Integer

            For i = 0 To Frmt.Length - 1

                strRslt += Frmt(i) + ControlChars.CrLf

            Next i

            MessageBox.Show(strRslt)

     

    Μπορούμε πολύ εύκολα να δούμε τι στο καλό περιέχει το clipboard!

     

    Αν συγκρίνετε τα Formats από τα αποτελέσματα του παραπάνω κώδικα, σε σχέση με τα members της κλάσης DataFormats, θα δείτε ότι πολλά από αυτά δεν υπάρχουν στην κλάση DataFormats και αυτό γιατί πέρα από τα standard clipboard formats, υπάρχουν και τα private (για την ακρίβεια υπάρχουν πολλά περισσότερα). Έτσι και το Outlook έχει το δικό του private format και επιπρόσθετα κάποιες περιορισμένες text πληροφορίες στις οποίες αναφέρεται το άρθρο στο support του office. Το τελειωτικό χτύπημα ήρθε, όταν ψάχνοντας για το private format του  Outlook βγήκα σε αυτό το post από το microsoft.public.dotnet.framework.windowsforms στο οποίο διαβάζουμε από επίσημα …δάχτυλα, ότι τελικά δεν υπάρχει τρόπος να διαβάσουμε το private format του Outlook (τουλάχιστον μέσα από .ΝΕΤ) γιατί ακριβώς είναι private και η Microsoft δεν προτίθεται να το δημοσιεύσει... Ίσως όμως κάποιος καλός άνθρωπος που ξέρει C++ και ATL και MFC μπορεί να φτιάξει ένα τέτοιο component γιατί χωρίς .ΝΕΤ γίνεται η δουλειά...

     


    Vir prudens non contra ventum mingit
  •  03-02-2005, 21:50 1105 σε απάντηση της 1084

    Re: DragDrop από Outlook σε WinForm: Πρόβλημα χωρίς λύση

    Αν και μπορώ (ξεδιάντροπα) να δηλώσω άσχετος από OLE, DDE και τα λοιπά συναφή, οφείλω να σας ευχαριστήσω εκ μέρους του συναδέλφου μια και τα links που δώσατε αποτέλεσαν ενα πολύ καλό σημείο εκκίνησης για διερεύνηση (ναι, ξέρει C++, ATL, MFC) Smile

    Παρενθεση: Μια φορά δοκίμασα ο κακομοίρης να βάλω έναν OLE container για office documents μέσα σε winForms και είδα κι έπαθα....μονο ΙΕ και αυτός με το ζόρι...



    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems