Masquer le bouton Create suite à la création

Bonjour,

je voudrais créer une seule fois un objet métier.
J’ai essayé avec le hook isCreateEnable()
et le code

    @Override
    public boolean isCreateEnable() {

        String funcId = getFieldValue("ladDossiersFunctionalId");
        //ObjectDB parentObject = getParentObject();

        //Cache du bouton de création si un message existe déjà
        if (!Tool.isEmpty(funcId)) {

            String idmess = "select lad_mes_ident from lad_dossiers dos " +
                    " join lad_messagerie mes on lad_mes_dos_id = dos.row_id " +
                    "where lad_dos_func_id = \"" + Tool.toSQL(funcId) + "\"";

            AppLog.debug(" idmess " + idmess, getGrant());

            String idMessage = getGrant().simpleQuery(idmess);
            if (!Tool.isEmpty(idMessage)) {
                return false;
            }
        }
        return isPanelInstance();
    }

mais cela ne fonctionne pas car l’appel à la méthode isCreateEnable est multiple et la valeur funcId est parfois renseigné parfois vide. Je ne comprends d’où viennent tous ces appels à cette méthode.

Je suis en

[Health check](http://localhost:8080/ui)

[Platform] Status=OK Version=5.1.22

Merci pour votre aide.

Thierry Le Corre

Bonjour Thierry,

Le bouton ‘Create’ étant affiché sur une liste utiliser getFieldValue("ladDossiersFunctionalId") n’est pas forcément pertinent.

L’appel du hook est multiple car il s’effectue pour chaque record en liste et une fois lors de l’affichage d’un formulaire.

Dans l’état actuel, le bouton créer ne devrait être visible que sur une panel instance ou si le record a un message.

Afin de t’aider à implémenter la RG, peux-tu m’expliquer le besoin ?

A savoir que tu peux aussi changer la cardinalité de ta relation à “0,1” entre tes deux objets si tu souhaites empêcher la création de plusieurs lignes.

Bonjour Alistair,

sur l’aspect du nombre d’appel, c’est noté. Je comprends maintenant pourquoi la donnée functionalId est vide vu qu’il n’y a pas de dossier d’autres aides ni de messagerie non plus dans mon test mais l’appel est fait avec cette donnée vide.
J’ai essayé avec la cardinalité mais cela n’a pas fonctionné. J’ai mis une cardinalité 0,1.

Le besoin est de n’avoir qu’un seul message, plutot une seule conversation par type de dossiers. D’où l’idée de vérifier s’il y a un objet message lié à ce type de dossier alors il ne faut plus permettre de créer de message, ceci en masquant le bouton créer.
Par contre les messages doivent pouvoir être créer sur un autre type d’aide.
La cardinalité est bien 0,1 entre les 4 types de dossiers liés à l’objet messagerie.

Je pourrais le faire dans un hook au moins plus ne plus créer plusieurs instances par type de dossiers mais je voudrais qu’il n’y a pas le bouton créer pour que ce mieux

Oui le hook isCreateEnable ne peut pas dépendre du tuple, puisqu’il y en a pas, il pourrait dépendre de l’objet parent (getParentObject) dans un contexte de panel.

Attention de ne pas le limiter qu’à l’instance Panel de la UI, car il y a aussi les objets pour API service, import CSV/XML (isBatchInstance ou autre…) qui ont surement besoin de créer en back.

Une autre approche serait :

  • de créer une Action de liste spécifique qui appellerait une méthode back pour faire le count + retourner
    • un message d’information “vous avez déjà un message… sur votre type de dossier…”
    • ou un redirect vers le formulaire de création si count=0.
  • Et de masquer l’action “Créer” par défaut en décochant les options “Créer en formulaire” + “Créer en liste…” mais en laissant bien la fonction “Lire + Créer” dans les droits

Avoir un message informatif me semble plus formateur, plutôt que de ne pas comprendre pourquoi on ne peut pas créer sans connaitre la règle.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.