4

どこでも探してみましたが、oligo V4 Java で制限付きアクションを実装する方法がわかりませんでした。

どこでも無制限のアクションチュートリアルが提供されます。

このコードを微調整してみました。

  final CsdlAction action = new CsdlAction();
  action.setName("testAction");
  action.setBound(true);

これにより、$metadata API にアクセスしようとするとエラーが発生します。

誰かがそれについての良いチュートリアルを教えてくれるなら、それは素晴らしいことです.

4

1 に答える 1

2

oligo のソースコードを調べて、コードをデバッグしました。多くの調査作業の後、Olingo で制限付きアクションを実装することができました。

エンティティ タイプ X にバインドされ、エンティティ Y を返すバインド アクションを実装するとします。

必要な変更は次のとおりです。

メタデータ ドキュメント: CsdlAbstractEdmProvider を拡張するか、CsdlEdmProvider を実装する Java クラス (カスタム クラス) で、

getActions(...) 関数を実装する

// Action Names
public static final String ACTION_EXECUTE_NAME = "Execute";

// FullyQualified Action Names
public static final FullQualifiedName ACTION_EXECUTE_FQN = new FullQualifiedName("StackOverflow", ACTION_EXECUTE_NAME);

@Override
public List<CsdlAction> getActions(FullQualifiedName actionName) throws ODataException {
    if (actionName.equals(ACTION_EXECUTE_FQN)) {
        // It is allowed to overload actions, so we have to provide a list
        // of Actions for each action name
        final List<CsdlAction> actions = new ArrayList<CsdlAction>();

        // Create the Csdl Action
        final CsdlAction action = new CsdlAction();
        action.setName(ACTION_EXECUTE_FQN.getName());
        action.setBound(true);

        // Creating Parameter the first one being binding parameter
        final List<CsdlParameter> parameters = new ArrayList<CsdlParameter>();
        final CsdlParameter parameter = new CsdlParameter();
        parameter.setName("Parameter1");
        parameter.setType(X);
        parameter.setNullable(true);
        parameter.setCollection(false);
        parameters.add(parameter);
        action.setParameters(parameters);

        action.setReturnType(new CsdlReturnType().setCollection(false).setType(Y));

        actions.add(action);
        return actions;
    }
    return null;
}

同じメタデータ プロバイダー クラスの getSchemas(...) で getActions(...) メソッドを呼び出します。

@Override
public List<CsdlSchema> getSchemas() throws ODataException {
    // create Schema
    CsdlSchema schema = new CsdlSchema();
    schema.setNamespace("Stackoverflow");

    // add EntityTypes
    List<CsdlEntityType> entityTypes = new ArrayList<CsdlEntityType>();
    entityTypes.add(getEntityType(X));
    entityTypes.add(getEntityType(Y));

    schema.setEntityTypes(entityTypes);

    // add EntityContainer
    schema.setEntityContainer(getEntityContainer());

    // add bounded actions
    List<CsdlAction> actions = new ArrayList<CsdlAction>();
    schema.setActions(actions);
    actions.addAll(getActions(ACTION_EXECUTE_FQN));

    List<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
    schemas.add(schema);
    return schemas;
}

私たちが行ったことは、アクションの最初の引数としてパラメーターを持つ ACTION_EXECUTE_FQN という名前のバインドされたアクションを作成したことです。この場合、エンティティ X であり、戻り値の型はエンティティ Y です。

サービスの実装: 現在、サービスの実装も必要です。採用されたユースケースによると、ActionEntityProcessorを実装するクラスを作成する必要があります。

この後、すべて同じです。これが役立つことを願っています。アクションの戻り値の型とアクションがバインドされるパラメーターの型に応じて、他の ActionProcessor があります。

于 2016-11-18T03:47:36.667 に答える