見出し画像

Salesforceの活用:SES業でも使える!複数月契約がある業態における月ごとの売上管理方法!

こんにちは。肉球です。
春ですね。春生まれなのもあり、ぽかぽかして気持ちのいい春が大好きです。花粉さえ飛んでいなければ。。。
花粉がつらいのでゲームばかりやって休日を過ごしているのですが、最近今さらながらAPEX始めました。センスなさ過ぎて早くも飽きそうです。

APEXと言えば、Salesforceにもありますね、Apex。全然別モノだけど。
ということで、今回は久しぶりのSalesforceネタです。

SES業でSalesforceをうまく使うコツ

ソシオネットは中小企業へのDX推進の他、SES業も営んでいるのですが、Salesforceってこのような業種には、若干の使いにくさがあるんですよね。具体的に言うと、標準機能の「契約オブジェクト」ってあるじゃないですか。
一般的な会社さんであれば、必要に応じて項目のカスタマイズなどは行うと思うのですが、契約情報を入力してしまえば問題なく管理ができるイメージです。ただ、私たちのようなSES業界ではこのオブジェクトをそのまま使うのは難しいのです。

というのも、例えば4月のみの「1か月」の単月契約であれば問題ないのですが、すべての契約がそうとは限りません。
4月~6月までの「3か月」の契約期間で一つの発注を受けた場合、それぞれの月で超過減算などによる月ごとの請求額のバラつきが出てしまうことも多々あります。契約オブジェクトでは3か月分で1つのレコードになるので、それぞれの月でレコードを分けることができないのです。そうなってしまうと月ごとの実績をレポートで集計できず、数字の追いかけが難しくなるため、SES業ではミスマッチとなるのです。

そこで今回は、ソシオネットでどんな工夫をして月ごとの数字を管理しているのかを紹介します。

Apexで機能拡張すれば万事解決!

数か月の契約期間の発注分をひと月ずつのレコードにどうにか分けられないかしら、ということなんですが、残念ながら標準機能では難しいのです。なのでここではApexを使って機能の拡張をします。

弊社でのSalesforceの全体図にはなりますが、下図の右の赤枠部分が今回できたらいいな、の図です。
※下図でいう予算は「目標」、実績は「契約・請求管理」を指しています。


私たちのような業態でも、契約オブジェクトから契約・請求オブジェクトでレコードが自動生成され、さらにそれぞれのオブジェクトを紐づけることで、月ごとの予算・実績管理、請求管理が捗るので、こんなことも可能なんだよ~ということをお伝えできればと思います。

さて話は戻りまして、SalesforceにおけるApexとはなんぞや?という点について簡単にお伝えすると、Salesforceの機能を拡張する際に使用される、Javaに似た構文のオブジェクト指向のプログラミング言語です。

Apex は、開発者が Salesforce サーバでフローとトランザクションの制御ステートメントを API へのコールと組み合わせて実行できるようにした、強く型付けされたオブジェクト指向のプログラミング言語です。Java に似た、データベースのストアドプロシージャのように動作する構文を使用する Apex により、開発者は、ボタンクリック、関連レコードの更新、および Visualforce ページなどのほとんどのシステムイベントにビジネスロジックを追加できます。Apex コードは、Web サービス要求、およびオブジェクトのトリガから開始できます。

Apex とは? | Apex 開発者ガイド | Salesforce Developers


Apexで機能拡張していい感じにするにはどうすればよいのでしょう?ざっくりまとめてみました。

  1. 「契約オブジェクト」を親として、子となるカスタムオブジェクト「契約・請求オブジェクト」を作成する

  2. Apexトリガを作成する


今回みなさんに注目してほしいのは、Apexの機能拡張によって何ができるようになったか、なので細かい手順は省いて説明していきます。

いきなり本番環境ではなく、本番環境をコピーしたSandboxで開発・テストしていきます。Sandboxって何?という方はこちらから。
Sandboxes | Salesforce DX Developer Guide | Salesforce Developers

まずカスタムオブジェクト「契約・請求オブジェクト」を作成し、各項目の作成をしていきます。
オブジェクトの作成方法については皆さんご存知とは思いますが、こちらの記事で詳しく説明しているのでどーぞ!


次にApexトリガを作成します。Apexの開発については以下を参考にしてみてください。
Apex 開発プロセス | Apex 開発者ガイド | Salesforce Developers

では早速、月ごとの数字をうまく管理できるようにするために入力したコードを紹介いたします。

1 /**
2 * @name ContractTrigger
3 * @description 契約更新時のトリガークラス
4 **/
5 trigger ContractTrigger on Contract (after insert, after update) {
6
7 // 契約新規作成時
8 if (Trigger.isInsert && Trigger.New != null){
9 ContractHelper.triggerFlag = true;
10 ContractHelper.AfterInsert(Trigger.newMap);
11 }
12
13 // 契約更新時
14 if (Trigger.isUpdate && Trigger.New != null && !ContractHelper.triggerFlag){
15 ContractHelper.triggerFlag = true;
16 ContractHelper.AfterUpdate(Trigger.newMap, Trigger.oldMap);
17 }
18 }

このApexトリガを簡単に説明するとこんな感じです。

  • 「契約オブジェクト」で契約が新規作成されたら契約期間分のレコードが「契約・請求オブジェクト」にて自動生成され、「契約オブジェクト」の情報をもとにその他の関連するオブジェクトの情報を更新する

  • 「契約オブジェクト」で契約レコードが更新されたら、「契約オブジェクト」の情報をもとにその他の関連するオブジェクトの情報を更新する

  • トリガの実行の重複を回避する(1回のみの実行)


テストも忘れずに行いましょう。
契約を1件登録してみました。契約番号は00000566、4/1開始で3か月の契約期間になっています。

契約オブジェクト


契約・請求オブジェクト

先ほど作成した契約情報をもとに、契約番号00000566の3か月分の契約がそれぞれ1つずつのレコードとして自動生成されました。
これで月ごとの数字の管理が簡単にできるようになりました。


私たちと同業の方、同じような悩みがあってSalesforceをうまく活用できない!なんて方は標準機能だけではなく、Apexでの機能拡張も視野に入れてみるとよいかもです。ただ、少し難しい部分もあるのでお気軽にご相談いただけたらお手伝いさせていただきます!

ソシオネット株式会社について

IT内製化支援、Salesforceの運用・導入、および、DX化推進に関するご相談を承っております。


弊社では、ノーコード開発アプリを用いたIT内製化支援、Salesforceの運用・導入、および、DX化推進に関するご相談を承っております。お気軽に弊社お問い合わせサイトよりご相談などをお寄せいただければと思います。
ソシオネットHP:http://www.socionet.co.jp/
IT内製化支援支援サービス:https://socionet.co.jp/insourcing-support-service/
Salesforce最適化支援サービス:https://socionet.co.jp/salesforce-service/
DXサポーターズ特設サイト:https://socionet.co.jp/dx-supporters/
お問い合わせ:https://socionet.co.jp/contact/


Appsheet勉強会もやってるよ!

 弊社主催のAppsheet勉強会を毎月開催しております。2023年4月、5月開催分のお申込みはこちらからどーぞ!!毎月第二火曜日は初心者向け、第三火曜日は実践編を開催中です。

4/18(火)【毎月第3火曜開催】AppSheetでかんたんアプリ開発!~実践編~/途中入退場可 | Peatix

5/9(火)【毎月第2火曜開催】AppSheetを知ろう!+もくもく会/初心者歓迎/途中入退出可 | Peatix


ではまた次回~!




この記事が気に入ったらサポートをしてみませんか?