Rollenbezogene Schreibrechte innerhalb einer Entität
- Hallo!
Wir würden gerne innerhalb einer Entität (z. B. Firma) für einige Felder (eventuell auch ganze Tabs/Reiter) die Schreibrechte beschränken. Dies würden wir entweder an der Rolle oder am User festmachen können, wobei wir die Rolle bevorzugen würden.
Welche Möglichkeiten bestehen hier?
Gruß
CSN22
Answers
- Hallo,
ich verwende immer diesen Code, um die Daten zu ermitteln:
function GetCurrentUserInfo()
{
var SERVER_URL = "http://CRM";
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
xmlhttp.open("POST", SERVER_URL + "/mscrmservices/2007/crmservice.asmx", false);
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
var soapBody = "<soap:Body>"+
"<Execute xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
"<Request xsi:type='WhoAmIRequest' />"+
"</Execute></soap:Body>";
var soapXml = "<soap:Envelope " +
"xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' "+
"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "+
"xmlns:xsd='http://www.w3.org/2001/XMLSchema'>";
soapXml += GenerateAuthenticationHeader();
soapXml += soapBody;
soapXml += "</soap:Envelope>";
xmlhttp.send(soapXml);
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(xmlhttp.responseXML.xml);
var userid = xmlDoc.getElementsByTagName("UserId")[0].childNodes[0].nodeValue;
var buid = xmlDoc.getElementsByTagName("BusinessUnitId")[0].childNodes[0].nodeValue;
var orgid = xmlDoc.getElementsByTagName("OrganizationId")[0].childNodes[0].nodeValue;
alert("UserId: " + userid + "\r\nBusinessUnitId: " + buid + "\r\nOrganizationId: " + orgid);
}
In der ersten Zeile muss der richtige Server eingertagen werden, dann funktioniert das Script.
Viele Grüße
Michael Sulz
axcentro GmbH
MVP für Microsoft Dynamics CRM- Marked As Answer byCSN22 Wednesday, October 14, 2009 12:42 PM
- Hi,
Siehe http://msdn.microsoft.com/en-us/library/bb890244.aspx
Zu deiner Frage: schau dir diese beiden Links an
http://www.crowehorwath.com/cs/blogs/crm/archive/2008/05/08/hide-show-fields-in-crm-4-0-based-on-security-role.aspx
http://jianwang.blogspot.com/2008/01/crm-40-check-current-users-security.html- Marked As Answer byCSN22 Wednesday, October 14, 2009 1:45 PM
All Replies
- Hallo,
der einfachste Weg ist sicherlich, die Felder per JavaScript auf ReadOnly zu setzen, wenn der Benutzer oder die Rolle das Recht zum Schreiben in diesem Feld nicht haben soll.
Ansonsten gibt es auch ein 3th party tool, das Rechte auf Feldebene vergeben kann und du kannst natürlich ein entsprechendes PlugIn programmieren.
Viele Grüße
Michael Sulz
axcentro GmbH
MVP für Microsoft Dynamics CRM Ich habe folgendes Skript gefunden, welches rollenbezogen das Formular verändert beim OnLoad-Event (in diesem Beispiel wird ein Tab ausgeblendet)
HideTab();function HideTab()
{
var allowedRoles = [ "Vorstandsvorsitzender", "Marketingleiter" ];
var roleAllowed = IsRoleAllowed(allowedRoles);if (! roleAllowed)
{
tab2Tab.style.display = 'none';
}
}function IsRoleAllowed(allowedRoles)
{
var result = RetrieveUserRoles();
var foundResult = false;for (i=0;i<=allowedRoles.length;i++)
{
if (result.indexOf(allowedRoles[i]) > -1)
{
foundResult = true;
break;
}
}
return foundResult;
}function RetrieveUserRoles()
{
var serverUrl = "/mscrmservices/2007/crmservice.asmx";
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", serverUrl, false);
xmlhttp.setRequestHeader("Content-Type", "test/xml; charset=utf-8");
xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
var message = [
"<?xml version='1.0' encoding='utf-8'?>",
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"xmlns:xsi=\"http://www.w3.org/2001/XML-Schema-instance\"xmlns:xsd:\"http://www.w3.org/2001/XMLSchema\">", GenerateAuthenticationHeader(),
"<soap:Body>",
<"RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>",
"<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:QueryExpression'>",
"<q1:EntityName>role</q1:EntityName>",
"<q1:ColumnSet xsi:type='q1:ColumnSet'><q1:Attributes><q1:Attribute>name</q1:Attribute></q1:Attributes></q1:ColumnSet>",
"<q1:Distinct>false</q1:Distinct>",
"<q1:LinkEntities><q1:LinkEntity>",
"<q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>",
"<q1:LinkFromEntityName>role</q1:LinkFromEntityName>",
"<q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>",
"<q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>",
"<q1:JoinOperator>Inner</q1:JoinOperator>",
"<q1:LinkEntities><q1:LinkEntity>",
"<q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>",
"<q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>",
"<q1:LinkToEntityName>systemuser</q1:LinkToEntityName>",
"<q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>",
"<q1:JoinOperator>Inner</q1:JoinOperator>",
"<q1:LinkCriteria><q1:FilterOperator>And</q1:FilterOperator>",
"<q1:Conditions><q1:Condition>",
"<q1:AttributeName>systemuserid</q1:AttributeName>",
"<q1:Operator>Equal</q1:Operator>",
"<q1:Values>",
"<q1:Value xmlns:q2='http://microsoft.com/wsdl/types/' xsi:type='q2:guid'>",GetUserId(),
"</q1:Value></q1:Values></q1:Condition></q1:Conditions>",
"</q1:LinkCriteria></q1:LinkEntity></q1:LinkEntities>",
"</q1:LinkEntity></q1:LinkEntities></query></RetrieveMultiple>",
"</soap:Body></soap:Envelope>"
].join("");
xmlhttp.send(message);
return xmlhttp.responseXML.text;
}function GetUserId()
{
var serverUrl = "/mscrmservices/2007/crmservice.asmx";
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", serverUrl, false);
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
var message =
[
"<?xml version='1.0' encoding='utf-8'?>",
<soap:Envelope xmlns:soap="\http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
GenerateAuthenticationHeader(),
"<soap:Body>",
"<Execute xmlns='http://schemas.microsoft.com/crm/2007/Webservices'>",
"<Request xsi:type='WhoAmIRequest' />",
"</Execute",
"</soap:Body>",
"</soap:Envelope>"
].join("");
xmlhttp.send(message);
var result = xmlhttp.responseXML.xml;
var doc = new ActiveXObject("MSXML2.DOMDocument");
doc.async = false;
doc.loadXML(result);
var returnNode = doc.selectSingleNode("//UserId");
if (returnNode != null)
{
return returnNode.text;
}
else
{
return null;
}
}
Das skript funktioniert nicht. In den Funktionen RetrieveUserRoles und GetUserId treten vermutlich Fehler auf, welche dann das ganze skript als nichtig erscheinen lassen (der Tab wird nicht ausgeblendet).
Wenn ich nur folgenden Code einsetze, dann wird das Tab ausgeblendet:
HideTab();function HideTab()
{
var allowedRoles = [ "Vorstandsvorsitzender", "Marketingleiter" ];
var roleAllowed = IsRoleAllowed(allowedRoles);if (! roleAllowed)
{
tab2Tab.style.display = 'none';
}
else
{
tab2Tab.style.display = 'none';
}
}
Der Code ist natürlich nicht wirklich sinnvoll; aber ich konnte erkennen, dass der Tab ausgeblendet wird.
Frage:
Brauche ich wirklich so einen "Monster"-Code um Rollenbezogene Befehle durchzuführen?
Gibt es irgendwo Beispielcode den man dafür verwenden kann? (dürfte ja im Prinzip immer gleich sein, oder?) Meine Idee ist, einfach im OnLoad die entsprechenden Felder auf "readonly" zu setzen ...
Gruß
CSN22- Hallo,
ich verwende immer diesen Code, um die Daten zu ermitteln:
function GetCurrentUserInfo()
{
var SERVER_URL = "http://CRM";
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
xmlhttp.open("POST", SERVER_URL + "/mscrmservices/2007/crmservice.asmx", false);
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
var soapBody = "<soap:Body>"+
"<Execute xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
"<Request xsi:type='WhoAmIRequest' />"+
"</Execute></soap:Body>";
var soapXml = "<soap:Envelope " +
"xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' "+
"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "+
"xmlns:xsd='http://www.w3.org/2001/XMLSchema'>";
soapXml += GenerateAuthenticationHeader();
soapXml += soapBody;
soapXml += "</soap:Envelope>";
xmlhttp.send(soapXml);
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(xmlhttp.responseXML.xml);
var userid = xmlDoc.getElementsByTagName("UserId")[0].childNodes[0].nodeValue;
var buid = xmlDoc.getElementsByTagName("BusinessUnitId")[0].childNodes[0].nodeValue;
var orgid = xmlDoc.getElementsByTagName("OrganizationId")[0].childNodes[0].nodeValue;
alert("UserId: " + userid + "\r\nBusinessUnitId: " + buid + "\r\nOrganizationId: " + orgid);
}
In der ersten Zeile muss der richtige Server eingertagen werden, dann funktioniert das Script.
Viele Grüße
Michael Sulz
axcentro GmbH
MVP für Microsoft Dynamics CRM- Marked As Answer byCSN22 Wednesday, October 14, 2009 12:42 PM
- Danke, das sieht ja schon wesentlich übersichtlicher aus, aber: Ich bekomme eine Fehlermeldung. Ich habe es abgegrenzt und der Fehler erscheint, sobald ich diese Zeile im Code habe:
xmlhttp.open("POST", SERVER_URL + "/mscrmservices/2007/crmservice.asmx", false);
Also die 3. Zeile.
Es erscheint die Meldung:
Fehler im benutzerdefinierten Ereignis dieses Felds.
Feld:window
Ereignis:onload
Fehler:unbekannter Fehler.
Woran kann das liegen?
PS: Ich habe den Code im OnLoad-Event des Kontaktformulars eingetragen. - Ich habe es herausgefunden. Man muss die IP-Adresse einsetzen. Der Servername (klartext) funktioniert nicht.
Klappt prima, allerbesten Dank!!!
Jetzt muss ich nur noch gucken, wie ich über die GUID's an den Benutzernamen oder die Rollennamen komme...
Der Benutzername würde evtl. reichen ... - Ich versuche gerade den Code zu verstehen ...
Dieser "WhoAmI"-request bringt ja vermutlich noch mehr als die 3 angezeigten Tags zurück.
Wie kriege ich raus, welche Tags es noch gibt? Gibt es hierzu irgendwo eine Auflistung? - Hi,
Siehe http://msdn.microsoft.com/en-us/library/bb890244.aspx
Zu deiner Frage: schau dir diese beiden Links an
http://www.crowehorwath.com/cs/blogs/crm/archive/2008/05/08/hide-show-fields-in-crm-4-0-based-on-security-role.aspx
http://jianwang.blogspot.com/2008/01/crm-40-check-current-users-security.html- Marked As Answer byCSN22 Wednesday, October 14, 2009 1:45 PM
- Nach mehreren Versuchen bin ich schließlich mit dem Code von nachfolgender Seite zum Ziel gelangt:
http://www.stunnware.com/crm2/topic.aspx?id=JS31
Danke @ckeller + @Michael Sulz - Hallo ich möchte einen Reiter für alle Mitarbeiter ausblenden, die nicht die Rolle X haben.
Folgenden Code habe ich in das Onload Ereignis eingetragen:
HideTab();function HideTab()
if (! roleAllowed)
{
var allowedRoles = [ "Vorstandsvorsitzender", "Marketingleiter" ];
var roleAllowed = IsRoleAllowed(allowedRoles);
{
tab2Tab.style.display = 'none';
}
else
{
tab2Tab.style.display = 'none';
}
}
Dabei kommt der Fehler Objekt erwartet.
Kann mir jemand sagen wo er da ein Objekt erwartet?
Bei dem ziemlich umfangreichen Text weiß ich nicht wo ich die Bedingung (tab2Tab.style.display = 'none';) eintragen muss.
Wenn ich dies wüsste würde mir das auch helfen :)
VG und im Vorraus bereits Vielen Dank
Martin - Hallo Martin,
der Code, um einen Tab auszublenden lautet:
crmForm.all.tab3Tab.style.display = 'none';
Viele Grüße
Michael Sulz
axcentro GmbH
MVP für Microsoft Dynamics CRM - Hmm folgenden Code habe ich jetzt so wie er hier steht in meinem Onload Ereignis.
wenn ich dies übernehme bekomme ich leider überhaupt kein ergebnis.
Es wird weder ein fehler angezeigt, noch der tab ausgeblendet.
Weiß gerade auch nicht recht weiter.
Kann sich jemand mal den Code durchlesen und eventuell nach einem Fehler suchen?
Vielen Dank bereits im Vorraus
Hier der Code:
HideTab();
function HideTab()
{
alert('hallo')
var allowedRoles = [ "Navision" ];
var roleAllowed = IsRoleAllowed(allowedRoles);
if ( roleAllowed)
{
crmForm.all.tab5Tab.style.display = 'none'
}
}
function IsRoleAllowed(allowedRoles)
{
var result = RetrieveUserRoles();
var foundResult = false;
for (i=0;i<=allowedRoles.length;i++)
{
alert(result.indexOf(allowedRoles[i]);
if (result.indexOf(allowedRoles[i]) > -1)
{
foundResult = true;
break;
}
}
return foundResult;
}
function RetrieveUserRoles()
{
var serverUrl = "http://pmcs-crm/mscrmservices/2007/crmservice.asmx";
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", serverUrl, false);
xmlhttp.setRequestHeader("Content-Type", "test/xml; charset=utf-8");
xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
var message = [
"<?xml version='1.0' encoding='utf-8'?>",
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"xmlns:xsi=\"http://www.w3.org/2001/XML-Schema-instance\"xmlns:xsd:\"http://www.w3.org/2001/XMLSchema\">", GenerateAuthenticationHeader(),
"<soap:Body>",
<"RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>",
"<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:QueryExpression'>",
"<q1:EntityName>role</q1:EntityName>",
"<q1:ColumnSet xsi:type='q1:ColumnSet'><q1:Attributes><q1:Attribute>name</q1:Attribute></q1:Attributes></q1:ColumnSet>",
"<q1:Distinct>false</q1:Distinct>",
"<q1:LinkEntities><q1:LinkEntity>",
"<q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>",
"<q1:LinkFromEntityName>role</q1:LinkFromEntityName>",
"<q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>",
"<q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>",
"<q1:JoinOperator>Inner</q1:JoinOperator>",
"<q1:LinkEntities><q1:LinkEntity>",
"<q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>",
"<q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>",
"<q1:LinkToEntityName>systemuser</q1:LinkToEntityName>",
"<q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>",
"<q1:JoinOperator>Inner</q1:JoinOperator>",
"<q1:LinkCriteria><q1:FilterOperator>And</q1:FilterOperator>",
"<q1:Conditions><q1:Condition>",
"<q1:AttributeName>systemuserid</q1:AttributeName>",
"<q1:Operator>Equal</q1:Operator>",
"<q1:Values>",
"<q1:Value xmlns:q2='http://microsoft.com/wsdl/types/' xsi:type='q2:guid'>",GetUserId(),
"</q1:Value></q1:Values></q1:Condition></q1:Conditions>",
"</q1:LinkCriteria></q1:LinkEntity></q1:LinkEntities>",
"</q1:LinkEntity></q1:LinkEntities></query></RetrieveMultiple>",
"</soap:Body></soap:Envelope>"
].join("");
xmlhttp.send(message);
return xmlhttp.responseXML.text;
}
function GetUserId()
{
var serverUrl = "/mscrmservices/2007/crmservice.asmx";
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST", serverUrl, false);
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
var message =
[
"<?xml version='1.0' encoding='utf-8'?>",
<soap:Envelope xmlns:soap="\http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">",
GenerateAuthenticationHeader(),
"<soap:Body>",
"<Execute xmlns='http://schemas.microsoft.com/crm/2007/Webservices'>",
"<Request xsi:type='WhoAmIRequest' />",
"</Execute",
"</soap:Body>",
"</soap:Envelope>"
].join("");
xmlhttp.send(message);
var result = xmlhttp.responseXML.xml;
var doc = new ActiveXObject("MSXML2.DOMDocument");
doc.async = false;
doc.loadXML(result);
var returnNode = doc.selectSingleNode("//UserId");
if (returnNode != null)
{
return returnNode.text;
}
else
{
return null;
}
} - Hallo,
ohne es genau zu überprüfen, der Aufruf der Funktion HideTab() muss auf jedem Fall ans Ende des Scripts.
Viele Grüße
Michael Sulz
axcentro GmbH
MVP für Microsoft Dynamics CRM - Auch das hilft leider nicht.
Herr Sulz folgendes Skript haben sie in einem früheren Beitrag gepostet.
Kann man sich in diesem Skript auch die Sicherheitsrolle des jeweiligen Users ausweisen lassen?
Falls ja, wie?
VG
Hier das Skript:
function GetCurrentUserInfo()
{
var SERVER_URL = " http://CRM " ;
var xmlhttp = new ActiveXObject( "Msxml2.XMLHTTP" );
xmlhttp.open( "POST" , SERVER_URL + "/mscrmservices/2007/crmservice.asmx" , false );
xmlhttp.setRequestHeader( "Content-Type" , "text/xml; charset=utf-8" );
xmlhttp.setRequestHeader( "SOAPAction" , " http://schemas.microsoft.com/crm/2007/WebServices/Execute " );
var soapBody = "<soap:Body>" +
"<Execute xmlns=' http://schemas.microsoft.com/crm/2007/WebServices'>" +
"<Request xsi:type='WhoAmIRequest' />" +
"</Execute></soap:Body>" ;
var soapXml = "<soap:Envelope " +
"xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' " +
"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " +
"xmlns:xsd='http://www.w3.org/2001/XMLSchema'>" ;
soapXml += GenerateAuthenticationHeader();
soapXml += soapBody;
soapXml += "</soap:Envelope>" ;
xmlhttp.send(soapXml);
xmlDoc= new ActiveXObject( "Microsoft.XMLDOM" );
xmlDoc.async= false ;
xmlDoc.loadXML(xmlhttp.responseXML.xml);
var userid = xmlDoc.getElementsByTagName( "UserId" )[0].childNodes[0].nodeValue;
var buid = xmlDoc.getElementsByTagName( "BusinessUnitId" )[0].childNodes[0].nodeValue;
var orgid = xmlDoc.getElementsByTagName( "OrganizationId" )[0].childNodes[0].nodeValue;
alert( "UserId: " + userid + "\r\nBusinessUnitId: " + buid + "\r\nOrganizationId: " + orgid);
} - Hallo
@ CSN22: könntest du vielleicht mal dein finales script hier posten wie du es letztendlich umgesetzt hast?
VG gerne, hier das fertige Skript (eingebaut im OnLoad-Ereignis des Hauptformulars der Entität "Firma"):
GrußReadOnly(); function ReadOnly() { var allowedRoles = [ "Mustermann, Max", "Schmidt, Stefan", "Testmeier, Dirk" ]; var roleAllowed = IsRoleAllowed(allowedRoles); if (! roleAllowed) { crmForm.all.new_feld1.disabled = true; crmForm.all.new_feld1.readonly = true; crmForm.all.new_feld2.disabled = true; crmForm.all.new_feld2.readonly = true; crmForm.all.new_feld3.disabled = true; crmForm.all.new_feld3.readonly = true; } } function IsRoleAllowed(allowedRoles) { var result = GetCurrentUserInfo(); var foundResult = false; for (i=0;i<=allowedRoles.length;i++) { if (result.indexOf(allowedRoles[i]) > -1) { foundResult = true; break; } } return foundResult; } function GetCurrentUserInfo() { var xml = "" + "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" + GenerateAuthenticationHeader() + " <soap:Body>" + " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" + " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" + " <q1:EntityName>systemuser</q1:EntityName>" + " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" + " <q1:Attributes>" + " <q1:Attribute>businessunitid</q1:Attribute>" + " <q1:Attribute>firstname</q1:Attribute>" + " <q1:Attribute>fullname</q1:Attribute>" + " <q1:Attribute>lastname</q1:Attribute>" + " <q1:Attribute>organizationid</q1:Attribute>" + " <q1:Attribute>systemuserid</q1:Attribute>" + " </q1:Attributes>" + " </q1:ColumnSet>" + " <q1:Distinct>false</q1:Distinct>" + " <q1:Criteria>" + " <q1:FilterOperator>And</q1:FilterOperator>" + " <q1:Conditions>" + " <q1:Condition>" + " <q1:AttributeName>systemuserid</q1:AttributeName>" + " <q1:Operator>EqualUserId</q1:Operator>" + " </q1:Condition>" + " </q1:Conditions>" + " </q1:Criteria>" + " </query>" + " </RetrieveMultiple>" + " </soap:Body>" + "</soap:Envelope>" + ""; var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP"); xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false); xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple"); xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xmlHttpRequest.setRequestHeader("Content-Length", xml.length); xmlHttpRequest.send(xml); var resultXml = xmlHttpRequest.responseXML; var entityNode = resultXml.selectSingleNode("//RetrieveMultipleResult/BusinessEntities/BusinessEntity"); var firstNameNode = entityNode.selectSingleNode("q1:firstname"); var lastNameNode = entityNode.selectSingleNode("q1:lastname"); var fullNameNode = entityNode.selectSingleNode("q1:fullname"); var systemUserIdNode = entityNode.selectSingleNode("q1:systemuserid"); var businessUnitIdNode = entityNode.selectSingleNode("q1:businessunitid"); var organizationIdNode = entityNode.selectSingleNode("q1:organizationid"); return fullNameNode.text; }
CSN22- Ok werde den Code mal ausprobieren.
Muss ich noch etwas spezielles beachten? irgendwelche Anpassungen, die nichts mit den Attributen zu tun haben ändern?
VG und VD
Martin - Habe es auf einem geringfügig anderem Weg gelöst.
Wird auf folgender Seite beschrieben.
Das schöne daran ist, dass es sehr leicht anzupassen ist auf das jeweillige Unternehmen.
http://mscrmblogger.com/2009/09/30/hide-fields-or-tabs-by-role-with-javascript/comment-page-1/#comment-431
Hoffe, dass dies anderen das Leben leichter machen wird :)
@ CSN22: Vielen Dank für deinen Code!
VG

