如何从存储库的webscript以编程方式创建Alfresco网站



我已经实现了一个Alfresco存储库webscript(用Java(,以编程方式创建一个新站点。

我注意到有一个SiteService接口,我认为可以用来做这件事——

SiteInfo site = siteService.createSite("site-dashboard", "mySite", 
"mySite", "", SiteVisibility.PUBLIC);

然而,这导致创建了一个非功能性网站,尽管它在Alfresco Share面板中可见,但我无法使用它。

然后我看到了这个代码示例,它正是我想要做的。但该代码包括一个进行身份验证的部分,包括将用户的登录名和密码详细信息发送到dologinweb服务。我真的不想这么做。

但由于用户已经通过Alfresco Share登录,他们应该已经通过了身份验证。

如果我从我的代码中调用createsite-webscript,如示例所示(没有对dologin的初始调用(,我将得到401(未经授权(返回代码。

所以我的问题是,我如何告诉创建网站的webscript我的身份验证?我在这里读到关于使用身份验证票证的信息。这个票证存储在会话中吗?如果是,我如何在Java代码中访问它?如果我能得到票,那么这就足以调用创建站点的webscript了。

更新:我已经按照注释的建议添加了alf_ticket参数,但我仍然得到401的响应。

我当前的代码是:

public NodeRef createServiceChange(String serviceChangeName) {
HttpClient client = new HttpClient();
String ticket = authService.getCurrentTicket();
PostMethod createSitePost = new PostMethod("http://localhost:8081/share/service/modules/create-site");
JSONObject siteObject = new JSONObject();
try {
siteObject.put("shortName", serviceChangeName);
siteObject.put("visiblity", "Public");
siteObject.put("sitePreset", "site-dashboard");
siteObject.put("title", serviceChangeName);
siteObject.put("description", serviceChangeName);
siteObject.put("alf_ticket", ticket);
createSitePost.setRequestHeader("Content-Type", "application/json");
createSitePost.setRequestHeader("Accept", "application/json");
createSitePost.setRequestEntity(new StringRequestEntity(siteObject.toString(), "application/json", "UTF-8"));
int status = client.executeMethod(createSitePost);
System.out.println("create a site script status :: " + status);
if (status == HttpStatus.SC_OK) {
System.out.println("Site created OK");
}
else{
System.out.println("There is error in site creation");
}
} catch (JSONException err) {
err.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

所以我成功地通过编程创建了一个网站,我所做的是:

首先,忘记编写存储库(平台(Web脚本。在Alfresco中创建网站是通过调用共享模块完成的,因此您需要实现页面或自定义菜单项来创建网站。我在身份验证方面也遇到了很多问题,但如果您通过Alfresco Share登录系统,并在Javascript中使用提供的AlfrescoAjax请求,那么身份验证应该不会有问题。

以下是我使用的组件:-

  1. 创建一个共享页面来创建您的网站。在Freemarker模板(.ftl(中添加一个表格来收集网站详细信息
  2. 将表单上的一个按钮附加到以下Javascript函数。请注意,我是从网络上的各种代码片段拼凑而成的,所以它可能需要一些清理。但它基本上对我有效-

    function create_site()
    {
    var sc_form = document.forms.namedItem('sc_form');
    var name = sc_form.elements.namedItem('name').value;
    var url = Alfresco.constants.URL_CONTEXT + "service/modules/create-site";
    Alfresco.util.Ajax.request({
    method : Alfresco.util.Ajax.POST,
    url : url,
    dataObj: {
    sitePreset: "site-dashboard",
    visibility: "PUBLIC",
    title: name,
    shortName: name,
    description: name
    },
    requestContentType: Alfresco.util.Ajax.JSON,
    successCallback: 
    {
    fn: function(res){
    alert("success");
    alert(res.responseText);                                                                                            
    },
    scope: this
    },
    failureCallback: 
    {
    fn: function(response)
    {
    Alfresco.util.PopupManager.displayPrompt(
    {
    title: Alfresco.util.message("message.failure", this.name),
    text: "search failed"
    });                                          
    },
    scope: this
    }
    });
    }
    

最新更新