1

我很难找到我的问题的答案。我正在尝试在 Alfresco 中创建一个文件夹/空间。但我没有任何想法这样做?有人可以帮我弄这个吗?我正在使用 Java 网页脚本。

我只是这样:

package org.alfresco.module.demoscripts;

import java.io.IOException;

import org.alfresco.web.scripts.AbstractWebScript;
import org.alfresco.web.scripts.WebScriptException;
import org.alfresco.web.scripts.WebScriptRequest;
import org.alfresco.web.scripts.WebScriptResponse;
import org.json.JSONException;
import org.json.JSONObject;

public class SimpleWebScript extends AbstractWebScript
{
    public void execute(WebScriptRequest req, WebScriptResponse res)
        throws IOException
    {
        try
        {
            // build a json object
            JSONObject obj = new JSONObject();

            // put some data on it
            obj.put("field1", "data1");

            // build a JSON string and send it back
            String jsonString = obj.toString();
            res.getWriter().write(jsonString);
        }
        catch(JSONException e)
        {
            throw new WebScriptException("Unable to serialize JSON");
        }
    }    
}
4

2 回答 2

2

如果您不熟悉 Java 和 Alfresco,您可能会发现用JavaScript编写WebScript对您来说是一个更好的选择。它通常更容易上手。还有很多例子可以帮助你。

如果您决定坚持使用 Java,那么 Alfresco wiki 中的起点是Java Backed WebScriptsJava Foundation API。其中一个 Java webscript 示例向您展示了如何创建节点(您可以使用 NodeService 或 FileFolderService,具体取决于您是想要完全控制还是简单的方法)。

您可能还想查看 Alfresco Wiki 和论坛中有关如何构建数据的一些建议,因为直接在 Company Home 下创建许多新节点可能是也可能不是您的最佳选择。

于 2011-06-24T09:48:22.420 回答
2

正如所指出的,您可能希望从使用 JavaScript 而不是 Java 开始。另外,我注意到您正在代码中创建一个新的 JSON 对象,但我不确定为什么。

例如,使用 JavaScript,接受要在公司主页下创建的文件夹名称的 Web 脚本可能具有如下所示的控制器:

    function main() {
        var folderName = args.folderName;
        if (folderName != null && folderName != "") {
        // continue
        } else {
        status.setCode(500);
        status.setMessage("Missing folder name argument");
        status.setRedirect(true);
        return;
        }

        var createdFolder = companyhome.createFolder(folderName);

        model.createdFolder = createdFolder;
    }

    main();

代码查找传递给它的名为 folderName 的参数,然后使用内置的“companyhome”根范围变量来创建新文件夹。然后它将新创建的文件夹节点传递给模型,以便可以将有关新节点的一些数据回显给用户。

JavaScript 控制器的名称(如上所示)是 createFolder.post.js。我将它签入到 Data Dictionary/Web Scripts/example 下的存储库中。除此之外,我还签入了一个名为 createFolder.post.desc.xml 的文件,它是 Web 脚本描述符:

    <webscript>
        <shortname>Create folder example</shortname>
        <description>
        <![CDATA[
        Creates a new folder in Company Home using the name specified in the folderName argument.
        ]]>
        </description>
        <url>/example/createFolder?folderName={folderName}</url>
        <format default="html">argument</format>
        <authentication>user</authentication>
        <transaction>required</transaction>
        <family>Example</family>
    </webscript>

还有一个名为 createFolder.post.html.ftl 的文件,它是 Web 脚本视图的 HTML 版本:

    <html>
    <head>
        <title>Create folder web script</title>
    </head>
    <body>
        Successfully created a folder with the following metadata:<br />
        Name: ${createdFolder.name}<br />
        ID: ${createdFolder.id}<br />
        Noderef: ${createdFolder.nodeRef}<br />
    </body>
    </html>

签入后,我通过访问http://localhost:8080/alfresco/s/index并单击“刷新 Web 脚本”按钮刷新了 Web 脚本索引。

然后我使用 CurL 调用 Web 脚本,如下所示:

    curl -uadmin:admin -X POST "http://localhost:8080/alfresco/s/example/createFolder?folderName=foobar"

您会注意到我选择让我的网络脚本接受 POST。如果您想使用不同的 HTTP 方法,您只需相应地更改文件名。

杰夫

于 2011-06-27T23:14:19.357 回答