3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Phone Appli DevelopersAdvent Calendar 2019

Day 19

Neo4jを利用して日頃の感謝を目に見える形へ

Last updated at Posted at 2020-09-17

#Salesforceオブジェクトのリレーション関係をneo4jで視覚化する
前回のadventに利用したneo4jを実際のデータを使用して触ってみようと思います。
使用するものとしては、neo4j , Salesforce , Thanks Go , JavaScript

Salesforceとは

Salesforce(以下sfdc)はセールスフォース・ドットコム社が提供するクラウド型の営業支援(SFA)・顧客管理(CRM)システムです。
また、App Exchangeを通して様々なサードパーティアプリをアドオンすることが可能です。
今回は、サードパーティアプリのThanks Go(自社製品)を利用してThanks Cardを送り合った人間のリレーション図を作成していきたいと思います。

Thanks Goとは

セールスフォース上で、感謝の気持ちを贈りあうサンクスカードを実現。
同僚への「ありがとう!」が自然と飛び交うことで、同僚同士のエンゲージメントの向上と
見えづらい業務の可視化が可能です。
Thanks GO製品ページ

今回作成するもの

sfdc上のユーザーをneo4j上にnodeとして登録
Thanks Goからsfdcユーザー同士の感謝の関連性を取得、
それをneo4jのユーザーのnodeへ紐付ける。

SFDCから使用する情報の取得

はじめに、sfdc上の情報を取得します。
情報の取得方法は,SOQLと呼ばれるqueryをREST APIで実行して取得します。
参考ページ
実際のSOQLクエリは以下です。(フィルター条件は各自で設定してください。)
SELECT Id , Username , LastName , FirstName , Name FROM User

また、同様にThanks Goから投稿情報を以下のSOQLで取得します。

SELECT Id , CreatedDate , thanksgo_pa__MentionedUser__c , thanksgo_pa__PostedUser__c FROM thanksgo_pa__PeerBonusPost__c ORDER BY CreatedDate DESC Limit 2000

今回は人同士の繋がりのみ欲しいので thanksgo_pa__PostedUser__c , thanksgo_pa__MentionedUser__c(どちらもsfdcユーザーIDが入っています)を作成日の降順で取得しています。

neo4jにsfdcユーザーのnodeを作成する。

取得したユーザー情報をneo4jに以下Cyper queryで流し込みます。
Create (User${count}:Person{sf_id:"{sfdcユーザーID}",name:"${氏名}"})
結果が以下の画像になります。
スクリーンショット 2019-12-18 15.41.05.png

dummy[数字]のnodeがたくさん作成されていることが確認できます。
nodeの持つ情報は、sfdcユーザーIDと氏名情報(今回はdummyにナンバリングを付与しています)

thanks cardの送受信情報でneo4j上にリレーションを作成。

今回は、thanks cardの送受信を有効グラフで表現します。
また、複数の送受信があった場合は、リレーションにweightとして回数を付与します。

既にリレーションが存在する場合と、存在しない場合を以下Cyper queryで区別し存在する場合には重みを1追加します。

match (n:Person{Id:"{送信者のセールスフォースID}"})-[r:thanks_to]->(p:Person{Id:"${受信者のセールスフォースID}"}) set r.weight=r.weight+1 return r

neo4jでリレーションが作成されていない場合は以下が実行されるよう実装を行います。

match (n:Person{Id:"{送信者のセールスフォースID}"}),(p:Person{Id:"{受信者のセールスフォースID}"}) create (n)-[r:thanks_to{weight:1}]->(p)

最終的に作成されたリレーション図がこちらとなります。
全てを出力するととても多くなるので自分を中心に出力しています。
MATCH p=(n:Person{Id:"{自身のsdcユーザーID}"})-[r:thanks_to]->() RETURN p LIMIT 25
スクリーンショット 2019-12-18 15.51.17.png

また、重みが多い順(親密度順??)に出力することもできます。
MATCH (n:Person{Id:"00510000007qfblAAA"})-[r:thanks_to]->(p) RETURN n.name,r,p.name Order by r.weight desc
スクリーンショット 2019-12-19 9.14.42.png

最後に

neo4jを使用することでグラフィカルに感謝の関連性を出してみましたが、
リレーションにコメント情報を付与して特定のエキスパートなどを検索なども出来そうで、
色々とやれそうなことがありそうかと思いました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?