クライアントオブジェクトモデルを使用して特定のニュースフィードアクティビティを無効にする
-
16-10-2019 - |
質問
こんにちは、読んでくれてありがとう。私は自分のサイトのボックス外のSharePoint 2010のニュースフィード部分を使用していますが、多くのユーザーに展開する予定です。
私は、現在システム内にある私のサイトをすべて繰り返し、各ユーザーの「アクティビティ」の1つをチェックするコンソールアプリケーションを構築しています。 このリンク (MSDN)次のコードを思いつきます。
Public Class ChangeActivity
'Reference: http://msdn.microsoft.com/en-us/library/ff426883.aspx'
Public Shared Sub ChangeActivityProperties()
Using siteCol As New SPSite((My.Application.CommandLineArgs(0)))
Dim context As SPServiceContext = SPServiceContext.GetContext(siteCol)
Dim profileManager As New UserProfileManager(context)
Dim profile As UserProfile = profileManager.GetUserProfile("THEDOMAIN\username")
Dim activityMan As ActivityManager = New ActivityManager(profile, context)
'Create an instance of a list of ActivityPreferencePerType objects.'
Dim activityPrefsPerType As New List(Of ActivityPreferencePerType)(activityMan.ActivityTypes.Count)
'Get each ActivityType stored in ActivityManager, and for testing purposes, set each ActivityType as a true ActivityPreference.'
For Each activityType As ActivityType In activityMan.ActivityTypes
If activityType.ActivityTypeNameLocStringName = "ActivityFeed_DLMembershipChange_Type_Display" Then
Dim newPref As New ActivityPreferencePerType()
newPref.ActivityType = activityType
newPref.IsSet = False
activityPrefsPerType.Add(newPref)
Console.WriteLine(activityType.ActivityTypeName + " " + activityType.ActivityTypeId.ToString())
End If
Next
'Set activity preferences for the user.'
activityMan.ActivityPreferences.SetActivityPreferencesPerType(activityPrefsPerType)
Console.ReadKey(True)
End Using
End Sub
End Class
このコードはエラーなしでコンパイルおよび実行されますが、ユーザーがニュースフィードのために購読しているアクティビティに影響を与えないようです。他の誰かが同様の問題を抱えていましたか? SharePoint 2010で私のサイトを実装しようとすることを真剣に試みた場合、それは十分な一般的な問題になると思われます。
お時間をいただきありがとうございます。
乾杯、
フィル
アップデートPowerShell Sethingを行うと、これは私のActivityManagerオブジェクトの問題である可能性があるようです。上記のようにActivityManagerオブジェクトをインスタンス化して、ユーザー「TheDomain username」のユーザープロファイルを渡します。オブジェクトを作成した後にオブジェクトを検査すると、「currentUsername」がサービスアカウントに設定されているように見えます(これはたまたまマシンでログインしているアカウントです)。 MSDNは、ActivityManagerの現在のユーザーメンバーを次のように説明しています。
「現在のユーザーの名前を表す文字列を取得します。」
ActivityManagerのプロパティは、「thedomain username」ユーザーではなく、サービスアカウントの設定のように構成されているように見えます。
解決
ActivityManagerアセンブリで.NET Reflectorを使用して、Microsoftがアカウントを所有しているユーザーを除くすべての人がこれらの設定を変更することを許可しないと結論付けることができました。上記のケースでは、農場管理者としてログインしている間、コンソールコマンドを介してコードを実行しようとしていました。ファームアカウント!=設定が適用されるユーザーのアカウントであるため、Microsoftは設定の変更を禁止します。
ユーザーが最初にMySiteにログインしたときに(背景で)このコードを実行させることで、これを回避することができました。
他のヒント
ユーザープロファイルサービスを所有するグループにアプリケーションプールの所有者を追加すると、許可の問題を回避することもできます。コードはアプリプールの所有者から実行されますが、アクティビティマネージャーを使用するにはUPSの所有者である必要があります。 MS Productsを扱うもう1つの特典!