cancel
Showing results for 
Search instead for 
Did you mean: 

récupération page.url.templateArgs.site

cchumi
Champ in-the-making
Champ in-the-making
Bonjour ou bonsoir à tous je suis tout nouveau sur ce forum et il s'agit de mon premier poste.

Je développe actuellement une appli pour ma société concernant notre certification ISO 9001.

Actuellement j'arrive très bien à gérer les modèles de contenu mais je sèche sur un dashlet.
Je cherche actuellement à créer un dashlet reprenant des valeurs d'un type de datalists particulier en l'occurence graph:graphList.

Ce dernier modèle est en fait une saisie de 3 champ, une date ( qui représente en réalité un mois et une année ) , une valeur ( la valeur du mois correspondant ) et la tendance ( la moyenne des mois précédents ) .

Ayant mis tout cela sur un cahier des charges je me suis mis à developper mon premier dashlet.
Donc dans webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\dashlets j'ai crée graphique.get.desc.xml, graphique.get.head.ftl, graphique.get.html.ftl, graphique.get.json.ftl, et graphique.get.js.

Mon dashlet est très bien référencé et je peux donc l'ajouter au dashboard d'un site.

Maintenant mon script graphique.get.js que voici :

//<import resource="classpath:/alfresco/site-webscripts/org/alfresco/callutils.js">

function main()
{

//args["site"];
var site = "Metrologie";
//var siteId = String(json.get("siteId"));
var siteId = page.url.templateArgs.site;

model.testee = siteId;


model.dataSites =  [];
model.listTitles =  [];
var listdata = getListforGraph(siteId);     
model.listTitles = listdata;

var longueur = listdata.length;
var itemsdata = [];
var test = [];
//model.testsite = currentSite;


for (var i = 0, ii = listdata.length; i < ii; i++)

         {
   test = listdata[i];

           itemsdata = getDataforGraph(siteId, test.names, test.titles, test.descriptions);

         }

  return itemsdata;

   }
  


var getListforGraph = function(curresite)
{
    var site, container, theUrl, connector, result, lists, types = [];
//sites = 'test';
//site = currentsites;
//var curresite = "Achats";
   container = 'dataLists';
   theUrl = "/slingshot/datalists/lists/site/" + curresite + "/" + container + "?page=1&pageSize=512";

   connector = remote.connect("alfresco");
   result = connector.get(theUrl);
  
   if (result.status == 200)
   {
model.ok = " ouiii";
      var ss = eval("(" + result + ")");
      try
      {
         for each (var s in ss.datalists)
         {
         if (s.itemType == "graph:graphList")
         {
         types.push(
         {
            names: s.name,
            titles: s.title,
            descriptions: s.description,
         itemtypes: s.itemType
         });
         }
       else
       {
       continue;
       }
      
      
      }
     }
      catch (e)
      {
      }
   }
  
  if (types.size != 0)
  {

      model.bug = "ouiiiii"
   }
   else
   {
   model.bug = "buggg"
   }
      return types;
}

var getDataforGraph = function(currsite, nameliste, titleliste, descliste)
{

  
var site, container, theUrla, connector, result, lists, listetitle, listedesc, liste, activity = [];
model.liste = [];

//site = 'test';
//site = page.url.templateArgs.site;
container = 'dataLists';
liste = nameliste;
listetitle = titleliste;
listedesc = descliste;


   theUrla = '/slingshot/datalists/data/site/' + currsite + '/' + container + '/';

var myObj = { "fields" :[   "graph_graphDate",
                     "graph_graphValeur",
                     "graph_graphTendance",
                     "graph_graphObjectif"
                  ],
              "filter" :{   "filterData" : "",
                     "filterId" : "all"
                  }
         };

var myObjAsString = jsonUtils.toJSONString(myObj);

var itemslist = [];
      siteTitle = "";
var dataSites = new Array();

   connector = remote.connect("alfresco");
  
    
   theUrl = theUrla + liste;
model.url = theUrl;
    result = connector.post(theUrl, myObjAsString, 'application/json');

      // if (response.success !== undefined)
  if (result.status == 200)
   {
      var i, ii;
            
         // Create javascript objects from the server response
         // Each item is a favourite site that the user is a member of
         //var sites = eval('(' + result + ')'), site;
         var response = eval('(' + result + ')'), data;
         if (response.length != 0)
         {
            // Sort the sites by title
            //sites.sort(sortByTitle);

           
            for (i = 0, ii = response.items.length; i < ii; i++)
            {
               data = response.items[i];
       //if (site.shortName == currentSite)
               //{
                 // siteTitle = data.title;
                  //if (ignoreCurrentSite)
                  //{
                     // The current site was piggy-backing the query call; it's not a favourite
                    // continue;
                  //}
                  //currentSiteIsFav = true;
//var dt=new Date(data.itemData.prop_graph_graphDate.value);

   //var mois=dt.getMonth();
   var date = fromISO8601(data.itemData.prop_graph_graphDate.value);

   dataSites.push(
         {
          sitename: site,
         listename: liste,
         listetitle: listetitle,
         listedescription: listedesc,
         tdate : date,
         graphDate : data.itemData.prop_graph_graphDate.value,
          graphValeur : data.itemData.prop_graph_graphValeur.value,
         graphTendance : data.itemData.prop_graph_graphTendance.value,
         graphObjectif : data.itemData.prop_graph_graphObjectif.value
         });
      

         
        }
           
        }

   }

return dataSites;
}

function fromISO8601(formattedString)
{
   var isoRegExp = /^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;

   var match = isoRegExp.exec(formattedString);
   var result = null;

   if (match)
   {
      match.shift();
      if (match[1]){match[1]–;} // Javascript Date months are 0-based
      if (match[6]){match[6] *= 1000;} // Javascript Date expects fractional seconds as milliseconds

      result = new Date(match[0]||1970, match[1]||0, match[2]||1, match[3]||0, match[4]||0, match[5]||0, match[6]||0);

      var offset = 0;
      var zoneSign = match[7] && match[7].charAt(0);
      if (zoneSign != 'Z')
      {
         offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0);
         if (zoneSign != '-')
         {
            offset *= -1;
         }
      }
      if (zoneSign)
      {
         offset -= result.getTimezoneOffset();
      }
      if (offset)
      {
         result.setTime(result.getTime() + offset * 60000);
      }
   }

   return result; // Date or null
}

   model.dataSites = main();

recherche en faite toutes les liste de données correspondant au type graph:graphList ( modèle conçu pour les graphique ) .
Ce script fonctionne parfaitement . Dans mon graphique.get.html.ftl je récupère facilement les valeur pour affichage.
Maintenant j'ai donc crée un fichier graphique.get.json.ftl que voici :

<#escape x as jsonUtils.encodeJSONString(x)>
{"datajson":[

<#list dataSites as match>
{
"date" : "${match.tdate?js_string}",
<#assign currentLocale=locale />
<#setting locale="en_US" />
"valeur" : "${match.graphValeur}",
"tendance" : "${match.graphTendance}"
<#setting locale=currentLocale />
}
<#if match_has_next>,</#if>
</#list>
]
}
</#escape>
me permettant je formatter le texte json et ainsi de le passé dans mon graphique.get.html.ftl que voici :


<script type="text/javascript">//<![CDATA[
  new Alfresco.Graphique("${args.htmlid}").setOptions(
  {
    "site": "${page.url.templateArgs.site!""}"
  });
  new Alfresco.widget.DashletResizer("${args.htmlid}", "${instance.object.id}");
//]]></script>



         <div class="dashlet graphique">

         <div id="chart">Loading…</div>
            
</div>
<script type="text/javascript">

YAHOO.util.Event.addListener(window, "load", function() {
   var healthtab = function() {
   
      YAHOO.widget.Chart.SWFURL = "http://yui.yahooapis.com/2.8.2r1/build/charts/assets/charts.swf";

YAHOO.example.puppies = [
   { name: "Ashley", breed: "German Shepherd", age: 12.05 },
   { name: "Dirty Harry", breed: "Norwich Terrier", age: 5.20 },
   { name: "Emma", breed: "Labrador Retriever", age: 9.10 },
   { name: "Oscar", breed: "Yorkshire Terrier", age: 6 },
   { name: "Riley", breed: "Golden Retriever", age: 6 },
   { name: "Shannon", breed: "Greyhound", age: 12 },
   { name: "Washington" ,breed: "English Bulldog", age: 8 },
   { name: "Zoe", breed: "Labrador Retriever", age: 3 }
];



   
//— Ajax call
     // var healthDataSource = new YAHOO.util.DataSource(YAHOO.example.puppies);
     var healthDataSource = new YAHOO.util.XHRDataSource("/share/service/components/dashlets/graphique.json");


      healthDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;

      healthDataSource.responseSchema = {
     resultsList:"datajson",
        fields: ["date", "valeur", "tendance"]
      };
       
      var seriesDef = [
    { displayName: "Valeur", yField: "valeur" },
    { displayName: "Tendance", yField: "tendance" }
];

//— chart

   
          
      var mychart = new YAHOO.widget.LineChart( "chart", healthDataSource,
     {
      xField: "date",
      series: seriesDef
     });
    

   }();
});
</script>

La partie javascript fait appel au get.json.ftl pour récuperer les data json et donc les injecté dans un datasource selon le schéma que je leur ai défini.
Et c'est là que ça ne marche pas .
Lorsque j'éxécute ce dashlet. J'obtiens une erreur 500 me disant:


{
    "status" :
  {
    "code" : 500,
    "name" : "Internal Error",
    "description" : "An error inside the HTTP server which prevented it from fulfilling the request."
  }, 
 
  "message" : "00170031 Failed to execute script 'classpath*:alfresco\/site-webscripts\/org\/alfresco\/components\/graph\/graph.get.js': 00170030 ReferenceError: \"page\" n'est pas d\u00e9fini (file:\/C:\/Alfresco\/tomcat\/webapps\/share\/WEB-INF\/classes\/alfresco\/site-webscripts\/org\/alfresco\/components\/graph\/graph.get.js#9)", 
  "exception" : "org.springframework.extensions.webscripts.WebScriptException - 00170031 Failed to execute script 'classpath*:alfresco\/site-webscripts\/org\/alfresco\/components\/graph\/graph.get.js': 00170030 ReferenceError: \"page\" n'est pas d\u00e9fini (file:\/C:\/Alfresco\/tomcat\/webapps\/share\/WEB-INF\/classes\/alfresco\/site-webscripts\/org\/alfresco\/components\/graph\/graph.get.js#9)",
  ….

J'ai regardé dans d'autres dashlets et c'est bien comme cela que l'on récupère le nom du site courrant.

J'avoue être complétement perdu . Alors si vous aviez une petite idée ou au moins une orientation . Certainement que ma façon d'écrire mon dashlet n'est pas la bonne … Ou peut etre constatez vous une erreur.
Je suis pret a prendre toutes les critiques comme constructive.

Dans l'attente de vous lire Cordialement

Et n'hésitez pas si vous avez besoin d'informations supplémentaires.
12 REPLIES 12

cchumi
Champ in-the-making
Champ in-the-making
Bonjour et ne vous en faites pas je trouve ça déjà très gentil de prendre du temps pour mon problème.
Pour résumer en effet j'avais remarquer après que j'alimentais mal mon itemsdata. Donc ce ci a été corriger.
Chose complètement incomprehensible je n'arrive pas a récupérer mes valeurs dans mon json.ftl

la seule manière actuellement qui ma permis de voir mes données est d'utiliser jsonUtils.toJSONString(itemsdata);
Mais le formatage est immonde .

J'avoue etre un peu perdu .Et pour l'histoire du tableau dans un tableau il y aurait une solution consistant à éviter cela ?
Enfin vous remarquerez que mes conaissances ne sont pas accruc…. Et j'en suis désolé.

En tout cas merci d'avance encore pour le temps passé sur mon problème.

Cordialement

alucard
Champ in-the-making
Champ in-the-making
Bonjour,
j'ai un petit souci par rapport, a la récupération de site via un Dashlet, j'ai suivi le petit exemple de  BertrandF (l'exemple ultra simple) pour voir si on arrive a récupérer quelque chose  mais j'ai toujours l’éternelle erreur 500, il me signal que le problème vient du fichier test.get.html.ftl sur l’élément ${nomdusite} , j'aimerai savoir si il y a eu le même problème pour vous? et si oui quel est la solution , merci.

bertrandf
Champ on-the-rise
Champ on-the-rise
Bonjour,

Ouvrez un nouveau sujet car celui ci est résolu et surtout montrez un peu de votre code sinon on ne pourra pas vous aider.

Cordialement.
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.