![]() |
|
|||||||
| Newsgroups microsoft.public.de.fox Forum microsoft.public.de.fox |
![]() |
|
|
Themen-Optionen | Ansicht |
|
#1
|
|||
|
|||
|
Hallo
Gibts eine moeglichekeit daten aus der Contacts-Flies (*.vcf) von Outlook2007 , im meine Anwendung zu importieren ? Wenn ja, wo kann ich mehr info erhalten? Danke. |
|
|
||||
|
||||
|
|
|
#2
|
|||
|
|||
|
Hallo Silenus
ne VCARD (*.VCF) ist doch einfach nur ne Textdatei, die kannst du doch problemlos einlesen und zerlegen? Rein ausm Bauch raus ungefähr so: cContent = FileToStr(Getfile("VCF")) cTelefon = STREXTRACT(cContent, "TEL;WORK;VOICE:",CHR(13)) -- wOOdy Visual FoxPro Technologieberater Microsoft "Most Valuable Professional" 1996 bis 2009 "*´¨) ¸.·´¸.·*´¨) ¸.·*¨) (¸.·´. (¸.·` * ...·`.Visual FoxPro: It's magic ! (¸.·``··* |
|
#3
|
|||
|
|||
|
Mal abgesehen von StrExtract, Outlook-Kontakte sind auch nur Outlook-Items
wie Mails und lassen sich per Automation auslesen: #DEFINE olFolderContacts 10 oOutlook = CREATEOBJECT("Outlook.Application") oMapiNamespace = o.GetNamespace('MAPI') oFolderContacts = oMapiNamespace.GetDefaultFolder(olFolderContacts) FOR EACH oItem IN oFolder.Items ? oItem.FirstName ? oItem.LastName ? oItem.BusinessTelephoneNumber ? oItem.MailingAddress ? oItem.BusinessHomePage ? oItem.Email1Address ? oItem.Email2Address .... ENDFOR Über den Objectbrowser kommst Du an alle Office/Outlook Konstanten ran, insbesondere alle olFolder-Typen. Ein Breakpoint in der For-Schleife und Du kannst Dir per Intellisense alle ContactItem-Properties anscheuen. Tschüß, Olaf. |
|
#4
|
|||
|
|||
|
Hallo.
Danke erstmal. Dies soll ein einmalige procedure werden. Ich will auch nicht in der Anwendung/formen rumbasteln. Folgendes ueberlegt: Der Anwender exportiert die Kontakte in eine Excel-File, sortiert sie, loescht die doppelte Eintraege etc. Jetzt komme ich... Nehme und fuege hinzu diese daten in meine DBF (mit VFP commands,) das wars! Fuer jede Anregung danke im voraus. Gruss. |
|
#5
|
|||
|
|||
|
Hallo Silenus,
Warum sollte der Anwender die Kontakte erst mal nach Excel exportieren? Kontakte sind in einem Kontaktmanager (wie Outlook) am besten zu bearbeiten, also soll er doch da seine Kontakte aussortieren. Und du kannst sie mit der absolut simplen Routine, die dir Olaf gezeigt hat, direkt aus Outlook einlesen. Der Umweg über VCARD oder Excel ist totaler Schwachfug, sorry. Und macht dir auf jeden Fall deutlich mehr Programmier-Aufwand. >> mit VFP commands Alles, was du in VFP machst, ist "mit VFP commands"; egal ob du nun prozedural eine VCard oder Excel einliest oder objektorientiert auf Outlook zugreifst. Man muss sich nur mal damit beschäftigen WOLLEN. -- wOOdy Visual FoxPro Technologieberater Microsoft "Most Valuable Professional" 1996 bis 2009 "*´¨) ¸.·´¸.·*´¨) ¸.·*¨) (¸.·´. (¸.·` * ...·`.Visual FoxPro: It's magic ! (¸.·``··* |
|
#6
|
|||
|
|||
|
Hallo Juergen.
Wie schon gesagt ich will nicht in der anwendung "rumbatseln". Die Anwendung laeuft schon und hat ueber 300 Kontakte drin Die Outlook Kontakt Daten sind schon von mir in eine temp-DBF gespeichert worden. Eine append from temp.dbf hat nur leerzeile hinzugefuegt in meine DBF. Da die Anzahl der Felder und die Feldername verschieden sind in der DBFs , wie bestimme ich wo was rein soll? Gruss |
|
#7
|
|||
|
|||
|
> Eine append from temp.dbf hat nur leerzeile hinzugefuegt in meine DBF.
> > Da die Anzahl der Felder und die Feldername verschieden sind in der > DBFs , wie bestimme ich wo was rein soll? Wenn was die Quelle des Appends ist? Grundsätzlich zum Append: Du hast eine Ziel-DBF, die Du selektierst. Dann machst Du den APPEND der Quell-DBF. Die Feldnamen müssen in beiden DBFs übereinstimmen, die Feldreihenfolge und selbst der Feldtyp sind zweitrangig, sofern die Typen zumindest kompatibel sind. Man kann z.B. ein C(100) Feld in ein C(50) Feld appenden, muß dann evtl. eben nur mit abgeschnittenen Werten rechnen. Wenn Du also eine Contacts.dbf in Deiner Datenbank hast, weißt Du, wie die temp.dbf, aus der Du weitere Kontakte importieren willst aussehen muß. Das Mapping von Feldnamen kann Dir keiner Abnehmen, wenn die Strukturen unterschiedlich sind, dann mußt Du eben noch einen import Cursor erstellen z.B. mittels create cursor inmport (feldliste), insert into import select feld1 as richtigername1, feld2 as richtigername2, ... from temp.dbf, und anschließend ein APPEND FROM DBF("import"). Was Dir ein Append aber nie abnimmt ist, ein Merge/Abgleich mit schon vorhandenen Kontakten. Dazu brauchst Du schon eine Programmlogik aus Updates und Inserts der einzelnen Kontakte, oder Du fügst blind alle Kontakte an und tilgst dann im Anschluß erst Doppler. An der Stelle in meinem Beispielcode, wo ich beispielhaft einige ContactItem-Eigenschaften ausgebe, kannst Du aber genauso die besagte UPDATE/INSERT Logik vorsehen, um die Kontakte zu synchronisieren/zu ergänzen, z.B. Update Contacts SET Vorname = oItem.Firstname, ; Nachname = oItem.Lastname, ; ..... ; WHERE Contacts.EntryID = oItem.EntryID && siehe Anmerkung unten IF _tally=0 && Kein Update, also neuer Kontakt INSERT INTO Contacts (...felder...) VALUES (...oItem....,oItem....) * wenn die Felder geschickterweise so heißen wie die Outlook-ContactItem-Properties, dann z.B. einfach INSERT INTO Contacts FROM NAME oItem Endif Je nach den Feldnamen in Deiner Contacts.DBF ändern sich Update und Insert logischerweise. Daneben müßte man dann alle Contacts durchgehen und evtl. die löschen, die sich in Outlook nicht mehr auffinden lassen, wenn Outlook das führende System der Kontaktdaten sein soll, oder man pumpt dann eben Kontakte nach Outlook, die dort fehlen. Was die EntryID angeht ist diese zumindest innerhalb Outlook ein eindeutiger Schlüssel für einen Kontakt, den man am besten auch in seine Contacts.DBF übernimmt, um eineindeutig Kontakte zwischen Outlook und seinen eigenen Daten abgleichen zu können. Wenn das nicht gegeben ist und Du die Applikationstabelle der Kontakte nicht selbst ändern kannst, mußt Du im Zweifelsfall eben mehrere Kontakteigenschaften heranziehen, wie Vorname, Nachnahme, Mailadresse und Geburtsdatum, die insgesamt einen Kontakt eindeutig reidentifizieren. Das Blöde an solchen Ersatzschlüsseln ist, daß gerade eine Korrektur an den darin beteiligten Feldern den Kontakt dann aber unauffindbar macht. Daher die EntryID. Übrigens haben sich in meinen Beispielcode zwei Fehler eingeschlichen: a) an der Stelle oMapiNamespace = o.GetNamespace('MAPI') muß es natürlich heißen oMapiNamespace = oOutlook.GetNamespace('MAPI') b) die Schleife geht über alle Items in oFolderContacts, nicht über oFolder. insgesamt also: #DEFINE olFolderContacts 10 Use Contacts.DBF IN 0 && anpassen an die Zieltabelle. oOutlook = CREATEOBJECT("Outlook.Application") oMapiNamespace = oOutlook.GetNamespace('MAPI') oFolderContacts = oMapiNamespace.GetDefaultFolder(olFolderContacts) FOR EACH oItem IN oFolderContacts.Items * ...Update/Insert Logik pro Kontakt, ein Outlook-Kontakt ist gerade in oItem, Contacts o.ä. ist der Alias der Zieltabelle. ENDFOR Tschüß, Olaf. |
|
#8
|
|||
|
|||
|
Hallo Silenus,
> Eine append from temp.dbf hat nur leerzeile hinzugefuegt in meine DBF. > > Da die Anzahl der Felder und die Feldername verschieden sind in der > DBFs , wie bestimme ich wo was rein soll? Beim APPEND FROM tabelle.dbf kann man höchstens die Feldauswahl einschränken aber keine anderweitigen Feldzuordnungen vorgeben. Die Reihenfolge der Felder ist aber grundsätzlich egal. Auswege: SELECT feldeins AS einfeld, felddrei AS zweifeld, feldsiebzehn AS dreifeld ... FROM quelltabelle INTO TABLE zwischentabelle WHERE ... SELECT zieltabelle APPEND FROM zwischentabelle oder: Schleife über die Quelltabelle und dann die Zeilen einzeln übertragen. oder: COPY TO zwischendatei.csv FIELDS in der benötigten Reihenfolge TYPE DELIMITED SELECT zieltabelle APPEND FROM zwischendatei.csv TYPE DELIMITED hier spielt die Reihenfolge der Felder die Hauptrolle. Feldnamen sind in der Datei keine drin. Gruß Bernhard Sander |
|
#9
|
|||
|
|||
|
> oder:
> COPY TO zwischendatei.csv FIELDS in der benötigten Reihenfolge TYPE > DELIMITED > SELECT zieltabelle > APPEND FROM zwischendatei.csv TYPE DELIMITED > hier spielt die Reihenfolge der Felder die Hauptrolle. Feldnamen sind in > der Datei keine drin. Was das angeht könnte man auch ein SELECT INTO ARRAY machen und APPEND FROM ARRAY nutzen. Tschüß, Olaf. |
|
#10
|
|||
|
|||
|
Hallo Olaf,
>> Was die EntryID angeht ist diese zumindest innerhalb Outlook ein >> eindeutiger Schlüssel für einen Kontakt, den man am besten auch in seine Contacts.DBF übernimmt << Oobacht! Die EntryId ist bei Outlook / Exchange immer nur Folderbezogeneindeutig, d.h: wenn du ein Item in nen anderen Folder verschiebst, ändert sich dessen EntryId; der jeweilige Folder generiert für deinen Context die EntryId. Wenn du also Kontakte oder Termine synchron halten willst, musst du selber ne eindeutige ID in eines der CustomFields speichern, damit du dein Item wiederfindest. -- wOOdy Visual FoxPro Technologieberater Microsoft "Most Valuable Professional" 1996 bis 2009 "*´¨) ¸.·´¸.·*´¨) ¸.·*¨) (¸.·´. (¸.·` * ...·`.Visual FoxPro: It's magic ! (¸.·``··* |
|
|
|
|
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| Kontakte importieren nach Outlook 2007 | Dieter | Newsgroup microsoft.public.de.outlook | 4 | 06-21-2009 08:52 AM |
| Accounts + Contacts von CRM 4.0 exportieren und in ein anderen CRM4.0 importieren | pstreimelweger@gmail.com | Newsgroups microsoft.public.de.crm | 6 | 02-27-2009 10:45 AM |
| Outlook 2007 PST Datei nach Festplatten Crash importieren | michael | Newsgroups microsoft.public.de.outlook.teamfolders | 1 | 02-05-2009 04:27 PM |
| project 2003 task einem outlook contacts im appointment zuweisen | JCardenas | Newsgroups microsoft.public.de.project | 1 | 09-30-2008 06:58 PM |
| MS Office 2007 - Outlook - Datei -> Importieren/Exportieren... | Zawisza | Newsgroup de.comp.office-pakete.ms-office | 0 | 04-02-2008 08:57 PM |