Cannot find symbol "getGrant()" dans Code Partagé

Bonjour,

Je n’arrive pas à utiliser getGrant() dans du code partagé. Je suis en train de créer une classe utilitaire où je souhaite exécuter une requête SQL qui sera appelée 3 fois (3 objets métiers). J’ai fait un “getGrant().simpleQuery(…)”. Sauf qu’à l’enregistrement j’ai une erreur “cannot find symbol” pour getGrant().

Or, j’ai bien fait l’import de “com.simplicite.util.Grant”.

Pouvez-vous m’aider svp ?

En vous remerciant.

Bruno

De quelle classe parente hérite votre classe ? Si elle n’hérite pas d’une classe dans laquelle la méthode getGrant() existe c’est normal de ne pas avoir accès à cette méthode… Rien de spécifique à Simplicité ici.

S’il s’agit de faire des requêtes SQL select vous pouvez utiliser le singleton Grant.getSystemAdmin() ou alors passez votre grant en argument de vos méthodes utilitaires.

J’attire toutefois votre attention sur le fait qu’écrire du SQL n’est, en général, pas la bonne chose à faire avec Simplicité où il convient d’utiliser au maximum les couches logiques pour ne pas court-circuiter la logique métier. Quand on en arrive à écrire du SQL c’est qu’on a on a une très bonne raison pour vouloir explicitement ne pas passer par cette logique métier. Est-ce bien le cas dans ce que vous envisagez de faire ?

1 Like

Bonjour,

Oui, au temps pour moi. Je m’en suis rendu compte après. Pour le Grant c’est bon désormais. Merci.

Pour ce qui est du SQL, je ne vois pas d’autre alternative dans mon cas de figure. J’ai besoin de générer un id de dossier composé de la valeur d’un attribut A suivie de la valeur d’un attribut B suivie d’une numérotation sur 4 digits.

Pour cela, voici comment j’opère pour générer l’id avec attribut A = 12345, attribut B = ABC.

  1. je fais une requête SQL du genre :
    select max(id_dossier)
    from dossier
    where id_dossier like ‘12345ABC%’;

  2. si le résultat est non vide (par exemple 12345ABC0004), alors le nouvel id de dossier sera l’id du dernier dossier incrementé de 1 : id_dossier = 12345ABC0005.

  3. si le résultat est vide, alors : id_dossier = 12345ABC0000.

Il y a plusieurs méthodes helpers qui font ce genre de choses:

Celle là qui tape sur une colonne d’une table : Grant.getNextValueForColumnWhere. A appeler dans un bloc Java synchronisé.

Ou celle là qui utilise un param système formatté: Grant.getNextSystemParamValue. A appeler aussi dans un bloc Java synchronisé.

Ou si vous êtes sur PostgreSQL ou Oracle cette méthode qui tape sur une séquence : SQLTool.getSequenceNextval. Cette approche à base de séquence est meilleure car vous avez la garantie à 100% de ne pas générer un doublon (surtout dans le cas d’un cluster de noeuds Simplicité que vous ne pouvez pas synchroniser niveau Java) mais vous risquez de laisser des “trous” selon la manière dont vous écrivez votre code (ex: faire la valorisation dans le postValidate ou le preSave et surtout pas dans le initCreate/Update)

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