Copie d'un objet via URL

4.0
Copie d'un objet via URL
0
Tags: #<Tag:0x00007f5ff0c15690>
(Robin OPRASEUTH) #1

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.

(David AZOULAY) #2

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)

(Robin OPRASEUTH) #3

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

Mon URL est dans une action.

(David AZOULAY) #4

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 ?

(Robin OPRASEUTH) #5

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 });

(David AZOULAY) #6

@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…

(François Genestin) #7

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.

(François Genestin) #8

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

(Robin OPRASEUTH) #9

Merci,

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

(François Genestin) #10

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

(David AZOULAY) #11

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

(François Genestin) #12

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");`