関連付けられた共有サービスプロバイダーの名前を取得しますか?
-
09-06-2019 - |
質問
特定の Sharepoint Web アプリケーションに関連付けられている共有サービス プロバイダーの名前をプログラムで取得するにはどうすればよいですか?
次のことを行う必要があるカスタム ソリューションがあります。
- デプロイ先のすべての Web アプリケーションを列挙します。
- 各 Web アプリケーションが関連付けられている共有サービス プロバイダーを把握する
- SSP にインストールされているビジネス データ カタログにアクセスしてデータを取得します
- これらの Web アプリケーション内のすべてのサイト コレクションを列挙します。
- データに従ってサイト コレクション内でさまざまなタスクを実行します。
1、3、4、5はわかったのですが、2がちょっと面倒です。SSP 名をどこにもハードコーディングすることを避け、ファーム管理者が構成ファイルを手動で編集する必要をなくしたいと考えています。必要な情報はすべて Sharepoint 構成データベースにあり、オブジェクト モデルを介してそれにアクセスする方法を知る必要があるだけです。
解決
残念ながら、私が知る限り、これを実行できるサポートされた方法はありません。関連するクラスは、Microsoft.Office.Server DLL の Microsoft.Office.Server.Administration 名前空間の SharedResourceProvider です。内部的にマークされているため、反射前になります。
SharedResourceProvider sharedResourceProvider = ServerContext.GetContext(SPContext.Current.Site).SharedResourceProvider;
string sspName = sharedResourceProvider.Name;
反省後:
ServerContext sc = ServerContext.GetContext(SPContext.Current.Site);
PropertyInfo srpProp = sc.GetType().GetProperty(
"SharedResourceProvider", BindingFlags.NonPublic | BindingFlags.Instance);
object srp = srpProp.GetValue(sc, null);
PropertyInfo srpNameProp = srp.GetType().GetProperty(
"Name", BindingFlags.Public | BindingFlags.Instance);
string sspName = (string)srpNameProp.GetValue(srp, null);
代わりに、構成データベース上に SQL クエリを記述することもできますが、これはお勧めできません。
所属していません StackOverflow