SharePointrestapiでリストアイテムに対してサイトグループにロールを割り当てるコード
Imports System.Net.HttpImports System.TextImports System.Threading.TasksModule Module1 Sub Main() Dim siteUrl As String = "https://your-sharepoint-site-url" Dim username As String = "your-username" Dim password As String = "your-password" Dim listName As String = "YourListName" Dim itemId As Integer = 1 ' 割り当てるリストアイテムのID Dim groupName As String = "YourGroupName" ' ロールを割り当てるサイトグループの名前 AssignRoleToItem(siteUrl, username, password, listName, itemId, groupName).Wait() End Sub Async Function AssignRoleToItem(siteUrl As String, username As String, password As String, listName As String, itemId As Integer, groupName As String) As Task Dim credentials As String = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")) ' グループ ID を取得 Dim groupId As Integer = Await GetGroupId(siteUrl, credentials, groupName) If groupId <> -1 Then ' リストアイテムに対して権限を設定する Dim endpointUrl As String = $"{siteUrl}/_api/web/lists/getbytitle('{listName}')/items({itemId})/roleassignments/addroleassignment(principalid={groupId}, roledefid=1073741827)" Using client As New HttpClient() client.DefaultRequestHeaders.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials) client.DefaultRequestHeaders.Accept.Add(New System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")) Dim response As HttpResponseMessage = Await client.PostAsync(endpointUrl, Nothing) If response.IsSuccessStatusCode Then Console.WriteLine($"Role assigned to group '{groupName}' successfully for item ID: {itemId}.") Else Console.WriteLine($"Failed to assign role to group for item. StatusCode: {response.StatusCode}") End If End Using Else Console.WriteLine($"Group '{groupName}' not found.") End If End Function Async Function GetGroupId(siteUrl As String, credentials As String, groupName As String) As Task(Of Integer) Dim groupId As Integer = -1 Dim endpointUrl As String = $"{siteUrl}/_api/web/sitegroups?$filter=Title eq '{groupName}'" Using client As New HttpClient() client.DefaultRequestHeaders.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials) client.DefaultRequestHeaders.Accept.Add(New System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")) Dim response As HttpResponseMessage = Await client.GetAsync(endpointUrl) If response.IsSuccessStatusCode Then Dim responseContent As String = Await response.Content.ReadAsStringAsync() Dim groupData = Newtonsoft.Json.JsonConvert.DeserializeObject(responseContent) If groupData("value").Count > 0 Then groupId = groupData("value")(0)("Id") End If Else Console.WriteLine($"Failed to retrieve group information. StatusCode: {response.StatusCode}") End If End Using Return groupId End FunctionEnd Module