我做了自定义操作。我可以在纪录片库中看到这个动作,但我可以在分面搜索结果页面上看到它。
<action id="custom-action" type="javascript" label="actions.custom.action">
<param name="function">onCustomActionlick</param>
</action>
所以我进入了aikau-1.0.8.1.jar\META-INF\js\aikau\1.0.8.1\alfresco\renderers\_ActionsMixin.js
文件。
我看到我们做了一个测试,以确定此文件中是否允许操作:
if (this.filterActions === false || AlfArray.arrayContains(this.allowedActions, action.id))
在firebug上,我看到我的costum动作不在allowedActions
对象中。我的问题是为什么?
我认为所有用户都可以使用未获得许可的操作。我对吗 ?
如何才能允许此操作并在分面搜索结果页面上显示?
提前谢谢你。
答案 0 :(得分:3)
您需要编写一个扩展模块,如下所述:https://forums.alfresco.com/comment/159331#comment-159331。
在JavaScript代码中,您需要获取 MERGED_ACTIONS 的小部件ID,并将customAction添加到allowdActions数组中,并在CustomActions中定义它。
这是来自链接的Aikau代码,可能已在更新的Alfresco版本中更新。因此,您需要在扩展模块中扩展它。
您可以在模块中使用 org \ alfresco \ share \ pages \ faceted-search 作为<sourcePackageRoot>
。
widgets: [{
id: "MERGED_ACTIONS",
name: "alfresco/renderers/Actions",
config: {
filterActions: true,
mergeActions: true,
allowedActions: ["folder-manage-rules", "folder-download", "folder-view-details", "CUSTOM3"],
customActions: [{
id: "CUSTOM3",
label: "Custom Action 3",
icon: "document-delete",
index: "10",
publishTopic: "DELETE_ACTION_TOPIC",
type: "javascript"
}],
widgetsForActions: [{
name: "alfresco/renderers/actions/ManageAspects"
}]
}
}]
答案 1 :(得分:3)
文档库(至少直到Alfresco Share 5.1)是使用YUI构建的,而搜索页面是使用Aikau构建的。在撰写本文时,搜索页面和文档库之间尚未进行动作处理,并且添加操作的过程也大不相同。
为了让您的自定义操作显示在分面搜索页面中,您需要执行以下操作:
答案 2 :(得分:1)
我从latest blog我们用过这个方法的方法中解释。
我们的用例是文档库视图中的现有操作,我们不希望重新创建,使用标准配置xml。
第一步是创建一个共享扩展模块,在web-extensions/site-data/extensions/example.xml
中添加一个Javascript控制器:
<extension>
<modules>
<module>
<id>Example Service</id>
<version>1.0</version>
<auto-deploy>true</auto-deploy>
<customizations>
<customization>
<targetPackageRoot>org.alfresco.share.pages.faceted-search</targetPackageRoot>
<sourcePackageRoot>com.parashift.example</sourcePackageRoot>
</customization>
</customizations>
</module>
</modules>
</extension>
这将加载一些额外的javascript,允许您调整小部件配置。
在web-extension/site-webscripts/com/parashift/example/faceted-search.get.js
中创建一个文件(或您在sourcePackageRoot
中使用的任何包名称),添加一个名为faceted-search.get.js
的文件,其中包含以下内容:
var searchResultPage = widgetUtils.findObject(model.jsonModel.widgets, "id", "FCTSRCH_SEARCH_RESULT");
if(searchResultPage != null) {
searchResultPage.config = {
enableContextMenu : false,
mergeActions : true,
additionalDocumentAndFolderActions : ["example-action"]
}
}
model.jsonModel.widgets.push({
id: "EXAMPLE_LISTENER",
name: "parashift/action/example"
});
这将:
example-action
添加到搜索结果中的操作列表中。这应该已经是某个share-config.xml文件中的已配置操作。为您的侦听器窗口小部件添加文件:META-INF/parashift/action/example.js
define(["dojo/_base/declare",
"dijit/_WidgetBase",
"alfresco/core/Core"
],
function(declare, _Widget, Core) {
return declare([_Widget, Core], {
postCreate: function () {
this.alfSubscribe("ALF_SINGLE_DOCUMENT_ACTION_REQUEST", lang.hitch(this, this._onPayloadReceive));
},
_onPayloadReceive: function (payload) {
if(payload.action.id == "example-action") {
this.alfLog("log", "Received action, handling accordingly");
.......
}
}
});
});
此代码将侦听ALF_SINGLE_DOCUMENT_ACTION_REQUEST
并执行_onPayloadReceive
功能。在此函数中,我们过滤到example-action
并执行任何自定义代码。
payload
变量将包含document
和action
个对象。使用Debug Logging可以看到它们的形状。
这大致相当于旧的YUI方法:
YAHOO.Bubbling.fire("registerAction", {
actionName: "onExampleAction",
fn: function(file) {
console.log("Received action, handling accordingly");
....
}
});