服务器上的弹簧配置线,我猜用户信息不能从那里配置的任何东西中获得。因此,我使用自定义 javascript 操作处理程序解决了这个问题。
首先,我在 share-config-custom.xml 中连接了我的自定义 javascript,如下所示:
<config>
<forms>
<dependencies>
<js src="/components/documentlibrary/my-actions.js" />
</dependencies>
</forms>
</config>
在这个 javascript 文件中,我定义了一个用于操作处理的 javascript 函数:
/**
* Call a given url like an action of type 'link' would, but allows for configuration of the window.open call and
* appends the username of the active user in share to the url.
*
* Uses the 'href' param to form the URL, and allows for the 'name' and 'specs' param.
*
* @method onMyUserActionLink
* @param record {object} Object literal representing one file or folder to be actioned
* @param owner
*/
onMyUserActionLink : function dlA_onMyUserActionLink(record, owner) {
Alfresco.logger.debug("onMyUserActionLink");
var scope = this, nodeRef = record.nodeRef, jsNode = record.jsNode;
Alfresco.logger.debug("Scope formed");
// Get action & params
var params = this.getAction(record, owner).params;
Alfresco.logger.debug("Params retrieved");
// Get URL
var url = params.href;
Alfresco.logger.debug("URL: " + url);
// Append username
var appendage;
if(url.contains("?")) {
appendage = "&u="+Alfresco.constants.USERNAME;
} else {
appendage = "?u="+Alfresco.constants.USERNAME;
}
url += appendage;
Alfresco.logger.debug("URL+u: "+url);
// Check for name
var name = "_blank";
if(params["name"]) {
name = params["name"];
}
Alfresco.logger.debug("Name: "+name);
// Check for specs
var specs = "channelmode=yes,directories=no,fullscreen=yes,location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,titlebar=yes,toolbar=yes,top=0,left=0";
if(params["specs"]) {
specs = params["specs"];
}
Alfresco.logger.debug("specs: "+specs);
Alfresco.logger.debug("Opening window with url: "+url +", specs: "+specs+", name: "+name);
window.open(url, name, specs);
}
然后我为几个 Action 上下文注册了处理程序:
(function() {
if (Alfresco.DocumentList) {
YAHOO.lang.augmentProto(Alfresco.DocumentList, MY.doclib.FolderActions);
}
if (Alfresco.DocListToolbar) {
YAHOO.lang.augmentProto(Alfresco.DocListToolbar, MY.doclib.FolderActions);
}
if (Alfresco.DocumentActions) {
YAHOO.lang.augmentProto(Alfresco.DocumentActions, MY.doclib.FolderActions);
}
if (Alfresco.FolderActions) {
YAHOO.lang.augmentProto(Alfresco.FolderActions, MY.doclib.FolderActions);
}
if (Alfresco.doclib.Actions) {
YAHOO.lang.augmentProto(Alfresco.doclib.Actions, MY.doclib.FolderActions);
}
if (Alfresco.doclib.FolderActions) {
YAHOO.lang.augmentProto(Alfresco.doclib.FolderActions, MY.doclib.FolderActions);
}
})();
我在 share-config-custom.xml 中更改了我的操作 bean 配置以使用它:
<action id="myaction" type="javascript" label="actions.mine.menu.label" icon="my-icon">
<param name="function">onMyUserActionLink</param>
<param name="itemKind">action</param>
<param name="itemId">myAction</param>
<param name="mode">create</param>
<param name="destination">{node.nodeRef}</param>
<param name="successMessage">actions.mine.success</param>
<param name="failureMessage">actions.mine.fail</param>
<param name="href">/mylink/linky?id={node.properties.my_idProp}&prop2={node.properties.my_prop2}</param>
<param name="name">_blank</param>
<evaluator>evaluator.oa.action.isWhatIWant</evaluator>
</action>
该操作调用我的自定义 javascript,它附加用户名,然后继续作为链接工作。
很遗憾,即使是 alfresco 的员工也无法对此做出回应,但我确实希望在互联网上目前缺乏共享客户端 javascript 的情况下,这将有助于大量开发人员!
提示:例如 bean 配置,请查看 share\WEB-INF\classes\alfresco\share-documentlibrary-config.xml。比如javascript,看share\js\documentlibrary-actions.js。