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

时间:2015-12-22 09:40:11

标签: alfresco alfresco-share

我有一项任务,在上传特定类型的文档时,我必须使用客户端名称下拉。客户端的名称与给定站点中的文件夹相关联。

例如假设我在露天有一个站点XYZ,我有10个文件夹,名称Client 1到Client 10都在同一级别,现在在上传文档时,客户名称字段应填充站点中存在的文件夹的名称。

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

由于我是露天新手,我不知道如何完成它。我正在尝试使用Alfresco公共java api和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);
}

}

1 个答案:

答案 0 :(得分:1)

在这种情况下,我会避免使用约束。其他人可能不同意,但动态约束可能比它的价值更麻烦。这是因为您可以获得完整性异常,如果您的客户端列表不同步,可能会处理这些异常。想象一下,如果您使用一个版本的列表创建一些文档,但随后删除一个文件夹。现在对这些文档的任何操作都会抛出完整性异常。

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

它比您最初的想法“更多”,但它更灵活,如果您的客户端文件夹与内容不同步,您将不会遇到任何升级等问题。