[Gelöst] Private Felder

11. September 2009 09:14

Hallo zusammen,

ist es möglich, private Felder in CRM 4 einzufügen. D.h. Felder die nur der Besitzer sieht und drauf Zugriff hat.
Hintergrund ist der, dass es eventuell prekäre Unternehmensinformationen gibt, die aus Datenschutzrechtlichen Gründen nicht jeder Mitarbeiter, der ins CRM gucken kann (wir benutzen es zB. auch als Telefonbuch für unsere Berater), wissen darf.

Danke für Eure Hilfe. :)

Ciao,
Christian
Zuletzt geändert von CK82 am 11. September 2009 11:25, insgesamt 1-mal geändert.

Re: Private Felder

11. September 2009 10:02

Hallo Christian,

ja, das ist möglich.

Entweder blendest du die Felder einfach per JavaScript aus, wobei das keinen vollständigen Schutz der Felder bedeutet, da diese immer noch in der erweiterten Suche und Drucken angezeigt werden. Das entsprechende Java Script, um die UseID zu ermitteln:
Code:
   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); 
    
   } 


Oder du kaufst eine Partnerlösung, die die Ausgabe des Servers abfängt und das Feld nur noch an berechtigte Benutzer ausliefert. Ich weiß, dass es diese Lösung bereits zu kaufen gibt, habe aber den Link gerade nicht zur Hand. Einfach mal ein bisschen in Bing stöbern.

Re: Private Felder

11. September 2009 11:21

Ok - ich habs im Onload Ereignis gelöst (mit einigen Blogs als Hilfe)... Gestern Abend hab ich mir doch sehr lange den Kopf drüber zerbrochen. War wohl schon zu spät :)


Code:
crmForm.all.new_notiz.parentElement.parentElement.parentElement.style.display = "none";
   
var SERVER_URL = "http://server";
 
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 useridObject = "{" + xmlDoc.getElementsByTagName("UserId")[0].childNodes[0].nodeValue + "}";
var userid = useridObject.toUpperCase();
var owneridObject = crmForm.all.ownerid.DataValue;
var owner = owneridObject[0].id;

var buid = xmlDoc.getElementsByTagName("BusinessUnitId")[0].childNodes[0].nodeValue;

var orgid = xmlDoc.getElementsByTagName("OrganizationId")[0].childNodes[0].nodeValue;

//Debug Alert um zu testen
//alert("UserId: " + userid + "\r\nBusinessUnitId: " + buid + "\r\nOrganizationId: " + orgid + "\r\nOwner ID: "+ owneridObject + "\r\nOwner GUID: " + owner);

if(userid == owner)
{
  //Debug Alert um zu testen
  //alert("IF-Bedingung Funktioniert");
  crmForm.all.new_notiz.parentElement.parentElement.parentElement.style.display = '';
}
else
{
  //Debug Alert um zu testen
  // alert("IF-Bedingung funktioniert nicht!");
}
Zuletzt geändert von CK82 am 11. September 2009 11:24, insgesamt 1-mal geändert.

Re: Private Felder

11. September 2009 11:24

michael sulz hat geschrieben:Hallo Christian,

ja, das ist möglich.

Entweder blendest du die Felder einfach per JavaScript aus, wobei das keinen vollständigen Schutz der Felder bedeutet, da diese immer noch in der erweiterten Suche und Drucken angezeigt werden. Das entsprechende Java Script, um die UseID zu ermitteln:

Oder du kaufst eine Partnerlösung, die die Ausgabe des Servers abfängt und das Feld nur noch an berechtigte Benutzer ausliefert. Ich weiß, dass es diese Lösung bereits zu kaufen gibt, habe aber den Link gerade nicht zur Hand. Einfach mal ein bisschen in Bing stöbern.


Danke für den Hinweis. Ich werde das meinen Chefs so dann komunizieren.
Wenn ich das Notizfeld als "Nicht durchsuchbar" definiere, dürfte das eigentlich nicht in den Index aufgenommen werden oder?

Re: [Gelöst] Private Felder

11. September 2009 11:43

Hallo Christoph,

nicht durchsuchbar hat erst einmal nichts mit einem Index zu tun. Dieser Eintrag bewirkt lediglich, dass das Feld in der Erweiterten Suche angezeigt wird oder nicht.