Can't add new users to BIM 360 project
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi!
I’m using this request to post new users to the project
https://forge.autodesk.com/en/docs/bim360/v1/reference/http/projects-project_id-users-import-POST/
It works well with ACC projects and not with BIM 360 projects.
I’ve highlighted the projects below. I can’t add new users to these projects. But I can do it to other projects.
This is what the API returns me when I failed to add new users
{
"failure": 1,
"success": 0,
"success_items": [],
"failure_items": [
{
"email": "[email protected]",
"industry_roles": ["60364cf9-4e20-440f-be15-c98ec806dcd7"],
"company_id": "d2347313-c2d6-4bdd-a352-5343803ce2b5",
"services": {
"document_management": {
"serviceName": "document_management",
"access_level": "user"
}
},
"errors": [
{ "code": 2000, "message": "undefined method `id' for nil:NilClass" }
],
"project_id": "87e831e4-b77a-4044-93e8-206541981800",
"account_id": "73f0d205-ba4b-4745-be42-69a10979b3f2"
}
]
}
This is the code I use to post new users
/// <summary>
/// Post multiple new users to BIM 360
/// </summary>
/// <param name="projectId">Project id</param>
/// <param name="adminUserId">Admin user id</param>
/// <param name="users">Users to post</param>
/// <param name="succeedUsers">Users that succeed to add</param>
/// <param name="failedUsers">Users that failed to add</param>
/// <returns></returns>
public IRestResponse PostUsersToProjectImport(string projectId, string adminUserId, List<BIM360ProjectUserPostImport> users,
ref List<BIM360ProjectUserPostImport> succeedUsers,
ref List<BIM360ProjectUserPostImport> failedUsers)
{
var request = new RestRequest(Method.POST);
request.Resource = BIM360Urls.Instance.UrlToPostProjectUsersImport;
request.AddParameter("AccountId", ForgeOptions.Instance.AccountId, ParameterType.UrlSegment);
request.AddParameter("ProjectId", projectId, ParameterType.UrlSegment);
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.NullValueHandling = NullValueHandling.Ignore;
string serviceString = JsonConvert.SerializeObject(users, settings);
request.AddParameter("application/json", serviceString, ParameterType.RequestBody);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("x-user-id", adminUserId);
request.AddHeader("authorization", $"Bearer {BIM360Auth.Instance.Token}");
request.AddHeader("Content-Type", "application/json");
RequestService requestService = new RequestService();
IRestResponse response = requestService.ExecuteRequest(ForgeOptions.Instance.Client, request);
BIM360ProjectUserPostImportResponse usersResponse = JsonConvert.DeserializeObject<BIM360ProjectUserPostImportResponse>(response.Content, settings);
succeedUsers.AddRange(usersResponse.success_items);
List<BIM360Company> companies = BIM360Company.LoadCompanies();
BIM360Project project = BIM360HubData.Instance.BIM360Projects.FirstOrDefault(p => p.id.ToUpper().Equals(projectId.ToUpper()));
foreach (BIM360ProjectUserPostImport userAddedSuccess in usersResponse.success_items)
{
BIM360Company company = companies.FirstOrDefault(c => c.Id?.ToUpper() == userAddedSuccess.company_id?.ToUpper());
LogItem logItem = LogData.AddMessageNormal($"User {userAddedSuccess.email} added successfully");
logItem.ProjectUserSuccessFailInfo = new ProjectUserSuccessFailInfo(userAddedSuccess?.email, company?.Name, project?.Name);
ApplicationLog.SuccessfullyAddUser(userAddedSuccess, company, project);
userAddedSuccess.Project = project;
}
failedUsers.AddRange(usersResponse.failure_items);
foreach (BIM360ProjectUserPostImport userFailed in usersResponse.failure_items)
{
string errorInfo = string.Empty;
foreach (var error in userFailed.errors)
{
errorInfo += $"Fail to add user {userFailed.email}, error {error}{Environment.NewLine}";
}
BIM360Company company = companies.FirstOrDefault(c => c.Id.ToUpper() == userFailed.company_id?.ToUpper());
LogItem logItem = LogData.AddMessageError(errorInfo);
logItem.ProjectUserSuccessFailInfo = new ProjectUserSuccessFailInfo(userFailed?.email, company?.Name, project?.Name);
ApplicationLog.FailToAddUser(userFailed.email, project.Name, errorInfo);
userFailed.Project = project;
}
return response;
}