Copie d'un objet via URL

Bonjour,

Est-il possible de lancer la copie d’un objet via une URL de type /ui/form/myObject?action=copy&row_id=1 ?

Cela fonctionne en legacy mais cela n’a pas l’air de fonctionner en responsive.

En UI responsive il faut utiliser l’API javascript client adhoc:

$ui.displayForm(null, "MyObject", myRowId, { nav: "add", copy: true });

NB: Le support de la “traduction” des URLs legacy est partiel et, surtout, temporaire (comme la UI legacy d’ailleurs qui va bientôt être retirée après plus de 2 ans de période transitoire)

Comment puis-je récupérer le row_id de l’objet en cours?

Mon URL est dans une action.

Si vous êtes sur un formulaire principal

$ui.getAjax().getBusinessObject("MyObject").getRowId();`

Juste une question, pourquoi l’action standard “Copy” ne répond pas à votre besoin ?

Le client souhaite avoir un bouton avec le libellé “Réviser” qui duplique l’objet en cours et incrémente le numéro de version.

Je n’arrive pas à faire fonctionner l’URL :

javascript:$ui.displayForm(null, “myObject”, $ui.getAjax().getBusinessObject(“myObject”).getRowId();`, { nav: “add”, copy: true });

@Francois vois tu une manière simple de changer dynamiquement le libellé de l’action “Copier” en “Réviser”, ce serait plus simple/fiable que de réinventer le bouton copier…

Si c’est juste un raccoursi vers l’action “copy” native, il faut juste mettre dans le code du bouton un click sur l’action copy du formulaire.

dans le template du formulaire directement

<button class="btn btn-action" onclick="$(this).closest('.objform').find('[data-action=\'copy\']').click()">Réviser</button>

sinon créer une Action de type front avec dans l’URL un code équivalent ou un displayForm avec le paramètre {copy:true}, comme dit plus haut, c’est ce que fait l’action copier.

et côté back, le hook initCreate devra tester isCopied() pour incrémenter le numéro de révision.

Quant à modifier le libellé du Copier, il s’agit de la valeur du TEXT COPY

Merci,

Comment fait-on pour modifier la valeur du TEXT COPY?

Administration > Textes statiques
Mais ce n’est pas la bonne approche de modifier ça car c’est un libellé global.

Oui c’est pour cela que je demandais si tu voyais un moyen de modifier le libellé contextuellement pour cet objet, genre getAction("...").setDisplay("...")

oui la réponse est dans ta question, les actions génériques sont instanciées comme des Actions pour les avoir dans les hooks.

dans le postLoad on peut donc mettre :

Action copy = getAction("copy");
if (copy!=null) copy.setDisplay("FRA", "copier c'est tricher");`