Hallo zusammen,
Ich habe derzeit ein Problem mit den Webservices von Exchange 2007. Die Aufgabe ist eine Persone / Kontakt aus einem öffentlichen Ordner zu lesen. Hierführ habe ich zwei Funktionen geschrieben. Die eine Funktion gibt mir die FolderIDType des öffentlichen Ordners zurück. Die zweite funktion sucht einen kontakt aus einem Öffentlichen Ordner und liefert eine Liste zurück mit allen Kontakten die den Suchkriterien entsprechen.
Das Problem ist das die Suche in dem Öffentlichen Ordner nicht funktioniert. Zum Testen habe ich einen Öfffentlichen Ordner und meinen Normalem Kontakt Ordner mit den Identischen Daten gefüllt. Wenn ich meine Abfrage and meinen standard Kontakt Ordner schicke funktioniert es einwandfrei. Wenn ich die gleiche Abfrage an den Öffentlichen Ordner schicke bekomme ich immer einen leeren Rootfolder zurück. Vielleicht kann einer von euch mir ja weiter helfen. Würde mich auf jedenfall sehr freuen. Im folgenden poste ich noch die zwei Funktionen die ich geschrieben habe.
Die Funktion zum suchen der FolderIDType des Puplic Folders
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67:
| public FolderIdType searchFolder(string _folderName) { ExchangeServiceBinding server = new ExchangeServiceBinding(); server.Credentials = System.Net.CredentialCache.DefaultCredentials; server.Url = "https://<ServerName>/EWS/Exchange.asmx"; ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; }; FindFolderType findFolderRequest = new FindFolderType(); findFolderRequest.Traversal = FolderQueryTraversalType.Shallow;
FolderResponseShapeType responseShape = new FolderResponseShapeType(); responseShape.BaseShape = DefaultShapeNamesType.AllProperties; findFolderRequest.FolderShape = responseShape;
DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1]; folderIDArray[0] = new DistinguishedFolderIdType(); folderIDArray[0].Id = DistinguishedFolderIdNameType.publicfoldersroot;
findFolderRequest.ParentFolderIds = folderIDArray;
RestrictionType restriction = new RestrictionType(); PathToUnindexedFieldType fldrRestriction = new PathToUnindexedFieldType(); fldrRestriction.FieldURI = UnindexedFieldURIType.folderDisplayName; ContainsExpressionType contains = new ContainsExpressionType(); contains.ContainmentMode = ContainmentModeType.FullString; contains.ContainmentModeSpecified = true; contains.ContainmentComparison = ContainmentComparisonType.IgnoreCaseAndNonSpacingCharacters; contains.ContainmentComparisonSpecified = true; contains.Item = fldrRestriction; contains.Constant = new ConstantValueType(); contains.Constant.Value = _folderName; restriction.Item = contains; findFolderRequest.Restriction = restriction;
server.RequestServerVersionValue = new RequestServerVersion(); server.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2007_SP1;
FindFolderResponseType findFolderResponse = server.FindFolder(findFolderRequest); foreach (ResponseMessageType rmt in findFolderResponse.ResponseMessages.Items) { FindFolderResponseMessageType folderResponse = rmt as FindFolderResponseMessageType; FindFolderParentType parentFolderTyp = folderResponse.RootFolder; foreach (BaseFolderType baseResponseFolder in parentFolderTyp.Folders) { if (baseResponseFolder is ContactsFolderType) { ContactsFolderType current = baseResponseFolder as ContactsFolderType; return current.FolderId; } } } return null; } |
Die Funktion zum lesen des Kontakts
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107:
| public IList<UserInfo> getOutlookUser(string _FirstName, string _LastName) { ExchangeServiceBinding server = new ExchangeServiceBinding(); server.Credentials = System.Net.CredentialCache.DefaultCredentials; server.Url = "https://<ServerName>/EWS/Exchange.asmx"; ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; };
PathToUnindexedFieldType searchfieldFirstName = new PathToUnindexedFieldType(); searchfieldFirstName.FieldURI = UnindexedFieldURIType.contactsGivenName;
PathToUnindexedFieldType searchfieldLastName = new PathToUnindexedFieldType(); searchfieldLastName.FieldURI = UnindexedFieldURIType.contactsSurname;
ConstantValueType fieldValueFirstName = new ConstantValueType(); fieldValueFirstName.Value = _FirstName;
ConstantValueType fieldValueLastName = new ConstantValueType(); fieldValueLastName.Value = _LastName;
ContainsExpressionType exprFirstName = new ContainsExpressionType(); exprFirstName.ContainmentModeSpecified = true; exprFirstName.ContainmentMode = ContainmentModeType.FullString; exprFirstName.ContainmentComparisonSpecified = true; exprFirstName.ContainmentComparison = ContainmentComparisonType.IgnoreCaseAndNonSpacingCharacters; exprFirstName.Constant = fieldValueFirstName; exprFirstName.Item = searchfieldFirstName; ContainsExpressionType exprLastName = new ContainsExpressionType(); exprLastName.ContainmentModeSpecified = true; exprLastName.ContainmentMode = ContainmentModeType.FullString; exprLastName.ContainmentComparisonSpecified = true; exprLastName.ContainmentComparison = ContainmentComparisonType.IgnoreCaseAndNonSpacingCharacters; exprLastName.Constant = fieldValueLastName; exprLastName.Item = searchfieldLastName; AndType andcondition = new AndType(); andcondition.Items = new SearchExpressionType[2]; andcondition.Items[0] = exprFirstName; andcondition.Items[1] = exprLastName; RestrictionType restriction = new RestrictionType(); restriction.Item = andcondition;
ItemResponseShapeType itemProperties = new ItemResponseShapeType(); itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
FolderIdType[] folderIDArray = new FolderIdType[1]; folderIDArray[0] = new FolderIdType(); folderIDArray[0] = searchFolder(<Name des Öffentlichen Ordners>); FindItemType findRequest = new FindItemType(); findRequest.ItemShape = itemProperties; findRequest.Restriction = restriction; findRequest.Traversal = ItemQueryTraversalType.Shallow; findRequest.ParentFolderIds = folderIDArray; FindItemResponseType foundedItems = server.FindItem(findRequest); IList<UserInfo> result = new List<UserInfo>(); if (foundedItems.ResponseMessages.Items.Length > 0) { FindItemResponseMessageType responseMessage = foundedItems.ResponseMessages.Items[0] as FindItemResponseMessageType; if (responseMessage.RootFolder == null) return result; ArrayOfRealItemsType realItems = responseMessage.RootFolder.Item as ArrayOfRealItemsType; if (!(realItems != null && realItems.Items != null)) return result; foreach (ContactItemType contact in realItems.Items) { UserInfo info = new UserInfo(); info.M_Name = contact.GivenName; info.M_Email = contact.EmailAddresses[0].Value; info.M_Department = contact.Department; info.M_City = contact.PhysicalAddresses[0].City; info.M_LastName = contact.Surname; info.M_MobilPhone = contact.PhoneNumbers[0].Value; info.M_PLZ = contact.PhysicalAddresses[0].PostalCode; info.M_Position = contact.JobTitle; info.M_PrivatePhone = contact.PhoneNumbers[1].Value; info.M_Street = contact.PhysicalAddresses[0].Street; info.M_Superior = contact.Manager; result.Add(info); } return result; } else return result; } |
Ich danke eusch schonmal für eure Hilfe und verbleibe
Mit freundlichen Grüßen
sworddancer