動的リストに RPC 動的関数を使用する方法 - 4.6.X
動的リストを使用すると、カウンタフィールドを使用して長さを動的に定義できます。
ステップ 1: エンティティの生成
COBOL からエンティティを生成します。
エンティティエディタでフィールドを含むエンティティ部分を開きます。
[フィールド]
→[動的属性]
に移動し、[動的フィールド]
チェックボックスにチェックを入れます。Java エディタで同じエンティティ部分を開きます。
動的関数名を
@RpcDynamicField
アノテーション(注釈)に追加します。
例:@RpcDynamicField(dynamicFunction = "myDynamicFun")
@RpcList
アノテーション(注釈)でカウント値を宣言します(動的関数によって無効化されます)。
例:@RpcList(count = 3)
ステップ 2: DynamicFieldFunction インタフェースの実装
@Component
public class MyDynamicFieldFunction implements DynamicFieldFunction {
クラスを宣言する前に、
@Component
アノテーション(注釈)を追加します。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();
}