財務と運用アプリでは、バッチ処理はバックグラウンドで非同期にタスクを実行するために使用されます。 バッチ ジョブは、データのインポートなどの単純なタスクから複雑な計算や統合まで幅広く実行できます。
バッチ パラメータの更新およびバージョン管理が必要になる場合は、さまざまな状況があります。 次にいくつか例を挙げます。
- 構成の変更 – バッチ処理には、構成の設定やパラメーターの変更が必要となる場合があります。 たとえば、特定の方法でデータを処理したバッチ ジョブでは、新しいフィールドまたはデータ ソースに対応する必要があります。 そのような場合は、バッチ パラメータを更新する必要があります。
- パフォーマンスの最適化 – システムが進化し成長するにつれて、パフォーマンスを向上させるためにバッチ処理を最適化する機会が生じ得る場合があります。 この最適化には、バッチ サイズやデータセットなどのバッチ パラメータの調整が伴い、処理の効率が向上します。
- ソフトウェアの更新または機能拡張 – バグがバッチ処理で問題が見つかった場合、または新しい機能がバッチ ジョブに影響する場合は、バッチ パラメータを変更して問題を修正するか、新しい機能を含める必要があります。
- 統合の変更 – API エンドポイントやデータ形式など、バッチ ジョブと対話する外部システムまたはインターフェイスに変更を加える可能性があります。 そのような場合は、バッチ パラメータを更新して変更に対応し、シームレスな統合を実現する必要があります。
バッチ パラメータのバージョン管理は、変更の記録を管理し、バッチ処理で一貫性と信頼性を維持するために不可欠です。 パラメータ変更の履歴を追跡し、必要な場合は以前のバージョンに戻し、監査目的でドキュメントを管理できます。 また、開発、テスト、運用環境など、さまざまな環境に変更を管理および配置する上でも役立ちます。
バッチ パラメータを指定した場合にエラーが発生する理由
バッチを実行すると、「バッチジョブ (XXXXX) のパラメータを解凍中にエラーが発生しました。」 というようなエラーメッセージが表示されることがあります。このエラーは、以下のリストのような問題のためにバッチジョブがパラメータを正しくアンパックできない場合に発生します:
- パラメーターの変更 – バッチ パラメーターの更新時に、バッチ ジョブが異なるバージョンのパラメーター リストを処理するように設計されていない場合、パック/アンパックのプロセス中にエラーが発生する場合があります。 パック/アンパック プロセスは、保管と実行用にバッチ パラメータをシリアル化および逆シリアル化するために使用します。 バッチ ジョブで特定のパラメータ セットが必要である一方で、バージョンの変更により異なるセットが受け取る場合、実行中にエラーが発生する可能性があります。
- カスタム コードまたは拡張機能 – バッチ ジョブでカスタム コードまたは拡張機能を使用した場合、パラメーターが展開されたときにコードまたは拡張機能のエラーが発生すると問題が発生する可能性があります。 エラーや不整合があった場合はカスタム コードまたは拡張機能を確認し、必要に応じて対処します。
- セキュリティ アクセス許可 – アクセス許可やセキュリティ設定が不十分な場合、バッチ ジョブが必要なデータまたはリソースにアクセスできない場合があります。 結果として、パラメーターが展開されている場合にエラーが発生する可能性があります。 バッチ ジョブを実行するユーザーが、必要なすべてのリソースにアクセスするための適切なアクセス許可を持っている必要があります。
バッチ パラメーターのバージョンを作成する方法
次のたとえば、バッチクラスの RunBaseBatch または SysOperationServiceController 実装でバッチ パラメーターのバージョン管理を行う方法を示します。
#define.Version1(1)
#define.Version2(2)
#define.CurrentVersion(3)
#localMacro.Version1List
includeNewParam1
#endmacro
#localMacro.Version2List
#Version1List
,includeNewParam2
,includeNewParam3
#endmacro
#localMacro.CurrentVersionList
#Version2List
,includeNewParam4
#endmacro
boolean unpack(container _packedClass)
{
Integer version = conPeek(_packedClass,1);
switch(version)
{
case #CurrentVersion:
[version, #CurrentVersionList] = _packedClass;
break;
case #Version2:
[version, #Version2List] = _packedClass;
break;
case #Version1:
[version, #Version1List] = _packedClass;
break;
default:
return false;
}
return true;
}
次のたとえば、アンパック の独自実装を持つ別のバッチクラスを継承したバッチクラスで、 バッチ パラメータのバージョン管理をどのように行うかを示します。
#define.Version1(1)
#define.CurrentVersion(2)
#localmacro.Version1List
param1,
param2
#endmacro
#localmacro.CurrentVersionList
#Version1List
param3,
param4
#endmacro
public boolean unpack(container packedState)
{
container packedSuper;
int version;
version = conPeek(packedState,1);
switch (version)
{
case #CurrentVersion:
[version, #CurrentVersionList, packedSuper] = packedState;
break;
case #Version1:
[version, #Version1List, packedSuper] = packedState;
break;
default:
return false;
}
return super(packedSuper);
}
ベスト プラクティス
バッチ ジョブ パラメーターに対する将来の変更の推奨事項を次に示します:
- バージョン管理されたパラメーター リストを管理します。 パラメーター リストの古いバージョンと新しいバージョンの両方が保持されます。 バージョン管理ではバック距離の互換性が確保され、パラメーター バージョン間の移行を円滑に行います。
- 問題を解くプロセスを変更します。 パラメーター リストの古いバージョンと新しいバージョンの両方が処理されがちな問題を修正します。 構造を変更するメカニズムにより、どちらのバージョンのパラメーターをシームレスに識別および処理することができます。
- 機能ロジックを考慮します。 バッチ ジョブの機能ロジックは、パラメーター リストの古いバージョンが用意されているシナリオに対応するように設計する必要があります。 これらのシナリオでは、バッチ ジョブは前の動作に戻り、パラメーターが変更される前に定義された仕様に従う必要があります。
これらの推奨事項を実装することにより、バッチ ジョブ システムでパラメーターに対する変更を効率的に管理できます。 これにより、パラメーター リストの異なるバージョン間での機能の互換性と整合性が確保されます。