Can't add new users to BIM 360 project

Can't add new users to BIM 360 project

spavlovitsky
Advocate Advocate
515 Views
1 Reply
Message 1 of 2

Can't add new users to BIM 360 project

spavlovitsky
Advocate
Advocate

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.

 

Picture1.png

 

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;
        }

 

0 Likes
516 Views
1 Reply
Reply (1)
Message 2 of 2

rserrtal
Community Visitor
Community Visitor

Hey!

I know it's late but I'll post my case anyway.
I got this exact error, but for me the problem was that I tried to add users to an archived project. So I recommend to anyone to check the project status and with the rest of required parameters and body that everything is well written and that they actually exist in the platform.

Regards

0 Likes