こんにちは。まるです。
今回からはSalesforceについて研修で学んだ内容をアウトプットしていきたいと思います。
よろしくお願いします。
Salesforceとは、Salesforce.com社が提供するCRM/SFAアプリケーションシステムです。
クラウド型のアプリケーションのため、導入の際にサーバー構築は不要です。
インターネット環境があれば、パソコンからでもスマホからでも簡単にアクセスし利用出来ます。
Salesforceには営業支援向けの「Sales Cloud」やカスタマーサポートサービス向けの「Service Cloud」など、様々な用途に向けたメインツールがあります。
また、Salesforceの機能を拡張するサブツールも充実しており、社内情報共有SNSツールである「Chatter」やデータ分析ツールの「Einstein Analytics」などが用意されています。
Salesforceを導入する際には、まず用途に応じたメインツールを選択後、必要に応じてサブツールを取り入れて機能拡張するという流れが一般的です。
※「Chatter」は選択するメインツールによっては予め搭載されているケースもあります。
Salesforceはノンプログラミングで開発を行える部分が多く、簡単なレイアウトの変更や入力制御などはGUIベースで行うことが可能です。
それ以上に複雑な処理や標準とは全く異なるレイアウトなどを実現するには、以下のツール・言語を利用して開発を行います。
① Lightning コンポーネントフレームワーク:AngularJS や React と似た UI 開発フレームワーク
② Apex : Java のような構文を持つ Salesforce 独自のプログラミング言語
③ Visualforce : HTML によく似たコードを使用してカスタムの Salesforce ページを作成できるマークアップ言語で、Apex と JavaScript の強力な組み合わせも利用可能
【参照:Trailhead Salesforce言語によるコーディング 】
これまでの研修でJavaの基礎を学んできた身としては、やはりApexが気になるところ…。
実は公式のドキュメントでJavaとApexの違いをまとめてくれているのですが、個人的に後々開発で引っ掛かりそうだなと思ったところを少しだけ噛み砕いてみたいと思います。
①内部クラスについて
以下は、Javaでstaic内部クラスを扱う簡単な例です。
// 外部クラス class Outer { // static内部クラス public static class Inner { public void testMethod() { //処理 } } } public class Main { public static void main(String[] args) { // static内部クラスインスタンス生成 Outer.Inner ic = new Outer.Inner(); ic.testMethod(); } }
これと同じようにApexでも内部クラスにstatic修飾子を付けると、エラーが発生します。
// 外部クラス public class OuterClass { //内部クラス public static class InnerClass { //Error } }
Error: コンパイルエラー: 行 4、列 25 でstatic is not allowed on classes
という訳で、staticなしで記述してみます。
// 外部クラス public class OuterClass { //内部クラス public class InnerClass { } } public class Main { //static修飾子がついている場合と同じようにインスタンス化できる OuterClass.InnerClass ic = new OuterClass.InnerClass(); }
Javaであれば、内部クラスにstatic修飾子が付いていない場合は、外部クラスインスタンスを生成した後で外部クラスオブジェクトから内部クラスインスタンス生成というような流れになりますが、まるでstatic修飾子がついているかのように内部クラスのインスタンスを生成出来ました。
このように、 Apexの内部クラスはデフォルトでstatic修飾子が付いている内部クラスと同様の動きをします。
続いて継承です。
まずはJavaで簡単な継承の例を見てみましょう。
//親クラス public class Sample { } //子クラス class Test extends Sample { }
Javaではこのような記述でクラスを継承することが出来ます。クラスの継承を禁止する場合はfinal修飾子を記述します。
しかし、Apexではデフォルトで継承を禁止する仕様となっているため、それを許可する修飾子を追記する必要があります。
//親クラス public virtual class Sample { } //子クラス class Test extends Sample { }
このように親クラスで「virtual」を宣言することで、そのクラスの継承を許可することが出来ます。
また、メソッドのオーバーライドを行う場合も同様に「virtual」修飾子を元のメソッドに付ける必要があります。
そして、オーバーライドする側のメソッドにも「override」を使用して明示的にオーバーライドを宣言します。
//親クラス public virtual class Sample { public virtual void action() { } } //子クラス class Test extends Sample { public override void action() { } }
Javaの勉強を進めていたお陰で、今まで理解が難しかったApexのコードがそこそこ読めるようになっていて嬉しい限りです。
標準機能と合わせて柔軟なシステム構築が出来るようになりたいものですね。
今回はここまでです。
有難うございました!