[方法] 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));
}
}
}
}