Hii All,
I want to create Site through webscript and i have created one but it doesnt work correctly.Hereby i am attaching code please do help out.
package com.abc.repo.web; import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceServiceMemoryImpl; import org.alfresco.service.namespace.QName; import org.apache.log4j.Logger; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteMemberInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.springframework.extensions.surf.util.ParameterCheck; import org.springframework.extensions.webscripts.AbstractWebScript; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; public class siteCreation extends AbstractWebScript { private static Logger LOGGER = Logger.getLogger(siteCreation.class); private SiteInfo siteInfo; private SiteService siteService; private ServiceRegistry serviceRegistry; public void setServiceRegistry(ServiceRegistry serviceRegistry) { this.serviceRegistry = serviceRegistry; } public void setSiteService(SiteService siteService) { this.siteService = siteService; } @Override public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException { JSONObject reqData = (JSONObject) req.parseContent(); String shortName, visibility, sitePreset, title, description = null; try { shortName= (String) reqData.get("shortName"); sitePreset= (String) reqData.get("sitePreset"); title= (String) reqData.get("title"); description= (String) reqData.get("description"); visibility= (String) reqData.get("visibility"); } catch (JSONException err) { err.printStackTrace(); } } public SiteInfo createSite(String sitePreset, String shortName, String title, String description, String visibility) { ParameterCheck.mandatoryString("visibility", visibility); SiteVisibility siteVisibility = SiteVisibility.valueOf(visibility); SiteInfo siteInfo = this.siteService.createSite(sitePreset, shortName, title, description, siteVisibility); return new SiteInfo(siteInfo, this.serviceRegistry, this.siteService); } }
Hi @piyush48,
There's a StackOverflow answer that you might find useful.
HTH,
Hi @EddieMay ,
I have referred to that and created my site but in answer ,the site is created by javascript function and we are using abstractWebscript to create the site. Could you please help me out how could i create it using AbstractWebscript only.
Thanks,
Piyush
Hi @piyush48,
In the StackOverflow answer, it states that you can't use a WebScript as
Creation of sites in Alfresco is done by invoking a Share module
Could you look into using the ReST API - http://localhost/api-explorer/#!/sites/createSite?
@piyush48 There ways to create site. @EddieMay provided a link that has thread on creating site, which intern calls repository apis and does the job. You can create surf webscript to create site.
You can also create java or js webscript on repository side to create the site like you are doing.
The code you have written is somewhat correct but there are several issues with your code including a compilation error. You are trying to instantiate an Interface named "SiteInfo". Interface can not be directly instantiated. It is always good to try and debug and check the errors.
This return statement is wrong:
return new SiteInfo(siteInfo, this.serviceRegistry, this.siteService);
when you call below method:
this.siteService.createSite(sitePreset, shortName, title, description, siteVisibility);
It returns the SiteInfo type of object. You can simply return it from your method. Example:
public SiteInfo createSite(String sitePreset, String shortName, String title, String description, String visibility) { ParameterCheck.mandatoryString("visibility", visibility); SiteVisibility siteVisibility = SiteVisibility.valueOf(visibility);
return this.siteService.createSite(sitePreset, shortName, title, description, siteVisibility); }
Refer:
https://github.com/Alfresco/alfresco-repository/blob/master/src/main/java/org/alfresco/service/cmr/s...
https://github.com/Alfresco/alfresco-repository/blob/master/src/main/java/org/alfresco/service/cmr/s...
https://dev.alfresco.com/resource/docs/java/org/alfresco/service/cmr/site/SiteService.html#createSit...
I also don't see where you are calling "createSite" method in your execute(WebScriptRequest, WebScriptResponse) method?
Also these declarations are unnecessary:
private SiteInfo siteInfo; private ServiceRegistry serviceRegistry; public void setServiceRegistry(ServiceRegistry serviceRegistry) { this.serviceRegistry = serviceRegistry; }
You are just using SiteService, so SiteInfo and ServiceRegistry are not required in this specific webscript.
Wrong class naming:
siteCreation
Correct class naming:
SiteCreation
Thanks @abhinavmishra14 and @EddieMay ,
I have created surf Webscript as @abhinavmishra14 helped me by guideing me to correct code implementation.
Site can be now created by webscript but it doesnt show document library and site-dashboard and when i click on customize site page to add this component it is showing error of component-pages.get.js is failed to get executed. Please do help me out by guiding me towards solution.
I am attaching photo of error which i am getting.
Thanks,
Piyush
Hi @piyush48,
Can you share the code from your webscript please?
Thanks,
Hii @EddieMay and @abhinavmishra14 ,
please find the attached code for the Java Webscript for creating site as suggested by abhinav.
package com.aviva.repo.webscripts; import java.io.IOException; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.json.JSONException; import org.json.JSONObject; import org.springframework.extensions.webscripts.AbstractWebScript; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; public class CreateSite extends AbstractWebScript { private SiteService siteService; public void setSiteService(SiteService siteService) { this.siteService = siteService; } @Override public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException { JSONObject reqData = (JSONObject) req.parseContent(); String shortName = "", visibility="", sitePreset="", title="", description = ""; try { shortName= (String) reqData.get("shortName"); sitePreset= (String) reqData.get("sitePreset"); title= (String) reqData.get("title"); description= (String) reqData.get("description"); visibility= (String) reqData.get("visibility"); createSite(sitePreset,shortName,title,description,visibility); } catch (JSONException err) { err.printStackTrace(); } System.out.println("Site with "+ shortName +"is needed to be created"); } public void createSite(String sitePreset, String shortName, String title, String description, String visibility) { System.out.println("data------------------ " + this.siteService.getSite(shortName)); if(this.siteService.getSite(shortName) == null){ SiteVisibility siteVisibility = SiteVisibility.valueOf(visibility); SiteInfo siteInfo = this.siteService.createSite(sitePreset, shortName, title, description, siteVisibility); System.out.println("siteinfo ------------------ " + siteInfo.getShortName()); }else { System.out.println("Site is already exists"); } } }
Thanks,
Piyush
Hi @piyush48,
What are you passing in as sitePreset?
If I create a site using the API
http://localhost:80/alfresco/api/-default-/public/alfresco/versions/1/sites?alf_ticket=TICKET_4ad80403182aac65b38d69efa88998814c6d80be
with the following values:
{ "id": "publicSiteAPI", "title": "Public Site By API", "description": "Public site created for blog post", "visibility": "PUBLIC" }
The return value I get is:
{ "entry": { "role": "SiteManager", "visibility": "PUBLIC", "guid": "3ab2a35a-2c21-40cf-b14b-ae1eb42288ce", "description": "Public site created for blog post", "id": "publicSiteAPI", "preset": "site-dashboard", "title": "Public Site By API" } }
I'm wondering if your "preset" is incorrect?
Hii @EddieMay ,
Please find my JSON values which i pass to create site.
{ "sitePreset":"Aviva Dashboard", "shortName":"Aviva-Test", "title":"AvivaTestNew", "description":"Demo Aviva Site", "visibility":"PRIVATE" }
Ask for and offer help to other Alfresco Content Services Users and members of the Alfresco team.
Related links:
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.