/
動的リストに RPC 動的関数を使用する方法 - 4.6.X

動的リストに RPC 動的関数を使用する方法 - 4.6.X

動的リストを使用すると、カウンタフィールドを使用して長さを動的に定義できます。

ステップ 1: エンティティの生成

  1. COBOL からエンティティを生成します。

  2. エンティティエディタでフィールドを含むエンティティ部分を開きます。

  3. [フィールド][動的属性] に移動し、[動的フィールド] チェックボックスにチェックを入れます。

  4. Java エディタで同じエンティティ部分を開きます。

  5. 動的関数名を @RpcDynamicField アノテーション(注釈)に追加します。
    例: @RpcDynamicField(dynamicFunction = "myDynamicFun")

  6. @RpcList アノテーション(注釈)でカウント値を宣言します(動的関数によって無効化されます)。
    例: @RpcList(count = 3)

 

ステップ 2: DynamicFieldFunction インタフェースの実装

@Component public class MyDynamicFieldFunction implements DynamicFieldFunction {
  1. クラスを宣言する前に、@Component アノテーション(注釈)を追加します。

  2. getName メソッドの実装。ステップ 6(myDynamicFun)から dynamicFunction 名が返されます。

   @NotNull       @Override       public String getName() {           return "myDynamicFun";     }

3. パブリック Function1<RpcDeserializeRequest<?>, Integer> getCountOutputFunction() 関数を実装します。例:

@Nullable     @Override     public Function1<RpcDeserializeRequest<?>, Integer> getCountOutputFunction() {         return it ->             it.getResult()                 .getJsonObject("dfhcommarea") // the "highest" level part of the entity that includes the list                 .getInteger("itemNum"); // the counter field     }

4. 関数がブールを返す場合は、

null または true を返して他の関数を実装します。

バージョン 4.6.1 以降、すべての関数を実装する必要はありません。

クラスは、以下のようになります。

@Component public class MyDynamicFieldFunction implements DynamicFieldFunction {       @NotNull     @Override     public String getName() {         return "myDynamicFun";     }       @Nullable     @Override     public Function1<RpcDeserializeRequest<?>, Integer> getCountOutputFunction() {         return it ->             it.getResult()                 .getJsonObject("dfhcommarea") // the "highest" level part of the entity that includes the list                 .getInteger("itemNum"); // the counter field     }       @Override     public Function1<、, Integer> getCountOutputFunction() {         return null;     }       @NotNull     @Override     public Function1<RpcSerializeRequest, Boolean> getConditionInputFunction() {         return rpcSerializeRequest -> true;     }       @NotNull     @Override     public Function1<RpcDeserializeRequest<?>, Boolean> getConditionOutputFunction() {         return rpcDeserializeRequest -> true;     }       @Override     public Function1<RpcSerializeRequest, Integer> getLengthInputFunction() {         return null;     }       @Override     public Function1<RpcDeserializeRequest<?>, Integer> getLengthOutputFunction() {         return null;     } }

5. /ts-sdk/src/main/java/com/ts_sdk/openlegacy/config/TsSdkConfiguration.java へ移動します。

6. Bean として、dynamicFieldFunction クラスを追加します。

例:

 @Bean             public DynamicFieldFunction countDynamicFieldFunction() {                 return new MyDynamicFieldFunction();             }

 

Related content