Laden...

Mal wieder Exchange...

Erstellt von Sclot vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.835 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 16 Jahren
Mal wieder Exchange...

Hallo 🙂

Da ich nach 3 tagen keinen bock mehr habe mich länger allein mit dem mist zu beschäftigen dachte ich mir, das ich euch eventuell an der Sache dran teilhaben lassen kann.

Eigentlich möchte ich "nur" ein paar Adressen aus unserer Anwendung heraus (eine Speditionssoftware) an Exchange übergeben.

Die erste Aufgabe dabei war dies ersteinmal für das Lokale Outlook zu erledigen - ohne Exchange anbindung.
Also ein Application.Outlook() aufgeamcht und schön angesprochen - funktionierte super.

Nun sollte der Exchange teil dazu kommen.
Ich also das selbe Programm hergenommen und statt dem lokalen Kontakten einfach einen PublicFolder genommen - Funktionierte super.

Nun sollte es so geändert werden, dass der normale Benutzer nur Lese-Rechte auf diesen Öffentlichen Ordner hat.
Nun war die Schwierigkeit mit einem 2. Benutzer, der Schreibrechte auf dem Ordner hat die Adressen dort einzutragen.
Da man nur mit einem Exchange-Profil angemeldet sein kann, gung dies schon einmal nicht.

Letzendlich hab ich alles so umgebaut das ich das Programm auf dem Exchange-Server laufen habe - das nimmt jetzt XML-Dateien über einen FSW entgegen und trägt diese in den Öffentlichen Ordner ein.
Das ganze läuft inzwischen auch schon ohne Probleme als Dienst.
HEUTE meinte unser Techniker zu mit das eine gleichzeitige Installation vom Outlook und Exchange auf dem SELBEN Rechner wohl von MS nicht supportet wird.

Nun ja - jetzt muss ich mir was anderes einfallen lassen.

Ich dachte erst an die reine MAPI-Schnittstelle - diese scheint aber auch im endeffekt auf Outlook zugreifen zu wollen.

Als nächstes fand ich CDO - was bei mir nciht wirklich funktioniert (hab z.b. kein CDO.Person zur Verfügung).

Dann gab es noch die Möglichkeit über ADO und exchange.datasource.
Damit hab ich es jetzt erst einmal versucht, was auch funktioniert - allerdings ist das blöd zu debuggen eil ich den Exchange-Provider nicht auf meinem rechner installiert habe - da er nur auf dem Exchange-Server vorliegt.
Also muss ich jetzt immer Änderungen am Programm machen - Programm kompilieren und auf dem Exchange-Server testen.
Sehr nervig das ganze.

Hier mal ein bissl Code:


string sURL = "http://exc07.exchange.intern/public/Adressen/kunde_primaerid.EML";
				
ADODB.Connection oCn = new ADODB.Connection();
ADODB.Record oRc = new ADODB.Record();
ADODB.Fields oFields;

oCn.Provider = "exoledb.datasource";

oCn.Open(sURL, "", "", 0);
if (oCn.State == 1)
{
	Console.WriteLine("Connection Successful");
}
else
{
	Console.WriteLine("Connection Unsuccessful");
	return;
}

oRc.Open(sURL, oCn,
	ADODB.ConnectModeEnum.adModeReadWrite,
	ADODB.RecordCreateOptionsEnum.adOpenIfExists,
	ADODB.RecordOpenOptionsEnum.adOpenRecordUnspecified,
	"", "");

oFields = oRc.Fields;

oFields["DAV:contentclass"].Value = "urn:content-classes:person";
oFields["http://schemas.microsoft.com/exchange/outlookmessageclass"].Value = "IPM.Contact";
oFields["urn:schemas:contacts:o"].Value = "FirmaName";
oFields["urn:schemas:contacts:Title"].Value = "Herr";
oFields["urn:schemas:contacts:givenName"].Value = "Sven";
oFields["urn:schemas:contacts:sn"].Value = "SSSSS";
oFields["urn:schemas:contacts:email1"].Value = "svens@email.de";
oFields.Update();

oCn = null;
oRc = null;
oFields = null;

^^ Dies ist ein leicht geändertes Beispiel aus der MS KB.

Damit kann ich schon mal Direkt auf eine Adresse im Öffentlichen Ordner vom OWA zugreifen.
Wenn es die Adresse nicht gibt, dann wird sie angelegt - ansonsten geändert.

Was mir hier jetzt noch fehlt ist zum einen die "OrganizationalIDNumber" - da ich dort meine primaerid rein schreiben möchte.
Und zum anderen fehlt mit in diesem Ansatz eine Suchfunktion.
Ich habe flüchtig gelesen das es über DIESE ADO-Schnittstelle wohl auch möglich ist SQL auszuführen - so ganz verstanden hab ich es aber noch nicht (auch noch nicht getestet).

Ja... Fragen:

  1. Ist der ADO-Weg schonmal der richtie Ansatz wenn ich eine Adresse auf dem Server nlegen möchte ohne Outlook Installiert zu haben?

  2. Wie sieht es da mit Suchen in den Daten aus?

  3. Ist es wirklich so das mit darüber weniger Möglichkeiten zur verfügung stehen als mit Outlook (Grade im breich Datenfelder) ?

  4. Hat jemand schon einmal das CDO-Zeug zum laufen bekommen?

  5. Gibt es vielleicht noch einen weg, den ich versuchen sollte (eventuelle http über Webdav)... oder eben noch was ganz anderes ?

Ich bin gespannt auf eure Antworten 🙂

Sven

3.728 Beiträge seit 2005
vor 16 Jahren
Exchange

Der Zugriff mit ADO auf Exchange war mir schon immer suspekt. Ellenlange URNs als Feldnamen einzutippen ist mir ehrlich gesagt viel zu blöd.

CDO 1.21 hat zwar ein schönes Objektmodell, ist aber nicht multithreading und stürtzt deshalb in .NET-Anwendung manchmal unkontrolliert ab. Außerdem wird es nicht supported.

CDO 2000 kann, soweit ich weiss, nur SMTP-Nachrichten verwalten, aber keine Aufgaben, Kontakte etc.. Taugt also auch nix.

CDOEX läuft nur direkt auf dem Exchange Server und eignet sich dehalb nur für reine Exchange-Admin-Tools.

WebDAV funktioniert gut, ist aber sehr aufwändig und man muss sich wieder mit den doofen URNs rumärgern.

Der Exchange 2007 bietet WebServices an. Allerdings ist der noch nicht so weit verbreitet (Vor allem, weil er NUR auf 64-Bit Hardware läuft). Ob die Webservices gut sind, oder ob man sich auch da wieder mit URNs rumärgern muss, kann ich Dir leider nicht sagen. Hatte mit Exchange Server 2007 noch nie das Vergnügen.

Die beste Alternative ist Redemption RDO: http://www.dimastr.com/redemption/rdo/default.htm
Kapselt Extended MAPI, läuft stabil und kann alles.