Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从alfresco中的文件夹名称创建动态下拉列表?_Alfresco_Alfresco Share - Fatal编程技术网

如何从alfresco中的文件夹名称创建动态下拉列表?

如何从alfresco中的文件夹名称创建动态下拉列表?,alfresco,alfresco-share,Alfresco,Alfresco Share,我有一项任务,在上载特定类型的文档时,我必须显示一个包含客户端名称的下拉列表。客户端的名称绑定到给定站点中的文件夹 例如,假设我在alfresco有一个站点XYZ,我有10个文件夹,名称为Client 1到Client 10,都在同一级别上,现在上传文档时,Client name字段应该由站点中存在的文件夹的名称填充 我创建了一个自定义java类,该类将获取文件夹名称,并在custom-model.xml文件中对客户机名称进行约束。我能够将硬编码数据显示为下拉列表,但现在我希望动态获取数据 因为

我有一项任务,在上载特定类型的文档时,我必须显示一个包含客户端名称的下拉列表。客户端的名称绑定到给定站点中的文件夹

例如,假设我在alfresco有一个站点XYZ,我有10个文件夹,名称为Client 1到Client 10,都在同一级别上,现在上传文档时,Client name字段应该由站点中存在的文件夹的名称填充

我创建了一个自定义java类,该类将获取文件夹名称,并在custom-model.xml文件中对客户机名称进行约束。我能够将硬编码数据显示为下拉列表,但现在我希望动态获取数据

因为我是新来户外的,所以我不知道该怎么做。我正在尝试使用Alfresco公共JavaAPI和CMIS,但却一无所获

这方面的任何帮助都将非常有用

这是代码

model.xml

    <!-- For client name -->
    <constraint name="ev:clientNames" type="com.eisenvault.repo.dictionary.constraint.ClientNameConstraint">
         <parameter name="allowedValues">
            <list>
                <value></value>
                 <!-- Will be empty -->
            </list>
         </parameter>
    </constraint>

ClientNameConstraint.java

import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class ClientNameConstraint extends ListOfValuesConstraint implements Serializable {
/**
 * 
 */
private static final long serialVersionUID = 1L;

Log log = LogFactory.getLog(ClientNameConstraint.class);

private List<String> allowedValues;
protected boolean caseSensitive;
protected boolean sorted;

public ClientNameConstraint(){
    caseSensitive = true;
    sorted = false;
    allowedValues = Collections.emptyList();
}

@Override
public List<String> getAllowedValues() {
    allowedValues = Arrays.asList("Client1", "Client2", "Client3", "Client4", "Client5", "Client6");
    Collections.sort(allowedValues);
    super.setAllowedValues(allowedValues);
    return allowedValues;
}

@Override
public void initialize() {
    System.out.println("Initialized called in ClientNameConstraint....................................");
    super.initialize();
    checkPropertyNotNull(ALLOWED_VALUES_PARAM, allowedValues);
}

}
import java.io.Serializable;
导入java.util.array;
导入java.util.Collections;
导入java.util.List;
导入org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint;
导入org.apache.commons.logging.Log;
导入org.apache.commons.logging.LogFactory;
公共类ClientNameConstraint扩展了ListOfValuesConstraint实现了可序列化{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
Log Log=LogFactory.getLog(clientnamesconstraint.class);
私有列表允许的值;
受保护布尔值区分大小写;
保护布尔排序;
公共ClientNameConstraint(){
区分大小写=正确;
排序=假;
allowedValues=Collections.emptyList();
}
@凌驾
公共列表getAllowedValues(){
allowedValues=Arrays.asList(“Client1”、“Client2”、“Client3”、“Client4”、“Client5”、“Client6”);
Collections.sort(allowedvalue);
super.setAllowedValues(allowedValues);
返回允许的值;
}
@凌驾
公共无效初始化(){
System.out.println(“在ClientNameConstraint中初始化调用”);
super.initialize();
checkPropertyNotNull(允许值、允许值);
}
}

在这种情况下,我会避免使用约束。其他人可能不同意,但动态约束可能会带来更多麻烦。这是因为,如果您的客户机列表不同步,您可能会遇到完整性异常,处理这些异常可能会很麻烦。想象一下,如果您使用列表的一个版本创建了一些文档,但随后删除了一个文件夹。现在,对这些文档的任何操作都将引发完整性异常

我个人会创建一个webscript(如果您愿意,可以使用Javascript),它读取文件夹并将其作为JSON返回。然后,我将创建一个自定义共享组件,并将表单配置为使用该组件。该组件将从webscript构建值列表,但不依赖于约束


这比你最初的想法“更多”的开发,但更灵活,升级等方面不会有任何问题,如果您的客户端文件夹与内容不同步。

我会修改您的标题,以反映您正试图根据动态文件夹列表创建自定义字段folders@Mathew-谢谢你的回复,但我没有收到你的建议,因为我要查询数据库中的文件夹名称,所以即使用户删除了一个文件夹,它也不会显示在下拉列表中。如果我的理解有误,请告诉我。另外,如果你能给我一个你所说的虚拟例子,我会非常感激,因为我是Alfresco的新手,这将有助于我给出一个开头。问题不是删除的文件夹从下拉列表中消失。如果使用约束,Alfresco将强制执行使用约束的内容的完整性。如果可用值因文件夹被删除而更改,则引用该文件夹的任何内容都将不再有效…..有许多关于创建动态表单控件的教程,例如:将“值帮助”项目与“我的项目”集成,以创建绑定到数据列表的下拉列表。以下是援助项目的价值。