CETTE FONCTION N'A PAS ENCORE PASSER LE TESTE DE LA MISE EN PRODUCTION, C'EST UNE VERSION BETA 3 QUI A PASSEE LES TESTS UNITAIRE
[syntax="javascript"]/*
attention :
- dans les vues, les colonnes sont numérotées à partie de 1 et dans le flux XML à partir de zéro
- les colonnes masqué ne sont pas prisent en compte par le readviewentries
- le readviewentries ne peux pas renvoyer plus de ligne que le nombre maximal autorisé par le server
la fonction convertie les numéro de colonne des vues en numéro de colonne pour le flux xml
la variable separator contient le Separateur de liste, pour renvoyer un tableau passer "ARRAY", ou "" comme separateur.
nbNoCache = true permet de générer une url unique, donc pas de cache. défaut ça charge le cache du navigateur
RestrictCategory ne fonctionne que si la premiere colonne est catégorisé.
pour la fonction dblookup, RestrictCategory est égale a true ou false, true activant le RestrictCategory sur la clé de recherche
pour la fonction dblookup2, RestrictCategory contient la chaine pour effectuer l'opération, si la valeur est vide ou null le RestrictCategory n'est pas effectué
*/
// format la chaine en retirant les caracteres indésirable
function stringFormat(source){
if (source.length === 0) {
return "";
}
return source.replace(/^\s/, '').replace(/\s$/, '');
}
function columnCheck(nbColumnPosition, nbKeyColumnPosition, nbColumnCheck, caller, viewName, urlRequeste){
if (nbColumnPosition === undefined || nbColumnPosition === null) {
alert("Ajax " + caller + "/columnChec Error 15 : nbColumnPosition not valid (" + nbColumnPosition + ")\nView : ''" + viewName + "''\n URL : " + urlRequeste);
return false;
}
if (nbKeyColumnPosition === undefined || nbKeyColumnPosition === null) {
alert("Ajax " + caller + "/columnChec Error 16 : nbKeyColumnPosition not valid (" + nbKeyColumnPosition + ")\nView : ''" + viewName + "''\n URL : " + urlRequeste);
return false;
}
if (nbColumnCheck === undefined || nbColumnCheck === null) {
alert("Ajax " + caller + "/columnChec Error 17 : nbColumnCheck not valid (" + nbColumnCheck + ")\nView : ''" + viewName + "''\n URL : " + urlRequeste);
return false;
}
if (nbColumnPosition > nbColumnCheck) {
//controle que la colonne passé en parametre est valide
alert("Ajax " + caller + " Error 18 : bad number column (" + nbColumnPosition + " > " + nbColumnCheck + ")\ncolumns in the View : " + nbColumnCheck + "\ncolumn called : " + nbColumnPosition + "\nView : ''" + viewName + "''\nURL : " + urlRequeste);
return false;
}
if (nbKeyColumnPosition > nbColumnCheck) {
//controle que la colonne passé en parametre est valide
alert("Ajax " + caller + " Error 19 : bad number column key (" + nbKeyColumnPosition + " > " + nbColumnCheck + ")\ncolumns in the View : " + nbColumnCheck + "\ncolumn key called : " + nbKeyColumnPosition + "\nView : ''" + viewName + "''\nURL : " + urlRequeste);
return false;
}
return true;
}
function formatRetour(retour, arrayRetour, valeurSave, keyValeurSave, keyValeur, separateur){
var nbIndexRetour = 0;
if (arrayRetour === undefined || arrayRetour === null) {
arrayRetour = [];
}
else {
nbIndexRetour = parseInt(arrayRetour.length, 10);
}
if (keyValeur === "") {
if (separateur === "ARRAY") {
arrayRetour[nbIndexRetour] = valeurSave;
}
else {
if (retour === "") {
retour = valeurSave;
}
else {
retour += separateur + valeurSave;
}
}
}
else {
if (keyValeur === keyValeurSave) {
if (separateur === "ARRAY") {
arrayRetour[nbIndexRetour] = valeurSave;
}
else {
if (retour === "") {
retour = valeurSave;
}
else {
retour += separateur + valeurSave;
}
}
}
}
if (separateur === "ARRAY") {
return arrayRetour;
}
else {
return retour;
}
}
//cette function teste si le flux XML est complétement chargé et en extrait les données de la colonne
function traitementXML(urlRequeste, viewName, nbColumnPosition, keyValeur, nbKeyColumnPosition, separateur, caller){
var XHRequest = null;
if (window.XMLHttpRequest) {
// Firefox et autres
XHRequest = new XMLHttpRequest();
if (XHRequest.overrideMimeType) {
XHRequest.overrideMimeType('text/xml');
}
}
else
if (window.ActiveXObject) {
// Internet Explorer
try {
XHRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
XHRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else {
//non supporté par le navigateur
alert("Ajax " + caller + " Error 12 : XMLHttpRequest non supporté par le navigateur\nView : ''" + viewName + "''\n URL : " + urlRequeste);
return null;
}
XHRequest.open("GET", urlRequeste, false);
//XHRequest.async=false;
XHRequest.send(null);
//traitement uniquement si le flux XML est complètement chargé; 4 = complet"
if (XHRequest.status === 200) {
//Taitement si tou t est OK
var nbRow = 0;
//teste si la requete renvoi au moins 1 ligne
try {
nbRow = parseInt(XHRequest.responseXML.getElementsByTagName("viewentries")[0].getAttribute("toplevelentries"), 10);
if (nbRow === "" || isNaN(nbRow) === false || nbRow === "0" || nbRow === 0) {
if (separateur === "ARRAY") {
return [];
}
else {
return "";
}
}
}
catch (e) {
alert("Ajax " + caller + " Error 13 : Flux XML ( Recovery ) Error\nView : ''" + viewName + "''\n URL : " + urlRequeste);
return null;
}
//on recupère et teste qu'il ya bien un document XML
try {
var response = XHRequest.responseXML.documentElement;
}
catch (e) {
alert("Ajax " + caller + " Error 14 : XHRequest.responseXML.documentElement not found\nView : ''" + viewName + "''\n URL : " + urlRequeste);
return null;
}
//teste qu'il ya au moins une ligne de renvoyé
try {
nbRow = parseInt(XHRequest.responseXML.getElementsByTagName("viewentries")[0].getAttribute("toplevelentries"), 10);
if (nbRow === "" || isNaN(nbRow) === false || nbRow === "0" || nbRow === 0) {
return [];
}
}
catch (e) {
return [];
}
if (nbColumnPosition === undefined || nbColumnPosition === null || nbColumnPosition === '') {
nbColumnPosition = 0;
}
if (nbKeyColumnPosition === undefined || nbKeyColumnPosition === null || nbKeyColumnPosition === '') {
nbKeyColumnPosition = -1;
}
var arraySave = [];
var arrayRetour = null;
var retour = "";
var nbIndex = 0;
var nbIndex_old = 0;
var nbIndexColonne = 0;
var nbIndexColonne_old = 0;
var valeur = '';
arraySave[nbIndex] = [];
var a = 0;
var a2 = 0;
var b = 0;
var b2 = 0;
var c = 0;
var c2 = 0;
var i = 0;
try {
var entries = XHRequest.responseXML.documentElement.getElementsByTagName("viewentry");
}
catch (e) {
return [];
}
for (a = 0, a2 = entries.length; a < a2; a++) {
var XMLEntry = entries[a];
for (b = 0, b2 = XMLEntry.childNodes.length; b < b2; b++) {
var entryData = XMLEntry.getElementsByTagName('entrydata')[b];
if (entryData !== null) {
valeur = '';
if (entryData.hasChildNodes() === true) {
nbIndexColonne = Number(entryData.getAttributeNode('columnnumber').value) + 1;
for (c = 0, c2 = entryData.childNodes.length; c < c2; c++) {
try {
valeur = entryData.childNodes[c].lastChild.nodeValue;
}
catch (e) {
valeur = '';
}
if (nbIndexColonne < nbIndexColonne_old) {
if (nbIndexColonne > 1) {
if (arraySave[0] !== null && arraySave.length === 1) {
//teste que le numero de colonne passé en parametre est correct
if (columnCheck(nbColumnPosition, nbKeyColumnPosition, (arraySave[0].length - 1), caller, viewName, urlRequeste) === false) {
arraySave = [];
arrayRetour = [];
retour = "";
return null;
}
}
nbIndex_old = nbIndex;
nbIndex++;
arraySave[nbIndex] = [];
for (i = 1; i < nbIndexColonne; i++) {
arraySave[nbIndex][i] = arraySave[nbIndex_old][i];
}
nbIndex_old = 0;
}
else {
nbIndex++;
arraySave[nbIndex] = [];
}
arrayRetour = formatRetour(retour, arrayRetour, arraySave[nbIndex - 1][nbColumnPosition], arraySave[nbIndex - 1][nbKeyColumnPosition], keyValeur, separateur);
//vidage des élément de tableau don on a pas besoin afin de l'alléger
nbIndex_old = nbIndex - 2;
if (nbIndex_old >= 0) {
arraySave[nbIndex_old] = null;
}
nbIndex_old = 0;
}
if (nbColumnPosition === nbIndexColonne || nbKeyColumnPosition === nbIndexColonne) {
arraySave[nbIndex][nbIndexColonne] = valeur;
}
else {
arraySave[nbIndex][nbIndexColonne] = "";
}
nbIndexColonne_old = nbIndexColonne;
}
}
}
}
}
arrayRetour = formatRetour(retour, arrayRetour, arraySave[nbIndex][nbColumnPosition], arraySave[nbIndex][nbKeyColumnPosition], keyValeur, separateur);
if (columnCheck(nbColumnPosition, nbKeyColumnPosition, (arraySave[nbIndex].length - 1), caller, viewName, urlRequeste) === false) {
arraySave = [];
arrayRetour = [];
retour = "";
return null;
}
arraySave = [];
if (separateur === "ARRAY") {
return arrayRetour;
}
else {
return retour;
}
}
else {
alert("Ajax " + caller + " Error 20 : " + XHRequest.statusText + "\n " + XHRequest.status + "\nView : ''" + viewName + "''\n URL : " + urlRequeste);
return null;
}
}
function dbColumn(server, pathfile, view, nbColumn, separator, nbNoCache){
if (server === undefined || server === null || server === "" || stringFormat(server) === "") {
server = "";
}
else {
server = "http://" + stringFormat(server);
}
if (pathfile === undefined || pathfile === null || pathfile === "" || stringFormat(pathfile) === "") {
//si la valeur est vide récupere le chemin de la base en cours
pathfile = (document.location.href).toLowerCase();
pathfile = pathfile.substring(pathfile.indexOf('/', pathfile.indexOf('://') + 3) + 1, pathfile.lastIndexOf('nsf') + 3);
}
pathfile = stringFormat(pathfile);
if (pathfile === "") {
alert("Ajax dbColumn Error 1 : pathFile is empty");
return null;
}
if (view === undefined || view === null || view === "" || stringFormat(view) === "") {
alert("Ajax dbColumn Error 2 : view is empty");
return null;
}
else {
view = stringFormat(view);
}
if (isNaN(nbColumn)) {
alert("Ajax dbColumn Error 3 : nbColumn not a number : " + nbColumn);
return null;
}
if (separator === undefined || separator === null || separator === "" || stringFormat(separator) === "" || separator.toUpperCase() === "ARRAY") {
separator = "ARRAY";
}
else {
separator = stringFormat(separator.toUpperCase());
}
if (nbNoCache === undefined || nbNoCache === null || nbNoCache === "" || isNaN(nbNoCache) || nbNoCache !== true) {
nbNoCache = false;
}
var url = server + "/" + pathfile + "/" + view + "?ReadViewEntries&Count=-1&ExpandView&PreFormat&ResortAscending=" + nbColumn;
if (nbNoCache === true) {
url += "&" + Math.random();
}
return traitementXML(url, view, nbColumn, "", 1, separator, "DBColumn");
}
function dbLookup(server, pathfile, view, key, nbColumn, separator, nbNoCache, nbRestrictCategory){
if (server === undefined || server === null || server === "" || stringFormat(server) === "") {
server = "";
}
else {
server = "http://" + stringFormat(server);
}
if (pathfile === undefined || pathfile === null || pathfile === "" || stringFormat(pathfile) === "") {
//si la valeur est vide récupere le chemin de la base en cours
pathfile = (document.location.href).toLowerCase();
pathfile = pathfile.substring(pathfile.indexOf('/', pathfile.indexOf('://') + 3) + 1, pathfile.lastIndexOf('nsf') + 3);
}
pathfile = stringFormat(pathfile);
if (pathfile === "") {
alert("Ajax dbLookup Error 4 : pathFile is empty");
return null;
}
if (view === undefined || view === null || view === "" || stringFormat(view) === "") {
alert("Ajax dbLookup Error 5 : view is empty");
return null;
}
else {
view = stringFormat(view);
}
if (key === undefined || key === null || key === "" || stringFormat(key) === "") {
alert("Ajax dbLookup Error 6 : key is empty");
return null;
}
else {
key = stringFormat(key);
}
if (nbColumn === undefined || nbColumn === null || isNaN(nbColumn)) {
alert("Ajax dbLookup Error 7 : nbColumn not a number : " + nbColumn);
return null;
}
if (separator === undefined || separator === null || separator === "" || stringFormat(separator) === "" || separator.toUpperCase() === "ARRAY") {
separator = "ARRAY";
}
else {
separator = stringFormat(separator.toUpperCase());
}
if (nbNoCache === undefined || nbNoCache === null || nbNoCache === "" || isNaN(nbNoCache) || nbNoCache !== true) {
nbNoCache = false;
}
if (nbRestrictCategory === undefined || nbRestrictCategory === null || nbRestrictCategory === "" || isNaN(nbRestrictCategory) || nbRestrictCategory !== true) {
nbRestrictCategory = false;
}
var url = server + "/" + pathfile + "/" + view + "?ReadViewEntries&Count=-1&ExpandView&PreFormat&ResortAscending=0"; //&StarKey=" + key + "&UntilKey=" + key + "_";
if (nbRestrictCategory === true) {
url += "&RestrictToCategory=" + key;
key = "";
nbColumn--;
}
if (nbNoCache === true) {
url += "&" + Math.random();
}
return traitementXML(url, view, nbColumn, key, 1, separator, "DBLookup");
}
function dbLookup2(server, pathfile, view, key, nbKeyColumn, nbColumn, separator, nbNoCache, RestrictCategory){
//ce dblookup permet de faire une recherche sur une vue non trié et choisissant la colonne de recherche
if (server === undefined || server === null || server === "" || stringFormat(server) === "") {
server = "";
}
else {
server = "http://" + stringFormat(server);
}
if (pathfile === undefined || pathfile === null || pathfile === "" || stringFormat(pathfile) === "") {
//si la valeur est vide récupere le chemin de la base en cours
pathfile = (document.location.href).toLowerCase();
pathfile = pathfile.substring(pathfile.indexOf('/', pathfile.indexOf('://') + 3) + 1, pathfile.lastIndexOf('nsf') + 3);
}
pathfile = stringFormat(pathfile);
if (pathfile === "") {
alert("Ajax dbLookup2 Error 8 : pathFile is empty");
return "";
}
if (view === undefined || view === null || view === "" || stringFormat(view) === "") {
alert("Ajax dbLookup2 Error 9 : view is empty");
return null;
}
else {
view = stringFormat(view);
}
if (key === undefined || key === null || key === "" || stringFormat(key) === "") {
alert("Ajax dbLookup2 Error 10 : key is empty");
return null;
}
else {
key = stringFormat(key);
}
if (nbKeyColumn === undefined || nbKeyColumn === null || isNaN(nbKeyColumn)) {
alert("Ajax dbLookup2 Error 11 : nbKeyColumn not a number : " + nbKeyColumn);
return null;
}
if (nbColumn === undefined || nbColumn === null || isNaN(nbColumn)) {
alert("Ajax dbLookup2 Error 11 : nbColumn not a number : " + nbColumn);
return null;
}
if (separator === undefined || separator === null || separator === "" || stringFormat(separator) === "" || separator.toUpperCase() === "ARRAY") {
separator = "ARRAY";
}
else {
separator = stringFormat(separator.toUpperCase());
}
if (nbNoCache === undefined || nbNoCache === null || nbNoCache === "" || isNaN(nbNoCache) || nbNoCache !== true) {
nbNoCache = false;
}
if (RestrictCategory === undefined || RestrictCategory === null || RestrictCategory === "" || stringFormat(RestrictCategory) === "") {
RestrictCategory = "";
}
var url = stringFormat(server) + "/" + stringFormat(pathfile) + "/" + stringFormat(view) + "?ReadViewEntries&Count=-1&ExpandView&PreFormat&ResortAscending=" + (nbKeyColumn - 1); // + "&StarKey=" + key + "&UntilKey=" + key + "_";
if (RestrictCategory !== "") {
url += "&RestrictToCategory=" + stringFormat(RestrictCategory);
nbColumn--;
nbKeyColumn--;
if (nbKeyColumn === 0) {
key = "";
}
}
if (nbNoCache === true) {
url += "&" + Math.random();
}
return traitementXML(url, view, nbColumn, key, nbKeyColumn, separator, "DBLookup2");
}
[/syntax]