|{{:connexe.jpg?40|}} **Sujets connexes**|[[:technique]]\\ [[technique:descendanceclasses]]\\ [[technique:champsauto]] |
====== Fonction REST "fw_CRUD" ======
===== Les tables concernées =====
==== Les tables de type "Fichier" ====
^Nom de la table^Clef sur l'index à utiliser^Champs complémentaires^Nom de l'unité^Plus d'information^
|Famille|ID|ListeCerfa\\ MontantTotalCerfa\\ |RecordFamille|[[https://logeas.wiki.logeas.fr/doku.php?id=certif:technique:famille|Structure de la table]]|
|Personne|ID| |RecordPersonne|[[https://logeas.wiki.logeas.fr/doku.php?id=certif:technique:personne|Structure de la table]]|
=== Privacy by design des tables "Famille" & "Personne" ===
La fonction assure le filtrage à la source coté serveur c'est à dire :
* que seul les données que l'utilisateur peut consulter sont envoyé à l'interface client
* que les données qui sont reçu de l'interface client sont filtrées avant d'être enregistré afin d'éviter tout risque
^Fonction^Droit générique^Droit complémentaire pour certains champs^^Géré par^
^ ::: ^ ::: ^Nom du champ^Droit nécessaire^^
|Voir|dfLecture|||TSQLLoGeAsRecord.IsAutorisetable|
| ::: | |Cerfa*|dfLectureComptable ou dcLecture ou dfVoirEstDonateur|TSQLLoGeAsRecord.GetListeChamp|
| ::: | |ListeCerfa\\ MontantTotalCerfa|dfLectureComptable ou dcLecture|TSQLLoGeAsRecord.CRUD_Read|
| ::: | |MemoPerso|dfLectureConfidentielle|TSQLLoGeAsRecord.GetListeChamp|
| ::: | |Champs perso "comptable"|dfLectureComptable ou dcLectur|TSQLLoGeAsRecord.GetListeChamp|
|si archivé en plus|dfVoirArchive| | | |
|pour Modifier|dfEdition| | |Interface & TSQLLoGeAsRecord.CRUD_Update|
|pour Créer|dfAjout| | |Interface & TSQLLoGeAsRecord.CRUD_Create|
|pour Supprimer|dfSuppression| | |Interface & TSQLLoGeAsRecord.CRUD_Delete|
==== Les tables de type "Comptable" ====
^Nom de la table^Clef sur l'index à utiliser^Champs complémentaires^Nom de l'unité^Plus d'information^
==== Les autres tables ====
^Nom de la table^Clef sur l'index à utiliser^Champs complémentaires^Nom de l'unité^Plus d'information^
|Config|NomFichier| |RecordConfig|[[https://logeas.wiki.logeas.fr/doku.php?id=certif:technique:Config|Structure de la table]]\\ [[technique:ConfigDetail|Détail du contenu]]|
|FichierTexte|NomFichier| |RecordFichierTexte|[[https://logeas.wiki.logeas.fr/doku.php?id=certif:technique:FichierTexte|Structure de la table]]\\ [[technique:FichietTexteDetail|Détail du contenu]]|
===== Paramètres d'entrée =====
NB : **Pour accéder à cette fonction le demandeur doit au préalable être identifié**
\\
^Nom du paramètres^Attendu^
|**Fonction**|Indique le type d'action attendu du serveur (seul la première lettre est significative).|
|**Record**|Json correspondant à une classe descendante de "TSQLLoGeAsRecord"|
|**SQLTableName**|Nom de la table à "travailler"|
|**Info**|Information sur le demandeur sous forme d'un Json\\ '{"SUIDBase":"31ADD2E180378001",
"Exercice":2019,"Secteur":1,
"LogonName":"jetest@pgi.logeas.fr"}'
\\ peut être vide dans certains cas mais doit être quand même présent|
==== Contenu de record suivant la fonction ====
^Fonction^Explication^Contenu de **Record**^Droits à vérifier^Actions spécifiques^
|**C**reate|Création/ajout d'un nouvel enregistrement dans la table|Le champ **ID** doit être inférieur ou égal à 0\\ Les autres champs contenir les valeurs attendus ([[technique:champsauto|hors champs automatiques]])\\ [[https://logeas.wiki.logeas.fr/doku.php?id=certif:technique:famille|Voir dans la doc les champs obligatoires]]|dfAjout| * Mise à jour des champs automatique|
|**R**ead|Lecture d'un enregistrement de la table|Le champ **Key** de la table doit contenir la valeur attendu|dfLecture| |
| ::: |Lecture de la table entiére|Le champ **Key** de la table doit contenir la valeur **0** ou **' '**|dfLecture| |
|**U**pdate|Modification d'un enregistrement de la table|Le champ **ID** doit contenir le numéro de l'enregistrement\\ \\ Les autres champs contenir les valeurs attendus ([[technique:champsauto|hors champs automatiques]])|dfEdition| * Mise à jour des champs automatique |
|**D**elete|Effacement d'un enregistrement de la table|Le champ **ID** doit contenir le numéro de l'enregistrement à dfSuppression|dfLecture| |
**NB:**
* L'archivage d'un enregistrement passe par un update (Champ "archive')
* Chaque modification est pisté dans le piste d'audit
==== Appel de la fonction CRUD depuis Angular ====
=== Appel "Simple" ===
Ce mode d'appel est à utiliser par exemple pour récupérer une liste de paramétrage\\
constructor(
private REST:MormotClientService
) {};
L'appel nécessite la bibliothèque **MormotClientService** qui elle même utilise la bibliothèque **mORMotClient.js**
ngOnInit(): void {
this.REST.CRUD('Read','FichierTexte',{NomFichier:"/PersonneTitre.Txt"}).subscribe({
next: (res:any) => {this.PersonneTitre=res},
error: (error) => {this.SuiteValidation(false,error)}
});
}
On demande l'initialisation de la liste via un observable.\\
A sa réalisation celui-ci initialisera la variable PersonneTitre sinon il appellera la fonction SuiteValidation en indiquant l'erreur
=== Appel via un "Service" ===
Ce mode d'appel est à utiliser quand la ressource est utilisé par plusieurs composant\\
== Unité "service" ==
private InfoEcranFamille = new TInfoFamille;
infoEcranFamille = new BehaviorSubject(this.InfoEcranFamille);
On déclare "BehaviorSubject"
constructor(private REST:MormotClientService){
this.REST.CRUD('Read','Famille','').subscribe((res:any) => {
this.InfoEcranFamille.chargeData(JSON.parse(res.result));
this.emitInfofamille();
});
}
Dans cette version quand la data est accessible la fonction emitInfofamille est appelé, c'est elle qui va propager la data chez les client..
private emitInfofamille() {
console.log('EMIT INFO');
if (this.InfoEcranFamille.charge())
{this.infoEcranFamille.next(this.InfoEcranFamille);}
};
== Dans l'unité cliente ==
constructor(
private restFamille:FamilleService
) {};
On déclare le service
ngOnInit(): void {
this.restFamille.infoEcranFamille.subscribe((value) => this.onChangeTableFamille(value));
}
On souscrit à la variable du service, lors de la dispo on peut initialiser une variable ou appeler une fonction qui fera un traitement
onChangeTableFamille(value:TInfoFamille){
if (value.charge()) {
console.log('ONCHANGEFAMILLE ',value)
this.TableFamille=value.data;
this.columnsFamille=value.format;
this.FamilleCourante=this.TableFamille[0];
if (value.marker.length>0) {
this.TableMakers = [];
value.marker.forEach((e) => {
console.log('e.id '+e.ID);
let mark:TMarkers = {"id":e.ID, "location" : e.location, "tooltip" : {"isShown" : false, "text":e.tooltip}};
this.TableMakers.push(mark);
});
console.log('onChangeTableFamille '+JSON.stringify(this.TableMakers))
}
}
}
===== Sortie =====
==== Exécution correcte ====
Dans le cas ou l'exécution c'est bien passé le serveur retourne un json contenant le TSQLFamille tel qu'enregistré dans la base.
==== Erreur lors de l'exécution ====
^Code erreur^Explication possible^
|400|Il manque des paramètres à la fonction|
|Autres codes|Voir le texte d'explication|