Outlook Web 插件:有两个 DetectedEntity 不适用于上下文检测
Outlook Web Add-in: Having two DetectedEntity doesn't work for contextual detection
在同一个 outlook web 插件中,我试图添加两个具有不同正则表达式的不同上下文检测。 (每个 RegEx 规则匹配项都有自己的源位置。)
然而,它不起作用。
当前行为是第一个 DetectedEntity 被激活。然而,其他人
不是。
我想知道这是否是上下文检测的局限性。
如果没有,有人可以提供任何示例来检测到超过 1 个实体吗?
这是我的清单:
....
<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>
....
这是上下文激活的限制。我建议采取两个步骤来解决这个问题。
首先,可以使用 Or 规则将两个 And 规则组合成一个检测到的实体:
<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 中,可以通过 [=12] 判断用户选择哪个表达式来启动加载项=].此 API 与要求集 1.6 中的 DetectedEntity 扩展点一起引入。
getSelectedRegExMatches returns 键和值以指示选择了哪个表达式和匹配项。如果它们重叠,则可能会返回多个匹配项。文档中有一个示例,但按照您的示例,返回的值将如下所示:
{
'AnotherRegEx': ['Test: match'],
'GUID': []
}
在同一个 outlook web 插件中,我试图添加两个具有不同正则表达式的不同上下文检测。 (每个 RegEx 规则匹配项都有自己的源位置。)
然而,它不起作用。 当前行为是第一个 DetectedEntity 被激活。然而,其他人 不是。
我想知道这是否是上下文检测的局限性。 如果没有,有人可以提供任何示例来检测到超过 1 个实体吗?
这是我的清单:
....
<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>
....
这是上下文激活的限制。我建议采取两个步骤来解决这个问题。
首先,可以使用 Or 规则将两个 And 规则组合成一个检测到的实体:
<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 中,可以通过 [=12] 判断用户选择哪个表达式来启动加载项=].此 API 与要求集 1.6 中的 DetectedEntity 扩展点一起引入。
getSelectedRegExMatches returns 键和值以指示选择了哪个表达式和匹配项。如果它们重叠,则可能会返回多个匹配项。文档中有一个示例,但按照您的示例,返回的值将如下所示:
{
'AnotherRegEx': ['Test: match'],
'GUID': []
}