貴博みなさん、こんにちは。今回は、Apexクラス拡張機能を使ったページのカスタマイズについて説明したいと思います。Apexクラス拡張機能とはSkyVisualEditorで生成されるページを、Apexクラスを記述することで一部拡張することができる機能です。標準で提供されている機能では実現できないような処理を行うことが可能です。保存前に独自の値チェックを行いたい例:データテーブルに1件以上レコードが登録されていないと保存できないようにする項目に特定の値を自動でセットしたい例:日付型項目に今日の日付を自動で挿入したいデータテーブルの行追加時に主オブジェクトの値をセットしたい検索テンプレート/カスタムルックアップテンプレートで検索条件の初期値をセットしたいカスタムボタンで独自のApex処理を走らせたい処理に時間のかかるSkyOnDemandのHTTPトリガーを起動したいSkyOnDemandの連携ボタンが標準で提供されていますが、1回の処理に時間がかかる(10秒以上)場合処理がタイムアウトしてしまうため、Apexクラス経由で処理しなければならない場合があります。Apexクラス拡張機能を使ってみるそれでは、Apexクラス拡張を使用してページを拡張してみましょう。今回は、保存前にデータテーブルの空行を自動削除する機能を作成したいと思います。Apexクラス拡張を作成する方法は2つあります。Studioからページと一緒にデプロイする」方法で作成します。目次1.Apexクラスの準備2.コード編集2-1.前準備2-2.削除対象の抽出2-3.削除処理3.動作の確認1.Apexクラスの準備スタジオ画面のページプロパティに「Apexクラス拡張」というメニューがあります。そこから、「Studioで直接編集」ボタンを押します。すると、拡張Apexクラス編集ダイアログが開きます。ここでは、拡張クラスを記述するための最低限のコードが自動生成されています。これで拡張クラスの作成準備は完了です。続いて、コードを編集して機能を追加していきましょう。2.コードを編集するここから、データテーブルに追加された空行を削除するための作業に移っていきます。ページプロパティの「Apexクラス名」の編集するチェックをOFFにしています。2-1.前準備まず、ページのコントローラをプロパティとして拡張クラス内に保持します。(4行目,10行目)さらに、保存ボタンが押された後、実際の保存処理の前に割り込み処理を追加するため、preSaveメソッドを実装します。}}続いて、実際の割り込み処理をpreSaveメソッドに記述していきます。2-2.削除対象の抽出データテーブルのリストを取得します。SkyVisualEditorでは、テーブルのリストを実現するためのクラスと、各レコードを表現するためのアイテムクラスが自動生成されます。自動生成されたクラスは、ページのコントローラクラスの内部クラスとして、データテーブルコンポーネントの「ID」プロパティの値をクラス名として生成されます。データテーブルのIDに「DataTable1」と設定されている場合、テーブルクラス:DataTable1アイテムクラス:DataTable1Itemという名前で生成されます。各クラスは内部クラスなので、「[ページのコントローラ名].[テーブルクラス]」のような形で使用します。テーブルクラスのインスタンスは、クラス名と同じ名前の変数に格納されています。データテーブルのリストは、テーブルクラスのitemsという名前の変数が保持しています。今回のサンプルでは、「extension.DataTable1.items」で取得できます。(5行目)ここで取得できる値は、実際の値ではなく、アイテムクラス型になっています。実際のレコードは、アイテムクラスのrecordという名前のプロパティが保持しています。最後に、実際の削除処理を記述します。Itemクラスのremoveメソッドを使用すると、該当のレコードを削除できます。item.remove();}最終的に拡張クラスは、下記のようになります。}}3.デプロイをして画面の動きを確認する今回作った拡張クラスを基に、取引先と取引先責任者の一括登録ページを作成しました。本来であれば10件全て入力するか、未入力の行を削除しないと保存ができません。今回作成したページでは、取引先責任者の姓と名が入力されていないレコードを保存前処理で削除しているため、このまま保存ボタンを押すと、入力済みの2レコードのみ保存されます。↓のリンクからダウンロードして、ぜひお試しください。ExtendedApexClassSample.sveファイルの使用方法はこちらをご覧ください。使い方によっては、大変便利なApexクラス拡張ですが、活用するためにはある程度のApex開発技術が必要になります。クラス拡張を使用する際に注意しなければならない点をまとめてみました。Apexクラスを記述するカスタマイズになるため、ある程度のプログラミング能力が必要になります。ガバナ制限やセキュリティの注意事項等、Force.comプラットフォームの制約を正しく理解している必要があります。Apexクラスの開発をするため、標準機能のみを使用した開発と比べると開発効率がやや下がります。Apexクラス拡張で記述されたコードについては、製品サポートの対象外となります。さいごにApexクラス拡張を使用することで、SkyVisualEditorに足りなかった機能を独自に追加することができます。今回は保存前の処理を追加しましたが、他にもさまざまな使用方法があります。ユーザーマニュアルに詳細が記載されているので、詳い使い方はマニュアルをご覧ください(326ページ)。「画面構成をドラッグ&ドロップで簡単に作成+独自の処理をApexクラス拡張で作成」とすることで、全て手作りするよりも早く・簡単に必要な画面が構築できます。今後は、拡張クラスのサンプルや活用例等もご紹介できればと思っていますのでお楽しみに。Experienceのレコードページをもっと便利にするAppExchangeを社内導入する時に見たい!5つのポイント関連するキーワードSkyVisualEditorTerraSkyBaseについてTerraSkyBaseはクラウドサービスを手掛ける株式会社テラスカイのコンテンツプラットフォームです。