Skip to content

$msg.remapTargets

Description

Cette méthode permet de remapper des messages, c'est-à-dire de modifier les targets des messages.

Cette méthode est utile dans un cas de figure particulier, que nous illustrons avec un exemple. Prenons une application qui gère des Clients et des Demandes. Les Demandes peuvent référencer un Client au moyen d'un champ "idClient".

Une Demande peut être éditée en tant que telle, mais elle peut également être modifiée directement depuis la fiche client : dans ce cas, la Demande apparaît comme un tuple de groupe multi dans la fiche Client. Il suffit en effet pour cela que le groupe multi référence la table des Demandes, et utilise le champ idClient comme reffield et le champ idDemande comme mainfield.

On souhaite par exemple gérer l'état de la Demande directement depuis la fiche Client. Pour cela, on utilise un script qui exécute l'instruction suivante:

1
2
3
4
5
var ctxt = $script.getContext();
$doc.setState({ modelName: "demande",
                docId: #client.demandes[ctxt.tupleId].idDemande },
              "refus");
$data.reload(ctxt);

Dans l'exemple ci-dessus, ctxt reçoit le contexte du tuple qui référence la Demande dans le groupe multi du Client, par exemple: client[1000].demandes[2000].

Le setState demande le changement d'état de la Demande. Par conséquent, les éventuels messages qui sont générés par les scripts onleave ou onenter liés aux statuts de la Demande seront envoyés dans le contexte de la Demande, et ne seront mar conséquent jamais montrés à l'utilisateur. Par exemple, un message d'erreur portant sur un champ "nom" aurait pour "target" la référence demande[2000].base[2000].nom.

La méthode remapTargets permet donc de convertir les targets générés pour la Demande et les mapper sur des champs du dossier Client. L'idée dans notre exemple est de retranscrire demande[2000].base[2000].nom en client[1000].demandes[2000].nom. On peut le faire en ajoutant l'instruction suivante à la fin du script:

$msg.remapTargets(function(target, msg) {
    if (target.modelName == "demande") {
        return { modelName: "client", docId: ctxt.docId,
                 groupName: "demandes", tupleId: target.docId,
                 fieldName: target.fieldName };
    }
});

Syntaxe

$msg.remapTargets( converter [ , options ] )

Paramètres

converter function

Fonction de conversion chargée d'indiquer le mapping. Cette fonction de callback reçoit en paramètre:

  • le contexte à traiter sous forme de map
  • le message complet sous forme de map

On attend que la fonction retourne le nouveau contexte de la cible. Elle doit donc être déclarée ainsi:

function(inCtxt, inMessage) {
    var outCtxt = inCtxt;
    // ...
    return outCtxt;
}
options map

Map d'options. La méthode reconnaît les options suivantes:

level string / array

Niveau des messages à traiter. Le paramètre peut être une chaîne de caractère indiquant le niveau ("error", "warn", "info" ou "success").

Il est possible de donner un tableau contenant plusieurs niveaux. Il est également possible de spécifier plusieurs niveau à l'aide d'une chaîne de caractères, en séparant les niveaux avec une virgule (p. ex: {@code "error,success").

Retour

Retourne toujours null

Exemple

Voir description