2019年7月

Mavenで実行可能なJARファイルを作成

  • 2019.07.27

概要 本記事では、Mavenで実行可能なJARファイルを簡単にビルドして作成する方法を記載します。ローカルで実行するようなツール等をJavaで作成する際には、JARファイルをコマンドもしくはダブルクリックで実行可能になるので参考にしていただければと思います。 プロジェクトの作成 mvnコマンドでJavaプロジェクトのスケルトンを作成します。 maven-assembly-plugin maven-assembly-pluginは、プロジェクトの出力をその依存関係、モジュール、ドキュメント、およびその他のファイルと共に単一の配布可能なアーカイブにまとめることを可能にします。今回は、JARファイルの形式でアーカイブしたいので、jar-with-dependenciesを指定します。また、<archive>の<manifest>で実行クラスのパスを指定します。追加で<appendAssemblyId>をfalseに設定しています。そうしないと、作成されるjarファイルに-jar-with-dependenciesが最終的な名前に追加されてしまいます。下記をpom.xmlファイルに記載します。 maven-dependency-plugin maven-dependency-pluginのcopy-dependenciesを使用することで、プロジェクトの直接の依存関係とオプションで推移的な依存関係のリストを取得し、それらを指定された場所にコピーします。下記をpom.xmlファイルに記載します。 サンプル Githubに本記事のサンプルを格納しています。cloneして、mvn packageすることでJARファイルを作成できます。https://github.com/yhayashi30/maven-jar-sample 参考 Apache Maven Assembly Pluginhttp://maven.apache.org/plugins/maven-assembly-plugin/Apache Maven Assembly Plugin Usagehttp://maven.apache.org/plugins/maven-assembly-plugin/usage.htmlApache Maven Dependency Pluginhttps://maven.apache.org/plugins/maven-dependency-plugin/Apache Maven Dependency Plugin Usagehttps://maven.apache.org/plugins/maven-dependency-plugin/usage.html

プラットフォームイベントとは

  • 2019.07.21

概要 本記事ではSalesforceのプラットフォームイベントについての概要や使用方法を簡単に整理します。 イベント駆動型アーキテクチャ イベント駆動型アーキテクチャとは、イベントプロデューサ/イベントコンシューマ/イベントバスから構成されます。イベントプロデューサは、イベント発生時の情報を取得してイベントバスにメッセージとして転送します。転送されたメッセージは、プロデューサとは非同期にイベントコンシューマで受信して処理を実行します。従来の要求-応答通信モデルでは、Webシステムやデータベースに要求を実行して同期で応答を受信していました。したがって、応答するWebシステムやデータベースの可用性に依存していました。イベント駆動型アーキテクチャの使用用途は、外部システムとのインテグレーション等で別トランザクションで非同期に処理を実行したいような場合かと思います。そして、プラットフォームイベントは、Salesforce Platform上でイベント駆動型アーキテクチャを実現する機能となります。 https://developer.salesforce.com/docs/resources/img/ja-jp/220.0?doc_id=images%2Fsalesforce_event_bus.png&folder=platform_events カスタムプラットフォームイベントの定義 カスタムプラットフォームイベントは、カスタムオブジェクト(sObject)と同じように定義することができます。また、カスタムオブジェクトと同様に作成したプラットフォームイベントには、カスタム項目を追加することができます。ただし、レイアウトやLightningレコードページで表示することはできません。プラットフォームイベントのAPI参照名のサフィックスは、__eとなります。(通常のカスタムオブジェクトでは、__cとなる部分です。)例) event__e みたいな感じです。 プラットフォームイベントの公開 上記で定義したプラットフォームイベントに対してレコードを作成することがイベントの公開になります。公開するための方法は以下のいずれかとなります。イベント駆動型アーキテクチャでいうと、イベントプロデュースにあたります。 プロセスビルダー フロー Apex API(SOAP API/REST API/Bulk API etc) それぞれの機能での実装は、通常のカスタムオブジェクトにレコードを作成するのと同じようなイメージとなります。 プラットフォームイベントの登録 上記で公開したプラットフォームイベントのレコードによりメッセージを受信して動作する処理を登録します。登録するための方法は以下のいずれかとなります。イベント駆動型アーキテクチャでいうと、イベントコンシューマにあたります。 プロセスビルダー フロー Apexトリガー Litghtningコンポーネント(empApiコンポーネント) CometDクライアント プロセスビルダーとフローには、プラットフォームイベントを開始のタイミングとして選択することができます。 プロセスビルダー フロー Apexトリガーは、カスタムオブジェクトのトリガーと同様にプラットフォームイベントのオブジェクトに対して作成することができます。処理種別は、after triggerとして実装します。また、通常のカスタムオブジェクトの最大バッチ数は200ですが、プラットフォームイベントは、2000となります。Lightningコンポーネントは、empApiコンポーネントを使用してリスンするプラットフォームイベントを登録することができます。参考(lightning-emp-api)https://developer.salesforce.com/docs/component-library/bundle/lightning-emp-api/documentationCometDは、外部クライアントでプラットフォームイベントの受信を登録できます。CometD クライアントを実装するか EMP コネクタのオープンソースのコミュニティツールを使用して作成することができます。具体的な実装のサンプルは、下記に記載されています。参考(Java クライアントを使用した登録とイベントの再生)https://developer.salesforce.com/docs/atlas.ja-jp.platform_events.meta/platform_events/code_sample_java_client_intro.htm 参考 Platform Events Developer Guide (プラットフォームイベント開発者ガイド)https://developer.salesforce.com/docs/atlas.ja-jp.platform_events.meta/platform_events/platform_events_intro.htm プラットフォームイベントの基礎https://trailhead.salesforce.com/ja/content/learn/modules/platform_events_basics インスタント通知アプリケーションの作成https://trailhead.salesforce.com/ja/content/learn/projects/workshop-platform-events

FlowからApex呼び出し

  • 2019.07.19

概要 宣言的型の開発(UIベースでの実装)であるFlowからApex(プログラムベースでの実装)を呼び出して実行するプログラムの実装方法を記載します。特にApexの呼び出しで複数のパラメータを引数として渡したいパターンについて整理します。 InvocableMethod アノテーション まず、Flowから呼び出すApexクラスのメソッドには、InvocableMethodアノテーションをつけて、staticでpublicまたはglobalで宣言します。InvocableMethodアノテーションをつけたメソッドは、クラスに1つのみが宣言可能となります。 InvocableVariable アノテーション InvocableMethodのメソッドで入力もしくは出力のクラス変数のパラメータを定義する際には、InvocableVariable アノテーションを使用します。なので、InvocableMethodのメソッドで複数のパラメータを渡したい場合等には、入力用のクラスを宣言して、そのクラス変数としてInvocableVariableアノテーションをつけます。 サンプル サンプルでは、複数の取引先と親ケースのIDと件名をFlow等から呼び出しの引数として渡して、それらに紐付けたケースを一括作成するような処理を行なっています。 参考 InvocableMethod アノテーションhttps://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_InvocableMethod.htm InvocableVariable アノテーションhttps://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_InvocableVariable.htm