Веб-надстройка для Outlook Как сохранить информацию в свойствах клиента в EWS - PullRequest
0 голосов
/ 30 октября 2018

Используя API Office.js, мы можем легко сохранить дополнительную информацию в объект CustomProperties через customProps.set. Информация специфична для почтового отправления.

Это документ Сохранить в пользовательских свойствах с помощью office.js

Можно ли добиться того же с помощью EWS API?

Я пытался Создание пользовательских расширенных свойств с помощью EWS Managed API 2.0 Но какую бы информацию не сохранить с помощью этого метода, я не могу получить ее с помощью customProps.get.

из Office.js.

Случай пользователя заключается в том, что моя надстройка сохранит тело письма и его вложения в двоичном виде во внешнем приложении. По окончании клиентская сторона будет использовать customProps.set Office.js для сохранения информации об успешном выполнении на сервере, и если вы в следующий раз нажмете на тот же адрес электронной почты, приложение будет использовать customProps.get, чтобы показать, что электронное письмо было сохранено. Но если во время длительного процесса сохранения (может быть, сохранить большое вложение, пользователь закроет панель задач перед выполнением customProps.set, customProps.set просто не сработает, поскольку среда браузера (панель задач) закрыта. Поэтому я необходимо реализовать это с помощью API EWS.

Мой код C #:

Guid PS_PUBLIC_STRINGS = new Guid("a8e14732-37cf-4a46-b69f-1111111111");//add-in manifest id

        ExtendedPropertyDefinition extendedPropertyDefinition =
        new ExtendedPropertyDefinition(PS_PUBLIC_STRINGS, "Expiration Date", MapiPropertyType.String);
        Email.SetExtendedProperty(extendedPropertyDefinition, DateTime.Now.AddDays(2).ToString());
        Email.Update(ConflictResolutionMode.AlwaysOverwrite);//'The requested web method is unavailable to this caller or application.'

JS код:

Office.context.mailbox.item.loadCustomPropertiesAsync(function (asyncResult) {
                var customProps = asyncResult.value;
                console.log(customProps);
                console.log(customProps.get('Expiration Date')); //undefined
})

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Я получил этот код для сохранения информации в расширенных пользовательских свойствах, которые можно прочитать с помощью Office.js.

ExchangeService service = new ExchangeService();

service.Credentials = new WebCredentials("{email}", "{password}");

Guid PS_PUBLIC_STRINGS = new Guid("00020329-0000-0000-C000-000000000046"); //PS_PUBLIC_STRINGS' GUID
ExtendedPropertyDefinition extendedPropertyDefinition =
            new ExtendedPropertyDefinition(PS_PUBLIC_STRINGS, "cecp-{add-in manifest id}", MapiPropertyType.String);
Email.SetExtendedProperty(extendedPropertyDefinition, {JSON});

Email.Update(ConflictResolutionMode.AlwaysOverwrite);

Это работает. Обратите внимание, что для выполнения этого действия «записи» мне нужно изменить аутентификацию с OAUTH на basic (электронная почта + пароль). И я не думаю, что это надежный способ, и его не следует рекомендовать для производственной среды. Почему не рекомендуется?

0 голосов
/ 30 октября 2018

Да, вы можете сделать это, но свойства этого типа следуют определенному формату, потому что они зависят от приложения. Это задокументировано в https://msdn.microsoft.com/en-us/library/hh968549(v=exchg.80).aspx. Это именованное свойство в наборе свойств PS_PUBLIC_STRING типа String. Имя свойства свойства имеет префикс cecp, а остальная часть имени свойства - это GUID ваших почтовых приложений, как определено в манифесте приложения. Лучший способ убедиться в этом - посмотреть на элемент, в котором вы установили свойство в редакторе MAPI, например OutlookSpy в MFCMapi, где вы можете увидеть свойство (легко идентифицировать с префиксом Cecp) и формат значения (JSON)

Пример редактирования кода

        ExtendedPropertyDefinition extendedPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "cecp-a8e14732-37cf-4a46-b69f-1111111111", MapiPropertyType.String);
        Email.SetExtendedProperty(extendedPropertyDefinition, "{\"Expiration Date\":\"blah\"}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...