[方法] XML からアプリケーション定義をインポートする

ビジネス データ カタログで、Model および Resource という 2 種類の XML アプリケーション定義ファイルがサポートされるようになりました。Model アプリケーション定義ファイルには、システムの基本 XML メタデータが含まれます。Resource ファイルを使用すると、ローカライズされた名前、プロパティ、および権限のみを、任意の組み合わせでインポートまたはエクスポートできます。以下に Resource ファイルの種類を示します。

  • LocalizedNames   特定のロケールにおけるメタデータ オブジェクトのローカライズされた名前が含まれています。このファイルをインポートすると、それらの情報はメタデータ リポジトリ内の既存のメタデータと結合されます。そのロケール用にローカライズされた名前が既に存在する場合、LocalizedNames ファイルの情報で上書きされます。

  • Properties   メタデータ オブジェクトのプロパティが含まれています。このファイルをインポートすると、それらの情報はメタデータ リポジトリ内の既存のメタデータと結合されます。プロパティが既に存在する場合、プロパティの値は Properties ファイルの情報で上書きされます。

  • Permissions   メタデータ オブジェクトのアクセス制御リスト (ACL) が含まれています。このファイルをインポートすると、それらの情報はメタデータ リポジトリ内の既存のメタデータと結合されます。ただし、オブジェクトのアクセス制御エントリ (ACE) が既に存在する場合、ACE の値は Permissions ファイルの情報で上書きされます。たとえば、既存のアプリケーション定義に、エンティティ A へのアクセスを持つユーザー A のみが含まれている場合、エンティティ A へのアクセスを持つユーザー B のみを含む Permissions ファイルをインポートすると、エンティティ A の古い ACL は削除され、ユーザー B の新しい ACL が作成されます。

アプリケーションの Model ファイルをインポートすると、そのアプリケーションの既存のメタデータはビジネス データ カタログによって上書きされます。ただし、ローカライズされた名前、プロパティ、または権限を含む Resource ファイルをインポートすると、ビジネス データ カタログは結合操作を実行します。Resource ファイルの内容が単純に、そのアプリケーションのために既に存在するメタデータと結合されます。

この動作は、一定の状況で非常に便利です。この点について説明するため、複雑な ERP システムのアプリケーション定義ファイルを既にインポートしたとします。ここで、以下の 3 つの状況について考えてみましょう。

  • バックエンドの接続情報に変更があります。接続情報を更新するため、LobSystemInstance オブジェクトで変更されたプロパティだけを含む簡単な Properties Resource ファイルを作成し、それをインポートすることができます。ビジネス データ カタログにより、この情報が既存の LobSystemInstance プロパティと結合されるので、プロパティが既に存在する場合、プロパティの値は Resource ファイルの新しい情報で上書きされます。

  • 会社が新しい地域に進出したため、新しくローカライズされた言語をアプリケーションでサポートする必要が生じました。 この場合、新しい言語のためにローカライズされた名前だけを含む LocalizedNames Resource ファイルを作成し、そのファイルをインポートすることができます。この情報は次に、ビジネス データ カタログによって既存のメタデータと結合されるので、この課題は簡単に解決されます。

  • チェーン店の環境で、あるアプリケーションを使用する必要があります。この場合、チェーン店側で、チェーン店に属するユーザーの ACL だけを含む Permissions Resource ファイルを作成し、そのファイルをインポートすることができます。既存の ACL はビジネス データ カタログによって新しい情報で上書きされるので、この課題は解決されます。

新しい Resource ファイルをインポートすることは、Model ファイルを更新することより適切な方法です。ローカライズした名前やプロパティを追加して Model ファイルを更新すると、ビジネス データ カタログは既存のメタデータを削除し、新しい情報で上書きします。この動作は望ましくない場合もあり、テストなどの作業が追加で必要になる可能性があります。たとえば、Model ファイルを更新すると、すべてのメタデータ オブジェクトとそれらの ID がビジネス データ カタログによって削除されるため、検索のためにメタデータ オブジェクトのフル クロールが必要になります。

重要

1 つのアプリケーション定義ファイルには、Model ファイルと Resource ファイルを任意に組み合わせて含めることができます。組み合わせての使用は、SharePoint サーバーの全体管理ではインポートとエクスポートのユーザー インターフェイス (UI) で、オブジェクト モデルではビット演算子の OR (|) を使用してサポートされています。

Administration オブジェクト モデルを使用して、XML ファイルからメタデータをインポートできます。これにより、アプリケーション定義のビジネス データ カタログへの追加を自動化できます。次のコード例は、LobSystem オブジェクトの ImportPackage メソッドを使用してメタデータをインポートする方法を示しています。

注意

ビット単位の OR 演算子 (|) を使用して、エクスポートとインポートに対して複数の PackageContents 値を渡すことができます。

次のコード例は、LOBSystem オブジェクトの ImportPackage メソッドを使用してシステムのメタデータをインポートする方法を示しています。

Prerequisites

  • 共有サービス プロバイダが既に作成されていることを確認します。

  • MSDN ダウンロード センターから AdventureWorks2000.XML ファイルを入手します。

  • XML ファイル内の SQL Server の名前と、コード例の XML ファイルの場所を、実際の値で置き換えます。

  • コード内の定数値 EnterYourSSPNameHere を、使用する共有リソース プロバイダの名前で置き換えます。

  • Project References

このサンプルを実行する前に、コンソール アプリケーション コード プロジェクトに以下のプロジェクト参照を追加します。

  • Microsoft.SharePoint

  • Microsoft.SharePoint.Portal

  • Microsoft.Office.Server

  • System.XML

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.Office.Server.ApplicationRegistry.Administration;
using Microsoft.Office.Server.ApplicationRegistry.Infrastructure;
using WSSAdmin = Microsoft.SharePoint.Administration;
using OSSAdmin = Microsoft.Office.Server.Administration;

namespace Microsoft.SDK.SharePointServer.Samples
{
    class GetStartedAndCreateSystem
    {
        const string yourSSPName ="EnterYourSSPNameHere";
        const string XMLFileLocation = "EnterXMLFileLocationHere";
        
        static void Main(string[] args)
        {
            SetupBDC();
            ImportLobSystemFromXML();
            Console.WriteLine("Press any key to exit...");
            Console.Read();
        }
        static void SetupBDC()
        {
            SqlSessionProvider.Instance().SetSharedResourceProviderToUse(yourSSPName);
        }
        public static void ImportLobSystemFromXML()
        {
            if (File.Exists(XMLFileLocation))
            {
                FileStream xmlStream = new FileStream(XMLFileLocation, FileMode.Open, FileAccess.Read);
                ParseContext parseContext = new ParseContext();
                ApplicationRegistry.Instance.ImportPackage(xmlStream, parseContext, PackageContents.Model | PackageContents.Properties);
            }
            else
            {
                throw new ArgumentException(string.Format("Specified path is invalid [{0}]", XMLFileLocation));
            }
        }
      }
}

See Also

概念

ビジネス データ カタログ : メタデータ モデル