Webcenter Sites – Téléchargement d’un fichier Mise en place Java try { Session ses = SessionFactory.getSession(); AssetDataManager adm = (AssetDataManager) ses.getManager( AssetDataManager.class.getName() ); AssetId id = new AssetIdImpl(ics.GetVar("c"),Long.valueOf(ics.GetVar("cid"))); List<String> attrNames = new ArrayList<String>(); attrNames.add( "name" ); attrNames.add( "pjointe" ); attrNames.add( "extdocument" ); attrNames.add( "typemime" ); AssetData data = adm.readAttributes( id, attrNames ); String mime = (String)data.getAttributeData("typemime").getData(); BlobObject fileObj = (BlobObject)data.getAttributeData("pjointe").getData(); byte [] d = new byte[fileObj.getBinaryStream().available()]; fileObj.getBinaryStream().read(d); ics.StreamHeader("Content-Type",mime); ics.StreamHeader("Content-Disposition","inline; filename=test."+(String)data.getAttributeData("extdocument").getData()); OutputStream responseOutputStream = response.getOutputStream(); responseOutputStream.write(d); } catch( AssetAccessException e ) { out.print(e.getMessage()); } 1234567891011121314151617181920212223242526272829303132333435363738394041424344 try{ Session ses = SessionFactory.getSession(); AssetDataManager adm = (AssetDataManager) ses.getManager( AssetDataManager.class.getName() ); AssetId id = new AssetIdImpl(ics.GetVar("c"),Long.valueOf(ics.GetVar("cid"))); List<String> attrNames = new ArrayList<String>(); attrNames.add( "name" ); attrNames.add( "pjointe" ); attrNames.add( "extdocument" ); attrNames.add( "typemime" ); AssetData data = adm.readAttributes( id, attrNames ); String mime = (String)data.getAttributeData("typemime").getData(); BlobObject fileObj = (BlobObject)data.getAttributeData("pjointe").getData(); byte [] d = new byte[fileObj.getBinaryStream().available()]; fileObj.getBinaryStream().read(d); ics.StreamHeader("Content-Type",mime); ics.StreamHeader("Content-Disposition","inline; filename=test."+(String)data.getAttributeData("extdocument").getData()); OutputStream responseOutputStream = response.getOutputStream(); responseOutputStream.write(d);}catch( AssetAccessException e ){ out.print(e.getMessage());} Il faut ensuite appeler l’URL en ajoutant à la fin « cs.contenttype=application/pdf » où il faut préciser le mime type du fichier.… Read More
Webcenter Sites – Approbation d’un asset avec ses dépendances On charge d’abord le service de session, la gestion des assets et le service d’approbation : Java /* Chargement de l'asset manager */ Session ses = SessionFactory.newSession("fwadmin","password"); AssetDataManager adm = (AssetDataManager) ses.getManager( AssetDataManager.class.getName() ); /* Chargement du service d'approbation */ ServicesManager servicesManager = (ServicesManager)ses.getManager(ServicesManager.class.getName()); ApprovalService approvalService = servicesManager.getApprovalService(); Query query = null; Condition c = null; Stack<AssetId> liste = new Stack<AssetId>(); 1234567891011 /* Chargement de l'asset manager */Session ses = SessionFactory.newSession("fwadmin","password");AssetDataManager adm = (AssetDataManager) ses.getManager( AssetDataManager.class.getName() ); /* Chargement du service d'approbation */ServicesManager servicesManager = (ServicesManager)ses.getManager(ServicesManager.class.getName());ApprovalService approvalService = servicesManager.getApprovalService(); Query query = null;Condition c = null;Stack<AssetId> liste = new Stack<AssetId>(); On récupère ensuite l’identifiant du flux de publication que j’ai nommé « front » ici : Java /* Récupération de l'id de publication */ FTValList ft = new FTValList(); ft.put("NAME","front"); ft.put("OBJVARNAME","pubtarget"); ics.runTag("PUBTARGETMANAGER.LOAD", ft); ft = new FTValList(); ft.put("NAME","pubtarget"); ft.put("PREFIX","pt:"); ics.runTag("PUBTARGET.SCATTER", ft); long destination = Long.valueOf((String)ics.GetVar("pt:id")); 123456789101112 /* Récupération de l'id de publication */FTValList ft = new FTValList();ft.put("NAME","front");ft.put("OBJVARNAME","pubtarget");ics.runTag("PUBTARGETMANAGER.LOAD", ft); ft = new FTValList();ft.put("NAME","pubtarget");ft.put("PREFIX","pt:");ics.runTag("PUBTARGET.SCATTER", ft); long destination = Long.valueOf((String)ics.GetVar("pt:id")); Il faut ensuite récupérer l’AssetId de l’élément que l’on souhaite publier : Java c = ConditionFactory.createCondition("name", OpTypeEnum.EQUALS,"Accueil"); query = new SimpleQuery( "Page",null, c, Arrays.asList( "name","Publist" ) ); query.getProperties().setIsBasicSearch( true ); for( AssetData data : adm.read( query ) ) { ArrayList<String> sites = (ArrayList)data.getAttributeData("Publist").getData(); if( !sites.contains( (String)ics.GetVar("site") ) ) continue; liste.push(data.getAssetId()); } 1234567891011 c = ConditionFactory.createCondition("name", OpTypeEnum.EQUALS,"Accueil");query = new SimpleQuery( "Page",null, c, Arrays.asList( "name","Publist" ) );query.getProperties().setIsBasicSearch( true ); for( AssetData data : adm.read( query ) ) { ArrayList<String> sites = (ArrayList)data.getAttributeData("Publist").getData(); if( !sites.contains( (String)ics.GetVar("site") ) ) continue; liste.push(data.getAssetId()); } On lance ensuite l’approbation recursive : Java do { if( !liste.empty() ) { AssetId asset = liste.pop(); approvalService.approve(destination,Arrays.<AssetId>asList(asset),false); List<AssetId> blockedAssets = approvalService.getBlockingAssets(destination,asset); if( blockedAssets != null ) { if( blockedAssets.size() > 0 ) { for( AssetId blocked : blockedAssets ) liste.push(blocked); } } } }while( !liste.empty() ); 1234567891011121314151617181920 do{ if( !liste.empty() ) { AssetId asset = liste.pop(); approvalService.approve(destination,Arrays.<AssetId>asList(asset),false); List<AssetId> blockedAssets = approvalService.getBlockingAssets(destination,asset); if( blockedAssets != null ) { if( blockedAssets.size() > 0 ) { for( AssetId blocked : blockedAssets ) liste.push(blocked); } } } }while( !liste.empty() ); … Read More
Webcenter sites – Gestion des Webroots & URLs Introduction aux URL ou Webresources Les webresources permettent de configurer la portée web d’un Asset. C’est aussi ce qui réecrie les URL. Par exemple, sur « Lefetz.net », la page accueil à la webresource : URL Statut Template Wrapper Dispositif accueil.html HTTP 200 lef/Page/accueil lef/ihm/wrapper Desktop La page accueil est donc accessible sur « http://www.lefetz.net/accueil.html ». Cette page retournera un… Read More
Webcenter sites – Créer des proxy Asset Pré-requis Pour customiser l’aborescence, il faut tout d’abord créer les CatalogElement « <AssetType>/Tree/Load » et « <AssetType>/Tree/Root ». Root C’est ici que l’on crée les nodes category. Ici, on va faire qu’une node « Utilisateurs ». AssetType/Tree/Root XHTML <%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %><%@ taglib prefix="asset" uri="futuretense_cs/asset.tld" %><%@ taglib prefix="assetset" uri="futuretense_cs/assetset.tld" %><%@ taglib prefix="commercecontext" uri="futuretense_cs/commercecontext.tld" %><%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %><%@ taglib prefix="listobject" uri="futuretense_cs/listobject.tld" %><%@ taglib prefix="render" uri="futuretense_cs/render.tld" %><%@ taglib prefix="searchstate" uri="futuretense_cs/searchstate.tld" %><%@ taglib prefix="siteplan" uri="futuretense_cs/siteplan.tld" %><%@ taglib prefix="satellite" uri="futuretense_cs/satellite.tld" %><%@ page import="com.google.gson.*" %><%@ page import="COM.FutureTense.Interfaces.*, COM.FutureTense.Util.ftMessage, com.fatwire.assetapi.data.*, com.fatwire.assetapi.*, COM.FutureTense.Util.ftErrors" %><cs:ftcs><%-- INPUT OUTPUT --%> <% String category = "Utilisateurs"; %> <ics:removevar name="AssetType" /> <ics:callelement element="OpenMarket/Gator/UIFramework/BuildTreeNodeID" > <ics:argument name="AdHoc" value='<%=category %>' /> </ics:callelement> <satellite:link assembler="query" pagename="OpenMarket/Gator/UIFramework/LoadTab" outstring="LoadURL"> <satellite:argument name="populate" value="GVisitor/Tree/Load"/> <satellite:argument name="op" value="load"/> <satellite:argument name="category" value='<%=category %>' /> </satellite:link> <ics:callelement element="OpenMarket/Gator/UIFramework/BuildTreeNode"> <ics:argument name="Label" value='<%=category %>' /> </ics:callelement> </cs:ftcs> 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 <%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %><%@ taglib prefix="asset" uri="futuretense_cs/asset.tld" %><%@ taglib prefix="assetset" uri="futuretense_cs/assetset.tld" %><%@ taglib prefix="commercecontext" uri="futuretense_cs/commercecontext.tld" %><%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %><%@ taglib prefix="listobject" uri="futuretense_cs/listobject.tld" %><%@ taglib prefix="render" uri="futuretense_cs/render.tld" %><%@ taglib prefix="searchstate" uri="futuretense_cs/searchstate.tld" %><%@ taglib prefix="siteplan" uri="futuretense_cs/siteplan.tld" %><%@ taglib prefix="satellite" uri="futuretense_cs/satellite.tld" %><%@ page import="com.google.gson.*" %><%@ page import="COM.FutureTense.Interfaces.*, COM.FutureTense.Util.ftMessage, com.fatwire.assetapi.data.*, com.fatwire.assetapi.*, COM.FutureTense.Util.ftErrors" %><cs:ftcs><%-- INPUT OUTPUT --%> <% String category = "Utilisateurs"; %> <ics:removevar name="AssetType" /> <ics:callelement element="OpenMarket/Gator/UIFramework/BuildTreeNodeID" > <ics:argument name="AdHoc" value='<%=category %>' /> </ics:callelement> <satellite:link assembler="query" pagename="OpenMarket/Gator/UIFramework/LoadTab" outstring="LoadURL"> <satellite:argument name="populate" value="GVisitor/Tree/Load"/> <satellite:argument name="op" value="load"/> <satellite:argument name="category" value='<%=category %>' /> </satellite:link> <ics:callelement element="OpenMarket/Gator/UIFramework/BuildTreeNode"> <ics:argument name="Label" value='<%=category %>' /> </ics:callelement> </cs:ftcs> Load Et c’est ici que l’on charge les nodes. AssetType/Tree/Load XHTML %@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld"%> <%@ taglib prefix="ics" uri="futuretense_cs/ics.tld"%> <%@ taglib prefix="proxy" uri="futuretense_cs/proxy.tld"%> <%@ page import="org.codehaus.jettison.json.*"%> <%@ page import="com.google.gson.*"%> <cs:ftcs> <ics:callelement element="GVisitor/GetData" /> <% JsonArray list = (JsonArray)ics.GetObj("GVisitor"); if( list != null ) { for (int i = 0; i < list.size(); i++) { JsonObject item = (JsonObject)list.get(i);%> <proxy:register externalid='<%=item.get("cid").getAsString() %>' type="GVisitor" name='<%=item.get("mail").getAsString() %>' varname="internalid" /> <ics:callelement element="OpenMarket/Gator/UIFramework/BuildTreeNodeID"> <ics:argument name="AssetType" value="GVisitor" /> <ics:argument name="ID" value='<%=ics.GetVar("internalid") %>' /> </ics:callelement> <ics:callelement element="OpenMarket/Gator/UIFramework/BuildTreeNode"> <ics:argument name="Label" value='<%=item.get("mail").getAsString() %>' /> <ics:argument name="Description" value='<%=item.get("mail").getAsString() %>' /> <ics:argument name="executeFunction" value="inspect" /> </ics:callelement> <% } } %> </cs:ftcs> 123456789101112131415161718192021222324252627282930313233343536373839 %@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld"%> <%@ taglib prefix="ics" uri="futuretense_cs/ics.tld"%> <%@ taglib prefix="proxy" uri="futuretense_cs/proxy.tld"%> <%@ page import="org.codehaus.jettison.json.*"%> <%@ page import="com.google.gson.*"%> <cs:ftcs> <ics:callelement element="GVisitor/GetData" /> <% JsonArray list = (JsonArray)ics.GetObj("GVisitor"); if( list != null ) { for (int i = 0; i < list.size(); i++) { JsonObject item = (JsonObject)list.get(i);%> <proxy:register externalid='<%=item.get("cid").getAsString() %>' type="GVisitor" name='<%=item.get("mail").getAsString() %>' varname="internalid" /> <ics:callelement element="OpenMarket/Gator/UIFramework/BuildTreeNodeID"> <ics:argument name="AssetType" value="GVisitor" /> <ics:argument name="ID" value='<%=ics.GetVar("internalid") %>' /> </ics:callelement> <ics:callelement element="OpenMarket/Gator/UIFramework/BuildTreeNode"> <ics:argument name="Label" value='<%=item.get("mail").getAsString() %>' /> <ics:argument name="Description" value='<%=item.get("mail").getAsString() %>' /> <ics:argument name="executeFunction" value="inspect" /> </ics:callelement> <% } } %> </cs:ftcs> GetData Cet élément retourne les visiteurs au format JSON. AssetType/GetData XHTML <%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %> <%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %> <%@ taglib prefix="satellite" uri="futuretense_cs/satellite.tld" %> <%@ taglib prefix="proxy" uri="futuretense_cs/proxy.tld"%> <%@ page import="com.sun.jersey.api.client.*" %> <%@ page import="com.sun.jersey.api.client.config.*" %> <%@ page import="com.google.gson.*"%> <%@ page import="COM.FutureTense.Interfaces.FTValList" %> <%@ page import="COM.FutureTense.Interfaces.ICS" %> <%@ page import="COM.FutureTense.Interfaces.IList" %> <%@ page import="COM.FutureTense.Interfaces.Utilities" %> <%@ page import="COM.FutureTense.Util.ftErrors" %> <%@ page import="COM.FutureTense.Util.ftMessage"%> <cs:ftcs><%-- INPUT OUTPUT --%> <% Client client = Client.create(); WebResource res = client.resource("http://hostname/webservice/Visitor&begin=0&rows="+((ics.GetVar("count")!=null)?ics.GetVar("count"):"10")); ClientResponse resp = res.accept("application/json").get(ClientResponse.class); JsonArray list; if (resp.getStatus() != 200) { list = new JsonArray(); // empty array } else { JsonElement element = new JsonParser().parse(resp.getEntity(String.class)); JsonObject object = element.getAsJsonObject(); list = object.getAsJsonArray("visitors"); } ics.SetObj("GVisitor",list); %> </cs:ftcs> 123456789101112131415161718192021222324252627282930313233343536373839404142434445 <%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %> <%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %> <%@ taglib prefix="satellite" uri="futuretense_cs/satellite.tld" %> <%@ taglib prefix="proxy" uri="futuretense_cs/proxy.tld"%> <%@ page import="com.sun.jersey.api.client.*" %> <%@ page import="com.sun.jersey.api.client.config.*" %> <%@ page import="com.google.gson.*"%> <%@ page import="COM.FutureTense.Interfaces.FTValList" %> <%@ page import="COM.FutureTense.Interfaces.ICS" %> <%@ page import="COM.FutureTense.Interfaces.IList" %> <%@ page import="COM.FutureTense.Interfaces.Utilities" %> <%@ page import="COM.FutureTense.Util.ftErrors" %> <%@ page import="COM.FutureTense.Util.ftMessage"%> <cs:ftcs><%-- INPUT OUTPUT --%> <% Client client = Client.create(); WebResource res = client.resource("http://hostname/webservice/Visitor&begin=0&rows="+((ics.GetVar("count")!=null)?ics.GetVar("count"):"10")); ClientResponse resp = res.accept("application/json").get(ClientResponse.class); JsonArray list; if (resp.getStatus() != 200) { list = new JsonArray(); // empty array } else { JsonElement element = new JsonParser().parse(resp.getEntity(String.class)); JsonObject object = element.getAsJsonObject(); list = object.getAsJsonArray("visitors"); } ics.SetObj("GVisitor",list); %> </cs:ftcs> … Read More
Webcenter sites – Mettre des icônes à l’arborescence de contenu Rendez-vous à la racine du projet « CS ». Ensuite, il faut aller dans le répertoire « Xcelerate\OMTree\TreeImages\AssetTypes ». Il suffit de déposer les images en leur donnant un nom spécifique. Par exemple, j’ai crée une famille flexible GMedia : GAttribute => GAttribute.png GMedia:Image => GMedia/GMedia-Image.png… Read More
Webcenter sites – system events Introduction Webcenter Sites permet de créer des tâches planifiées qui permettent de faire des actions sur un temps donné. Installation Il faut tout d’abord créer un élément qui sera appelé par le scheduler. Cela peut être un ElementCatalog (à tester) ou un CSElement + SiteEntry (Cas testé). Une fois que l’on a notre élément, il… Read More