首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态创建空间/文件夹的Javascript无法正常工作

动态创建空间/文件夹的Javascript无法正常工作
EN

Stack Overflow用户
提问于 2012-08-22 16:34:47
回答 5查看 6.9K关注 0票数 3

目前,我正在使用Oracle Linux 6 64位虚拟机上的Oracle Linux 6 64位虚拟机,使用Firefox作为我的浏览器,使用Alfresco 4.0.c社区版,使用Alfresco 4.0.d社区版本。

最近,我一直试图创建一个脚本,该脚本可以通过一条规则执行,该规则将在新项目进入空间/文件夹时动态创建子文件夹。

本质上,假设您有一个新创建的内容,名为fileOne。该文件位于一个名为mainFolder的空间中,当在文件上运行规则以执行脚本时,脚本将根据文件的标题author值查看子文件夹是否存在。否则,它将根据该文件的标题值->子文件夹和author value ->子文件夹在该文件的标题值->子文件夹中创建子文件夹。然后,我希望将内容/文件移到现有的或新创建的子文件夹中。

最后,我想要的东西看起来像:

代码语言:javascript
运行
复制
Space: mainFolder
|---> Content: fileOne --> Properties: Name, Title, Author
|---> Space: Title
      |---> Space: Author
            |---> Content: fileOne --> Properties: Name, Title, Author 

下面是剧本..。

代码语言:javascript
运行
复制
function main()
{
    //mainFolder space/folder MUST exist under companyhome.
    var rootSpaceName = companyhome.childByNamePath("mainFolder");

    if(rootSpaceName == null)
    { 
        logger.log("Company Home/mainFolder does not exist, so we have nothing to do.");
        return;
    }
    else
    {
        logger.log("Company Home/mainFolder exists, so carry on our process.");

        var childList = rootSpaceName.children;
        var count = childList.length;
        var seconds = new Date().getTime() / 1000;

        if(count == 0)
        {
            logger.log("Company Home/mainFolder does not have child, nothing to do.");
            return;
        }
        else
        {
            for(var i = 0; i < count; i++)
            {
                // File Title MUST exist.
                var childTitle = childList[i].properties.title;

                if(childTitle == null)
                {
                    childTitle = "New Title " + seconds;
                }

                // File Author MUST exist.
                var childAuthor = childList[i].properties.author;

                if(childAuthor == null)
                {
                    childAuthor = "New Author " + seconds;
                }

                var child = childList[i];
                logger.log("This child is: " + child);

                if(child.isContainer == false)
                {
                    for(var j = 0; j < count; j++)
                    {
                        var newChildName = childList[j].properties.name;
                        logger.log("New child name: " + newChildName);
                        var newChild = childList[j];

                        if((newChild.isContainer == true) && (childTitle == newChildName))
                        {
                            var newSpaceName = rootSpaceName.childByNamePath(newChildName);
                            var newChildList = newSpaceName.children;
                            var newCount = newChildList.length;

                            for(var k = 0; k < newCount; k++)
                            {
                                var newNewChildName = newChildList[k].properties.name;
                                var newNewChildAuthor = newChildList[k].properties.author;
                                var newNewChild = newChildList[k];

                                if((newNewChild.isContainer == true) && (newNewChildAuthor == childAuthor))
                                {
                                    var currentSpace = newSpaceName.childByNamePath(newNewChildName);
                                    child.move(currentSpace);
                                }
                            }
                        }
                        else
                        {
                            // If title folder is already created, not need to create again.
                            var newSpaceName = companyhome.childByNamePath("mainFolder/" + childTitle);

                            if(newSpaceName == null)
                            {
                                newSpaceName = rootSpaceName.createFolder(childTitle);
                                logger.log("mainFolder/" + childTitle + " is created.");
                            }

                            // If author folder is already created, not need to create again.
                            var newNewSpaceName = companyhome.childByNamePath("mainFolder/" + childTitle + "/" + childAuthor);
                            if(newNewSpaceName == null)
                            {
                                newNewSpaceName = newSpaceName.createFolder(childAuthor);
                                logger.log("mainFolder/" + childTitle + "/" + childAuthor + " is created.");
                            }

                            child.move(newNewSpaceName);
                            logger.log("Moving file " + child.properties.name);
                        }

                    }

                }

            }
        }
    }
    return;
}

main();

为了检验这一点,我要做的是,一步一步地:

  1. 我点击公司主页
  2. 我点击CreateCreate
  3. 然后,我创建了一个名为mainFolder的空间(这是公司主页下的)。
  4. 然后单击新创建的文件夹,然后单击More ActionsManage Content Rules
  5. 然后单击Create Rule。 5a。当它告诉我选择一个条件时,我选择All Item,然后单击Add to List,然后单击Next

5b。现在它告诉我要选择一个操作,我选择Execute Script,然后单击Set Value并添加,这允许我选择之前添加到数据字典Scripts文件夹中的名为的脚本。然后单击OK,然后单击Next

5c.在这里,它要求我输入类型的,我选择项是更新的。然后输入一个类似于创建文件夹规则的标题。最后,在后台中检查运行规则,然后单击Next。

5d。现在,我单击Finish来完成我的规则。

  1. 现在,创建规则后,我单击Create,Create Content。

6a.我给我的内容起了一个类似name001的名字,然后点击Next,然后输入一个像title001这样的标题和一个像author001这样的作者。然后我点击OK。

现在发生的事情让我很困惑;它按照我的意愿创建了一个名为title001的子文件夹,在该子文件夹中创建了另一个名为author001的文件夹,并在该文件夹中移动了名为name001的文件。这也是我想让它发挥作用的方式,但仍然存在一些问题。在mainFolder下,还有一个新的子文件夹名为New 1346102873.393 new 1346102873.393,其中包含一个名为New 1346102873.393的文件夹,但该文件夹中没有文件。当我只向mainFolder?添加一段内容时,我不知道为什么要创建这个文件夹另外,现在文件夹已经创建,规则看起来也已从mainFolder,中删除,即不再有任何规则应用于该文件夹。当我再次在mainFolder,上创建规则时,我会得到一个错误:Failed to create Rule due to error: null。下面是我在日志文件中发现的错误..。

输出/来自Alfresco日志的错误

代码语言:javascript
运行
复制
17:27:51,373 DEBUG [org.alfresco.repo.jscript.RhinoScriptProcessor] Imports resolved, adding resource '_root
17:27:53,389 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Company Home/mainFolder exists, so carry on our process.
17:27:53,400 DEBUG [org.alfresco.repo.jscript.ScriptLogger] This child is: Node Type: {http://www.alfresco.org/model/content/1.0}systemfolder, Node Aspects: [{http://www.alfresco.org/model/content/1.0}auditable, {http://www.alfresco.org/model/system/1.0}referenceable, {http://www.alfresco.org/model/system/1.0}localized]
17:27:53,400 DEBUG [org.alfresco.repo.jscript.ScriptLogger] New child name: b8ea2cb0-6fb6-481e-bb7b-d5364d9c509e
17:27:53,422 DEBUG [org.alfresco.repo.jscript.ScriptLogger] mainFolder/New Title 1346102873.393 is created.
17:27:53,439 DEBUG [org.alfresco.repo.jscript.ScriptLogger] mainFolder/New Title 1346102873.393/New Author 1346102873.393 is created.
17:27:53,498 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Moving file b8ea2cb0-6fb6-481e-bb7b-d5364d9c509e
17:27:53,499 DEBUG [org.alfresco.repo.jscript.ScriptLogger] New child name: name001
17:27:53,523 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Moving file b8ea2cb0-6fb6-481e-bb7b-d5364d9c509e
17:27:53,524 DEBUG [org.alfresco.repo.jscript.ScriptLogger] This child is: Node Type: {http://www.alfresco.org/model/content/1.0}content, Node Aspects: [{http://www.alfresco.org/model/content/1.0}auditable, {http://www.alfresco.org/model/system/1.0}referenceable, {http://www.alfresco.org/model/content/1.0}titled, {http://www.alfresco.org/model/content/1.0}author, {http://www.alfresco.org/model/system/1.0}localized, {http://www.alfresco.org/model/application/1.0}inlineeditable]
17:27:53,524 DEBUG [org.alfresco.repo.jscript.ScriptLogger] New child name: b8ea2cb0-6fb6-481e-bb7b-d5364d9c509e
17:27:53,534 DEBUG [org.alfresco.repo.jscript.ScriptLogger] mainFolder/title001 is created.
17:27:53,546 DEBUG [org.alfresco.repo.jscript.ScriptLogger] mainFolder/title001/author001 is created.
17:27:53,561 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Moving file name001
17:27:53,561 DEBUG [org.alfresco.repo.jscript.ScriptLogger] New child name: name001
17:27:53,577 DEBUG [org.alfresco.repo.jscript.ScriptLogger] Moving file name001
17:27:53,578 DEBUG [org.alfresco.repo.jscript.RhinoScriptProcessor] Time to execute script: 1976.9988ms
17:31:13,385 ERROR [org.alfresco.web.ui.common.Utils] Failed to create Rule due to error: null
java.lang.NullPointerException
    at org.alfresco.repo.rule.RuleServiceImpl.getLinkedToRuleNode(RuleServiceImpl.java:1516)
    at org.alfresco.repo.rule.RuleServiceImpl.isLinkedToRuleNode(RuleServiceImpl.java:1504)
    at org.alfresco.repo.rule.RuleServiceImpl.checkForLinkedRules(RuleServiceImpl.java:947)
    at org.alfresco.repo.rule.RuleServiceImpl.saveRule(RuleServiceImpl.java:740)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:34)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:147)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy53.saveRule(Unknown Source)
    at org.alfresco.web.bean.rules.CreateRuleWizard.finishImpl(CreateRuleWizard.java:148)
    at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:123)
    at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:119)
    at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:388)
    at org.alfresco.web.bean.dialog.BaseDialogBean.finish(BaseDialogBean.java:129)
    at org.alfresco.web.bean.wizard.WizardManager.finish(WizardManager.java:593)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
    at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
    at javax.faces.component.UICommand.broadcast(UICommand.java:151)
    at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:115)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:191)
    at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:105)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:80)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:143)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.alfresco.repo.web.filter.beans.SessionSynchronizedFilter.doFilter(SessionSynchronizedFilter.java:67)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:104)
    at sun.reflect.GeneratedMethodAccessor443.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:116)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy238.doFilter(Unknown Source)
    at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:82)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.alfresco.repo.web.filter.beans.NullFilter.doFilter(NullFilter.java:68)
    at sun.reflect.GeneratedMethodAccessor443.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:116)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy238.doFilter(Unknown Source)
    at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:82)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:58)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)

有谁知道为什么要创建这个附加文件夹,以及为什么规则在新创建的内容上执行后才被删除,以及为什么我不能在该文件夹第一次删除原始规则之后添加一个新规则?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-23 13:16:58

您可能需要的是存在于mainFolder中的具有标题和作者字段的文件。您希望将文件移动到标题->author文件夹中。

就像mainFolder -> FileName: file1,标题: title1,作者: author1

mainFolder -> title1 ->author1 ->file1

我尝试使用我自己编辑的代码,并在alfresco端运行在alfresco社区4.0c中,在windows的共享端使用java脚本控制台运行。

在为mainFolder创建规则时

1)选择条件

1.类型或亚型的含量作为选择条件

1.2 Content作为设置条件值,不选中汇总下面的复选框是的一个子类型

2)选择与您相同的操作执行脚本

3)创建或插入类型的

我选择这些是因为运行我们的代码会动态地创建文件夹。因此,规则只适用于内容。除了取消背景中的“执行规则”之外,其他人与您相同。如果已创建的项没有标题名称,则alfresco默认假定项目名称为标题。

最近更新的代码:

代码语言:javascript
运行
复制
function main()
{
    //mainFolder space/folder MUST exist under companyhome.
    var rootSpaceName = companyhome.childByNamePath("mainFolder");

    if(rootSpaceName == null)
    { 
        logger.log("Company Home/mainFolder does not exist, so we have nothing to do.");
        return;
    }
    else
    {
        logger.log("Company Home/mainFolder exists, so carry on our process.");

        var childList = rootSpaceName.children;
        var count = childList.length;

        if(count == 0)
        {
            logger.log("Company Home/mainFolder does not have child, nothing to do.");
            return;
        }
        else
        {
            for(var i = 0; i < count; i++)
            {   
                var child = childList[i];
                logger.log("This child is: " + child);

                // If each of child is file
                if(child.isDocument)
                {
                    // Get title of file and
                    // If childTitle is null, we set DEFAULT value
                    var childTitle = childList[i].properties.title;
                    if(childTitle == null)
                    {
                        childTitle = "New Title";
                    }
                    else if(childTitle == child.properties.name)
                    {
                        childTitle = "Title " + childTitle;
                    }

                    // Get author of file.
                    // If childAuthor is null, we set DEFAULT value
                    var childAuthor = childList[i].properties.author;
                    if(childAuthor == null)
                    {
                        childAuthor = "New Author";
                    }
                    logger.log("Original Title :" + child.properties.title + "\tAuthor :" + child.properties.author);
                    logger.log("Setting Title :" + childTitle + "\tAuthor :" + childAuthor);

                    // If title folder does not exist, create title folder
                    var newSpaceTitle = companyhome.childByNamePath("mainFolder/" + childTitle);

                    if(newSpaceTitle == null)
                    {
                        newSpaceTitle = rootSpaceName.createFolder(childTitle);
                        logger.log("mainFolder/" + childTitle + " is created.");
                    }

                    // If author folder does not exist, create author folder
                    var newSpaceAuthor = companyhome.childByNamePath("mainFolder/" + childTitle + "/" + childAuthor);
                    if(newSpaceAuthor == null)
                    {
                        newSpaceAuthor = newSpaceTitle.createFolder(childAuthor);
                        logger.log("mainFolder/" + childTitle + "/" + childAuthor + " is created.");
                    }

                    child.move(newSpaceAuthor);
                    logger.log("Moving file " + child.properties.name);
                }
            }
        }
    }
    return;
}

main();
票数 1
EN

Stack Overflow用户

发布于 2012-08-22 23:51:36

我在Alfresco论坛上贴出了同一张海报对这个问题的答案。答案是,代码试图使用与文档相同的名称创建文件夹。节点必须在文件夹中唯一命名,因此这是不允许的。

票数 3
EN

Stack Overflow用户

发布于 2012-08-29 11:47:29

听起来你的规则是多次运行的,而且是被自己绊倒的。可能是脚本本身正在执行的一些操作导致它再次运行吗?

检查您的规则没有应用于子文件夹,而不是在向导的条件部分中选择“所有项”,尝试一些更具体的内容项,例如所有内容项。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12077597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档