我有这个代码
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 的方法。