在共享配置的操作bean链接中将用户名添加到url

时间:2013-12-04 10:37:48

标签: properties action alfresco-share

我在share-config xml文件中定义了一个工作的露天共享操作,如下所示:

<action id="myAction" type="link" label="sv.menu.label" icon="my-icon">
    <evaluator>my.custom.evaluator</evaluator>
    <param name="itemKind">action</param>
    <param name="itemId">scanvelopAction</param>
    <param name="href">/myapp/prefilled?prop1={node.properties.custom_prop}&amp;prop2={node.properties.custom_prop2}</param>
    <param name="target">_blank</param>
</action>

这很好用。单击操作链接后,它会立即调用已定义的URL并插入属性。

现在,我想添加点击操作链接的当前活动用户的用户名。为此,我补充道:

&amp;u={person.properties.userName}

我已经根据ScriptNode API,{person.properties.name}{person.name}进行了尝试。

该操作继续像以前一样工作,但只将新输入作为文字打印到URL中,就像未定义此属性一样(所以我猜不是)。我尝试了以上的变化,但结果保持不变。我根本找不到关于ScriptNode API特定于人的properties的文档,我发现的例子我没有成功(见上文)。

我怎样才能实现这个目标?

修改

我还尝试了user.nameuser.userName的各种变体。

2 个答案:

答案 0 :(得分:1)

我不确定你是否可以像你想要的那样完成(我也查找了share-config根目标对象)。 “神奇”的动作对象被连接起来,或多或少硬编码(任何人都知道在哪里?)。

您可以使用根作用域对象获取Share / Surf server-javaScript中的当前用户:'user'或使用存储库根作用对象:存储库服务器中的'person'-javascript

在存储库Java中使用AuthentificationUtils。

所以你通常不需要将当前登录的用户传递给webscripts,他们已经知道了!

在共享客户端,您通常具有以下值:Alfresco.constants.USERNAME

所以在你真正执行的任何地方,你都拥有它

答案 1 :(得分:1)

服务器上的弹簧配置线,我猜测用户信息不能从那里配置的任何东西派生。因此,我使用自定义的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}&amp;prop2={node.properties.my_prop2}</param>
    <param name="name">_blank</param>
    <evaluator>evaluator.oa.action.isWhatIWant</evaluator>
</action>

该操作调用我的自定义javascript,它附加用户名,然后继续作为链接工作。

耻辱甚至露天的员工都无法对此做出回应,但我确信希望目前互联网上缺少共享客户端javascript,这将有助于大量的开发人员!

提示:例如bean配置,请查看share\WEB-INF\classes\alfresco\share-documentlibrary-config.xml。例如javascript,请查看share\js\documentlibrary-actions.js