露天:限制 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 
      });
  }
 }
 }