Часто задаваемые вопросы. Декларативное решение Outlook

Дата последнего изменения: 16 апреля 2010 г.

Применимо к: SharePoint Server 2010

В этой статье
В сценарии для моего декларативного решения все данные предоставляются только для чтения, поэтому операции создания, обновления и удаления не нужны. Однако внешний тип контента их поддерживает. Можно ли их удалить из модели подключения к бизнес-данным?
Как обновить кэш в действии кода?
Какие существуют допустимые форматы значков для разных расположений? Какие форматы файлов и размеры можно использовать?
Как задать загрузку пользовательского представления только для моего типа задачи? По умолчанию она, кажется, заменяет стандартное представление.
Можно ли полностью заменить форму Outlook по умолчанию формой InfoPath?
Можно ли связать код с лентой в декларативном решении Outlook?
Можно ли изменять издателя моего решения?
Как может пользовательский компонент внешних данных в макете взаимодействовать с другими компонентами в том же макете в декларативном решении Outlook?

В этом разделе даются ответы на часто задаваемые вопросы о промежуточных декларативных решениях Outlook.

В сценарии для моего декларативного решения все данные предоставляются только для чтения, поэтому операции создания, обновления и удаления не нужны. Однако внешний тип контента их поддерживает. Можно ли их удалить из модели подключения к бизнес-данным?

Да, их можно удалить из модели подключения к бизнес-данным. Кроме того, для повышения удобства работы пользователей папку 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.

  • Значок уровня папки: может иметь формат PNG, JPG, BMP или ICO. Должен иметь размер 16x16 пикселей.

  • Значок уровня элемента: может иметь только формат ICO, допускается любой размер.

  • Кнопка ленты: может иметь формат PNG, JPG, BMP или ICO. Допускается любой размер.

Как задать загрузку пользовательского представления только для моего типа задачи? По умолчанию она, кажется, заменяет стандартное представление.

Укажите имя пользовательского представления в файле OIR.config file. В следующем примере показывается, как это можно сделать.

<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.
            }
        }
    }
    
ПримечаниеПримечание

При использовании пользовательского диспетчера ленты решение может реагировать на дополнительные события, связанные с лентой.

Можно ли изменять издателя моего решения?

Имя Издатель берется из вашего сертификата. Решение должно быть подписано сертификатом, выданным доверенным центром сертификации. В силу ограниченного числа средств разработки для Office в Visual Studio (см. статью базы знаний 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;
        }
    }
}