S.B.S. Salesforce技術ブログ

教えて921さん!

静的リソースを表示しよう!

こんにちは!mkです!
今回はどのように項目として静的リソースを表示するか
というところについて話していきたいと思います。

そもそも静的リソースとは


静的リソースはアーカイブ (.zip や .jar ファイルなど)、画像、スタイルシートJavaScript、その他のファイルなど、Visualforce ページ内で参照できるコンテンツのことです。
例えばSalesforceに会社毎のロゴが表示されてることがありますが、そのロゴも静的リソースを表示しているものになります。
ところでSalesforceのレコードは文字ばかりでどこに何があるかわからない、なんてことはありませんか?
そんな中、もし承認申請や商談のステータス、商品のカテゴリーなどを画像で表示出来たら便利だし、どういうレコードかわかりやすくなると思いませんか?
今回はそれを実際にやってみたいと思います!

静的リソースを表示してみよう


まずは表示する静的リソースを用意しましょう!
今回は承認ステータスの表示のために次の三つを用意してみました!

手順は次の通りです!
①設定を「静的リソース」をクイック検索する
②新規を押して静的リソースを保存する
※この時コミュニティサイトなど外部に公開する場合はキャッシュコントロールを公開にしてください

これで表示する静的リソースの用意が出来ました!
続いてこれを表示してみましょう!
①静的リソースを表示したいオブジェクトでカスタム項目を新規作成を始める
②データ型は数式項目のテキスト型を選択
③数式内に次の画像のように記載して項目を作成

以上です!
ちなみに静的リソースとしてzipファイルで登録して、その中身のリソースを表示することも可能で、その場合は数式でファイル名を指定する際に次の例のようにしてあげることで表示することが可能です!
例:folder.zipをstatic_resourceという静的リソースとして保存したときにzip内の画像ファイルpicture1.pngを表示する場合は以下のように指定
static_resource/folder/picture1.png)
あとはレイアウトやビューなどに設定すればばっちりです!

項目で静的リソースを表示するするメリットは
1.IMAGE関数でサイズも指定出来ること
2.caseなどで出力する画像が切り替えられること
です!
あまり難しいことをしなくても静的リソースの表示が出来るので、ぜひ皆さんもやってみてください!

【Apex】Apexの匿名実行をしてみた。

どうも、こんにちは。みつせです。
今回はAnonymousウィンドウでのApexの匿名実行を試してみたので
軽く紹介していきたいと思います。

Apexの匿名実行とは

ざっくり言うと、
・Apexクラスのファイル
・実行匿名ウィンドウ
に記述したプログラムを一時的に実行する機能です。
開発者コンソールのQuery Editorのプログラム版というか、なんというか
まぁ、そんな感じです。

こんな時に使う!
  • 作成したApexクラスを試しに実行する。(デバッグログを取る。)

  • 設定した時間外でバッチを実行する。

  • 簡単なDML処理を行う。(sandbox環境のあるオブジェクトのレコードを削除する。)

  • チェックポイントを使用してプログラム実行中の変数等の状態を参照できる(→これはまだやったことない!)

DML操作は一通りできますが
画面操作やデータローダの方が視認性は高いと思うので、おすすめはしません。
作成したApexクラスやApexバッチを実行しログを取得するためのツールであり
DML操作はおまけ程度の認識でいてください。

それでは、さっそくやってみましょう!

【実践】匿名実行してみる。

今回は、apexクラスを開発者コンソールから実行していきます。

0.apexクラスを作る

サンプルとして、以下のような文字列を返す簡単なクラスを作ってみました。

public class sampleApex {
    public string str{get;set;}
    
    public sampleApex(){
         method1();
    }
    
    public string method1(){
        str = '入った';
        system.debug('str = '+str);
        return str;
    }
}
1.Anonymousウィンドウを開く

開発者コンソールで
Debug >Open Execute Anonymous WindowをクリックするとAnonymousウィンドウが開く。(下図)
(ショートカットキーは"ctrl"+"E")
Anonymous

2.実行する

Anonymousウィンドウに下記のコードを書いてexecute!
この時、"open log"にチェックを入れると実行と同時にデバッグログを開きます。
"Execute Highlighted"をクリックすると指定したコード行のみを実行できるようです。

system.debug('ExecuteAnonymousから実行');
sampleApex demoApex = new sampleApex();
system.debug('demoApex = '+demoApex);
3.ログの確認

log
画面はログのみですが、プログラムを実行できているのが分かりますね。!

おわりに

トリガの実行や帳票出力のログを取るのに
わざわざレコードページに飛んで実行させていたんですが、
これを知って結構楽になりました。(ログを開いてくれるし)

今度、何かプログラム開発する時は
チェックポイントを活用してみようと思います。
設定作業に慣れるまでは苦戦しそうですが、
知りたい変数ごとにsystem.debug書いて文字列を確認するよりも
表形式で表示されている方が視認性が高まると思います。

個人的には、schemaクラスと合わせて使用して
グループやグループメンバーなどの
オブジェクトマネージャから確認できないオブジェクトの選択リスト値を確認するのに役に立ちそうとか思いました!
(当然、Devtoolなど外部のツールを使える時はそっちを使う方が便利ですが!)

これからも役に立ちそうなことを発信していくのでお楽しみに(?)
では、 では、 では、 では、 では、 では、 では、 では、 では、 では、

Apexを作成しよう!

こんにちは、Nambuです。今回はSalesforceの開発用言語であるApexについて説明したいと思います!今までにJavaや.Netなどの他の言語の経験がある場合は簡単な内容ですがそういった経験がない場合は少し難しいかもしれないので頑張ってついてきてください。

Apexとは

Apexは強く型付けされたオブジェクト指向プログラミング言語で、開発者Apexを用いることではボタンクリック、関連レコードの更新、Visualforceページなどほとんどのシステムイベントにロジックを追加することができます。Apexの特徴として「使いやすい」「データ指向」「正確である」「ホストされている」「マルチテナント型」「テストが容易」「バージョニング」されているなどがあげられます。

Apexを新規作成しよう

もしVisualforceの記事を読んで理解してもらえているのであればこの章の内容は余裕かもしれません。ここでは2種類のApexクラスの新規作成方法について紹介したいと思います。
1つ目は設定から作成する方法です。設定のホームからApexと検索し、Apexクラスを開きます。そして新規ボタンをクリックします。 するとクラスの編集画面が出てくるのでここにソースコードを入力します。実際には処理内容も記述しますがこの章では省略してアクセス修飾子とクラス名だけを書いてSaveをクリックします。 すると、先ほどつけたクラス名で作成されたのが確認できます。 2つ目は開発者コンソールから作る方法です。先ほどのApexクラスページの新規ボタンの横にある開発者コンソールボタンを押すか、右上の歯車マークから開発者コンソールをクリックします。 すると、新しいウィンドウで開発者コンソールが開くので、左上のFile、New、Apex Classの順でクリックします。 クラスの名前を入力するポップアップが出てくるので、入力してOKを押すと新規作成が完了します。

Apex classに処理を書いてみよう

それでは簡単なソースコードを見ながらApexの記述方法について説明していきたいと思います。
すぐに出てくるのはクラス変数です。変数を宣言するときは必ず「型+変数名」で記述します。StringとIntegerの部分が型でそれぞれ文字列型と整数型を意味しています。データ型はまだまだ沢山あるので気になる場合は以下のHelp記事を読んでみてください。 developer.salesforce.com

そして後ろに書かれたstrとnumが変数名になっています。
変数の後ろの{get;set;}はゲッターとセッターを宣言しています。Visualforce内で変数に読み書きをしたいときは通常getメソッドやsetメソッドを作らないといけませんが、{get;set;}の書き方で同じ宣言になるので大幅に省略することができます。
次のブレースで囲われた部分がメソッドになります。メソッドの宣言はJavaと変わらず「アクセス修飾子+返り値+メソッド名+(必要であれば引数)」です。今回は引数で受け取った二つの数字を計算する簡単な処理内容になっています。
メソッド内の処理にSystem.debug()という見慣れないメソッド呼び出しがあるかと思います。これはデバッグログにメッセージを出力するもので、Apexを書くようになったら絶対に使うことになると思います。使い方としてはJava でprint()やprintln()を用いたデバッグと同じです。 それでは今回作成したメソッドの動作を確認してみたいと思います。Apexの匿名実行を用いることで簡単に動作確認をすることができます。匿名実行に関してはまた別の記事があるのでそちらを参考にしてみてください。

sbs-sfdc.hatenablog.com

実際にアノニマスウィンドウから匿名実行をしてみてログを確認してみます。この時、System.debug()で出力したメッセージのみを見たいときはログ内のdebug onlyにチェックを入れます。ログからしっかりと計算が行えることが確認できます。


今回はこのくらいで、また会いましょう!

Visualforceを作成しよう!Ⅱ

こんにちは、Nambuです。今回も引き続きVisualforceについて説明したいと思います。前の記事ではVisualforeの簡単な説明と新規作成そしてStandardControllerについて話したので今回は他のコントローラについて話したいと思います。

sbs-sfdc.hatenablog.com

標準リストコントローラ

前の記事で説明した標準コントローラは1つのレコードを表示できるコントローラでした。対して標準リストコントローラは名前の通り複数のレコードをリスト表示することが可能です。このコントローラを使うときは<apex:page>の部分にstandardControllerだけでなくrecordSetVar="変数名"を書く必要があります。この変数にリストが格納され、実際に値を出力するときは<apex:pageBlockTable>などで変数をループさせて表示します。
また、標準リストコントローラにはページング機能用のメソッドが用意されています。1ページあたりのデフォルトレコード数は20件となっていて、用意されているメソッドのnextで次のページ、previousで前のページ、firstで最初のページ、lastで最後のページへ遷移することができます。1ページあたりのレコード数を変更したい場合やこれらの遷移以外の方法作成したい場合は後述するコントローラ拡張を使用します。

カスタムコントローラ

カスタムコントローラを使用するときは今までの2つとは異なりApexを用いてコントローラ用のクラスを作成しなければなりません。ApexはSalesforceが提供しているオブジェクト指向プログラミング言語で非常にJavaと似ています。今回はVisualforceの書き方を説明するのでApexクラスの詳細説明はまた次の記事にしたいと思います。
Visualforceでカスタムコントローラを使うときは<apex:page>の部分にController=”Apexクラス名”と書きます。また、Visualforce側でアクションや変数を使用するにはApexクラスで予めメソッドや変数を定義しておかないといけません。今回のApexクラスは1つのリストと値をセットするコンストラクタだけの単純なものになっています。

コントローラ拡張

最後に紹介するのはコントローラ拡張です。これは標準コントローラとカスタムコントローラの中間のような機能で、コントローラ拡張もApexクラスを作る必要はありますが標準コントローラも一緒に使用します。なので、コントローラ拡張はカスタムコントローラほどしっかり機能を作成する必要がなく、変数やメソッドを少し追加したいときなどに使います。コントローラ拡張するときは<apex:page>の部分にstandardControllerだけでなくextensions=”Apexクラス名”と書きます。また、コントローラ拡張は1つのVisualforceに複数定義することが可能で、その場合はextensionsの中にクラス名をカンマ区切りで羅列します。


今回はこのくらいで、また会いましょう!

メールテンプレートを作成しよう!

こんにちは、Nambuです。今回はメールテンプレートについて説明したいと思います。メールテンプレートを用いることで生産性やメッセージの一貫性を高めることができ、Salesforceの項目もメールに含めることができます。

メールテンプレートとは

メールテンプレートはSalesforceのシステムから送信できるメールの雛形を作成できる機能です。メールテンプレートにはClassicメールテンプレートLightningメールテンプレートの2種類があり、2つでは少しずつ性能が変わっています。作成したメールテンプレートはメールアラートや一括メール送信等様々なところで使用することができます。

メールテンプレートの設定方法

それではメールテンプレートを実際に作成しますが、初めにClassicメールテンプレートから行いたいと思います。
「設定」「ホーム」から「Classicメールテンプレート」を選択します。するとメールテンプレート一覧が表示されるので編集を行うときはアクションの所から編集を、新規作成なら新規テンプレートをクリックします。また、フォルダを切り替えるときは左上のフォルダの所から選択します。 次に作成するテンプレートの種別を選択します。4種類ありますがテキストが一番自由度が低く、Visualforceが一番自由度の高いテンプレートとなります。また、HTMLを使用する場合、事前にClassicレターヘッドを作成しておく必要があります。今回はテキストを選択して作成して行きます。 次に進むとメールテンプレートの記述画面に移動します。上の部分には「差し込み項目のルックアップ」というテンプレートに差し込み項目を入れるのを補助してくれるフォームがあります。「差し込み項目の種類」と「差し込み項目の値」を選択リストから選び、「差し込み項目値」に表示される値をコピーして件名や本文に貼り付けます。この時に差し込む項目に__rで繋いだリレーションは書けないので、もしそういった値が欲しい場合はオブジェクトに数式で項目を作成しておきます。 画面を下にスクロールするとメールテンプレートのプロパティと本文を記述する部分が出てくるので、必要情報を入力して保存します。 作成したメールテンプレートの動作を確認したいときは「テストの送信と差し込み項目の検証」を押します。 ボタンを押すとウィンドウが表れるので、受信者レコードをユーザ、リード取引先責任者から選びます。次に関連レコードとなるオブジェクトとレコードを選んで、送信先のメールアドレスを入力してOKを押すとメールが送られます。 実際にメールを確認してるとしっかりメールが送信されて作成した内容になっており、差し込み項目がレコードの値で置き換わっていることが確認できました。 次にLightningメールテンプレートを作成してみたいと思います。「アプリケーションランチャー」から「メールテンプレート」をクリックします。 するとメールテンプレートのリストビューが出てくるので、右上の「新規メールテンプレート」を押して新規作成をします。Lightningメールテンプレートは普通のレコードを作成するように作ることができます。 新規作成を押して画面が現れたらメールテンプレート名や保存先のフォルダなどを入力します。 そして、下にスクロールしてメッセージコンテンツを入力します。Lightningメールテンプレートの自由度はClassicメールテンプレートのカスタムと同じくらいになっています。差し込み項目を入れるときは右下にある{}マークの「差し込み項目の挿入」を押します。ClassicとLightning差し込み項目の書き方が異なるので注意が必要です。最後に右下の保存ボタンを押すことで完成です。 それでは実際に作成したメールテンプレートを使ってみたいと思います。あらかじめページレイアウトでアクションとしてメールを追加しておきます。すると、活動の中にメールが出てくるのでそこで送信者や宛先、BCCを設定します。 作成したテンプレートを読み込むにはメール入力欄の左下にある「テンプレートを挿入、作成、または更新」を押して挿入したいテンプレートをクリックします。そして、右下にある送信ボタンを押せばメールが送れます。


今回はこのくらいで、また会いましょう!

入力規則を設定しよう!

こんにちは、Nambuです。今回は入力規則について説明したいと思います。入力規則を使いこなせるようになると登録されるデータの質の向上に繋がります。

入力規則とは

入力規則は名前の通り入力されるデータに対するルールのことです。入力規則が設定されていると、レコードを保存するときに保存前に入力データが規則に書かれた基準を満たしているかどうかのチェックが行われます。そして、規則の条件式と比較してTrueが返ってきた場合は無効な値があるということになりエラーと判断され、保存できません。Falseが返ってきた時のみ保存できるようになります。
また、入力規則の注意点として1つのオブジェクトに複数の入力規則が設定されている場合、1つの項目でエラーとして引っかかったとしてもそこで止まるのではなく、他の入力規則もチェックされた後に全てのエラーメッセージが同時に表示されます。

入力規則の使い方

それでは実際に2つの入力規則を設定してみましょう。1つ目に作成する入力規則は取引先オブジェクトの住所(請求先)の国名への入力を日本、アメリカ、イギリスのみに制限するものです。2つ目に作成する入力規則は乗り物オブジェクトで納入日が入力されている場合は購入者も入力しないと保存できなくするものです。
まず、入力規則を設定するときはオブジェクトマネージャーで設定したいオブジェクトを開き、左のメニューバーをスクロールして入力規則を選びクリックします。すると、今までに作成した規則が表示されるので編集するときはルール名をクリックし、新規作成するときは右上の新規ボタンを押します。 新規を押すと設定画面に移動するので最初にルール名、有効のチェック、説明を入力します。実際にルール名を付ける時には後から見直す場合や他人が見る場合も何をしているのかわかりやすいように付けます。有効のチェックはオンにしておかないとせっかく作った規則が働きません。説明にはどのような動作をする入力規則なのかを記述します。 次にエラー条件式を設定します。1個目の条件は関数IF()を用いて作成します。BillingCountryの値が日本でもアメリカでもイギリスでもない時に条件式がTrueになるようにします。
自分の作成した式が構文的に正しいかどうかを判断するときにはエディターの左下にある「構文を確認」を押します。すると、問題がない時は「エラーが見つかりませんでした」と表示され、間違いがあるときはその箇所に応じたエラーメッセージが表示されます。ここで注意が必要なのはあくまでもこのボタンでチェックできるのは構文であり、自分の作りたい条件になっているかどうかを確かめてくれるわけではないということです。 項目を挿入するときはエディターの左上の「項目の挿入」を押して差し込みたい項目を選び、挿入を押します。もちろん項目名を覚えているのであれば挿入を使わずに直接打ち込んでも問題ありません。
また、入力規則を作成しているオブジェクトの項目だけではなく組織情報やユーザ情報などの項目を挿入することも出来ます。 演算子を挿入するときはエディター上にある「演算子の挿入」をクリックして任意の演算子をクリックします。 関数を挿入するときはエディターの右にある関数のリストから挿入したい関数を選択してクリックし、青い選択状態になったら「選択した関数を挿入」をクリックします。 条件式が設定出来たら最後にエラーメッセージと表示場所を設定します。このメッセージも分かりやすいものにしておかないと利用者がなんでエラーになったのかわからなくなってしまいます。
また、エラーメッセージを表示する場所を設定することも出来て項目を選べば実際にエラーが起きた項目のすぐ下にメッセージを表示することができます。 それでは実際にレコードを作成してみます。仮に今回の入力規則で許していない国名を入力すると保存ボタンを押したときに「問題が発生しました。」という吹き出しが出てきて保存が出来ず、先ほど設定した項目の下にエラーメッセージが表示されます。 次に入力規則で許した国名を入れると保存ができて、レコードも作成されました。 それでは続いてもう一つの入力規則も作ってみたいと思います。 今回の条件式では1で使ったIFとは別の関数であるNOT()とISBLANK()を使用します。NOT()はカッコ内のTrueをFalseにFalseをTrueに変換します。ISBLANK()はカッコ内の項目が空かどうか判断し、空であればTrueをそうでなければFalseを返します。
今回2つの入力規則で3種類の関数を使用しましたが、他にも使える関数はまだまだたくさんあります。種類と詳しい説明が知りたい場合は以下のHELPページを読んでみてください。

help.salesforce.com

help.salesforce.com

今回はエラーの表示場所を項目の下ではなくページ上部にして保存してみます。 すると、エラー入力の時に表示されるエラーメッセージの位置が先ほどの例とは異なることが分かると思います。その時の使い勝手によって適宜表示場所は使い分けましょう。


今回はこのくらいで、また会いましょう!

トリガーの作成をしよう#6~実際に書いてみよう~

こんにちは、Nambuです。今回も引き続きトリガについて説明したいと思います。#6では簡単な処理ながら実際にトリガを一緒に書いてみたいと思います。

トリガのよくある利用方法


まず、トリガを書く前にbeforeトリガとafterトリガそれぞれでどんな処理をやることが多いか紹介したいと思います。
before処理ではオブジェクトマネージャーの入力規則では設定できないような複雑な入力チェック(重複チェックやレコードをまたいだチェック)やレコードの紐づけをやることがあります。
次にafter処理ではレコードを追加、メール送信、WebAPIの実行(データの連携)などをやることがあります。

簡単なトリガを書いてみよう


それでは上記で上げたような複雑な処理ではないですがトリガを実際に書いていきたいと思います。具体的な処理内容としてはbefore処理では項目の値を上書きします。after処理では参照関係にある子オブジェクトのレコードを新規作成したいと思います。また、トリガを書くにあたって#5で説明したトリガハンドラのソースコードをテンプレとして利用したいと思います。 初めにbeforeの部分の処理について記述していきます。トリガクラスから引数を通して受け取った処理対象のレコードのリストで拡張for文を回します。このように拡張for文を利用することで処理しなければいけないレコード全てを対象に取ることができます。 次にこのfor文の中に処理を書いていきます。今回は項目の値を変更するという単純な動作なので項目の値を代入で編集します。 before updateの方にも同じように処理を書いていきます。ここで注意点ですが#3でも説明した通り、値を代入にて直接変更することができるのはデータを登録する前のbeforeトリガのみであり、もしafterトリガで同じような処理を行おうとする場合は、SOQLのupdate処理を記述する必要があります。 続いてafterトリガの処理を書いていきます。ここでは子オブジェクトのレコードを新規作成するので、新規作成したレコードを保存しinsertするために使うリストを用意します。リストを用意して一括でinsertするのではなく拡張for文の中で都度insert処理をしてしまうと簡単にガバナ制限に引っかかってします恐れがあります。 拡張for文の中では子オブジェクトの変数を新規に作り必要な項目に値を入れていきます。この時に参照関係を作るために処理対象のレコードのIDを参照項目に代入していきます。これはすでにデータが登録されているafterトリガだから出来るといえます。 そして、作ったレコードはあらかじめ用意したリストにしまっていき、メソッドの最後でinsertを行います。 after updateにも同じような処理を書いていき、次からは実際の動作の様子を見ていきたいと思います。 トリガの起動対象にしたオブジェクトにて新規レコードを作成します。項目にはそれぞれHatenaと入力しておいて保存を押します。 すると、作成されたレコードのbefore insertという項目の値が先ほど作ったメソッドの処理により書き換わっていることが分かります。 次に関連リストを見てみるとdoトリガオブジェクトに新しくレコードが作成されているのも確認できます。 続いて先ほど作成したレコードを編集して保存します。 するとbefore updateに記載した処理の通りに項目が上書きされます。 また関連リストを見てみるとafter updateによりもう一つレコードが新規作成されているのが確認できます。