Suppression enregistrement avec references

doc
Messages : 187
Enregistré le : dim. févr. 26, 2017 4:39 pm

mer. août 09, 2017 9:04 pm

Bonjour, (j'ai l'impression d'être le seul à faire vivre cette section :) )

Je cherche à supprimer un enregistrement et pour celà j'utilise:

Code : Tout sélectionner

MONELEMENT.archive(MON_ID);
qui fonctionne mais quand cet enregistrement est référencé sur d'autres tables, je me retrouve avec l'erreur:

Code : Tout sélectionner

java.sql.SQLException: ?REPORT_FIELD[12]? ne peut perdre son champ "CATEGORY_ID"
en fouillant dans les sources j'ai cru comprendre que la fonction archiveNoCut() permettait de supprimer l'enregistrement et toutes ses références, mais même avec cet appel j'ai la même erreur.

Comment procéder pour supprimer un enregistrement et les enregistrements qui le référencent (en CASCADE) ?? (de préférence sans archive, mais j'ai vu également que la suppression n'est pas encore implémentée donc je doute que çe soit faisable pour l'instant ;) )

De plus, je cherche également à modifier l'ordre d'un enregistrement à l'aide d'un drag and drop, existe t'il une méthode simple ?

Merci.
AleXtrap
Messages : 62
Enregistré le : mer. juil. 26, 2017 6:52 pm
Contact :

jeu. août 10, 2017 7:31 am

doc a écrit :Bonjour, (j'ai l'impression d'être le seul à faire vivre cette section :) )
c'est l'impression qui ressort en effet, question de DOC,....
réponse de DOC

on va mettre ça sur le compte des vacances estivales sous la pluie ;)

en tout cas bon courage !!
Alexis, artiste et homme à tout faire ^^
Cirque RUBIS
ludovic
Messages : 265
Enregistré le : ven. avr. 15, 2011 2:32 pm

jeu. août 10, 2017 9:10 am

Bonjour,

vous pouvez déplacer l'ordre directement via les listes soit en Drag'n Drop soit via les flèches en bas à gauche (il ne faut pas que la liste soit triée en cliquant sur les entêtes des colonnes). En passant par le code, il me semble que vous pouvez utiliser la méthode MoveQueue.moveAtOnce.
Pour votre problème d'archive, ce serait plus facile de trouver le problème si vous nous fournissez la structure des tables. Je pense qu'il manque des informations dans les SQLElements associés. Voici les méthodes à implémenter dans SQLElement pour définir la manière dont est utilisé une clef étrangère, setupLinks, isPrivate et getParentFFName.

Cordialement,
Ludovic.
doc
Messages : 187
Enregistré le : dim. févr. 26, 2017 4:39 pm

jeu. août 10, 2017 10:47 am

Bonjour Ludovic,

Merci pour votre aide, ci-joint la structure de table pour la partie "rapports d'intervention".

Ce que je cherche à faire est un système qui permet de créer rapidement un modèle de rapport d'intervention évoltutif à l'aide d'un éditeur. Pour celà j'ai créé 4 tables qui sont :
- REPORT_TYPE -> le modèle de rapport (ex. "rapport standard", "rapport client A", "préventif équipement A", ...)
- REPORT_CATEGORY -> les catégories du rapport (ex. "compte rendu", "équipement", "signatures", ...)
- REPORT_FIELD -> le champ (ex. "Intervention terminée ", "Etat des flexibles", "Photo", Signature client", "Signature technicien", ...)
- REPORT_FIELD_TYPE -> le type du champ, qui sont les suivants:

- Conformité -> 2 valeurs possibles : "Conforme", Non conforme"
- Liste de valeurs -> valeur à choisir parmis celles définies dans une liste de n valeurs possibles pour ce champ (ex. : "Neuf", "Correcte", "Defectueux", "Hors service", ...) définissable via l'éditeur par le responsable
- Champ texte -> simple champ texte
- Date-> Attends une valeur date (ex.: 10/08/2017)
- Heure -> Attend une valeur heure (ex.: 12H30)
- Numérique -> Attend une valeur numérique (entier ou flottant)
- Signature -> Attend une signature (sous la forme d'une image)
- Photo -> Attend une photo
- Géolocalisation -> Attend une coordonnée GPS sous forme texte (ex.: "[latitude, longitude]")
- Sélection multiple -> Comme le champ Liste de valeurs mais permet de sélectionner plusieurs valeurs dans la liste

Voilà pour la structure de la base, ci-joint un screenshot de l'éditeur de rapport (toujours en cours de développement ;) )

Je cherches à supprimer une catégorie à l'aide de l'éditeur et tous ses champs, par exemple, sur le screen de l'éditeur ci-joint, je supprime la catégorie Equipement et ses champs (Etat des flexibles et Flexibles remplacés).

Et pour le déplacement, je le fait en drag and drop, toujours sur l'éditeur en cliquant sur la fleche et déplacant le panneau, pour le drag and drop pas de soucis, c'est la modification de l'ordre dans la base donnée sur laquelle j'ai besoin d'aide.

Merci.
Fichiers joints
Capture d’écran 2017-08-10 à 12.42.19.png
Capture d’écran 2017-08-10 à 12.42.19.png (71.63 Kio) Vu 4842 fois
diagram.png
diagram.png (61.65 Kio) Vu 4842 fois
doc
Messages : 187
Enregistré le : dim. févr. 26, 2017 4:39 pm

jeu. août 10, 2017 1:40 pm

La suppression c'est réglé, j'avais oublié de créer l'élement REPORT_FIELD :roll: et effectivement en surchargeant getParentFFName() ça archive bien les élements mais je préférerzais plutôt les supprimer définitivement.

Pour le déplacement, quand j'appel

Code : Tout sélectionner

MoveQueue.moveAtOnce(fields, true, fields.get(0)); //fields= ma liste de champs (List<SQLRowValues>)
Ca me fout le bordel dans l'ordre, je me retrouve avec des valeurs à virgule flottante :? :

Code : Tout sélectionner

AVANT  | APRES
1      | 1,33333333
2      | 1,66666667
Avatar du membre
guillaume
Messages : 2429
Enregistré le : ven. févr. 11, 2011 7:15 pm

jeu. août 10, 2017 3:26 pm

L'ordre en décimal, c'est normal, c'est fait pour ne pas à avoir à changer la valeur du champs ORDRE pour toutes les lignes de la table.

Cordialement,
Directeur technique d'OpenConcerto qui dans son temps libre s'occupe du forum.
Pour une assistance pro, nous sommes joignables à ILM Informatique contre quelques jetons.
Pensez aussi à lire le manuel !
doc
Messages : 187
Enregistré le : dim. févr. 26, 2017 4:39 pm

jeu. août 10, 2017 3:43 pm

Bonjour Guillaume,

Merci pour votre retour, effectivement c'est logique... :roll:

Est ce envisageable d'étendre la gestion des types d'OpenConcerto avec la gestion des tableaux (ex.: text[] ) et les données (bytea) ?? Et d'autres si besoin encore.

Merci.
Avatar du membre
guillaume
Messages : 2429
Enregistré le : ven. févr. 11, 2011 7:15 pm

jeu. août 10, 2017 4:15 pm

Tout est envisageable, mais avant de se lancer dans ce genre de travaux, je suis curieux de connaître les besoins qui se cachent derrière.
Concernant votre système de gestion de rapport, vous allez juste créer un "modèle" vide à partir de ces saisies ou prévoyez vous d'enregistrer en base les "réponses" à ces questionnaires?
Directeur technique d'OpenConcerto qui dans son temps libre s'occupe du forum.
Pour une assistance pro, nous sommes joignables à ILM Informatique contre quelques jetons.
Pensez aussi à lire le manuel !
doc
Messages : 187
Enregistré le : dim. févr. 26, 2017 4:39 pm

jeu. août 10, 2017 4:42 pm

Guillaume,

Je me lance dans un gros module de gestion de maintenance dont cette partie rapport est un des points qui m’intéressent le plus, effectivement il s'agit là pour ces 4 tables uniquement de la gestion des "modèles", pour ce qui est de l'enregistrement des données issues de ce rapport je bloque un peu pour l'instant, n'ayant pas trouvé assez d'informations et n'ayant pas les compétences non plus (je suis pas développeur et j'apprends le java au fur et à mesure :) ), j'ai pensé à une table "reponses" contenant un champ pour chaque type de réponse et un lien vers le champ et le rapport.

OPERATION_REPORT (Rapport saisi par le technicien)
ID
...
-------------------------------
REPORT_RESPONSE (Reponses données par le technicien)
ID
OPERATION_REPORT_ID <- ID du rapport technicien
FIELD_ID <- en fonction du type de champ j'enregistre et pioche la donnée dans le champ correspondant (ex.: pour le type signature, le champ VALUE_DATA)
VALUE_TEXT <-varchar
VALUE_NUMERIC <- double
VALUE_ARRAY <- text[]
VALUE_DATA <- bytea
VALUE_DATE <- date
VALUE_TIME <- time
-------------------------------

A défaut aussi si vraiment je trouve pas de solution viable j'ai pensé ne pas enregistrer ces informations et enregistrer uniquement le rapport PDF généré à partir de ces informations, mais je suis preneur pour si vous avez une idée ;).
Avatar du membre
guillaume
Messages : 2429
Enregistré le : ven. févr. 11, 2011 7:15 pm

lun. août 14, 2017 8:49 pm

Bonjour,

J'aurais tendance à penser que si vous n'exploitez pas les données au global (somme, moyenne, etc... des champs) et que tout est lié à la mission, la méthode la plus simple est de ne pas normaliser. Dans le monde NoSQL, on appelle ça "dénormaliser".

Pour être plus pragmatique, cela revient à ne pas essayer de créer des champs "dynamique" comme vous le faites dans une structure "statique" qu'est la base de données , mais à traiter la structure par enregistrement.

En pratique, cela revient juste à enregistrer un json ou un xml par mission. Ce fichier sera traité dynamiquement en Java, ce qui est plus simple à faire évoluer et à maintenir qu'en SQL. La structure de ce fichier peut alors être différente par mission, ce qui va être facile à gérer.

Cordialement,
Directeur technique d'OpenConcerto qui dans son temps libre s'occupe du forum.
Pour une assistance pro, nous sommes joignables à ILM Informatique contre quelques jetons.
Pensez aussi à lire le manuel !
Répondre