ステップ 4: クラスメソッドの最終バージョンを作成する
計画を作成できたら、疑似コードを補足して最終的なクラスメソッドのロジックを構築しましょう。まず、対象の請求書とその品目の sObject のローカルコピーを作成します (下記の行 8 ~ 10)。メソッドのコードには、既存の品目を順序どおりに並べる SOQL クエリが含まれ (行 8)、メソッドの入力パラメータの指定に基づいて (行 10)、検索条件を使用し、対象の請求書を取得します。SOQL のオブジェクト表記は、他とは少し異なります。
ソースコードについては、https://gist.github.com/3605645を参照してください。
更新された Apex クラスを保存します。保存操作をするときには、[Problems (問題)] ペインでコンパイルエラーがないことを確認します。エラーがある場合は、適切に修正して、修正後のコードを保存します。
次に、各品目を処理して採番し直すためのループを追加してクラスを更新します (行 13 ~ 18)。
ソースコードは、https://gist.github.com/3605650 にあります。
行 14 の FOR ループでは、Apex 固有のオブジェクト表記を使用して請求書の品目を参照しています。行 18 には、デバッグログに役に立つ情報を出力するための System.debug ステートメントが含まれています。
次に、新しいバージョンの請求書の品目でデータベースを更新する、クラスメソッドの最終バージョンを作成します (行 22 ~ 30)。
ソースコードについては、https://gist.github.com/3605654を参照してください。
このメソッドは、try/catch ブロックを使用してデータベースを更新し、予期しないランタイム例外が発生した場合はエラーを処理します。
- try ブロック (行 22 ~ 24) の Database.update メソッドは標準の Apex メソッドで、1 つ以上の sObject を更新するために使用できます。ここでも、対象となる請求書の関連する品目を参照するオブジェクト表記に注意してください (invoice.Line_Items__r)。
- catch ブロック (行 25 ~ 27) は、DmlException をキャッチします。例外エラーメッセージを呼び出し元に返す return ステートメントが含まれています。
- メソッドは、try/catch ブロックを通過して処理を続行する (つまり、例外が発生せず、例外エラーメッセージを返さない) と、標準のメッセージを返して処理が成功したことを示します (行 30)。