개체를 외부 소스에서 가져 오는 작은 응용 프로그램을 만들었습니다. 그런 다음 일부 구성에 따라 Exchange 서버의 사용자 연락처 폴더에 이러한 연락처를 만들거나/upadate해야만 다음에이 사용자가 MS Outlook을 열 때 Exchange Server에서 새 연락처를 볼 수 있습니다. 가장 (impersonation) 기능을 가진 사용자이므로 보안은 중요하지 않습니다.GAL에 연락처가있는 경우 Exchange 웹 서비스 (EWS) FindItems가 작동하지 않습니다.
그 때문에 나는 잘 작동하는 EWS 라이브러리의 FindItems(folderId, filter, view)
방법을 사용합니다. 필터의 경우 사용자의 이메일 주소를 사용하고 있는데 이는 좋은 키입니다 ... 결과가 돌아 오면 이 이미 존재하며 그 대신에 업데이트를 수행해야한다는 것을 의미합니다. 몹시 떠들어 대다. 여기까지 예상대로 작동합니다 ...
(사실 전자 메일 주소) 연락처가 이미 GAL (전체 주소 목록)에있는 경우 문제가 발생합니다. 이 경우 이라는 연락처가있는 경우에도 FindItems
메서드는 결과를 반환하지 않습니다! 교환 서버가 이미 새 연락처가 아닌 GAL에있는 전자 메일 주소를 가진 연락처에 대한 링크를 만드는 것으로 가정합니다 (가정). 그리고이 경우 FindItems
메서드가이 경우 아무 것도 반환하지 않는 이유를 설명 할 수 있습니다. 이상한 점은 다른 속성 (예 : 성 및 성의 조합)을 필터링하는 경우 작동한다는 것입니다.
현재는 무슨 일 이미 GAL에 존재하는 각 연락를 들어, 대신 업데이 트의 생성합니다 (FindItems
방법은 아무 것도 반환하지 않기 때문에) 수행되고 있다는 것입니다 결과, 같은 연락처로 X 번 생성됩니다 (beeing을 한 번 생성 한 다음 X-1 번을 업데이트하는 대신).
질문 : 물론 이 GAL에 이미있을 때 교환 폴더에 있는지 여부는 어떻게 알 수 있습니까?
현재 코드 :
ItemView view = new ItemView(5)
{
PropertySet = new PropertySet(BasePropertySet.FirstClassProperties)
};
SearchFilter f = new SearchFilter.IsEqualTo(ContactSchema.EmailAddress1, email);
FindItemsResults<Item> contactItems = _service.FindItems(folderId, f, view);
int resultCount = contactItems.Count(); // Always 0 if GAL, otherwise it works