私はこのコードを持っています
let inline ProcessExpendableADGroups (input : ('a * SPUser) seq) =
input
|> Seq.filter (fun (_, u : SPUser) -> u.IsDomainGroup = true)
|> Seq.filter (fun (_, u : SPUser) -> ADUtility.IsADGroupExpandable u.LoginName = true)
|> List.ofSeq
|> List.iter(
fun ( li : 'a, u : SPUser) ->
let userList = ADUtility.GetUsers u.LoginName
if (Seq.length userList <= 500) then
userList
|> Seq.filter (fun l -> InfobarrierPolicy.IsUserInPolicy l "FW" = true)
|> Seq.iter (
fun ln ->
let x = ADUtility.GetNameAndEmail ln
let (email, name) = x.Value
SPUtility.CopyRoleAssignment li u.LoginName ln email name
li.Update()
)
SPUtility.RemoveRoleAssignment li u
)
list3
|> List.iter (
fun w ->
SPUtility.GetDirectAssignmentsforListItems w |> ProcessExpendableADGroups
SPUtility.GetDirectAssignmentsforFolders w |> ProcessExpendableADGroups
SPUtility.GetDirectAssignmentsforLists w |> ProcessExpendableADGroups
SPUtility.GetDirectAssignmentsforWeb w |> ProcessExpendableADGroups
)
ここで、メソッドGetDirectAssignmentsforListItemsはタプルのシーケンス(SPListItem * SPUser)を返します。GetDirectAssignmentsforWebはタプルのシーケンス(SPWeb * SPUser)を返します。
このシーケンスを、これらのアイテムに対して「Update」というメソッドを呼び出さなければならないことを除いて、これらのアイテムに対して非常によく似た処理を行う関数に送信する必要があります。
ジェネリックパラメーターを使用してメソッドを作成しましたが、ジェネリックパラメーターでUpdateを呼び出すと問題が発生します。
このパラメーターを制約して、パラメーターにUpdateというメソッドが必要であると言うことはできません。