Attributseigenschaften aus dem Formulareditor erreichen

Erweiterung des Formulareditors um einen zusätzlichen Link zu den Attributeigenschaften


 


 


Leider ist es nicht im Standard möglich, direkt aus dem Formulareditor auf die Attributeigenschaften zu gehen, um dort weitere Informationen zu einem bestimmten Feld zu erhalten. So möchte man beispielsweise die Länge eines Textfeldes sehen oder welche Listeneinträge eine Picklist besitzt.


 


Mit den nachfolgenden Änderungen ist dieses jedoch ohne weiteres möglich. Hierbei wird dem Formulareditor eine zusätzliche Schaltfläche hinzugefügt, über die man direkt in die Attributseigenschaften gelangt.


 


 



VORSICHT: Es handelt sich um eine unsupportete Erweiterung, da eine aspx-Datei verändert und eine zusätzliche Datei im CRM-Verzeichnis erstellt wird. Der Einsatz in einer Produktivumgebung ist somit also nicht zu empfehlen. Vor den nachfolgenden Änderungen sind entsprechende Sicherungen durchzuführen.


 


 


1. Schritt: Anzeige einer zusätzlichen Schaltfläche, die den Formulareditor aufruft


 


Der Formulareditor befindet sich in der folgenden Datei:


[..]\Microsoft CRM\CRMWeb\Tools\FormEditor\formeditor.aspx


 


Dort die folgenden Änderungen vornehmen:


 


function window.onload()


{


loadXmls();


 


SetPreviewXml();


 


Previewer.fieldXml.defaultValue                     = Previewer.fieldXml.value;


Previewer.propertiesXml.defaultValue = Previewer.propertiesXml.value;


Previewer.formXml.defaultValue                      = Previewer.formXml.value;


 


tabs.firstChild.click();


 


focus();


 


addNewWizard();


 


}


 


function addNewWizard() {


  var trNodes;


  trElements = document.documentElement.getElementsByTagName("TR");


  var trViewFormProperties;


  for (var i = 0; i<trElements.length; i++) {


    if (trElements[i].attributes.getNamedItem("onclick").value == "ViewFormProperties();") {


      trViewFormProperties = trElements[i];


    }


  }


  var tableWizards;


  tableWizards = trViewFormProperties.parentNode.parentNode;


  var tr1NewWizard;


  tr1NewWizard = tableWizards.insertRow(tableWizards.rows.length-1);


  var td1NewWizard;


  td1NewWizard = tr1NewWizard.insertCell();


  td1NewWizard.setAttribute("colSpan", 2);


  td1NewWizard.innerHTML = '<HR style="WIDTH: 120px; COLOR: #cccccc" SIZE=1>'


  var tr2NewWizard;


  tr2NewWizard = tableWizards.insertRow(tableWizards.rows.length-1);


  tr2NewWizard.setAttribute("title", "Zeigt die Attributeigenschaften des Felds an.");


  tr2NewWizard.setAttribute("className", "wizItem");


  tr2NewWizard.attachEvent("onclick", ViewAttributeProperties);


  var td21NewWizard;


  td21NewWizard = tr2NewWizard.insertCell();


  td21NewWizard.innerHTML = '<IMG id=_Attributeigenschaften src="../vieweditor/imgs/16_colProps.gif">';


  td21NewWizard.setAttribute("className", "wizItem");


  var td22NewWizard;


  td22NewWizard = tr2NewWizard.insertCell();


  td22NewWizard.setAttribute("className", "wizText");


  td22NewWizard.setAttribute("tabIndex", "0");


  td22NewWizard.innerHTML = 'Attributeigenschaften';


  td22NewWizard.attachEvent("onkeyup", AccessibilityClick);


}


 


function ViewAttributeProperties() {


  var oActive;


  oActive = _oActive;


  if (oActive != null) {


    if (oActive.className == "cell") {


      ViewAttributePropertiesHelper(oActive);


    } else {


      alert("Type '" + oActive.className + "' is not supported by this feature.");


    }


  }


  else {


    alert("Please select a cell.");


  }


}


 


function ViewAttributePropertiesHelper(oActive) {


  var request = new ActiveXObject("Microsoft.XMLHTTP")


  request.onreadystatechange = function() {


   if (request.readyState == 4) {


      var response = request.responseText;


      window.open("../SystemCustomization/Attributes/manageAttribute.aspx?attributeId={" + response + "}", "_blank", "width=800,height=600,status=1,resizable=1,scrollbars=0");


   }


  }


  var entityName = oFieldsXml.selectSingleNode("/entity").attributes.getNamedItem("name").value;


  var attributeName = oActive.name;


  request.open("GET", "GetAttributeGuid.aspx?EntityName=" + entityName + "&AttributeName=" + attributeName);


  request.setRequestHeader("If-Modified-Since", "Sun, 18 Jun 2006 10:38:00 GMT");


  request.send(null); 


}


 


 


2. Schritt: Damit die Schaltfläche an die interne Attributes-ID herankommen kann, muss dazu eine entsprechende Webanwendung geschrieben werden.


 


Die folgende neue Datei erstellen:


[..]\Microsoft CRM\CRMWeb\Tools\FormEditor\GetAttributeGuid.aspx


 


<%@ Page Language="C#" AutoEventWireup="true" %>


<script runat="server">


    protected void Page_Load(object sender, EventArgs e)


    {


        string cnString = "server=crm;database=Combeck_METABASE;Trusted_Connection=true";


        string entityName = Request.QueryString["EntityName"];


        string attributeName = Request.QueryString["AttributeName"];


        if (entityName == null || attributeName == null) {


            this.Response.Write("");


            return;


        }


        System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(cnString);


        string sql = "SELECT Attribute.AttributeId FROM Attribute INNER JOIN Entity ON Attribute.EntityId = Entity.EntityId WHERE Entity.Name = @EntityName AND Attribute.Name = @AttributeName";


        System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, cn);


        cmd.Parameters.Add("@EntityName", entityName);


        cmd.Parameters.Add("@AttributeName", attributeName);


        cn.Open();


        string attributeId = cmd.ExecuteScalar().ToString();


        cn.Close();


        this.Response.Write(attributeId);


    }


</script>


 


In der Zeile


        string cnString = "server=crm;database=Combeck_METABASE;Trusted_Connection=true";


muss hierbei der Name des CRM-Server und der Datenbank angegeben werden.


 


 


Für Fragen und Anregungen hierzu und zu weiteren Dingen ist der Autor Jürgen Beck gerne unter [email protected] erreichbar.



AW: Attributseigenschaften aus dem Formulareditor erreichen

Hallo Juergen,


mich würde primär interessieren wie ich überhaupt an den Formulareditor, oder eine andere Möglichkeit herankomme um die CRM-Sites zu modifizieren. Hast du einen Tip oder ein Schlagwort für mich!?


Danke.


Jann



Re: AW: Attributseigenschaften aus dem Formulareditor erreichen

Der Formulareditor befindet sich in der folgenden Datei:


[..]\Microsoft CRM\CRMWeb\Tools\FormEditorformeditor.aspx


Dort kann man per JScript praktisch alle Änderungen durchführen, die generell technisch möglich sind. Aber selbstverständlich alles undokumentiert und unsupported. Schließlich soll die nächste Version ja auch noch funktionieren...