1

この投稿で提供されている例に従って、Alfresco 3.3 で動的リスト制約を作成しようとしています。

だから、私は拡張する独自のクラスを作成しましたListOfValuesConstraint

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\" +@cm\\: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によって注入され、正常に機能しています。loadData()からのみ呼び出すとinitialize()、Lucene クエリが実行され、データが取得され、ドロップダウンに正しく表示されます。Alfresco サーバーを再起動しない限り、データは更新されません。

getAllowedValues()UI がこの制約を持つプロパティを表示する必要があるたびに呼び出されます。参照された投稿のアイデアは、loadData()からgetAllowedValues()も呼び出すことであるため、値は実際には動的になります。しかし、これを行うと、データが取得されません。Lucene クエリは同じですが、0 の結果を返すため、ドロップダウンには のみが表示されます-

ところで、私がやっているクエリは:+TYPE:"cm:category" +@cm\:description:"something here"で、どのケースでも同じです。初期化からは機能しますが、getAllowedValues からは機能しません。

なぜこれが起こっているのか、またはどうすれば解決できるのかについてのアイデアはありますか?

ありがとう

編集:昨日 Alfresco 3.3.0g Community にアップグレードしましたが、まだ同じ問題が発生しています。

4

1 に答える 1

5

この動的な値のリストの制約は悪い考えであり、その理由を説明します。

Alfrescoリポジトリは常に有効な状態である必要があります。制約の(動的な)リストが変更されます(そのため、動的にしたいと考えています)。アイテムの追加は問題になりませんが、アイテムの編集と削除は問題になります。オプションリストからアイテムを削除すると、このプロパティ値を持つリポジトリ内のノードは無効になります。

これを簡単に修正することはできません。標準のUIは、invalid-state-nodesで失敗します。この値を編集して有効な値に設定するだけでは機能しません。あなたは警告されました。

ListConstraintのデフォルトのUIウィジェットはドロップダウンであるため、すべてのドロップダウンがListConstraintである必要はありません。ListConstraintsは、Statusプロパティのようなもののために設計されています:{ドラフト、承認待ち、承認済み}。顧客名のリストではありません。

私はこの同じトピックが過去数年にわたって何度も何度も出てくるのを見てきました。実際に必要なのは、ユーザーがオプションの動的リスト(コンボボックス)から値を選択できるようにすることです。これはUIの問題であり、辞書モデルの問題ではありません。web-config-context.xml(Alfresco Web UI)またはAlfrescoShareでこのような設定を行う必要があります。最後のものはより柔軟であり、私はその道をとることをお勧めします。

于 2011-02-01T11:45:22.977 に答える