露天:限制 authority.ftl 一组用户
alfresco: limiting authority.ftl to a group of users
在我的工作流程模型中,我与 cm:person 类型关联,在共享配置中,我使用 authority.ftl 模板来显示它,我如何将可用用户限制为 select 从下到一组的成员 ?
你可以在那个authority.ftl和authority-finder.js的基础上创建一个新的控件,在里面你修改webscript调用给有限数量的用户返回!
注:
如果 webscript 不支持 maxItems 参数(或任何其他限制返回结果数量的参数),您始终可以创建支持该功能的全新 webscript,然后将新控件指向它。
为了实现这一点,我需要做一些更改:
您应该使用新的控制参数将参数传递给共享模块配置文件中的 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"
});
- 在alfresco\extension\templates\webscripts\org\alfresco\repository\forms\pickerchildren.get.js中读取并使用参数仅在给定组中查询:
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
});
}
}
}
在我的工作流程模型中,我与 cm:person 类型关联,在共享配置中,我使用 authority.ftl 模板来显示它,我如何将可用用户限制为 select 从下到一组的成员 ?
你可以在那个authority.ftl和authority-finder.js的基础上创建一个新的控件,在里面你修改webscript调用给有限数量的用户返回!
注: 如果 webscript 不支持 maxItems 参数(或任何其他限制返回结果数量的参数),您始终可以创建支持该功能的全新 webscript,然后将新控件指向它。
为了实现这一点,我需要做一些更改:
您应该使用新的控制参数将参数传递给共享模块配置文件中的 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" });
- 在alfresco\extension\templates\webscripts\org\alfresco\repository\forms\pickerchildren.get.js中读取并使用参数仅在给定组中查询:
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 }); } } }