C# で CSOM を利用したアイテムへの権限設定時にユーザーが見つからないとエラーが発生する
C# で CSOM を利用した SharePoint のリストやリストアイテムに対して処理を行うプログラムを複数の Microsoft 365 テナントで動作させています。
7/22 から SharePoint のリストアイテムに対して権限設定をしている処理で、存在しているユーザーを指定しているのにも関わらず、**「指定されたユーザー { 権限設定対象ユーザーの UserPrincipalName } が見つかりませんでした。」**というエラーメッセージが返却されるようになりました。複数の Microsoft 365 テナントで発生しており、同じユーザーへの権限設定でも発生している場合、発生していない場合の両方がありました。7/24 から現在まで事象は再現しない状況です。
Microsoft 365 へプレミアサポートで問い合わせましたが、権限設定関連での類似の問い合わせやインシデントは無いと回答があり、SharePoint の UI 上で事象が発生していないことから CSOM の処理内特有の事象である可能性とのことで、プレミアサポートのサポート対象外と回答があり本フォーラムで質問をさせていただきました。
現状再現していませんが、発生原因が特定できないことから再現する可能性があるかも分からず、本プログラムの動作先テナントへのエラーの原因報告もできずにいます。
本エラーが発生する原因や発生した際の解消方法を教えていただけますでしょうか。
調査に必要な他の情報等ありましたら、コメントいただければと思います。
よろしくお願いいたします。
■ 事象発生日時
2024年7月22日 10時頃~2024年7月24日 2時頃
■ 事象が発生していたプログラム
/// <summary>
/// 申請リストアイテムに対して、特定ユーザーの閲覧権限を付与する
/// </summary>
/// <param name="item">権限設定対象の申請リストアイテム</param>
/// <param name="users">閲覧権限を付与するユーザー</param>
protected virtual async Task SetPermissionAsync(ListItem item, List<User> users)
{
// アイテムを固有の権限に変更する
item.EnsureProperties(i => i.HasUniqueRoleAssignments);
if (!item.HasUniqueRoleAssignments)
{
item.BreakRoleInheritance(false, false);
await item.Context.ExecuteQueryRetryAsync();
}
else
{
item.ResetRoleInheritance();
await item.Context.ExecuteQueryRetryAsync();
item.BreakRoleInheritance(false, false);
await item.Context.ExecuteQueryRetryAsync();
}
// 特定のユーザーの閲覧権限を付与する
var roleDefinition = item.ParentList.ParentWeb.RoleDefinitions.GetByType(RoleType.Reader);
var roleDefinitionBindingCollection = new RoleDefinitionBindingCollection(item.Context) { roleDefinition };
foreach (var user in users)
{
_ = item.RoleAssignments.Add(user, roleDefinitionBindingCollection);
}
try
{
// ここで「指定されたユーザー { 権限設定対象ユーザーの UserPrincipalName } が見つかりませんでした。」のエラーが発生
await item.Context.ExecuteQueryRetryAsync();
}
catch (Exception ex)
{
throw;
}
}
■ 発生した Exception のメッセージ
指定されたユーザー { 権限設定対象ユーザーの UserPrincipalName } が見つかりませんでした。
■ 発生した Exception のスタックトレース
※ 一部マスキングしています。
Microsoft.SharePoint.Client.ServerException:
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream (Microsoft.SharePoint.Client.Runtime, Version=16.1.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c)
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponse (Microsoft.SharePoint.Client.Runtime, Version=16.1.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c)
at Microsoft.SharePoint.Client.ClientRequest+<ExecuteQueryToServerAsync>d__53.MoveNext (Microsoft.SharePoint.Client.Runtime, Version=16.1.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at Microsoft.SharePoint.Client.ClientRequest+<ExecuteQueryAsync>d__39.MoveNext (Microsoft.SharePoint.Client.Runtime, Version=16.1.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at Microsoft.SharePoint.Client.ClientRuntimeContext+<ExecuteQueryAsync>d__57.MoveNext (Microsoft.SharePoint.Client.Runtime, Version=16.1.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at Microsoft.SharePoint.Client.ClientContext+<ExecuteQueryAsync>d__23.MoveNext (Microsoft.SharePoint.Client, Version=16.1.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at Microsoft.SharePoint.Client.ClientContextExtensions+<ExecuteQueryImplementation>d__6.MoveNext (PnP.Framework, Version=1.11.0.0, Culture=neutral, PublicKeyToken=0d501f89f11b748c)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at *********+<SetPermissionAsync>d__18.MoveNext (*********, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null: D:\a\1\s\Libraries\*********.cs:456)