2016-06-19 7 views
3

In Dynamics CRM 2013 ist es möglich, ein Feld, das in einem Formular geändert wurde, rückgängig zu machen, wenn ein Geschäftsprozessfehler auftritt?Formularänderungen rückgängig machen, wenn eine Ausnahme auftritt

For example: 
1. User changes a text field on a form from 'abc' to 'xyz' 
2. User clicks save 
3. CRM pre-operation plugin validates field, 'xyz' not allowed, exception thrown 
4. CRM displays business process error to user, 'xyz' is not allowed 
5. The value 'xyz' is still shown in the form 

Das gewünschte Verhalten, das wir wollen, ist ‚xyz‘ zu ‚abc‘ in Schritt zurückzukehren 5.

+0

Wenn ein Plugin einen Fehler auslöst, wird es automatisch auf die ursprünglichen Werte zurückgesetzt, weil die Werte nicht gespeichert werden. Erzähl mir auch, ob es sich um eine benutzerdefinierte Entität oder Standardeinheit handelt? –

Antwort

2

Sie müssen zuerst die Daten zwischenzuspeichern. Sie können dies OnLoad, z. durch Speichern der Attributwerte des Unternehmens:

function GetInitialAttributeState() { 
    var preImage = {}; 

    Xrm.Page.data.entity.attributes.forEach(function(field) { 
     // TODO: for lookup attributes you need to do extra work in order to avoid making merely a copy of an object reference. 
     preImage[field.getName()] = field.getValue(); 
    }); 

    return preImage; 
} 

window.preImage = GetInitialAttributeState(); 

Dann müssen Sie den Vorgang durch die Xrm.Page.data.save Methode speichern zuführen. Übergeben einer Rückruffunktion, die Fehler behandelt und die Felder zurücksetzt, z.

Xrm.Page.data.save().then(
    function() { 
     /* Handle success here. */ 
     window.preImage = getInitialAttributeState(); 
    }, 
    function() { 
     /* Handle errors here. */ 
     Xrm.Page.data.entity.attributes.forEach(function(field) { 
     if (field.getIsDirty()) { 
      field.setValue(preImage[field.getName()]); 
     } 
     }); 
    }); 

Es ist nicht möglich, die Formularfelder auf diese Weise mit dem save Ereignisse zurückgesetzt werden, weil es vor dem eigentlichen tritt in Betrieb speichern, nie danach.

0

Warum kann der Benutzer den Datensatz überhaupt speichern?

Sie könnten ein Business Ruel verwenden, um das Feld zu validieren, und eine Fehlerbedingung für Werte, die Ihnen nicht gefallen, für das Feld festlegen. Die Fehlerbedingung bleibt bestehen und verhindert, dass sie den Datensatz speichern, bis sie den Wert ändern. Die Fehlermeldung kann ihnen eine Erklärung geben, warum ihr Wert nicht gültig ist.

Offensichtlich ist die Validierung, die Sie in einer Geschäftsregel durchführen können, begrenzt, aber Ihr Beispiel macht nicht klar, auf welcher Grundlage wir "xyz" als "schlechten" Wert einstufen.

+0

Das Beispiel ist eine Vereinfachung des Problems. Das heißt, Henks Antwort oben war genau das, was ich brauchte. – user329847

Verwandte Themen