質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

Apex

Apexは、Salesforce上で動作するアプリケーション作成をサポートするアプリケーション開発プラットフォーム。プログラミング言語であるApexコードと、独自のApex WebサービスAPIなどで構成されています。

Q&A

解決済

2回答

2676閲覧

Apexトリガで、リレーションで関連づけられた取引先責任者を更新する方法について教えてください。その2

yamaday0u

総合スコア2

Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

Apex

Apexは、Salesforce上で動作するアプリケーション作成をサポートするアプリケーション開発プラットフォーム。プログラミング言語であるApexコードと、独自のApex WebサービスAPIなどで構成されています。

0グッド

0クリップ

投稿2021/07/07 22:29

編集2021/07/08 09:11

Salesforceを学び始めて1週間です。
タイトルの件で、3日間実装にチャレンジし続けています。
昨日別の質問を投稿して1つ前に進みましたが、相変わらず望んだ実装までは辿り着けず困っています。​
どのようにApexトリガのコードを修正すれば望んだ機能が実装できるのか、皆様のお知恵をお借りしたいです。

##​【前提】
オブジェクト​は以下の2つです。

  • 取引先責任者(Contact)
  • 試合(Game__c)

 取引先責任者オブジェクトにはカスタム項目として出場試合数(Game_c、データ型は数値)を追加しています。
試合オブジェクトには出場選手(Player1_c)​のカスタム項目があり、データ型は参照関係(取引先責任者)となっています。

##【実現したいこと】​
​試合オブジェクトで出場選手を入れてレコードを登録すると、取引先責任者オブジェクトの該当する出場選手が含まれるレコードの出場試合数(Game__c)が「+1」される。​

##【発生している問題】​
試合オブジェクトで出場選手を入れてレコードを登録しようとすると「Attempt to de-reference a null object」というエラーが出る。
イメージ説明

エラー文の意味はわかりますが、どのようにコードを修正すれば解決できるのかわかりません。

以下がApexトリガ(AddPlayedGameTrigger)のコードです。

Apex

1trigger AddPlayedGameTrigger on Game__c (after insert) { 2 for(Game__c game : Trigger.New) { 3 // Contactの出場試合数を更新する 4 Contact contact = [SELECT Game__c FROM Contact WHERE Id = :game.Player1__c LIMIT 1]; 5 contact.Game__c = contact.Game__c + 1; 6 upsert contact; 7 } 8}

debugしたところ、以下のデータが取得できました。

for(Game__c game : Trigger.New) { // Contactの出場試合数を更新する Contact contact = [SELECT Game__c FROM Contact WHERE Id = :game.Player1__c LIMIT 1]; system.debug(contact); contact.Game__c = contact.Game__c + 1; upsert contact; } debugで取得したcontactの内容↓↓ 18:07:16:007 USER_DEBUG [6]|DEBUG|Contact:{Id=0035h000007ENK6AAO}

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

下記のようにデバックコードを追加し、取得したデータを上記に追加して頂けませんか?

Contact contact = [SELECT Game__c FROM Contact WHERE Id = :game.Player1__c LIMIT 1]; // デバックしてみてください system.debug(contact); contact.Game__c = contact.Game__c + 1;

投稿2021/07/08 00:49

comefigo

総合スコア1051

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamaday0u

2021/07/08 09:09 編集

遅くなりすみません。 debugしたところ以下のデータが入っていました。 18:07:16:007 USER_DEBUG [6]|DEBUG|Contact:{Id=0035h000007ENK6AAO}
guest

0

自己解決できました!

取引先責任者オブジェクトのカスタム項目である出場試合数(Game_c、データ型は数値、初期値は0)は、サンプルの取引先責任者(選手)のデータを入れてから追加した項目でした。

そのため、出場試合数の項目を追加する以前に作られたデータには値が入っていなかったことが、エラーの原因でした。

新しく作成した取引先責任者(選手)のデータや、手動で0を追記した既存のデータに対しては、今回のApexトリガが無事に機能しました。

お知恵をくださったcomefigoさん、本当にありがとうございました!

投稿2021/07/08 12:44

yamaday0u

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

comefigo

2021/07/08 14:12

無事解決できてよかったです。 データ不整合だったんですね。よくあることですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問