#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:"${氏名}"})
結果が以下の画像になります。
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
また、重みが多い順(親密度順??)に出力することもできます。
MATCH (n:Person{Id:"00510000007qfblAAA"})-[r:thanks_to]->(p) RETURN n.name,r,p.name Order by r.weight desc
最後に
neo4jを使用することでグラフィカルに感謝の関連性を出してみましたが、
リレーションにコメント情報を付与して特定のエキスパートなどを検索なども出来そうで、
色々とやれそうなことがありそうかと思いました。