close
Kaspersky Endpoint Security

Welcome to

Kaspersky Endpoint Security


By Kaspersky Endpoint Security


In vCenter Endpoint - vRealize Automation Serie Teil 8



Das CRM-2013 SDK stellt fest, dass jQuery in Form Skripte und Band-Befehle wird nicht empfohlen. Wie rufe ich (oder erstellen, zu aktualisieren, zu löschen) Attributwerte für einen verknüpften Datensatz mit Hilfe von JavaScript? Es stellt sich heraus, dass das XMLHttpRequest-Objekt zu manipulieren, Ajax und den OData-Endpunkt ist der Schlüssel.

Darüber hinaus werde ich den Einsatz von mehreren neuen XRM Methoden, einschließlich der "Save", "Alertdialog" und "getClientUrl" Methode zu machen. Also, hier gehen wir!

CRM 2013 xRM Methoden

In einem früheren Beitrag habe ich erläutert. In diesem Beitrag werde ich mehrere xRM Methoden aus dem CRM 2013 SDK (Version 6.0.2 zum Zeitpunkt des Schreibens) verwenden unter:

  • Xrm.Page.data.entity.save (null | "saveandclose" | "saveandnew") Speichert den Datensatz synchron mit den Optionen, um das Formular oder öffnen Sie eine neue Form zu schließen, nachdem die Daten gespeichert sind.
  • Xrm.Page.data.save (). Dann (successCallback, errorCallback) Speichert den Datensatz asynchron mit der Option Callback-Funktionen einzustellen ausgeführt werden, nachdem der Vorgang abgeschlossen ist speichern.
  • Xrm.Utility.alertDialog (Meldung, onCloseCallback) Zeigt eine (non-blocking) Dialogfeld eine anwendungsdefinierte Nachricht enthält. Diese Methode ist nur für aktualisiert Einheiten zur Verfügung und wird für Tabletten für CRM arbeiten (die nicht die Verwendung von JavaScript-Funktionen erlaubt, die den Fluss von Code-Block). Die "onCloseCallback" Funktion ausgeführt wird, wenn ein Benutzer auf die Schaltfläche "OK" des Dialogs klickt.
  • Xrm.Page.context.getClientUrl () Gibt die Basis-URL, die verwendet wurde, die Anwendung zuzugreifen. Diese Methode wird verwendet, um die veralteten "getServerUrl" Methode zu ersetzen.

Lassen Sie uns ein Beispiel an, wo die oben genannten Methoden von Nutzen sein könnten.

Beispiel

Angenommen, Sie haben eine Anforderung wie dieses:

  • Ein Benutzer öffnet ein Kontakt-Formular in CRM 2013.
  • Wenn der Benutzer ein bestehendes Konto als "Übergeordneter Kunde" auf der Kontakt-Formular setzt, fragen Sie den Benutzer, wenn die Adresse des Kontakts sollten an die Adresse des Konto kopiert werden.
  • Wenn ja, dann kopieren Sie die Informationen aus dem Konto mit dem Kontakt und den Kontaktdatensatz zu speichern. Zeigen Sie eine Nachricht anschließend den Benutzer darüber zu informieren, ob die Adressinformation wurde erfolgreich von dem Konto auf den Kontakt kopiert.
  • Wenn der Benutzer über ein Konto aus dem "Parent Kunde" Feld auf dem Kontaktformular löscht, fragen Sie den Benutzer, wenn die Adresse des Kontakts sollten ebenfalls gelöscht. Wenn ja, dann löschen Sie die Kontaktadressfelder und den Kontaktdatensatz zu speichern.

In Wirklichkeit sollten die Anforderungen wahrscheinlich ein bisschen mehr beteiligt sein. Zum Beispiel, wenn das Adressfeld des Mutter Kunde ist leer, und der Benutzer antwortet, dass es in den aktuellen Kontakt kopiert werden soll, dann wird dies eventuell bereits vorhandene Adresse zu löschen. Um jedoch die Präsentation hier zu vereinfachen, halten wir uns an die oben genannten Anforderungen.

Zum Beispiel können die beiden durch die oben beschriebenen Felder sind die "Parent Kunde" und "Address" (composite) Felder:

Wie würde man gehen über diese Forderung der Bewältigung? Es gibt viele Möglichkeiten, wie Sie dies tun können. Z. B., sollten Sie einen Dialog der Einrichtung um den Benutzer zu fragen, ob er die Adressinformationen zu kopieren will. Wenn ja, treten ein Kind Workflow ab, dies zu tun, oder verwenden Sie eine Kombination aus JavaScript und Backend-Plugin-Code.

Für den Zweck dieser Stelle werde ich jedoch Ajax verwenden, um mit dem XMLHttpRequest-Objekt in JavaScript zu arbeiten:

Die "OnChange" Ereignis der "Eltern Kunde" Feld des Kontakts löst eine JavaScript-Methode, die Folgendes bewirkt:

    Überprüfen Sie, ob die "Parent Kunde" Feld leer oder auf ein bestehendes Konto Datensatz gesetzt. Wenn "Parent Kunde" auf ein Konto Datensatz gesetzt ist, bitten Sie den Benutzer, wenn er das Konto der will Adresse auf den neuen Kontaktdatensatz kopiert werden. Wenn "Parent Kunde" auf leer gesetzt ist, bitten Sie den Benutzer, wenn er die Kontaktadresse will gelöscht werden. Wenn ja, um (2), rufen Sie die Adressinformationen und kopieren Sie diese in das Adressfeld des Kontaktdatensatz. Wenn ja bis (3), löschen Sie die Adressinformationen aus dem Kontaktdatensatz.

Sie können Schritt (4) in mindestens zwei verschiedene Arten in der Tat mit Ajax: mit einem OData-Endpunkt oder einen SOAP-Endpunkt (die wunderbare neue detaillierte siehe Abschnitt "Verwenden Sie Web-Service-Daten in Web-Ressourcen - OData und Moderne App SOAP-Endpunkt" im CRM 2013 SDK (Version 6.0.2 zum Zeitpunkt des Schreibens), wenn Sie nicht wissen, was ich rede.

Wie ich OData in diesem Beitrag bin mit (daher der Titel, Leute!), Das erste, was ich testen, ist die OrganizationData Web-Service in CRM 2013 ein bestimmtes Konto Datensatz über seine GUID abzurufen. Auch hier ist das CRM 2013 SDK Ihr Freund, wenn Sie nicht wissen, wie die OData-Endpunkte zur Abfrage verwenden.

Zum Glück in der Welt des CRM 2013 die gleiche OData URI wie in CRM 2011, wirkt wie ein Zauber und liefert die richtigen Informationen Konto, wenn ich die folgende OData URL in IE10 getestet (die unformatierte Hinblick auf das Ergebnis zu sehen, müssen Sie möglicherweise ausschalten Feed Leseansicht im IE 10 über Internetoptionen> Inhalt> Feeds und Web Slices Einstellungen> un-tick "Turn on Feed lesen view").

Name> / <CRM-Organisation Name>/XrmServices/2011/OrganizationData.svc/AccountSet?(guid’XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX’)

CRM 2013 SDK sagt Vermeiden Sie jQuery-Bibliothek mit Formular Scripts und Ribbon-Befehle!

Jetzt, da wir die OData URL, in der guten alten Zeit von CRM 2011 können Sie entweder:

    arbeiten mit einheimischen XMLHttpRequest-Objekt, indem Sie den OData URL einschließlich und die Anfrage an den Server direkt zu senden, oder die jQuery-Bibliothek laden und $ .ajax Methode verwenden, um einen Wrapper für das XMLHttpRequest-Objekt ist.

gehen, um den Unterschied in der Syntax zu sehen, in das CRM 2013 SDK und schauen Sie sich die Code-Beispiele gegeben in "Verwenden Sie den OData-Endpunkt mit Ajax und JScript Web-Ressourcen".

Aber!!

Das CRM-2013 SDK (Version 6.0.2 zum Zeitpunkt des Schreibens) hat eine große mutige Aussage, die sagt:

"Wir empfehlen nicht jQuery in Form Skripte und Band-Befehle. Die meisten der Vorteile von jQuery vorgesehen ist, dass es für einfache Quer Browser Manipulation des DOM ermöglicht. Dies ist ausdrücklich nicht unterstützt in Form Skripte und Band-Befehle. "Ein Ort, der CRM 2013 SDK die Verwendung von jQuery empfiehlt, wenn Sie Ihre eigene HTML-Web-Ressourcen erstellen, um" Benutzerschnittstellen zur Verfügung stellen, weil es eine ausgezeichnete Cross-Browser-Bibliothek [ist .. ], und es gibt keine Beschränkung gegen das DOM manipulieren. "

Leider verschiedene Versionen von jQuery-Bibliothek geladen interferiert miteinander in CRM 2013 und während seiner Verwendung wird nicht mehr in CRM 2013 empfohlen wird, können Sie dies für "Konflikt" (für weitere Informationen siehe diesen ausgezeichneten) durch Überprüfung zu mildern.

Wenn Sie also insgesamt jQuery-Bibliothek zu vermeiden wollen, aber Sie wollen immer noch abrufen (oder erstellen, aktualisieren oder löschen) Attribute einer Entität Datensatz, müssen Sie mit dem nativen "XMLHttpRequest" Objekt vom Browser zur Verfügung gestellt zu arbeiten.

Zum Glück hat sich das JavaScript für XMLHttpRequest-Objekt Manipulation nicht geändert. Ein wesentlicher Unterschied zu achten ist, dass, wenn Sie die OData URI bauen "context.getServerUrl ()" ab CRM 2011 ist veraltet und es funktioniert auf jeden Fall nicht in CRM 2013 Use "Xrm.Page.context.getClientUrl () " stattdessen. Die "XMLHttpResponse", wo das zurückgegebene Objekt in JSON-Format (wie durch den Request-Header gesetzt) ​​sieht wie folgt aus:

Konvertieren Sie den Text des JSON-Objekt in JavaScript-Skript mit "JSON.parse (...)", um das Ergebnis leichter zu manipulieren.

JSON.parse (this.responseText) .d

Wenn Sie weitere Informationen benötigen, mit "XMLHttpRequest / Response" Objekte für den Umgang und was die "Readystate" und Statuscodes bedeuten, versuchen Sie entweder die oder das CRM 2013 SDK.

OData und JavaScript in Aktion ...

Schauen wir uns die eigentliche JavaScript-Funktionen einen Blick. Nur relevante Funktionen der xRM oben genannten Methoden enthalten, werden unten bekannt gegeben. Wenn Sie den Code arbeiten für Ihr CRM 2013-Umgebung sehen möchten, müssen Sie Ihre eigene JavaScript-Bibliothek mit einem eindeutigen Namespace zu erstellen, und die Funktionen unten kopieren.

Überprüfen Sie, ob "Parent Kunde" Feld leer oder auf ein bestehendes Konto Datensatz gesetzt.

Wenn "Parent Kunde" auf ein Konto Datensatz gesetzt ist, fragt den Benutzer, wenn er das Konto der Adresse will den neuen Kontaktdatensatz kopiert werden.

Wenn "Parent Kunde" auf leer gesetzt ist, fragt den Benutzer, wenn er die Kontaktadresse will gelöscht werden.

Haken Sie diese Methode, um // die "OnChange" Ereignis von "parentcustomerid" Nachschlag

Endpoint-Security 2013     Endpoint-Security 2016

Categories and tags