Adobe CQ/AEM-Groovy激活页面

Adobe CQ/AEM-Groovy激活页面,aem,Aem,我对Groovy很陌生。使用Groovy,我试图确定页面的激活状态,并激活/停用页面。这是我代码的核心元素,它引发了一个异常 import com.day.cq.replication.Replicator; import javax.jcr.Session; Session session = slingRequest.getResourceResolver().adaptTo(Session.class); path='/content/geometrixx/en/'; def get

我对Groovy很陌生。使用Groovy,我试图确定页面的激活状态,并激活/停用页面。这是我代码的核心元素,它引发了一个异常

import com.day.cq.replication.Replicator;
import javax.jcr.Session;

Session session = slingRequest.getResourceResolver().adaptTo(Session.class);

path='/content/geometrixx/en/';

def getStats = getReplicationStatus(session, path);
def rp = replicate(session, "ACTIVATE", path);
下面是它抛出的异常:

groovy.lang.MissingMethodException: No signature of method: Script1.getReplicationStatus() is applicable for argument types: ($Proxy10, java.lang.String) values: [session-admin-977089, /content/geometrixx/en/]
at Script1.run(Script1.groovy:9)
我试过一些方法,但似乎不起作用。复制返回void,但这似乎没有改变任何东西。声明Replicator的功能似乎不起作用。就好像找不到进口一样


我们将不胜感激

您提供的代码中有几个问题:

  • 范围中未定义方法getReplicationStatus()replicate()
    要使用replicate()您需要获取com.day.cq.replication.Replicator对象
  • def replicator=sling.getService(replicator.class)
    
  • 与您正在使用的方法相比,com.day.cq.replication.Replicator.replicate()方法具有不同的签名。
    需要提供复制ActionType.ACTIVATE对象而不是“ACTIVATE”字符串
  • public abstract void replicate(会话参数会话,复制动作类型参数复制动作类型,字符串参数字符串)
    

  • “session”变量已在范围中定义,无需从ResourceResolver获取
  • 最终代码示例:

    import com.day.cq.replication.Replicator;
    导入com.day.cq.replication.ReplicationActionType
    导入javax.jcr.Session;
    def replicator=sling.getService(replicator.class)
    def path='/content/geometricxx/en/';
    def rp=replicator.replicate(会话,ReplicationActionType.ACTIVATE,路径);
    
    Groovy控制台提供了一些扩展方法。 其中一项是:

    激活(字符串路径)-在给定路径激活节点

    激活(字符串路径、复制选项)使用提供的选项激活给定路径上的节点

    停用(字符串路径)-停用给定路径上的节点

    停用(字符串路径、复制选项)使用提供的选项停用给定路径上的节点

    因此,您的脚本应该如下所示:

    activate('/content/geometrixx/en/')
    

    Groovy控制台页面上的方法选项卡(/etc/groovyconsole.html)中提供了方法的完整列表。

    我对Groovy一无所知。然而,看到您的代码时,您并没有对replicator对象调用getReplicationStatus方法,因此它试图在类/文件本身中找到它。您可以通过sling.getService()获取复制器,在此基础上可以调用getReplicationStatus方法。
    activate('/content/geometrixx/en/')