覆盖Alfresco pickerresults.lib.ftl

时间:2015-03-13 16:43:42

标签: alfresco freemarker

我在pickerresults.lib.ftl发现了一个我已经reported

的错误

简要说明:如果用户没有文件父级的权限,则行

  

<#if row.item.parent??>"parentName": "${row.item.parent.name!""}",

将失败,整个脚本失败(用户无法看到任何文件)

所以,等待错误解决我需要修补此问题。我想覆盖宏&#34; pickerResultsJSON&#34;在文件中定义的删除行或用字符串值代替&#34; $ {row.item.parent.name!&#34;&#34;}&#34;导致异常

我不知道如何重新定义宏以及将文件放在放大器的位置。有人能帮助我吗?

更新

我使用Alfresck SDK 2.0,我的项目结构是:

Project Structure

我试图将文件&#34; custom-pickerresults.lib.ftl&#34;具有以下内容(如sev所示)但它似乎不是正确的位置。或者我应该注册&#34;它在某种程度上?

<#macro pickerResultsJSON results>
    <#-- new code here -->
</#macro>
<#global pickerResultsJSON = pickerResultsJSON />

2 个答案:

答案 0 :(得分:2)

由于宏只是变量,你可能会做这样的事情:

<#macro pickerResultsJSON>
    <#-- new code here -->
</#macro>
<#global pickerResultsJSON = pickerResultsJSON />

至于你要把它放在哪里......你可以将它放在项目全局包含的任何文件中。它可能需要一些试验和错误,因为我不确定你的项目结构是什么。

答案 1 :(得分:1)

非常感谢sev,他指出了正确的方法。

我意识到网络服务pickerresults.lib.ftlpickerchildren.get.desc.xml使用pickerchildren.post.desc.xml,因此,解决方案是将网络服务定义和文件与库中的文件一起复制

/alfresco-myamp-repo/src/main/amp/config/alfresco/extension/templates/webscripts/com/my/repository/forms/

repository/forms/只是因为原始文件位于config/alfresco/templates/webscripts/org/alfresco/repository/forms/内,但/alfresco-myamp-repo/src/main/amp/config/alfresco/extension下的任何其他文件夹都是这样做的

并像这样更改库:

                ...
                "type": "${row.item.typeShort}",
                "parentType": "${row.item.parentTypeShort!""}",
<#-- from here -->
                <#attempt>
                    <#if row.item.parent??>"parentName": "${row.item.parent.name!""}",</#if>
                <#recover>
                    "parentName": "<unknown>",
                </#attempt>
<#-- to here -->
                "isContainer": ${row.item.isContainer?string},
                <#if row.container??>"container": "${row.container!""}",</#if>
                ...

这种方式即使用户没有读取父名称的权限,模板也可以完成而没有错误(我不知道代替父名称的值“unknown”是否会导致任何麻烦,但我做了现在没有注意到任何事情)