常见问题:声明性 Outlook 解决方案

上次修改时间: 2010年4月16日

适用范围: SharePoint Server 2010

本文内容
我拥有一个针对声明性解决方案的只读方案,并且创建、更新和删除操作不起作用。但外部内容类型确实支持这些操作。是否可以从 BDC 模型中删除它们?
如何刷新代码操作中的缓存?
各个位置可接受的图标格式有哪些?
如何获取仅为我的任务类型加载的自定义视图?默认情况下,该视图可能会重置为默认视图。
是否能将默认 Outlook 表单完全替换为 InfoPath 表单?
是否能在声明性 Outlook 解决方案中将代码与我的功能区关联?
是否能更新我的解决方案的发布者?
在声明性 Outlook 解决方案中,布局上的自定义外部数据部件如何与同一布局上的其他部件进行通信?

本主题对有关中间声明性 Outlook 解决方案的一些常见问题进行了解答。

我拥有一个针对声明性解决方案的只读方案,并且创建、更新和删除操作不起作用。但外部内容类型确实支持这些操作。是否可以从 BDC 模型中删除它们?

是的,您可以从 BDC 模型中删除它们。此外,您还可以将 Microsoft Outlook 2010 文件夹设为只读,以获得更好的用户体验。以下是一个 OIR.config 文件示例,它说明如何将文件夹设为只读。

<OutlookFolder StoreType="Solution" Name="GetBug" FolderDisplayName="Bugs Under PR" NativeType="FolderTasks"  SubscriptionName="816979bb-32c7-489b-861a-3f4b61ec2c9b" FolderName="816979bb-32c7-489b-861a-3f4b61ec2c9b" CanCreate="false" CanUpdate=" false " CanDelete="false">

如何刷新代码操作中的缓存?

有关如何根据特定订阅触发缓存刷新的信息,请参阅以下代码示例:代码段:以编程方式请求客户端上的缓存刷新

各个位置可接受的图标格式有哪些?

Outlook 功能区扩展性架构将指明图标文件格式和所需大小的要求。

  • **文件夹级别图标:**可以采用 .jpg, .bmp, .ico 或 .png 文件格式。必须是 16x16 像素。

  • **项目级别图标:**只能采用 .ico 文件格式,但可以为任意大小。

  • **功能区按钮:**可以采用 .png, .jpg, .bmp 或 .ico 文件格式。可以为任意大小。

如何获取仅为我的任务类型加载的自定义视图?默认情况下,该视图可能会重置为默认视图。

在 OIR.config 文件中指定自定义视图的名称。以下示例演示如何执行此操作。

<OutlookFolder Name="ContosoCustomers" FolderDisplayName="Contoso Customers" ……….>
      <Views<FolderViewDefinition Name="ContosoCustomerViewName" ViewName="ContosoCustomerView" ViewType="TableView" IsDefault="true" ViewFileName="ContosoCustomerView.ovd" />
  </Views>

是否能将默认 Outlook 表单完全替换为 InfoPath 表单?

是的,您可以定义 DeclarativeFormRegion + 布局 + 操作,以将布局与 Microsoft InfoPath 2010 表单或外部数据部件结合使用来替换默认 Outlook 表单。

将默认的 Outlook 表单替换为 InfoPath 表单

  1. 定义 DeclarativeFormRegion。

    <FormRegions i:type="mx:DeclarativeFormRegions" >
      <mx:DeclarativeFormRegion  Type="Replacement" InternalName="CustomerReplaceFormRegion" ShowInspectorComposeMode="true" Name="CustomReplaceFormRegion" Title="MyCustomReplaceFormRegion"/>
    </FormRegions>
    
  2. 定义一个操作。

    <CodeMethodAction MethodType="ShowRegionLayout" Name="ShowRegionLayoutAction">
      <Parameters>
        <ConstantParameter Name="Param1" ValueType="System.String" Value="IPLayout"/>
        <ConstantParameter Name="Param2" ValueType="System.String" Value=" ArtistReplaceFormRegion" />
      </Parameters>
    
  3. 在检查器打开时触发该操作。

      <mx:ContextEventHandlers>
        <mx:ContextActivated ActionName="ShowRegionLayoutAction"/>
      </mx:ContextEventHandlers>
    
  4. 定义一个布局。

      <Layouts xmlns="https://schemas.microsoft.com/office/2009/05/BusinessApplications/Manifest/DeclarativeExtensions">
        <Layout Name="IPLayout" LayoutFileName="IPLayout">
        </Layout>
      </Layouts>
    
  5. 创建布局文件以定义布局中显示的内容。

是否能在声明性 Outlook 解决方案中将代码与我的功能区关联?

是的,您可以这样做。但在声明性解决方案中,只能将代码链接到 OnClick 事件,当您单击功能区按钮时会触发该事件。

将代码与 OnClick 事件关联

  1. 定义功能区,如以下示例 Ribbon.xml 文件中所示。

    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad" loadImage="GetImage">
      <ribbon>
        <tabs>
          <tab id="tabIssueID" label="Team Review" getVisible="GetVisible" tag="Solution">
            <group id="IssueGroupID" label="Issue Actions" getVisible="GetVisible" tag="Context[TeamIssues.IssueGroupID]">
              <button id="AllIssueButton"
                          size="large"
                          label="All Issues"
                          onAction="OnAction"
                          image="Issue.ico"
                        getEnabled ="GetEnabled"
                        screentip="Display All Existing Issues in Task Pane"
                        tag="Action[TeamIssues.ListIssueAction]"
                      />
    
  2. 在 Oir.config 文件中定义操作。

    <mx:CodeMethodAction MethodType="Custom" Name ="OpenBugRibbonAction" MethodName="OpenBugMethod" QualifiedTypeName="CustomCodeActionNameSpace.CustomCodeActionClassName, CustomCodeActionAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c6b236b1e85d97a">
      <mx:Parameters>
        <mx:ExpressionParameter Name="p1" EntityViewInstanceReference="PrimaryEntityNameInContext" Expression="BugID"/>
      </mx:Parameters>
    </mx:CodeMethodAction>
    
  3. 实现自定义代码操作。

    using System;
    using System.Text;
    using Microsoft.Office.BusinessApplications.Runtime.OIM;
     
    namespace CustomCodeActionNameSpace
    {
       public class CustomCodeActionCalssName
       {
            public void CustomCodeActionMethod(params object[] parameters)
            {
                //BCS Client Runtime passes in the Current Entity Instance as First parameter by default.
                 IEntityInstance iei = parameters[0] as IEntityInstance;
     
                // Other parameters are passed in based on the configuration within oir.config.
                // Process the Action based on parameters.
            }
        }
    }
    

备注

如果使用自定义功能区管理器,则解决方案将能侦听与功能区相关的其他事件。

是否能更新我的解决方案的发布者?

发布者名称由您的证书提供。必须使用由受信任的证书颁发机构颁发的证书签署解决方案。由于适用于 Visual Studio 的 Office 开发工具的限制(请参阅 KB970682(该链接可能指向英文页面)),证书颁发机构的证书必须位于客户端的受信任的根证书颁发机构证书存储区内。

在声明性 Outlook 解决方案中,布局上的自定义外部数据部件如何与同一布局上的其他部件进行通信?

调用 this.Parent.Parent 获取外部数据部件的布局,并搜索和比较该布局中的所有子级以查找所需子级。以下代码段演示如何执行该操作。

WinFormsOBPartBase MyEDP;
ControlCollection allContainersUnderSameLayout = this.Parent.Parent.Controls;
foreach (Control container in allContainersUnderSameLayout)
{
    ControlCollection allEDPsUnderSameContainer = container.Controls;
    foreach (Control edp in allEDPsUnderSameContainer)
    {
        if (edp.Name == "MyEDPName")
        {
            MyEDP = edt as WinFormsOBPartBase;
            break;
        }
    }
}