dfrobison
dfrobison

Reputation: 211

Rally API: Adding Users to a Project

I'm new to the Rally world and am struggling through how to use the RallyRestAPI. There are a number of examples of how to query Rally to get back pertinent information that I have found most helpful. What I'm trying to do is create a C# command line tool to add users to a project. It appears that I use the RallyRestAPI.Create("projectpermission",some dynamic json object) interface to accomplish the creation. My problem is understanding the "some dynamic json object" part. I'm not sure how to correctly set it up. If someone has a small example of how to set it up, I would appreciate it.

Upvotes: 2

Views: 1142

Answers (2)

user984832
user984832

Reputation:

Here's a code sample illustrating how to do this. Note that:

  • UserID running the code to create permissions must be a Workspace or Subscription Administrator
  • User must already have permissions in the Workspace (i.e be a Workspace User) in order for the ProjectPermission creation to succeed

    namespace RestExample_AddUsersToProject { class Program { static void Main(string[] args) {

            String userName = "[email protected]";
            String userPassword = "topsecret";
            String serverUrl = "https://rally1.rallydev.com";
            String wsapiVersion = "1.38";
    
            RallyRestApi restApi = new RallyRestApi(
                userName,
                userPassword,
                serverUrl,
                wsapiVersion
            );
    
            restApi.Headers[RallyRestApi.HeaderType.Vendor] = "Rally Software";
            restApi.Headers[RallyRestApi.HeaderType.Name] = "RestExample_AddUsersToProject";
    
            // Query for Project for which we want to add permissions
            Request projectRequest = new Request("project");
            projectRequest.Fetch = new List<string>()
            {
                "Name",
                "Owner",
                "State",
                "Description"
            };
            String projectName = "Avalanche Hazard Mapping";
    
            projectRequest.Query = new Query("Name", Query.Operator.Equals, projectName);
            QueryResult queryProjectResults = restApi.Query(projectRequest);
            var myProject = queryProjectResults.Results.First();
            String myProjectReference = myProject["_ref"];
    
            Console.WriteLine("Project Name: " + myProject["Name"]);
            Console.WriteLine("State: " + myProject["State"]);
    
            // Query for User for whom we wish to add ProjectPermission
            Request userRequest = new Request("user");
            userRequest.Fetch = new List<string>()
                {
                    "UserName",
                    "Subscription",
                    "DisplayName"
                };
    
    
            // User needing the permissions
            userRequest.Query = new Query("UserName", Query.Operator.Equals, "\"[email protected]\"");
            QueryResult queryUserResults = restApi.Query(userRequest);
    
            var myUser = queryUserResults.Results.First();
            String myUserReference = myUser["_ref"];
    
            Console.WriteLine("Username: " + myUser["UserName"]);
            Console.WriteLine("Display Name: " + myUser["DisplayName"]);
            Console.WriteLine("Subscription: " + myUser["Subscription"]);
    
            // Setup required ProjectPermission data
            DynamicJsonObject newProjectPermission = new DynamicJsonObject();
    
            newProjectPermission["User"] = myUser;
            newProjectPermission["Project"] = myProject;
            newProjectPermission["Role"] = "Editor";
    
            // Create the permission in Rally
            CreateResult addProjectPermissionResult = restApi.Create("ProjectPermission", newProjectPermission);
    
            DynamicJsonObject fetchedProjectPermission = restApi.GetByReference(addProjectPermissionResult.Reference, "Name");
            Console.WriteLine("Created ProjectPermission with Role: " + fetchedProjectPermission["Name"]);            
        }
    }
    

    }

Upvotes: 1

Kyle Morse
Kyle Morse

Reputation: 8410

There are some very basic examples of CRUD + querying here:
http://developer.rallydev.com/help/rest-api-net

The general flow will always be to create a new DynamicJsonObject, set the appropriate fields and then pass that object to the Create method of an RallyRestApi.

Upvotes: 0

Related Questions