よく寄せられる質問: 宣言型 Outlook ソリューション

最終更新日: 2010年4月16日

適用対象: SharePoint Server 2010

この記事の内容
宣言型ソリューションのためのシナリオがあるのですが、読み取り専用なので、作成、更新、および削除操作は意味がありません。しかし、外部コンテンツ タイプはこれらの操作をサポートしています。BDC モデルからこれらの操作を削除することができますか。
コード アクションでキャッシュを更新するにはどうするといいですか。
さまざまな場所で問題なく使用できるアイコンの形式はどのようなものですか。適切なファイル形式とサイズはなんですか。
ユーザー設定のビューで、自分のタスクの種類だけ読み込ませるようにするにはどうするといいですか。既定では、既定のビューにリセットされてしまいます。
InfoPath フォームで既定の Outlook フォームを完全に置換することができますか。
宣言型 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>

InfoPath フォームで既定の Outlook フォームを完全に置換することができますか。

はい、既定の Outlook フォームを置換するために、Microsoft InfoPath 2010 フォームあるいは外部データ パーツのレイアウトを使用するように DeclarativeFormRegion + Layout + Action を定義することができます。

InfoPath フォームで既定の Outlook フォームを置換する

  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.
            }
        }
    }
    

注意

カスタム リボン マネージャーを使用する場合、ソリューションは、リボンに関連するその他のイベントをリッスンすることができます。

ソリューションの発行元を更新することができますか。

Publisher の名前は証明書に基づいています。ソリューションは、信頼できる証明機関によって発行された証明書により署名されている必要があります。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;
        }
    }
}