Skip to main content
Planview Customer Success Center

API Updates for Customers Using Profile-based Permissions for Projects

This information is relevant to users have previously developed integrations to insert/update project team members using insertEntity or updateEntity and need to modify slightly for use with new permissions model.

Overview

The new permissions model is profile-based - that is, when you add users/groups/units to project teams you supply a profile that contains the permissions for those users/groups/units. As a result, we have updated the WS API to include two new methods for manipulating project teams: createOrReplaceMember and deleteMember. If your organization currently uses insertEntity to add users to project teams, you'll need to revise your integration to make use of the new methods. Eventually, the use of insertEntity to add users to project teams will be deprecated.

createOrReplaceMember

Adds a user, group, or unit and corresponding permission profile to a project team. If the team member already exists (identified by parent type, parentId, memberTypeId, and memberInstanceId), then the profile is updated, otherwise a new team member is created.

Parameters

  • sessionId - the SessionId string returned by the Login method.
  • parentTypeId - the ID of the type of entity (or entity team) you are adding members to. Currently supports projects (4), assets (166 ), portfolios (114).
  • parentId - the ID of the instance of the entity (or entity team) you are adding/removing the member
  • memberTypeId - the ID of the type of member: user (23), unit (229), group (173)
  • memberInstanceId - the ID of the instance of the member you are adding/removing
  • profileId - the ID of the profile you are associating with the team member. Only used when adding a member to an entity team.

Returns

The new membership ID.

Throws

AxisFault - thrown if sessionID is invalid or parentTypeId not supported or a system error occurred. 

Snippet from the WSDL

<xs:element name="createOrReplaceMember">

<xs:complexType>

<xs:sequence>

<xs:element name="sessionId" minOccurs="0" type="xs:string" nillable="true"/>

<xs:element name="parentTypeId" minOccurs="0" type="xs:long"/>

<xs:element name="parentId" minOccurs="0" type="xs:long"/>

<xs:element name="memberTypeId" minOccurs="0" type="xs:long"/>

<xs:element name="memberInstanceId" minOccurs="0" type="xs:long"/>

<xs:element name="profileId" minOccurs="0" type="xs:long"/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name="createOrReplaceMemberResponse">

<xs:complexType>

<xs:sequence>

<xs:element name="return" minOccurs="0" type="xs:long"/>

</xs:sequence>

</xs:complexType>

 

<xs:element name="createOrReplaceMemberResponse">

<xs:complexType>

<xs:sequence>

<xs:element name="return" minOccurs="0" type="xs:long"/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name="deleteMember">

<xs:complexType>

<xs:sequence>

<xs:element name="sessionId" minOccurs="0" type="xs:string" nillable="true"/>

<xs:element name="parentTypeId" minOccurs="0" type="xs:long"/>

<xs:element name="parentId" minOccurs="0" type="xs:long"/>

<xs:element name="memberTypeId" minOccurs="0" type="xs:long"/>

<xs:element name="memberInstanceId" minOccurs="0" type="xs:long"/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element name="deleteMemberResponse">

<xs:complexType>

<xs:sequence>

<xs:element name="return" minOccurs="0" type="xs:boolean"/>

</xs:sequence>

</xs:complexType>

</xs:element>