tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Trailmojiアプリを試してみました

TwitterでDreamojiアプリが3.0にアップデートされてアプリ名もTrailmojiになったことを知ったのでさわってみました。

f:id:tyoshikawa1106:20190519105537p:plain

‎「Trailmoji」をApp Storeで

英語だけどアップデート履歴。(内容は読んでない。)
f:id:tyoshikawa1106:20190519105552p:plain:w300


トップにTrailmojiのタイトルが表示されてます。
f:id:tyoshikawa1106:20190519100543j:plain:w150


自分好みのアストロくんを作れる機能が追加されていました。髪型とか服装とか尻尾とか車椅子とか盲導犬?とかいろいろカスタマイズできます。
f:id:tyoshikawa1106:20190519105946p:plain:w150

※腕の部分だけカスタマイズが見当たらなかったけど服装と紐付いてるみたいでそこだけの変更はありませんでした。


つくったキャラクターはSaveで保存できます。
f:id:tyoshikawa1106:20190519110127p:plain:w150


複数アイコン保存できるみたいです。
f:id:tyoshikawa1106:20190519102010j:plain:w150


Save後はEditメニューから再度カスタマイズしたりDeleteメニューで削除したりできます。
f:id:tyoshikawa1106:20190519102121j:plain:w150


Shareメニューから画像を保存すると画像ファイルとしてデバイスに保存できます。Share→Copyの手順の場合はそのままTwitterやメッセージアプリの投稿欄に添付できるみたいです。


Twitterのハッシュタグ検索したらいろんな人が共有して盛り上がってました。
f:id:tyoshikawa1106:20190519110709p:plain:w150


なんとなくAndroidのドロイド君アプリを思い出して楽しかったです。

関連

SFDC:Trailhead - アドミニストレーター認定資格の更新 (Spring '19)の翻訳ミスっぽいやつについて

Trailheadで認定資格の更新ができるようになっていますが、そのモジュールのことで気になる話がありました。

システム管理者がマクロ内で指定できるマクロ実行時からの相対日時はどれですか?の課題でDの「分後」を選択して不正解となったのですがなぜでしょうか。


実際のチャレンジがこちら。
f:id:tyoshikawa1106:20190508235418p:plain


モジュール内の説明で相対日付で選択できるのは下記のようになっています。

  • 分後
  • 時間後
  • 日後
  • 週間後

f:id:tyoshikawa1106:20190508235548p:plain


1分後、1時間後、1日後、1週間後は選択できるけど、1ヶ月後、1年後は選択できませんということです。これでAとBは誤りとわかるのですが、CとDはどちらも正しいように見えます。確かに不思議と原文を見てみたところ、Dが誤りの理由がわかりました。

f:id:tyoshikawa1106:20190509000012p:plain

CがNowに対してDはTodayとなっています。相対日付は現在日時を基準に適用されるのでDの「from Today」という記述は誤りであると判断できました。モジュール内の説明の原文でもMinutes from nowとなっています。

f:id:tyoshikawa1106:20190509000212p:plain


ということで一見正解のように見えるDの「分後」は不正解と判断できました。・・・まぁきっと翻訳ミス的な感じですよね。。。

SFDC:TrailheadとTrailblazer Radio

ひさしぶりにTrailheadのサイトにアクセスしたらページのデザインとかいろいろ更新されていました。
f:id:tyoshikawa1106:20190505121147p:plain


ポチポチっと触ってみるとTrailblazer Radioというコーナーも追加されていました。
f:id:tyoshikawa1106:20190505121233p:plain

https://trailhead.salesforce.com/ja/podcasts

今公開されているのは下記の2つみたいです。

Admins Podcast

f:id:tyoshikawa1106:20190505121508p:plain

The Trailblazer’s Guide to Careers

f:id:tyoshikawa1106:20190505121554p:plain


TrailheadはSalesforceコミュニティの情報にアクセスできるポータルサイトのようにバージョンアップされているみたいです。

SFDC:Apex開発のメリット - 開発で実現できることと進め方について

前記事でApex開発のメリットについてまとめてみました。同じ項目更新処理でもノンコーディングでできることとApex開発で実現できることは異なりますという記事です。


今回はSalesforceでの開発でどのようなことができるかとコーディングの進め方を紹介します。(いろんなやり方がある中でのサンプルの一つぐらいで見てください。)

Apex開発で実現できること

Salesforceでの開発は大きく下記の内容となります。

  • Visualforce = 画面の開発
  • Apexトリガ = データ変更時に実行される自動処理の開発
  • Apexバッチ = データを一括更新する処理の開発
  • Apexスケジュールバッチ = Apexバッチを任意の時間に実行する処理の開発
  • Lightning Component = 画面に差し込める部品の開発


Apex開発の中でも画面の開発が達成感を得やすいので、画面開発の例を紹介します。
f:id:tyoshikawa1106:20190504070242p:plain

FORCE.COM GALLERY - YouTube

Apex開発の進め方

Apex開発の始め方や進め方については開発者ガイドやTrailheadを見ましょう。というのが一番信頼できる情報ですが、多少間違っていても大丈夫という人向けにプログラミング時の流れのサンプルを紹介します。

Visualforce


Apexトリガ


Apexバッチ

上記の動画の補足についてはこちら。


Lightning Componentは落ち着いたらやろうと思っていましたが数年たった今意外となくても大丈夫だったり、Lightning Web Componentという新たなバージョンが誕生したりしてあまり触っていない状況です。(開発できるようにはなっておいたほうが良いです。)

Apex開発時の考慮点

以前、開発者コミュニティのAdventCalendarに投稿しているので紹介します。


開発者界隈でよく出てくるGitとかバージョン管理とか試したいという人にはこちら。


とりあえず上記リンク先で実際に動かすことはできると思います。(頑張って調べたけど思ったより使う機会はなかったかも。)


今はSalesforce DXという公式の仕組みも公開されていてみんなそっちを使っているみたいなのですが、DXの方は全然勉強できていなくて、どこかで勉強しなきゃいけないなと思ってます。

その他の押さえておきたいポイント

Salesforce World Tour Tokyo 2016のミニセッションでお話させてもらったときの資料。テストクラスのアンチパターンとかCommunity Cloud開発の考慮点とかも紹介してます。

まとめ

Apex開発で実現できることと進め方についてはだいたいこんな感じのイメージです。開発を選択肢に含めることで実現できることが大きく増えるので、コーディングは敵と終わらせるよりは開発できる人を確保する方がメリットがあると思います。

SFDC:Apex開発のメリット - Apexトリガとワークフロールールの違いについて

最近「Apex開発はダメ。できる限り標準で。」や「コーディングは悪。メンテナンス性が落ちる。」という話をよく聞くようになった気がするのでApex開発のメリットとApexトリガとワークフロールールの違いについてまとめてみました。

実行順序について

データ作成時や更新時には下記の手順で処理が実行されます。

  • 古いレコードをデータベースからロード(または、新しい挿入の初期化)
  • 新しいレコードの値で古い値を上書き
  • システムの入力規則(商談商品を挿入する場合、システムの入力規則に加えてカスタム入力規則が実行されます)
  • すべての before トリガを実行(EE / UE のみ)★
  • カスタム入力規則
  • レコードをデータベースに保存(しかし、コミットされていない)
  • レコードをデータベースから再ロード
  • すべての after トリガを実行(EE / UE のみ)★
  • 割り当てルール
  • 自動応答ルール
  • ワークフロー ルール★
  • プロセス
  • エスカレーション ルール
  • 積み上げ集計数式の値の更新(存在する場合)
  • データベースのコミット
  • コミット後のロジック(メールの送信)

ワークフロールールの場合は入力規則の判定後に実行されますが、Apexトリガの場合は入力規則の判定前にbeforeトリガの処理でデータの更新処理を行うことができます。割り当てルールや自動応答ルールなどの前にも実行できるので業務フローに合わせて柔軟なデータの加工が可能となっています。

補足:beforeトリガとafterトリガの違いは下記のようなイメージ。
  • beforeトリガ = 作成or更新されたデータ自身に対して処理を行う。
  • afterトリガ = 作成or更新されたデータと関連するデータに対して処理を行う。

項目更新順序の制御について

ワークフロールールの場合、複数の項目自動更新処理があると項目自動更新アクションの実行順序は必ずしも担保されるわけではありません。
f:id:tyoshikawa1106:20190503102349p:plain

Apexトリガの場合は処理順序を細かく制御することが可能です。
f:id:tyoshikawa1106:20190503102545p:plain


特定の処理の合間に新たに処理を追加することが比較的容易となっています。またメンテナンス性を意識して開発することで作成/更新時にどのような処理が行われているかも順序立てて確認することができます。
f:id:tyoshikawa1106:20190503102915p:plain

テストについて

Apex開発でよく言われるのがテストクラスを開発しないといけないから不便ということがあります。更新処理が1つ2つしかないシンプルな機能しか用意しないのであればテストクラスの必要性は低いかもしれませんが、トリガにしろワークフローにしろ運用に合わせてどんどん機能拡張していくことになるはずなのでそのときに、既存機能に影響なく処理を追加できているかを判断する必要があります。


テストクラスが存在することで、設定作業時の考慮漏れ等にすばやく気づくことが可能になるのと、こうしたチェックの仕組みがないとちょっとした更新処理を行う際に動作チェックで一週間必要ですといった状況が発生するので、テストの仕組みを構築できるのはデメリットというよりはメリットの方が大きいと思います。


上記のメリット以外にもそもそも実装バグってる...ってときに開発者が自分で気づくきっかけになったりもします。

値変更後の処理実行について

ワークフロールールの場合、項目更新処理後の結果をつかって再度処理を行う場合は「項目変更後にワークフロールールを再評価する」にチェックを付けることで可能となっています。
f:id:tyoshikawa1106:20190503104112p:plain


この「項目変更後にワークフロールールを再評価する」ですが、再評価により更新処理としては2回実行されることになるので、例えば更新時にレコードを新規作成する処理が存在する場合、本来1件しか作成されないはずの部分が2件作成されてしまうといったケースが発生します。Apexトリガでも実装方法によっては似たような問題が発生してしまいますが、メンテナンス性をきちんと考慮して実装すれば、こうした問題を発生させずに複雑な機能を実現することができます。

まとめ

同じ更新処理でもApexトリガとワークフロールールではできることが異なります。業務に合わせて適切な処理を実装していくのであれば「Apex開発 = NG」という考え方はもったいないと思います。Apex開発が万能ということはありませんが状況に応じて適切に扱えば使いやすいシステムになると思います。


個人的には下記のように使い分けるのが良いと思います。

  • データ更新 = Apexトリガ
  • データ更新で最後に行いたい処理 = ワークフロールール(項目自動更新)
  • メール送信 = ワークフロールール(メールアラート)
  • Chatter投稿 = プロセスビルダー


実装内容によっては例外もけっこうあったりしますがだいたいこんな感じです。メール送信はApexから実行するよりもメールアラートから実行するほうが制限に引っかかりにくいです。Chatter投稿はApexで開発するのはけっこうきついと思います。

おまけ

最近「できるかぎり標準で」という意味が「ワークフローなどのノンコーディング = 標準」「Apex = 非標準」というニュアンスで使われている気がしますが、個人的には元々の「標準」の意味とは「リードや商談、ケース」といったSales CloudやService Cloudなどの機能を使おうという意味だった気がします。(数年前、SalesCloudなどの機能が今ほど充実してなかったときはForce.comライセンスでカスタムオブジェクトをメインに実装する方が多かったので。)


今は標準オブジェクトをベースにカスタマイズしていることでMarketing CloudやAnalytics Cloud、Einsteinの機能との連携も利用できるようになるのでカスタムオブジェクトメインよりも標準オブジェクトメインの方が結果的にメリットが大きくなってきています。(AppExchangeなどを利用する際にも標準オブジェクトの利用が前提のものが多々あります。)


必要に応じてデータ入力画面や自動更新の仕組みをApex開発で用意することで標準オブジェクトの仕組みを活用しつつ、ユーザにとっても操作のしやすいシステムを構築できるので、コーディング = 悪と片付けるよりは適切なタイミングでどんどん使っていったほうが、「かゆいところに手が届かないシステム」と言われなくて済むのかなと思います。

関連

SFDC:レポートグラフとマイナス値の表記

Classicでは値がマイナスの場合にグラフが自動で赤色で表示されます。
f:id:tyoshikawa1106:20190501143719p:plain


Lightning Experienceでは特に切り替わらないようです。
f:id:tyoshikawa1106:20190501143812p:plain


その他こうした設定もあります。
f:id:tyoshikawa1106:20190501143919p:plain

グラフに色をつけるには?

追記:並び順設定によってはClassicでマイナスでも色が変わらない仕様があるみたいです。