AnsweredAssumed Answered

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

Question asked by cchumi on Jan 17, 2011
Latest reply on Jul 11, 2011 by bertrandf
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.

Outcomes