2017-05-30 91 views
1

我们正在AEM 6.1环境中工作,并且创建了一个激活预处理器,如果某些属性未设置,将会停止激活页面。这很好,但是我们还想更改当预处理器抛出ReplicationExcdeption时激活进程显示的错误消息。任何人都可以指向我实际显示错误信息的代码吗?AEM - 如何调整激活错误消息

+0

请问您可以添加更多的细节,你做了什么 –

+0

我创建了一个实现com.day.cq.replication.Preprocessor接口的类。它被AEM称为激活过程的一部分,如果没有找到特定的属性,就会抛出RepositoryException。这会停止激活并向用户显示消息,但是我想更改显示的消息,并且我不知道它实际生成的位置。 – rnolen

回答

0

我们重写了SiteAdmin.Actions.js中的几个函数。从libs文件夹复制它/apps/cq/ui/widgets/source/widgets/wcm/SiteAdmin.Actions.js或使用CQ.Ext.override

我们需要覆盖CQ.wcm.SiteAdmin.scheduleForActivationCQ.wcm.SiteAdmin.internalActivatePage方法。

我们用下面的代码做

CQ.wcm.SiteAdmin.internalActivatePage = function(paths, callback) { 
    if (callback == undefined) { 
     // assume scope is admin and reload grid 
     var admin = this; 
     callback = function(options, success, response) { 
      if (success) admin.reloadPages(); 
      else admin.unmask(); 
     }; 
    } 

    preActionCallback = function(options, success, response) { 
     if (success) { 
      var responseObj = CQ.Util.eval(response); 
      if (responseObj.activation) { 
       CQ.HTTP.post(
        CQ.shared.HTTP.externalize("/bin/replicate.json"), 
        callback, 
        { "_charset_":"utf-8", "path":paths, "cmd":"Activate" } 
        ); 
      } else { 
       CQ.wcm.SiteAdmin.preactivateMessage(responseObj); 
      } 
     }else{ 
      CQ.Ext.Msg.alert(
        CQ.I18n.getMessage("Error"), CQ.I18n.getMessage("Could not activate page.")); 
     } 
     admin.unmask(); 
    }; 

    CQ.HTTP.get(
      "/apps/sling/servlet/content/preActivateValidator.html?path=" + paths, 
      preActionCallback 
    ); 
}; 

此路径/apps/sling/servlet/content/preActivateValidator.html(你可以使用任何其他链接和延伸)返回JSON有关消息的一些信息,这是分析在自定义的方法,并生成自定义错误消息CQ.wcm.SiteAdmin.preactivateMessage

CQ.wcm.SiteAdmin.preactivateMessage = function(responseObj) { 
    var message = ""; 
    var incorrectItems = responseObj.incorrectItems; 
    if (responseObj.countOfIncorrectItems > 1) message = message + "s"; 
    if (responseObj.missingMetadata) { 
     message = message + "Please, set \"Programming Type\" for next videos:<br/>"; 
     var missingMetadataPaths = responseObj.missingMetadata; 
     for(var i = 0; i < missingMetadataPaths.length; i++){ 
      message = message + "<a href=\""+missingMetadataPaths[i].path+".html\">"+missingMetadataPaths[i].path+"</a><br/>"; 
     } 
     message += "<br/>"; 
    } 
    if(message == ""){ 
     message = "Unknown error."; 
    } 
    CQ.Ext.Msg.alert(
     CQ.I18n.getMessage("Error"), CQ.I18n.getMessage(message)); 
} 

所以,你可以实现组件或servlet将验证您的属性,并会产生JSON。

+0

我会看看这个。感谢您的回应! – rnolen