Это какой-то ад. Разработка путем мучения с этими дикими запросами никакого удовольствия не приносит. Махнул рукой и сделал с помощью Fetch
Код:
function getUserRoles(userId)
{
// Retrieve any user roles
var fetchXml =
"<fetch mapping='logical' distinct='true'>" +
"<entity name='role'>" +
"<attribute name='roleid' />" +
"<attribute name='name' />" +
"<order attribute='name' descending='false' />" +
" <link-entity name='systemuserroles' from='roleid' to='roleid' visible='false' intersect='true'>" +
" <link-entity name='systemuser' from='systemuserid' to='systemuserid' alias='aa'>" +
" <filter type='and'>" +
" <condition attribute='systemuserid' operator='eq' value='" + userId + "' />" +
" </filter>" +
" </link-entity>" +
" </link-entity>" +
"</entity>" +
"</fetch>";
var roles = XrmServiceToolkit.Soap.Fetch(fetchXml);
return roles;
}
Получился читаемый и понятный код, которые выполняется с помощью вызова одной(!) строки скаченной с инета либы XrmServiceToolkit. Ура!