· Pauline · How-to · 7 min read
Custom Button in Dynamics 365: Journeys mit einem Klick triggern
Erfahre, wie du einen Custom Button in der Dynamics-365-Command-Bar erstellst, der eine Customer-Insights-Journey per JavaScript über einen Custom Trigger startet.
Bitte beachten: Der Inhalt ist zum Zeitpunkt der Erstellung korrekt. Es ist möglich, dass Microsoft in der Zwischenzeit Änderungen vorgenommen hat.
Was wäre, wenn wir einen Button in der Ribbon-/Command-Bar hätten, der Journeys in Dynamics 365 auslöst? Aber wie erstellst du überhaupt einen neuen Button in der Command Bar – und wie kann er als Trigger fungieren?
In meinen vorherigen Artikeln habe ich dir bereits gezeigt, wie du Custom Trigger in Journeys nutzen kannst. In den meisten Fällen hat der Trigger dann einen Power Automate ausgelöst. Oder wir nutzen natürlich den Dataverse-Trigger, der feuert, wenn ein Datensatz erstellt wird oder ein Feld aktualisiert wird. Diese Low-Code/No-Code-Varianten sind einfach umzusetzen – aber heute gehen wir einen Schritt weiter. Mit einem Custom Trigger und JavaScript in Dynamics 365.
Jedes Mal, wenn der Button in der Ribbon Bar auf dem Kontaktformular geklickt wird, soll eine E-Mail versendet werden.
Also: Los geht’s – wir bauen den Button.
Schritt 1: Button in der Command Bar erstellen
Um einen Button zur Command Bar hinzuzufügen, gehst du in deine Solution und fügst die Contact-Tabelle hinzu.

Erstelle ein neues Command und wähle im erscheinenden Popup „Main form“ aus, da wir den Button auf dem Kontaktformular hinzufügen möchten.


Wir können den neuen Button im modernen Designer erstellen. Vergib einen Label-Text und wähle ein Icon aus der Library aus. Das JavaScript aus dem Trigger tragen wir später im Action-Bereich ein. Zuerst kannst du Tooltip-Infos hinzufügen und festlegen, ob der Button angezeigt oder ausgeblendet werden soll. Per Drag & Drop platzierst du den Button an der gewünschten Stelle in der Command Bar.

Bevor wir hierher zurückkommen, erstellen wir jetzt zuerst den Trigger in Customer Insights.
Schritt 2: Trigger erstellen
Ich bin sicher, ich muss dir nicht im Detail erklären, wie du einen neuen Trigger erstellst. Also halten wir es kurz: In der Customer Insights Journeys App erstelle ich einen Custom Trigger mit dem Attribut und Datentyp Contact. Weitere Attribute füge ich nicht hinzu. Dann klicke ich auf Next, Next und Ready to Use.
Sobald der Trigger erstellt ist, kannst du auf Go to code snippet klicken. Dort bekommst du den JavaScript-Code und den Code für das initiale Setup des Skripts. Der Initial-Code erscheint, wenn du auf den One-time set up link klickst.
Dieses Skript packen wir später in eine Web Resource und hängen es dann an den Button. Aber zuerst müssen wir den Code anpassen.



Schritt 3: Ein bisschen Code-Magie
Ich nutze dafür am liebsten Visual Studio Code, weil ich den Code dort viel leichter anpassen und erweitern kann. Sonst wird es schnell unübersichtlich. Dort füge ich zuerst den Initial-Code ein und danach den JavaScript-Code aus unserem Trigger.
Wenn wir das jetzt so lassen, würde der Trigger direkt nach dem Klick auf den Button feuern und die E-Mail senden. Das ist natürlich okay – aber ich finde es etwas heikel. Was, wenn jemand aus Versehen auf den Button klickt? Dann lässt sich die E-Mail nicht mehr stoppen.
Deshalb bauen wir zur Sicherheit einen Bestätigungsdialog ein. Wenn der User auf den Button klickt, öffnet sich ein Dialog – und der Trigger wird nur aktiviert, wenn der User auf OK klickt.
Im Code müssen wir außerdem definieren, für welchen Kontakt der Trigger gestartet werden soll. Dafür ergänzen wir den Parameter primaryControl. Den brauchen wir, um Informationen zum Execution Context (Form Context oder Grid Context) an die JavaScript-Funktion zu übergeben. So bekommen wir die Variable contactid – also die GUID des Kontakts. Und die müssen wir im Trigger-JavaScript nach der authId setzen. Nur so weiß die Journey, welcher Kontakt die E-Mail erhalten soll.
Speichere den Code als Datei. Der fertige Code sieht dann so aus:
//initial code from the trigger:
(function (a, t, i) { const e = "MSEI"; const s = "Analytics"; const o = e + "queue"; a[o] = a[o] || []; const r = a[e] || function (n) { const t = {}; t[s] = {}; function e(e) { while (e.length) { const r = e.pop(); t[s][r] = function (e) { return function () { a[o].push([e, n, arguments]) } }(r) } } const r = "track"; const i = "set"; e([r + "Event", r + "View", r + "Action", i + "Property", i + "User", "initialize", "teardown"]); return t }(i.name); const n = i.name; if (!a[e]) { a[n] = r[s]; a[o].push(["new", n]); setTimeout(function () { const e = "script"; const r = t.createElement(e); r.async = 1; r.src = i.src; const n = t.getElementsByTagName(e)[0]; n.parentNode.insertBefore(r, n) }, 1) } else { a[n] = new r[s] } if (i.user) { a[n].setUser(i.user) } if (i.props) { for (const c in i.props) { a[n].setProperty(c, i.props[c]) } } a[n].initialize(i.cfg) })(window, document, {
src: "https://download.pi.dynamics.com/sdk/web/msei-0.js",
name: "msdynmkt",
cfg: {
ingestionKey:"cbe10dd607934e80bed9e498c1a1759d-1b54873a-1542-..."
}
});
//the javascript of the trigger, add the primaryControl in the brackets:
function track_msdynmkt_copyofrequestconsent_140916360(primaryControl) {
const confirmStrings = {
//label and description of the confirmation dialog
text: "By confirming this dialog an email will be send to this contact. Choose wisely.",
title: "Are you sure?"
};
//design on the confirm options
const confirmOptions = {
height: 200,
width: 450
};
//setting the variables for the primarycontrol and the contactid
const formContext = primaryControl;
const contactid = formContext.data.entity.getId();
//starting the confirmDialog
Xrm.Navigation.openConfirmDialog(confirmStrings, confirmOptions).then(
function (success) {
if (success.confirmed) {
//when the use clicks on Ok the rest of the trigger code will be executed
console.log("Dialog closed using OK button.");
window["msdynmkt"].setUser({authId: contactid}); // ID, e-mail or phone number - see instructions
window["msdynmkt"].trackEvent({
name: "msdynmkt_copyofrequestconsent_140916360", //Trigger title: Request Consent
ingestionKey : "cbe10dd607934e80bed9e498c1a1759d-1b54873a-",
version: "1.0.0" ,
properties: {
"bindingid" : "12345"
}
})
//a notification is shown
formContext.ui.setFormNotification("The email was sent. Congratulations!", "WARNING");
} else {
//nothing happens
}
}
);
}Schritt 4: Web Resource erstellen
Jetzt erstellen wir die Web Resource und fügen dort unseren Code ein. Dafür gehst du zurück in die Power Apps, wo wir den Button erstellt haben. Denn jetzt kommen wir zum Action-Teil. Dort kannst du zwischen PowerFX und JavaScript wählen. Wähle im Action-Bereich „JavaScript“ aus.
In der Library kannst du eine bestehende Script Library nutzen und dein Skript aus dem vorherigen Kapitel hinzufügen. Oder du erstellst eine neue Web Resource. Gib der Web Resource einen passenden Namen, wähle als Typ JavaScript aus und lade dort deine Skript-Datei hoch.



Zurück im Power-Apps-Designer wählst du deine gewünschte Library aus. Danach trägst du im Feld darunter den Function Name ein. In unserem Beispiel ist das track_msdynmkt_copyofrequestconsent_140916360. Den Namen findest du im Trigger-JavaScript.
Im Bereich darunter fügst du den Parameter PrimaryControl hinzu. Wie oben erwähnt, brauchen wir ihn im Code, um die Kontakt-GUID zu bekommen.
Natürlich alles veröffentlichen – und dann kommen wir zum letzten Schritt.
Schritt 5: Journey erstellen
Jetzt der einfachste Teil: Erstelle eine triggerbasierte Journey, die mit unserem Trigger startet und dann eine E-Mail sendet. Journey veröffentlichen.
Ein letzter Test
Schauen wir uns den Button im Kontaktformular an und testen, ob alles funktioniert.

Zusammenfassung
In diesem Artikel haben wir gelernt, wie du einen benutzerfreundlichen Button in der Ribbon-/Command-Bar erstellst, der eine Journey in Dynamics 365 Customer Insights auslöst. Vom Erstellen des Buttons über das Anpassen des JavaScript-Codes bis hin zum finalen Veröffentlichen der Journey sind wir jeden Schritt durchgegangen.
Die Möglichkeiten mit Custom Buttons sind endlos. In Zukunft könnten wir zum Beispiel Buttons bauen, die verschiedenste Automationen auslösen – etwa Follow-up-E-Mails versenden oder komplexere Marketing-Kampagnen starten. Wie immer gilt: Der Fantasie sind keine Grenzen gesetzt!
Hast du Fragen, Ideen oder Anmerkungen? Meld dich gern.