2010-07-07 2 views
1

Alfresco 3.3에서 동적 목록 제약 조건을 만들려면 this post에 제공된 예제를 따르려고합니다.Alfresco의 동적 목록 제약

public class MyConstraint extends ListOfValuesConstraint { 
    private static ServiceRegistry registry; 

    @Override 
    public void initialize() { 
     loadData(); 
    } 

    @Override 
    public List getAllowedValues() { 
     //loadData(); 
     return super.getAllowedValues(); 
    } 

    @Override 
    public void setAllowedValues(List allowedValues) { 
    } 

    protected void loadData() { 
     List<String> values = new LinkedList<String>(); 
     String query = "+TYPE:\"cm:category\" [email protected]\\:description:\"" + tipo + "\""; 
     StoreRef storeRef = new StoreRef("workspace://SpacesStore"); 
     ResultSet resultSet = registry.getSearchService().query(storeRef, SearchService.LANGUAGE_LUCENE, query); 
     // ... values.add(data obtained using searchService and nodeService) ... 

     if (values.isEmpty()) { 
      values.add("-"); 
     } 
     super.setAllowedValues(values); 
    } 
} 

ServiceRegistry 참조가 Spring에 의해 주입하고, 그것을 잘 작동하고 :

그래서, ListOfValuesConstraint를 확장 내 자신의 클래스를 만들었습니다. loadData()initialize()에서 호출하면 Lucene 쿼리를 실행하고 데이터를 가져 오며 드롭 다운에 올바르게 표시됩니다. 동적이 아닙니다. Alfresco 서버를 다시 시작하지 않으면 데이터가 새로 고쳐지지 않습니다.

getAllowedValues()이 UI가이 제약 조건을 가진 속성을 표시해야 할 때마다 호출됩니다. 추천 게시물에 대한 아이디어는 loadData()getAllowedValues()에서 호출하기 때문에 값은 실제로 동적입니다. 그러나 내가 이것을 할 때, 나는 어떤 데이터도 얻지 못한다. Lucene 쿼리는 동일하지만 결과가 0이므로 내 드롭 다운에 - 만 표시됩니다.

현재, 내가 수행하고있는 쿼리는 +TYPE:"cm:category" [email protected]\:description:"something here"이며 각각의 경우에 동일합니다. 그것은 초기화에서 작동하지만 getAllowedValues에서는 발생하지 않습니다.

왜 이런 일이 발생했는지 또는 어떻게 해결할 수 있습니까?

감사

편집 : 우리가 어제 프레스코 3.3.0g 커뮤니티로 업그레이드,하지만 우리는 여전히 같은 문제가 있습니다.

답변

4

이 동적 값 목록-제약은 나쁜 생각과 내가 왜 당신을 말할 :

프레스코 저장소가 유효한 상태에있는 모든 시간이 될 것이다. 귀하의 (역동적 인) 제약 조건 목록이 바뀔 것입니다. 항목을 추가해도 문제는되지 않지만 항목을 편집하고 제거하면됩니다. 옵션 목록에서 항목을 제거하면이 등록 정보 값이있는 저장소의 노드가 유효하지 않게됩니다.

이 문제를 쉽게 해결할 수 없습니다. 표준 UI는 무효 상태 노드에서 실패합니다. 단순히이 값을 편집하고 유효한 값으로 설정하면 작동하지 않습니다. 당신은 경고를 받았습니다.

ListConstraint의 기본 UI 위젯이 드롭 다운이므로 모든 드롭 다운이 ListConstraint가 아니어야합니다. ListConstraints는 {초안, 대기 승인, 승인 됨} 상태 속성과 같은 항목을 위해 설계되었습니다. 고객 이름 목록이 아닙니다.

나는이 주제가 지난 몇 년 동안 계속해서 반복되는 것을 보았다. 사용자가 실제로 원하는 것은 동적 옵션 목록 (콤보 상자)에서 값을 선택하게하는 것입니다. 이것은 UI 문제이며 사전 모델 문제는 아닙니다. web-config-context.xml (Alfresco 웹 UI) 또는 Alfresco Share에서 이와 같이 설정해야합니다. 마지막 하나는 더 유연하고 그 길을 택하는 것이 좋습니다.

+0

답변 해 주셔서 감사합니다. (알고 있습니다. 나는 조금 늦었습니다. :). 당신이 답을 쓸 때쯤에는 이미 회사 내의 다른 프로젝트로 옮겨 졌으므로 귀하의 제안을 시도 할 기회가 없었습니다. 어쨌든, 특히 동적 가치 목록에 대한 경고에 감사드립니다! – AJPerez