Préambule #
Le composant DataTable propose en standard (sans plugin) une option qui permet de désigner un fichier JSON (ou un flux http JSON) comme source de données. La documentation se trouve ici :
https://datatables.net/examples/ajax/
Nous avons choisi le format « Json objects », qui couvre l’essentiel de nos besoins :
https://datatables.net/examples/ajax/objects.html
Comme d’accoutumée, notre mode opératoire consiste à ajouter des attributs « data- » dans le code html afin que la fonction populate() exécute le code correspondant à ces attributs.
Par ailleurs, afin de respecter notre mode de développement habituel :
- Tout ce qui concerne la présentation se trouve dans le fichier HTML
- Tout ce qui concerne les données (ou l’accès aux données) se trouve dans le fichier XML
- Tout ce qui permet de contrôler/harmoniser l’ensemble se trouve dans le fichier ASP
Côté XML #
Ajouter dans la section pages/objects une balise xml de type AjaxStream contenant 4 autres attributs :
- processor : nom de la page serveur qui sera appelée par la fonction Ajax
- context : détermine l’algorithme qui sera choisi dans le processeur (dépendant des développeurs back-end).
- src : Requête SQL avec ou sans paramètres
- columns : Liste des colonnes à afficher. Le séparateur de la liste est la virgule.
<logAccesInvest type="AjaxStream"
processor="SqlForJson.asp"
context="default"
src="SELECT * FROM org_logTraceInvestigateurs WHERE ISNUMERIC(CodeCentre)=1"
columns="Nom,Prenom,IP">
</logAccesInvest>
Permet de remplir un tableau de 3 colonnes avec le nom, le prénom et l’adresse IP venant de la table org_logTraceInvestigateurs.
Si l’attribut columns contient le mot-clef auto, la liste des champs est automatiquement générée :
<logAccesInvest type="AjaxStream"
processor="SqlForJson.asp"
context="default"
src="SELECT Nom, Prenom, CodeCentre,
FORMAT([DateLogin],'dd/MM/yyyy hh:mm:ss','fr-FR') AS DateLogin, IP, Ok
FROM org_logTraceInvestigateurs WHERE ISNUMERIC(CodeCentre)=1"
columns="auto">
</logAccesInvest>
Permet de remplir un tableau de 6 colonnes venant de la table org_logTraceInvestigateurs.
la valeur « auto » de l’attribut columns sera transformée en : « Nom,Prenom,CodeCentre,DateLogin,IP,OK ».
Côté HTML #
Ajouter l’attribut data-datatable-ajax à à la balise <table>, en lui donnant comme valeur le nom de la balise de l’ilot XML :
<table data-datatable="true" data-datatable-ajax="logAccesInvest">
Lorsque la fonction populate() trouve l’attribut data-datatable-ajax, elle va chercher tous les autres paramètres dans l’ilot XML. Ainsi, la page appelée par DataTable sera SqlForJson.asp, la requête utilisée sera celle qui se trouve dans src , et les colonnes seront celles définies dans columns .
Côté ASP #
Il n’y a rien à faire côté ASP pour remplir le tableau. Ceci-dit la page ASP doit exister avec son code minimum (voir la section concernant le code minimum des pages).
Mode de fonctionnement #
Cette section permet de comprendre le principe utilisé. Elle est donnée à titre pédagogique mais ne nécessite aucune action complémentaire.
Les objects de type AjaxStream utilisent une variable de session nommée Session(« UsefulContent »). Le processeur se sert ensuite de cette variable de session qui pourrait contenir toutes sortes d’informations. Dans le cas de notre exemple (remplir un tableau) Session(« UsefulContent ») contient la requête SQL données dans l’attribut src. src est ensuite supprimé du DOM afin de ne pas apparaître côté client, mais son centenu reste utilisable grâce à la variable de session.
Le processeur SqlForJson.asp #
Il s’agit de notre processeur. Il se sert de la requêtes SQL (stocké dans Session(« UsefulContent »)). Ce fichier n’a pas à être modifié dans la plupart des cas. Son fonctionnement par défaut peut servir dans l’essentiel des pages contenant un tableau.
Ce fichier contient le script qui permet de générer le flux json, en fonction de la requête stockée préalablement dans Session(« UsefulContent »).
Les balises de type type AjaxStream servent à préparer les éléments-serveur nécessaires à la page html. Dans notre cas, DataTable() a besoin de recevoir un flux de données JSON afin de remplir le tableau. SqlForJson.asp lui fournit ce contenu lorsqu’elle appelle SqlForJson.asp?context=default.
Le paramètre Request(« context »). #
Le type AjaxStream a d’abord existé sans le paramètre context. Tout ce dont le script avait besoin était placé dans Session(« UsefulContent »). Or au fil des tests, nous nous sommes aperçus qu’il était également pertinent de contrôler le comportement du processeur en fonction de données se trouvant côté client. Nous avons donc décidé de faire en sorte que les processeurs puissent récupérer un paramètre-clef venant du client (le nom «context» a été choisi car dans la plupart des cas, ce paramètre définit un contexte-client).
AInsi, le processeur fonctionne grâce à deux paramètres : la variable Session(« UsefulContent ») qui contient des éléments établis côté serveur, et l’argument Request(« context ») qui contient des éléments établis côté client. Nous aurions pu les appeler Session(« serverParameter ») et Request(« client Parameter »), mais nous avons chois des noms sématiques plutôt que des noms techniques.
Dans le cadre de notre processeur, Request(« context ») détermine quel bout de code sera exécuté pour générer le flux json attendu. Les cas le plus fréquent (default) est développé. Les cas particuliers (à venir) devront faire l’objet d’ajouts spécifiques (un Case par contexte).
Exemples #
3 exemples (pratiquement identiques) sont visibles dans org_logAccesInvest, org_LogAccesManager et org_LogActions.