Workflow de création de Site

cancel
Showing results for 
Search instead for 
Did you mean: 
rsinelle_6382
Member II

Workflow de création de Site

Bonjour

J'ai le besoin de créer un workflow en plusieurs étapes pour finalement aboutir à la création d'un site Share.
L'environnement est le suivant :
- workflow en activiti
- alfresco 4.0.0 EE.

Mon problème (sinon je ne serai pas là  :wink: ) est que dans la dernière tâche de type service, je tente de créer un site Share avec l'API Java :
      SiteService siteService = registry.getSiteService();
      SiteInfo siteInfo = siteService.createSite("site-preset", projectTitle, projectTitle, projectTitle, SiteVisibility.PRIVATE, siteType);

Malheureusement depuis le moteur Alfresco il n'est pas possible de créer un site Share : bug https://issues.alfresco.com/jira/browse/ALF-4771… qui, je pense, ne pourra jamais être corrigé (gros problème d'architecture entre le share et alfresco qui montre la limite du modèle actuel…. enfin c'est juste mon avis).

Auriez vous une idée de workaround pour pouvoir créer un site Share depuis Alfresco ?

Toutes les idées sont les bienvenues !

Merci
Richard
2 Replies
cleseach
Active Member II

Re: Workflow de création de Site

Bonjour,

Le problème provient du fait que certains fichiers de configuration du site ne sont pas créés par l'appel siteService.createSite, mais sont habituellement générés par Share puis stockés dans le référentiel.

Pour que votre site fonctionne sous Share, il vous faut également créer ces fichiers. Vous pouvez étudier la logique de création de Share pour la cloner dans Alfresco et l'exécuter après votre création de site.

A titre d'exemple, voici un script JavaScript qui m'a permis de créer un site de test :
// CREATE SITE
var name="MonSite";
var leSite = siteService.createSite("site-dashboard", name, name, name, "PUBLIC");
var siteNode = leSite.node;
var configNode = siteNode.createFolder("surf-config");
var componentsNode = configNode.createFolder("components");

// TITLE
var docName = "page.title.site~" + name + "~dashboard.xml";
var contentPreset = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
"<component>\n"+
"<guid>page.title.site~" + name + "~dashboard</guid>\n"+
"  <scope>page</scope>\n"+
"  <region-id>title</region-id>\n"+
"  <source-id>site/" + name + "/dashboard</source-id>\n"+
"  <url>/components/title/collaboration-title</url>\n"+
"</component>";
var doc = componentsNode.createFile(docName);
doc.content = contentPreset;

// NAVIGATION
var docName = "page.navigation.site~" + name + "~dashboard.xml";
var contentPreset="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
"<component>\n"+
"  <guid>page.navigation.site~" + name + "~dashboard</guid>\n"+
" <scope>page</scope>\n"+
"  <region-id>navigation</region-id>\n"+
"  <source-id>site/" + name + "/dashboard</source-id>\n"+
"  <url>/components/navigation/collaboration-navigation</url>\n"+
"</component>";
var doc = componentsNode.createFile(docName);
doc.content = contentPreset;

// DASHLET
var docName = "page.full-width-dashlet.site~" + name + "~dashboard.xml";
var contentPreset="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
"<component>\n"+
"  <guid>page.full-width-dashlet.site~" + name + "~dashboard</guid>\n"+
"  <scope>page</scope>\n"+
"  <region-id>full-width-dashlet</region-id>\n"+
"  <source-id>site/" + name + "/dashboard</source-id>\n"+
"  <url>/components/dashlets/dynamic-welcome</url>\n"+
"  <properties>\n"+
"    <dashboardType>site</dashboardType>\n"+
"  </properties>\n"+
"</component>";
var doc = componentsNode.createFile(docName);
doc.content = contentPreset;

// COMPONENT
var docName = "page.component-1-1.site~" + name + "~dashboard.xml";
var contentPreset="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
"<component>\n"+
"  <guid>page.component-1-1.site~" + name + "~dashboard</guid>\n"+
"  <scope>page</scope>\n"+
"  <region-id>component-1-1</region-id>\n"+
"  <source-id>site/" + name + "/dashboard</source-id>\n"+
"  <url>/components/dashlets/colleagues</url>\n"+
"  <properties>\n"+
"    <height>504</height>\n"+
"  </properties>\n"+
"</component>";
var doc = componentsNode.createFile(docName);
doc.content = contentPreset;

var docName = "page.component-2-1.site~" + name + "~dashboard.xml";
var contentPreset="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
"<component>\n"+
"  <guid>page.component-2-1.site~" + name + "~dashboard</guid>\n"+
"  <scope>page</scope>\n"+
"  <region-id>component-2-1</region-id>\n"+
"  <source-id>site/" + name + "/dashboard</source-id>\n"+
"  <url>/components/dashlets/docsummary</url>\n"+
"</component>";
var doc = componentsNode.createFile(docName);
doc.content = contentPreset;

var docName = "page.component-2-2.site~" + name + "~dashboard.xml";
var contentPreset="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
"<component>\n"+
"  <guid>page.component-2-2.site~" + name + "~dashboard</guid>\n"+
"  <scope>page</scope>\n"+
"  <region-id>component-2-2</region-id>\n"+
"  <source-id>site/" + name + "/dashboard</source-id>\n"+
"  <url>/components/dashlets/activityfeed</url>\n"+
"</component>";
var doc = componentsNode.createFile(docName);
doc.content = contentPreset;

var pagesFolderNode = configNode.createFolder("pages").createFolder("site").createFolder(name);
var docName = "dashboard.xml";
var contentPreset="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
"<page>\n"+
"  <title>Collaboration Site Dashboard</title>\n"+
"  <title-id>page.siteDashboard.title</title-id>\n"+
"  <description>Collaboration site's dashboard page</description>\n"+
"  <description-id>page.siteDashboard.description</description-id>\n"+
"  <authentication>user</authentication>\n"+
"  <template-instance>dashboard-2-columns-wide-right</template-instance>\n"+
"  <properties>\n"+
"    <sitePages>[{\"pageId\":\"documentlibrary\"}]</sitePages>\n"+
"  </properties>\n"+
"</page>";
var doc = pagesFolderNode.createFile(docName);
doc.content = contentPreset;

Attention, c'est du code de test uniquement, il ne faut surtout pas le prendre tel quel pour votre projet.

Cordialement,
Charles Le Seac'h
rsinelle_6382
Member II

Re: Workflow de création de Site

Bonjour

Merci pour votre réponse.

C'est l'idée que j'avais commencé à creuser…

Sinon j'avais penser faire un javascript côté share que j'appelle en http depuis Alfresco, oui c'est franchement pas propre mais en attendant….
Malheureusement quand j'effectue la requête http je ne suis pas authentifié côté Share et donc le script ne fonctionne pas… il fonctionne depuis un browser.

Richard