Custom Commands et édition des pages By Module
Routeur serveur
La majorité des actions étudiantes passent par _utils/command/utils_custom_command_by_module.js. La fonction executeCommandByModule() route commandUid vers la fonction métier appropriée.
Commandes majeures
| Fonction | Responsabilité |
|---|---|
startStudentModule | Initialise/démarre un module pour l'équipe. |
saveStudentModuleRowInputValue | Sauvegarde une valeur d'input dans une row. |
saveStudentModuleRowInputOptions | Sauvegarde les options d'un input. |
saveStudentModuleInputFormula | Sauvegarde une formule; voir page dédiée Formules. |
add/remove/edit ... Row | Gestion des rows dynamiques et de leur ordre. |
add/remove/edit ... Section | Gestion des sections dynamiques. |
saveDynamicDropdownData | Persistance des données de dropdown dynamique. |
getModuleGrade | Calcule/récupère la correction. |
getTeamModuleTypeResults | Retourne les résultats déjà générés. |
restartStudentModule | Réinitialise un essai de module selon les règles. |
ignoreErrorFromTeamModuleResults | Permet l'override/ignorance d'une erreur de correction. |
Rows et sections dynamiques
Lorsqu'une row/section temporaire doit être persistée, le serveur peut lui attribuer un nouvel ObjectId. Il renvoie alors les alias et index à l'UI afin que le client remplace l'UID local. Le serveur maintient aussi les références de formules associées.
Synchronisation du ledger
Après certaines modifications de pages, le code vérifie utilsByModule.shouldSyncLedger(moduleSettings, pageUid). Si nécessaire, il appelle rebuildLedgerFromJournals() puis envoie sendLedgerPageChangedMessage(). Une édition dans un journal peut donc modifier indirectement la page ledger.
RTT
Chaque commande émet un message précis, par exemple team_module_row_input_options_changed, team_module_row_removed, dynamic_dropdown_data_changed ou team_module_input_formula_changed. Les gros objets ne sont pas toujours envoyés directement : le message get_data peut demander au client de relire seulement un chemin d'entité.
Côté Unity
TeamByModuleController envoie ces commandes, reçoit les messages et met à jour TeamModuleTypeData. Les classes DataDrivenTableControl, DataDrivenRowControl, DataDrivenSectionControl et les contrôles d'input construisent l'interface à partir des données statiques + runtime.