Функция отправки надстройки Outlook не работает должным образом на рабочем столе - PullRequest
1 голос
/ 05 августа 2020

Я пишу надстройку Office для Outlook. Эта надстройка состоит из области задач, которую можно использовать во время создания встречи (AppointmentOrganizerCommandSurface). Эта область задач содержит форму с некоторыми входами. Когда пользователь отправляет встречу, функция on-send также отправляет (или должна отправлять) запрос к моему API.

Этот поток отлично работает в одной сети Outlook, с посетителями на встрече и информацией в со стороны надстройки вызывается API. Но он не работает со стороны рабочего стола.

Я пробовал с разными версиями, последняя из них - Monthly Enterprise version 2005 (12827.20538), и это просто показывает, что надстройка работает по моему запросу, но ничего не делает else.

Я настроил, как написано , здесь . Нужна ли мне дополнительная настройка? Я что-то упустил?

EDIT: windows - это version 10.0.14393, а build 14393.

На всякий случай, это часть манифеста для рабочего стола:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" xsi:type="MailApp">
  <Id>91b11704-b973-41cf-bd3a-217ad5bafce9</Id>
    <Version>1.0.0.0</Version>
    <ProviderName>Add-In</ProviderName>
    <DefaultLocale>en-US</DefaultLocale>
    <DisplayName DefaultValue="Add-In" />
    <Description DefaultValue="Add-In Sample" />
    <IconUrl DefaultValue="https://localhost:4000/assets/logo-32.png"/>
    <HighResolutionIconUrl DefaultValue="https://localhost:4000/assets/icon_2.png"/>
    <SupportUrl DefaultValue="https://localhost/p" />
    <AppDomains>
      <AppDomain>https://localhost:4000</AppDomain>
    </AppDomains>
  <Hosts>
    <Host Name="Mailbox"/>
  </Hosts>
  <Requirements>
    <Sets>
      <Set Name="Mailbox" MinVersion="1.1"/>
    </Sets>
  </Requirements>
  <FormSettings>
    <Form xsi:type="ItemEdit">
        <DesktopSettings>
          <SourceLocation DefaultValue="https://localhost:4000/taskpane.html" />
        </DesktopSettings>
    </Form>
  </FormSettings>
  <Permissions>ReadWriteItem</Permissions>
  <Rule xsi:type="RuleCollection" Mode="Or">
    <Rule xsi:type="ItemIs" ItemType="Appointment" FormType="Edit"/>
  </Rule>
  <DisableEntityHighlighting>false</DisableEntityHighlighting>
  <VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides" xsi:type="VersionOverridesV1_0">
    <!-- On Send requires VersionOverridesV1_1 -->
    <VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1">
      <Description resid="residAppDescription" />
      <Requirements>
        <bt:Sets DefaultMinVersion="1.3">
          <bt:Set Name="Mailbox" />
        </bt:Sets>
      </Requirements>
      <Hosts>
        <Host xsi:type="MailHost">
          <DesktopFormFactor>
            <!-- The functionfile and function name to call on message send.  -->
            <!-- In this particular case the function validateBody will be called within the JavaScript code referenced in residUILessFunctionFileUrl. -->
            <FunctionFile resid="residUILessFunctionFileUrl" />
            <ExtensionPoint xsi:type="AppointmentOrganizerCommandSurface">
            <OfficeTab id="TabDefault">
              <Group id="msgReadGroup">
                <Label resid="GroupLabel"/>
                <Control xsi:type="Button" id="apptReadOpenPaneButton">
                  <Label resid="TaskpaneButton.Label"/>
                  <Supertip>
                    <Title resid="TaskpaneButton.Label"/>
                    <Description resid="TaskpaneButton.Tooltip"/>
                  </Supertip>
                  <Icon>
                    <bt:Image size="16" resid="Icon.16x16"/>
                    <bt:Image size="32" resid="Icon.32x32"/>
                    <bt:Image size="80" resid="Icon.80x80"/>
                  </Icon>
                  <Action xsi:type="ShowTaskpane">
                    <SourceLocation resid="Taskpane.Url"/>
                  </Action>
                </Control>
              </Group>
            </OfficeTab>
          </ExtensionPoint>
          </DesktopFormFactor>
        </Host>
      </Hosts>
      <Resources>
        <bt:Images>
        <bt:Image id="Icon.16x16" DefaultValue="https://localhost:4000/assets/logo-32.png"/>
        <bt:Image id="Icon.32x32" DefaultValue="https://localhost:4000/assets/logo-32.png"/>
        <bt:Image id="Icon.80x80" DefaultValue="https://localhost:4000/assets/logo-32.png"/>
      </bt:Images>
      <bt:Urls>
        <bt:Url id="residUILessFunctionFileUrl" DefaultValue="https://localhost:4000/taskpane.html"/>
        <bt:Url id="Taskpane.Url" DefaultValue="https://localhost:4000/taskpane.html"/>
      </bt:Urls>
      <bt:ShortStrings>
        <bt:String id="GroupLabel" DefaultValue="Add-in"/>
        <bt:String id="TaskpaneButton.Label" DefaultValue="Open Add-in"/>
      </bt:ShortStrings>
      <bt:LongStrings>
        <bt:String id="TaskpaneButton.Tooltip" DefaultValue="Opens add-in."/>
        <bt:String id="ActionButton.Tooltip" DefaultValue="Open add-in."/>
      </bt:LongStrings>
      </Resources>
    </VersionOverrides>
  </VersionOverrides>
</OfficeApp>

Фрагмент вызываемого нами действия выглядит следующим образом:

const action = async event => {
  const savedHeader = (await Office.context.roamingSettings.get("persistData")) || "Nothing found.";
  const savedId = await Office.context.roamingSettings.get("id");
  const savedInputFields = await Office.context.roamingSettings.get("formData");
  const savedEventUpdate = await Office.context.roamingSettings.get("isUpdate");

  const config = {
    headers: savedHeader.headers
  };

  getCalendarData().then(calendarData => {
    const body = {
      appointment: {
        title: calendarData.subject,
        place: calendarData.location,
        begin_at: calendarData.start,
        end_at: calendarData.end
      },
      visitors: savedInputFields,
      outlook: {
        event_id: savedId
      }
    };

    send(config, body, savedId, savedEventUpdate, event);
  });
};

const send = async (config, body, savedId, savedEventUpdate, event) => {
  if (savedEventUpdate) {
    await updateEvent(savedId, body, config);
  else {
      createAppointment(body, config)
  }
  event.completed();
};

getCalendarData - это просто оболочка для Office.context.mailbox.item извлечения данных из формы.

I ' Мы также пробовали использовать что-нибудь попроще (похожее на примеры из документации):

function action (event) {
  mailboxItem.body.getAsync("html", { asyncContext: event }, function(asyncResult){
    mailboxItem.notificationMessages.addAsync('NoSend', { type: 'errorMessage', message: 'Blocked' });
    asyncResult.asyncContext.completed({ allowEvent: false });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...