Wir haben eine benutzerdefinierte Schaltfläche zum Abbrechen der Aufgabe in CRM. Die benutzerdefinierte Schaltfläche löst ein JavaScript aus, mit dem die Aufgabe abgebrochen wird. Wir haben das Skript basierend auf einer blog by Guru Prasad erstellt.CRM 2016 Javascript funktioniert nicht mit New CRM Turbo Formular
Früher hat es in CRM 2013 funktioniert, aber nach dem Upgrade auf CRM 2016 funktioniert es nicht mehr. Klicken Sie auf die Schaltfläche wird nichts tun - keine Fehlermeldung usw. Dies funktioniert nicht wegen der neuen Turbo Form-Funktion in CRM 2016. Wenn ich Turbo Form deaktiviert, um Legacy-Formular zu verwenden, funktioniert die Schaltfläche Abbrechen Aufgabe ordnungsgemäß.
Unten ist mein Skript - wissen Sie, ob es etwas gibt, das verhindert, dass das Skript mit CRM 2016 Turbo Form funktioniert?
PS: Zunächst wird der Code in Guru Prasad-Blog ist immer noch mit getServerUrl()
, aber laut msdn link hat es sich als veraltet und geändert getClientUrl()
die wir unser Skript aktualisiert haben - aber immer noch nicht funktioniert.
function cancelTaskRecord(RECORD_ID) {
//set Task record to Cancel status, then force to close the page
Xrm.Page.data.save().then(changeRecordStatus(RECORD_ID, 2, 6), Xrm.Page.ui.close());
}
function changeRecordStatus(RECORD_ID, stateCode, statusCode)
{
// create the SetState request
var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
request += "<s:Body>";
request += "<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
request += "<request i:type=\"b:SetStateRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
request += "<a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>EntityMoniker</c:key>";
request += "<c:value i:type=\"a:EntityReference\">";
request += "<a:Id>" + RECORD_ID + "</a:Id>";
request += "<a:LogicalName>task</a:LogicalName>";
request += "<a:Name i:nil=\"true\" />";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>State</c:key>";
request += "<c:value i:type=\"a:OptionSetValue\">";
request += "<a:Value>" + stateCode + "</a:Value>";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>Status</c:key>";
request += "<c:value i:type=\"a:OptionSetValue\">";
request += "<a:Value>" + statusCode + "</a:Value>";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "</a:Parameters>";
request += "<a:RequestId i:nil=\"true\" />";
request += "<a:RequestName>SetState</a:RequestName>";
request += "</request>";
request += "</Execute>";
request += "</s:Body>";
request += "</s:Envelope>";
//send set state request
$.ajax({
type: "POST",
contentType: "text/xml; charset=utf-8",
datatype: "xml",
url: Xrm.Page.context.getClientUrl() + "/XRMServices/2011/Organization.svc/web",
data: request,
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("Accept", "application/xml, text/xml, */*");
XMLHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
},
success: function (data, textStatus, XmlHttpRequest) {
Xrm.Page.ui.close();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
Nichts offensichtlich, sieht aus wie es sollte funktionieren. Hast du überprüft, ob dein Code überhaupt ausgelöst wird? 'save(). then 'würde nur funktionieren, wenn es keine Validierungsfehler gibt oder wenn es einen benutzerdefinierten Code gibt, der ein Speichern verhindert. – dynamicallyCRM
Ich schlich in ein Alarm-Pop-up-Fenster auf meinem Skript und es löst aus, unabhängig davon, Turbo-Form ist an oder nicht. Es ist der Cancelling Task-Teil, der nicht funktioniert. Die Cancelling-Aufgabe funktioniert nur, wenn das Turbo-Formular deaktiviert ist. Gibt es irgendetwas in meinem Skript, das nicht funktioniert, wenn Turbo Form aktiv ist? Auch ich entfernte die save(). Dann Teil auf meinem Skript und es noch nichts abbrechen, wenn Turbo-Formular aktiv ist. – ichachan