在我的工作流模型中,我有一个与cm:person类型的关联,在共享配置中我正在使用authority.ftl模板来显示它,如何限制可用用户从一个组的成员中选择?
答案 0 :(得分:2)
为了达到这个目的,我需要做一些改变:
您应该使用新的控制参数将参数传递到共享模块配置文件中的authority.ftl:
<config evaluator="node-type" condition="my:customtype">
<forms>
<form>
<appearance>
<field id="my:personproperty">
<control template="/org/alfresco/components/form/controls/authority.ftl">
<control-param name="filterString">mygroupname</control-param>
</control>
在alfresco \ web-extension \ site-webscripts \ org \ alfresco \ components \ form \ controls \ authority.ftl中,将此参数传递给js选择器:
picker.setOptions( { itemType: "${field.endpointType}", <#if field.control.params.filterString??> filterString: "${field.control.params.filterString}", </#if> multipleSelectMode: ${field.endpointMany?string}, itemFamily: "authority" });
argsFilterString = args['filterString'] ... if (argsSelectableType == "cm:person") { findUsers(argsSearchTerm, argsFilterString, maxResults, results); } ... function findUsers(searchTerm, filterString, maxResults, results){ var paging = utils.createPaging(maxResults, -1); var searchResults = groups.searchUsers(searchTerm, paging, "lastName"); var groupmembers = null; if (filterString != null){ var group = groups.getGroup(filterString); var groupmembers = group.getAllUsers(); } // create person object for each result for each(var user in searchResults) { if (logger.isLoggingEnabled()) logger.log("found user = " + user.userName); var add=true; if (groupmembers != null ){ var ismember = false; for each (var p in groupmembers){ if (""+p.userName == ""+user.userName){//need to add +"" cause they are java strings! ismember = true; } } if (!ismember){ logger.log(user.userName+" is no member of group "+filterString); add=false; } } if(add){ // add to results results.push( { item: createPersonResult(user.person), selectable: true }); } } }
答案 1 :(得分:1)
您可以基于该authority.ftl和authority-finder.js创建一个新控件,您可以在其中修改webscript调用以返回有限数量的用户!
注意: 如果webscript不支持maxItems参数(或任何其他参数来限制返回的结果数),您可以随时创建支持该功能的全新webscript,然后将新控件指向它。