I am trying to retrieve a user's team. The teams the user is a member of.
I trying to do this in JavaScript for CRM 2013 or 2015.
any ideas how?
appreciate all the help i can get!
*This post is locked for comments
I am trying to retrieve a user's team. The teams the user is a member of.
I trying to do this in JavaScript for CRM 2013 or 2015.
any ideas how?
appreciate all the help i can get!
*This post is locked for comments
Hello All,
If you want to achieve the same using latest Web API please try below sample code:
Note : I have added few additional filter conditions. If you do not want them just remove . Also , i am considering only first team for my functionality. If you want all teams just use for reach loop.
// Retreive Data using Web.API ..........................................................................
var userSettings = Xrm.Utility.getGlobalContext().userSettings; // userSettings is an object with user information.
var current_User_Id = userSettings.userId; // The user's unique id
var UserID = current_User_Id.slice(1, -1);
Xrm.WebApi.online.retrieveMultipleRecords("systemuser", "?$expand=teammembership_association($filter=name ne 'Web' and ltf_teamtype eq 100000000;$select=ltf_teamtype,name,teamid)&$filter=systemuserid eq "+UserID+"").then(
function success(results) {
if (results.entities.length > 0) {
var teammembership_association = results.entities[0]["teammembership_association"];
if (teammembership_association.length > 0) {
var UserTeamName = teammembership_association[0].name;
var UserTeamGUID = teammembership_association[0].teamid;
}
var systemuserid = results.entities[0]["systemuserid"];
}
},
function(error) {
Xrm.Utility.alertDialog(error.message);
}
);
Other way to do the same using Fetch XML -
// Retreive Data using fetchXML ......................................................................
var objectTeamAttributes = new Object();
var fetchXML = "<fetch mapping='logical' output-format='xml-platform' version='1.0' distinct='true'>\
<entity name='team'>\
<attribute name='name' />\
<attribute name='businessunitid' />\
<attribute name='teamid' />\
<attribute name='teamtype' />\
<order descending='false' attribute='name' />\
<filter type='and'>\
<condition value='100000000' attribute='ltf_teamtype' operator='eq' />\
<condition value='Web Specialist' attribute='name' operator='ne' />\
</filter>\
<link-entity name='teammembership' to='teamid' from='teamid' intersect='true' visible='false'>\
<link-entity name='systemuser' to='systemuserid' from='systemuserid' alias='ag'>\
<filter type='and'>\
<condition attribute='systemuserid' operator='eq-userid' />\
</filter>\
</link-entity>\
</link-entity>\
</entity>\
</fetch>";
var encodedFetchXml = encodeURI(fetchXML);
var queryPath = "/api/data/v9.1/teams?fetchXml=" + encodedFetchXml;
var requestPath = Xrm.Utility.getGlobalContext().getClientUrl() + queryPath;
var req = new XMLHttpRequest();
req.open("GET", requestPath, true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function ()
{
if (this.readyState === 4)
{
this.onreadystatechange = null;
if (this.status === 200)
{
var returned = JSON.parse(this.responseText);
var results = returned.value;
if (results.length > 0)
{
var TeamName = results[0]["name"];
var TeamGUID = results[0]["teamid"];
objectTeamAttributes.TeamName = TeamName;
objectTeamAttributes.TeamGUID = TeamGUID;
//alert(objectTeamAttributes.TeamName);
//alert(objectTeamAttributes.TeamGUID);
}
}
else
{
alert(this.statusText);
}
}
};
req.send();
Please check my answer above. It will enlist all teams that the user belongs to.
What if a user belongs to multiple teams?
I believe the verified answer is missing a '?' before 'teams' and '$select....'
To make it easy in CRM 2016 / 365, I found the following works well using the new Web API functionality.
function someFunction() {
if (checkTeam('System Administrator') == false )
{
Xrm.Page.getControl("expireson").setDisabled(true);
}
}
function checkTeam(teamName) {
var clientURL = Xrm.Page.context.getClientUrl();
var req = new XMLHttpRequest();
var userId = Xrm.Page.context.getUserId().substr(1, 36);
var query = "/api/data/v8.2/systemusers(" + userId + ")?$expand=teammembership_association($select=name;$filter=name eq '" + teamName + "')";
req.open("GET", encodeURI(clientURL + query), false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json;charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.send();
if (req.status == 200) {
var data = JSON.parse(req.response).teammembership_association;
if (data.length > 0)
{ return true; } else { return false; }
};
}
thanks, this is just what i needed it!
function GetRequestObject() {
if (window.XMLHttpRequest) {
return new window.XMLHttpRequest;
} else {
try {
return new ActiveXObject("MSXML2.XMLHTTP.3.0");
} catch (ex) {
return null;
}
}
}
function makeRequest(query) {
var serverUrl = Xrm.Page.context.getClientUrl();
var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
oDataEndpointUrl += query;
var service = GetRequestObject();
if (service != null) {
service.open("GET", oDataEndpointUrl, false);
service.setRequestHeader("X-Requested-With", "XMLHttpRequest");
service.setRequestHeader("Accept", "application/json, text/javascript, */*");
service.send(null);
var retrieved = JSON.parse(service.responseText).d;
var results = new Array();
for (var i = 0; i < retrieved.results.length; i++) {
results.push(retrieved.results[i]);
}
return results;
}
return null;
}
function getUserTeam()
{
var myTeamId = null;
var myTeamName = null;
var guid = "[A-z0-9]{8}-[A-z0-9]{4}-[A-z0-9]{4}-[A-z0-9]{4}-[A-z0-9]{12}";
var serverUrl = Xrm.Page.context.getClientUrl();
var userId = Xrm.Page.context.getUserId();
userId = userId.match(guid);
userId = userId.input;
// Retrieve TeamIds of the Teams Current SystemUser belongs to
var userTeamsQuery = "TeamMembershipSet?$select=TeamId&$filter=SystemUserId eq guid'"+ userId +"'";
var userTeams = makeRequest(userTeamsQuery);
var teamQuery = null;
var teams = null;
if(userTeams !== null){
for(var i = 0; i< userTeams.length; i++){
userTeams[i] = userTeams[i].TeamId;
console.log("Team Id : " + userTeams[i]); // to see TeamIds of user in Console
var teamId = "{" + userTeams[i] + "}";
// Retrieve Name and TeamIds of the Teams via given TeamId that we already have above
teamQuery = "TeamSet?$select=Name, TeamId&$filter=TeamId eq guid'" + teamId + "'";
teams = makeRequest(teamQuery);
myTeamId =teamId;
if(teams !== null && teams.length >0){
myTeamName = teams[0].Name;
}
alert(myTeamName); // alert name of the teams user belongs to
}
}
}
Using your JavaScript code to call code generated by Dynamics CRM REST Builder
Old CRM versions:
Get current user id:
Xrm.Page.context.getUserId()
On this blog:
http://crmxpg.nl/wp/2010/05/27/determine-teams-for-any-user-in-javascript/
Use method
getUserTeams (userid)
In CRM 2016 ODATA v8.1:
https://customer.crm.dynamics.com/api/data/v8.1/teams$select=name&$expand=teammembership_association($filter=systemuserid eq 014853d6-4f9f-e611-80e6-c4346bacbcbc)
Result:
{ "@odata.context":"https://customer.crm.dynamics.com/api/data/v8.1/$metadata#teams(name,teammembership_association)","value":[ { "@odata.etag":"W/\"596262\"","name":"Contoso","teamid":"56031a5c-4296-e611-80e4-c4346bad0070","ownerid":"56031a5c-4296-e611-80e4-c4346bad0070","teammembership_association":[ ],"teammembership_association@odata.nextLink":"https://customer.crm.dynamics.com/api/data/v8.1/teams(56031a5c-4296-e611-80e4-c4346bad0070)/teammembership_association$filter=systemuserid%20eq%20014853d6-4f9f-e611-80e6-c4346bacbcbc" } ] }
André Arnaud de Cal...
292,997
Super User 2025 Season 1
Martin Dráb
231,831
Most Valuable Professional
nmaenpaa
101,156
Moderator