Startseite > CRM 2011, JavaScript > CRM 2011 – Hilfreiche JavaScript Codeschnipsel

CRM 2011 – Hilfreiche JavaScript Codeschnipsel

Mit CRM 2011 hat sich das Objektmodell für JavaScript geändert. Hier findet ihr ein paar hilfreiche Codeschnipsel für CRM 2011.

Es gibt eine neue Version des Artikels, den ihr hier finden könnt.

Den Wert eines Feldes auslesen
Xrm.Page.getAttribute(“Feldname”).getValue() ;

Den Wert eines Feldes setzen
Xrm.Page.getAttribute(“Feldname”).setValue(‘NeuerWert’);

Den Wert eines Lookup-Feldes auslesen
var lookup = new Array();
lookup = Xrm.Page.getAttribute(„Feldname“).getValue();
lookup[0].id;
lookup[0].name;
lookup[0].entityType

Den Wert eines Lookup-Feldes setzen
var lookup = new Array();
lookup[0] = new Object();
lookup[0].id = ‚GUID des Datensatzes‘;
lookup[0].name = ‚Name des Datensatzes‘
lookup[0].entityType = typeValue;
Xrm.Page.getAttribute(„Feldnam“).setValue(lookup);

Auswahl der Entitäten im Lookup einschränken
document.getElementById(„customerid“).setAttribute(„lookuptypes“, „1″);

Ein Feld anzeigen/verstecken
Xrm.Page.ui.tabs.get(„Feldname“).setVisible(false);
Xrm.Page.ui.tabs.get(„Feldname“).setVisible(true);

Eine Sektion (Tab) anzeigen/verstecken
Xrm.Page.ui.tabs.get(2).setVisible(false);
Xrm.Page.ui.tabs.get(2).setVisible(true);

Anstelle des Indexes für den Tab kann auch der Name des Tabs verwendet werden

Das OnChange Ereignis eines Feldes aufrufen
Xrm.Page.getAttribute(“Feldname”).fireOnChange();

Den ausgewählten Eintrag einer Pickliste auslesen
Xrm.Page.getAttribute(“Feldname”).getSelectedOption().text;

Den Wert einer Pickliste setzen
Xrm.Page.getAttribute(„Feldname“).setValue(parseInt(Wert));

Den Level setzen
Xrm.Page.getAttribute(“Feldname”).setRequiredLevel(“none”);
Xrm.Page.getAttribute(“Feldname”).setRequiredLevel(“required”);
Xrm.Page.getAttribute(“Feldname”).setRequiredLevel(“recommended”);

Focus auf ein Feld setzen
Xrm.Page.getControl(“Feldname”).setFocus(true);

OnSave Ereignis abbrechen
event.returnValue = false;

Schlagwörter: ,
  1. Kolja Tönges
    5. März 2011 um 09:07

    Xrm.Page.getAttribute(“Feldname”).getValue() ;

    scheint bei einem Lookup (… .id) nicht zu funktionieren. Wie heisst der neue Befehl?

    • 7. März 2011 um 14:51

      Ein Lookup ist ein Array, so das du auf den ersten Datensatzes des Arrays zugreifen musst. Ich habe den Artikel entsprechend aktualisiert.

      • Kolja Tönges
        7. März 2011 um 17:26

        Danke! Hat funktioniert.

  2. Kolja Tönges
    7. März 2011 um 17:34

    Beim Tab ausblenden mit

    Xrm.Page.ui.tabs.get(2).SetVisible(false);

    kommt der Fehler:

    „Error: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.“

    Irgendeine Idee warum?

  3. 7. März 2011 um 18:08

    Das war es natürlich, es muss mit kleinem s geschrieben werden

  4. René
    27. September 2011 um 15:07

    Bitte mal dringen die Anführungszeichen ändern!!! Nur oben verwenden sonst knallts bei copy und paste…

  5. 9. Dezember 2011 um 15:11

    Kann man ein Feld auf readonly setzen, ohne es zu deaktivieren?
    Hintergrund: In einem deaktivierten Feld ist auch der Hyperlink (http:…, mailto:…) inaktiv. Ein Benutzer soll den Hyperlink benutzen, aber nicht den Feldinhalt ändern können.

  6. Alan
    31. Mai 2012 um 14:05

    Hallo,
    wie kann ich mir per JavaScript eine Instanz einer Entität aus einem LookUp-Feld ausgeben lassen, sodass ich auf deren Attribute zugreifen kann?

    Danke und Gruß

    • 31. Mai 2012 um 14:24

      Hallo,
      das geht per JavaScript, indem du z.B. über REST Endpoint und oData die benötigten Attribute aus dem CRM holst.

      Viele Grüße
      Michael

  7. Gustav
    26. Juli 2012 um 11:07

    Hey,
    ich habe gerade probiert ein Default Value für Lookup-Felder zu setzen.
    function defaultValues()
    {
    var lookup = new Array();
    lookup[0] = new Object();
    lookup[0].id = ‚{27457CD-3C7C-E011-8E52-1CC1DE7983EB%257d}‘;
    lookup[0].name = ‚Kilowattstunden‘;
    lookup[0].entityType = ‚uomschedule‘;
    Xrm.Page.getAttribute(“defaultuomscheduleid”).setValue(lookup);
    }

    Leider funktioniert dies aber nicht. Habe ich irgendeinen Fehler in meinem Script?

    Danke vorab!

    • Gustav
      26. Juli 2012 um 11:39

      Inzwischen funktioniert es. Ein Problem hierbei ist jedoch, dass er den hier gesetzten Wert nicht als den erkennt, der mit dem identischen Namen in der Datenbank hinterlegt wurde. Liegt wohl daran, dass ich hier eine beliebige Guid einsetzte. Wie kann man dies lösen?
      Danke!

      • 26. Juli 2012 um 11:49

        Hallo,
        du musst natürlich die GUID verwenden, unter dem dieser Datensatz auch in der CRM Datenbank steht, also eine gültige GUID!

      • Kolja Tönges
        26. Juli 2012 um 16:48

        Best practice ist es, solche GUIDs in einer Webressource (bspw. als Jscript-File) abzulegen. Dann kannst Du in sämtlichen Scripts auf diese zentral zugreifen und wenn Du Deine Lösung mal portierst (bspw. von Dev oder Test in Produktiv), kannst Du diese Webressource einfach austauschen, denn GUIDs sind organisationsbezogen.

        Beste Grüsse,

        Kolja Tönges
        ec4u

        Michael Sulz :
        Hallo,
        du musst natürlich die GUID verwenden, unter dem dieser Datensatz auch in der CRM Datenbank steht, also eine gültige GUID!

  8. Gustav
    28. Juli 2012 um 16:45

    Sorry bin leider noch nicht so lange dabei. Wie bekomme ich die Guid dieses Datensatzes? Mit Hilfe von Odata, oder geht es auch weniger kompliziert?

    Danke!

    Michael Sulz :
    Hallo,
    du musst natürlich die GUID verwenden, unter dem dieser Datensatz auch in der CRM Datenbank steht, also eine gültige GUID!

    • 30. Juli 2012 um 07:11

      In so einem Fall schreibe ich die GUID immer fest in den Code, mir ist das Ermitteln über den Webservice zu aufwendig. Wenn du es natürlich dynamisch haben musst, weil es zum Beispiel Bestandteil einer Lösung ist, solltest du es über den Webservice ermitteln.

  9. Enrico
    16. August 2012 um 13:02

    Ich habe ein Script von http://xrmexpertz.com/2012/01/24/lookup-address-for-custom-entities-in-crm-2011/ für die Entität Anfrage angepasst. Mit Hilfe der obigen Codeschnipsel konnte ich auch einen Fehler anpassen (getFieldValue). Damit wird der Dialog „Adresse nachschlagen“ auf der Entitä Anfrage auch angezeigt. Ich kann die Adresse auswählen, aber leider werden die Felder new_address1_name etc nicht gefüllt. Ich vermute es liegt an den setFieldValue Funktionen. Kann jemand den Fehler entdecken?

    function CustomLookup() {
    var aoItems = new Array();
    aoItems = Xrm.Page.getAttribute(„customerid“).getValue();
    aoItems[0].id;
    aoItems[0].name;
    aoItems[0].entityType
    if (aoItems == null) {
    alert(„Account is not Selected“);
    return;
    }
    var _object = openStdDlg(„/sfa/quotes/dlg_lookupaddress.aspx?headerForm=1&parentType=1&parentId=“ + aoItems[0].id + „&willCall=0“, „LookupAddress“, 500, 330, true);
    if (object) {
    PopulateBillToAddress(object);
    PopulateShipToAddress(object);
    }
    }
    function PopulateBillToAddress(object) {
    if (object.BillTo) {
    setFieldValue(„new_address1_name“, object.Address.Name);
    setFieldValue(„new_address1_line1“, object.Address.Line1);
    setFieldValue(„new_address1_line2“, object.Address.Line2);
    setFieldValue(„new_address1_line3“, object.Address.Line3);
    setFieldValue(„new_address1_city“, object.Address.City);
    setFieldValue(„new_address1_state“, object.Address.StateOrProvince);
    setFieldValue(„new_address1_zip“, object.Address.PostalCode);
    setFieldValue(„new_address1_country“, object.Address.Country);
    }
    }
    function PopulateShipToAddress(object) {
    if (object.ShipTo) {
    setFieldValue(„new_address2_name“, object.Address.Name);
    setFieldValue(„new_address2_line1“, object.Address.Line1);
    setFieldValue(„new_address2_line2“, object.Address.Line2);
    setFieldValue(„new_address2_line3“, object.Address.Line3);
    setFieldValue(„new_address2_city“, object.Address.City);
    setFieldValue(„new_address2_state“, object.Address.StateOrProvince);
    setFieldValue(„new_address2_zip“, object.Address.PostalCode);
    setFieldValue(„new_address2_country“, object.Address.Country);
    }
    }
    function setFieldValue(fieldName, fieldValue) {
    Xrm.Page.getAttribute(fieldName).setValue(fieldValue);
    }

    Danke

    • 18. August 2012 um 19:05

      Hallo,
      dann solltest du dich auch an den ursprünglichen Verfasser wenden oder deine Frage in einem Forum stellen. Ich beantworte hier nur Fragen zu meinen eigenen Artikeln.

  10. Enrico
    21. August 2012 um 09:57

    Ok, trotzdem danke für deine Codeschnipsel, die mich erst auf den Fehler aufmerksam gemacht haben. Den weiteren Fehler im Code habe ich inzwischen auch finden können: die _object muss in object (ohne Unterstrich) geändert werden und es funktioniert. So kann man aus jeder beliebigen Entität auf die Adressen des Kontakts oder der Firma zugreifen.

  1. No trackbacks yet.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: