EWS: приглашение для общего доступа к календарю и расширенные свойства - PullRequest
3 голосов
/ 31 марта 2012

Хорошо, пока лучшая информация, которую я получил по этой теме, была в этой теме: EWS-API-Create-Calendar-and-Share-with-reviewer-permissions .Я пытался задать этот вопрос в этой ветке, но на самом деле опубликовал его как ответ, поэтому он был удален администраторами (мой плохой!)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я сисадмин по профессии и лунный свет в разработке ... такпрошу прощения за любое неправильное использование терминологии или замешательство в словах.

Кроме того, я работаю в C # здесь.

Я прочитал спецификации протокола сообщений от Microsoft и понимаю, что некоторые расширенные свойства требуютчтобы создать элемент сообщения для правильного создания объекта приглашения к совместному использованию, как я понял из поста, упомянутого выше, я могу создать объект сообщения с расширенными свойствами (точнее, SetExtendedProperty(extprop,value)).Я понимаю, что должен вручную создать расширенные свойства, которые я устанавливаю, используя new ExtendedProperty() и заполнить правильный родительский GUID, HexID и Datatype для каждого свойства.Из того, что я могу понять, это более или менее "обходной путь", поскольку в API нет встроенных возможностей управления объектами совместного использования ...

Но я столкнулся с проблемой и нуждаюсь в некотором пояснении...

Я хотел вручную создать приглашение на обмен (через клиента, «пользовательский» способ), а затем прикрепить его к сообщению в поле «Отправленные» пользователя, отправившего приглашение.Я хотел перечислить все возможные свойства относительно того, что мне нужно использовать для создания подобного объекта, чтобы я мог использовать его в качестве шаблона и сравнивать свойства своих объектов с исходным приглашением.Я могу получить сообщение отлично и найти много свойств, но не какие-либо "специальные".Единственное, что я могу найти, что отличает элемент сообщения, это тот факт, что это IPM.Sharing Класс элемента и что он имеет вложение sharing_metadata.xml.

Но я прав, предполагая, что теперь мы можем создать общий доступприглашения через API с использованием расширенных свойств, это не обязательно означает, что мы можем прочитать эти свойства через API ??

Все, что я пытался перечислить расширенные свойства, похоже, не работает и всегда вместо этого ничего не возвращаетмассива расширенных свойств.Возможно, я делаю это неправильно, но я хотел задать вопрос, прежде чем тратить бесчисленное количество часов, пытаясь достичь чего-то невозможного.

Так что, если я не могу правильно перечислить расширенные свойства, есть ливозможность использовать что-то вроде ExFolders или MFCMAPI или что-то подобное для получения этих свойств ???

Есть какие-нибудь мысли / предложения / критические замечания?

Спасибо!

ОБНОВЛЕНИЕ:

Вот функция, с которой я играю, чтобы попытаться создать приглашение на совместное использование для папки календаря пользователя ... Я прокомментировал, где я застрял и что я не полностью оборачиваю:

    public void CreateCalendarSharingRequest(string folderID, string owner, string sharedToUser)
    {
        // LOAD OUR CUSTOM PROPERTIES
        Guid PropertySetSharing = new Guid("{00062040-0000-0000-C000-000000000046}");
        Guid PropertySetInternetHeaders = new Guid("{00020386-0000-0000-C000-000000000046}");

        // Sharing Properties
        ExtendedPropertyDefinition PidLidSharingProviderGuid = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A01, MapiPropertyType.CLSID);
        ExtendedPropertyDefinition PidLidSharingProvidorName = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A02, MapiPropertyType.String);
        ExtendedPropertyDefinition PidLidSharingFlavor = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A18, MapiPropertyType.Integer);
        ExtendedPropertyDefinition PidLidSharingRemoteStoreUid = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A48, MapiPropertyType.String);
        ExtendedPropertyDefinition PidLidSharingRemoteUid = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A06, MapiPropertyType.String);
        ExtendedPropertyDefinition PidTagMessageClass = new ExtendedPropertyDefinition(0x001A, MapiPropertyType.String);
        ExtendedPropertyDefinition PidTagNormalizedSubject = new ExtendedPropertyDefinition(0x0E1D, MapiPropertyType.String);
        ExtendedPropertyDefinition PidTagSubjectPrefix = new ExtendedPropertyDefinition(0x003D, MapiPropertyType.String);
        ExtendedPropertyDefinition PidLidSharingCapabilities = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A17, MapiPropertyType.Integer);
        ExtendedPropertyDefinition PidLidSharingInitiatorEntryId = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A09, MapiPropertyType.Binary);
        ExtendedPropertyDefinition PidLidSharingConfigurationUrl = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A24, MapiPropertyType.String);
        ExtendedPropertyDefinition PidLidSharingInitiatorName = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A07, MapiPropertyType.String);
        ExtendedPropertyDefinition PidLidSharingInitiatorSMTP = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A08, MapiPropertyType.String);
        ExtendedPropertyDefinition PidLidSharingLocalType = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A14, MapiPropertyType.String);
        ExtendedPropertyDefinition PidLidSharingRemoteType = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A1D, MapiPropertyType.String);
        ExtendedPropertyDefinition PidLidSharingRemoteName = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A05, MapiPropertyType.String);

        // Internet Header Properties
        ExtendedPropertyDefinition PidNameContentClass = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "Content-Class", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingCapabilities = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Capabilities", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingConfigUrl = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Config-Url", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingFlavor = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Flavor", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingLocalType = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Local-Type", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingRemoteName = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Remote-Name", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingRemoteStoreUid = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Remote-Store-Uid", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingRemoteType = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Remote-Type", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingRemoteUid = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Remote-Uid", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingProviderGuid = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Provider-Guid", MapiPropertyType.String);
        ExtendedPropertyDefinition PidNameXSharingProviderName = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Provider-Name", MapiPropertyType.String);

          // Bind to the web services and currently selected folder
        // Get the current list of delegates for this folder
        ExchangeService service = GetExchangeService();

        // Create a new message
        EmailMessage invitationRequest = new EmailMessage(service);
        invitationRequest.Subject = "I'd like to share my calendar with you";
        invitationRequest.Body = "Send by Exchange Administrator on behalf of user";
        invitationRequest.From = GetSMTPAddress(owner);
        invitationRequest.ItemClass = "IPM.Sharing";
        invitationRequest.SetExtendedProperty(PidNameContentClass, "Sharing");
        invitationRequest.SetExtendedProperty(PidTagMessageClass, "IPM.Sharing");
        invitationRequest.SetExtendedProperty(PidLidSharingFlavor,0x20310); /* Indicates Invitation for a special folder */
        invitationRequest.SetExtendedProperty(PidNameXSharingFlavor, "20310"); /* Text representation of SharingFlavor value */
        invitationRequest.SetExtendedProperty(PidLidSharingProviderGuid, PropertySetSharing.ToString());
        invitationRequest.SetExtendedProperty(PidNameXSharingProviderGuid, PropertySetSharing.ToString());
        invitationRequest.SetExtendedProperty(PidLidSharingCapabilities, 0x40290); /* value for Special Folders */
        invitationRequest.SetExtendedProperty(PidNameXSharingCapabilities, "40290"); /* Test representation of SharingCapabilities value */

        // THIS IS WHERE IM STUCK - I understand how to set some of the properties like above, but then
        // it starts needing the entryID properties for the folder being shared, etc...and I'm not entirely
        // sure which properties I have to set and how many can/will be autopopulated by the transport provider
        // All i wanna do is send an invite message for sharing the calendar folder from one user to another!

        // Add recipient info

        //invitationRequest.ToRecipients.Add(sharedToUser);
        //invitationRequest.SendAndSaveCopy();

    }

1 Ответ

2 голосов
/ 15 апреля 2012

Ну, я понял это ... но это было нелегко.Если вас интересует, как мне удалось получить приглашение на обмен, отправленное через Exchange 2010 EWS API 1.2, вы можете прочитать об этом здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...