5.7.3.12 beforeSave

5.7.3.12.1 Déclenchement

Le document va être sauvegardé. Cet événement est déclenché après la phase de validation.

5.7.3.12.2 Éléments passés au callback

event
objet événement standard de jQuery,
currentDocumentObject
un objet document décrivant le document courant.
requestOptions
Cette option contient 2 fonctions getRequestData et setRequestData
customData
L'objet customData contient l'objet customClientData, cet objet peut-être modifié si besoin. La fonction addCustomClientData n'est pas prise en compte durant cet événement. La modification n'est pas prise en compte si la fonction setRequestData est appelée.

La fonction getRequestData retourne un objet json. Cet objet est la donnée envoyée au serveur lors de la sauvegarde.

L'objet requestData a trois principales données :

  • document.properties
  • document.attributes
  • customClientData

Seules les données document.attributes et customClientData peuvent être modifiée. La modification de document.properties n'a aucun effet.

Extrait de données requestData (partielles):

{
    "document": {
        "properties" : {
            "initid" : 1256
            "title" : "My Awesome Document"
        }
        "attributes": {
            "my_title": {
                "value": "Hello world"
                "displayValue" : "Hello world"
            },
            "my_level": {
                "value": 12
                "displayValue" : "12"
            }
        }
    }
    "customClientData": {
        "myKey" => "Special Data"
    }
}

La fonction setRequestData prend en entrée, un objet JSON de la forme indiqué ci-dessus.

5.7.3.12.3 Annulable

Oui. Dans ce cas, la sauvegarde est annulée et rien n'est fait.

5.7.3.12.4 Exemple

5.7.3.12.4.1 Interrompre la sauvegarde

  • ajoute au ready du document (fonction addAnimalEvents) un écouteur sur l'événement beforeSave,
  • l'écouteur (fonction preventSaveAnimal) empêche la sauvegarde du document si

    • l'attribut zoo_title est différent de fermer.

    Dans ce cas, il affiche un message pour avertir l'utilisateur qu'il doit changer la valeur.

window.dcp.document.documentController("addEventListener",
    "ready",
    {
        "name": "addAnimalEvent",
        "documentCheck": function(documentObject) {
            return documentObject.family.name === "ANIMAL";
        }
    }, function addAnimalEvents() {
        this.documentController("addEventListener",
        "beforeSave",
        {
            "name": "preventSave.animal",
            "documentCheck": function(document) {
                return document.family.name === "ANIMAL";
            }
        },
        function preventSaveAnimal(event, currentDocumentObject) {
            if (this.documentController("getValue", "zoo_title").value !== "fermer") {
                event.preventDefault();
                this.documentController("showMessage", {
                    "type" : "error",
                    "message" : "If you want to save the doc, change the title to fermer"
                });
            }
        });
    }
);

5.7.3.12.4.2 Enregistrer seulement les données modifiées

Cet exemple montre comment utiliser les fonctions getRequestData et setRequestData pour ne renvoyer que les données modifiées lors de la sauvegarde.

window.dcp.document.documentController("addEventListener", "beforeSave", {
    "name": "SaveOnlyModified.test", 
}, function saveOnlyModified(event, currentDocumentObject, requestOptions, customData)
{
    var systemData= requestOptions.getRequestData();
 
    this.documentController("getAttributes").forEach(function (attr) {
       if (!attr.isModified()) {
           delete systemData.document.attributes[attr.id];
       }
    });
    requestOptions.setRequestData( systemData );
});
×