Outlook Web Add-in: наличие двух DetectedEntity не работает для контекстного обнаружения - PullRequest
0 голосов
/ 31 октября 2018

В одном и том же веб-модуле Outlook, я пытаюсь добавить два разных контекстных обнаружения с разными регулярными выражениями. (каждое совпадение с правилами RegEx будет иметь свое собственное местоположение.)

Однако это не работает. Текущее поведение - это первый DetectedEntity, который активирован. Однако другие нет.

Мне было интересно, если это ограничение контекстного обнаружения. Если нет, то может ли кто-нибудь предоставить какой-либо пример, чтобы иметь более 1 DetectedEntity?

Вот мой манифест:

....
<Hosts>
    <Host xsi:type="MailHost">
      <DesktopFormFactor>
        <!-- DetectedEntity -->
        <ExtensionPoint xsi:type="DetectedEntity">
          <Label resid="ContextLabel1" />
          <SourceLocation resid="DetectedURL1" />
          <Rule xsi:type="RuleCollection" Mode="And">
            <Rule xsi:type="ItemIs" ItemType="Message" />
            <Rule xsi:type="ItemHasRegularExpressionMatch" RegExName="GUID" RegExValue="[0-9A-Fa-f]{8}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{12}" PropertyName="BodyAsPlaintext" />
          </Rule>
        </ExtensionPoint>
        <ExtensionPoint xsi:type="DetectedEntity">
          <Label resid="ContextLabel2" />
          <SourceLocation resid="DetectedURL2" />
          <Rule xsi:type="RuleCollection" Mode="And">
            <Rule xsi:type="ItemIs" ItemType="Message" />
            <Rule xsi:type="ItemHasRegularExpressionMatch" RegExName="AnotherRegEx" RegExValue="\(Test:.*\)" PropertyName="BodyAsPlaintext" />
          </Rule>
        </ExtensionPoint>
      </DesktopFormFactor>
    </Host>
  </Hosts>
....

1 Ответ

0 голосов
/ 03 ноября 2018

Это ограничение в контекстной активации. Есть два шага, которые я бы порекомендовал для обхода.

Во-первых, два правила А можно объединить в один обнаруженный объект с помощью правила ИЛИ:

<Rule xsi:type="RuleCollection" Mode="Or">
  <Rule xsi:type="RuleCollection" Mode="And">
    <!-- Additional rules -->
  </Rule>
  <Rule xsi:type="RuleCollection" Mode="And">
    <!-- Additional rules -->
  </Rule>
</Rule>

Во-вторых, хотя оба регулярных выражения будут запускать один и тот же URL-адрес исходного местоположения, в JavaScript можно определить, какое выражение выбрал пользователь для запуска надстройки с помощью item.getSelectedRegExMatches API . Этот API был представлен рядом с точкой расширения DetectedEntity в наборе требований 1.6.

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

{
  'AnotherRegEx': ['Test: match'],
  'GUID': []
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...