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

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

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

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

Apex

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

Q&A

解決済

1回答

2058閲覧

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

yamaday0u

総合スコア2

Salesforce

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

Apex

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

0グッド

0クリップ

投稿2021/07/07 14:05

Salesforceを学び始めて1週間です。
タイトルの件で、3日間実装にチャレンジし続けているのですが、一向に解決できず、エラーメッセージを読んでもわかりません。
debugもできず困り果てています。​
どのようにApexトリガのコードを修正すれば望んだ機能が実装できるのか、皆様のお知恵をお借りしたいです。

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

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

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

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

##【発生している問題】​
試合オブジェクトで出場選手を入れてレコードを登録しようとすると「List has no rows for assignment to SObject」というエラーが出る。
イメージ説明

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

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

Apex

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

debugをしようにも以下のようなエラーが連発して、それすらままならず途方に暮れています。​

  • Illegal assignment from Contact to Id
  • System.StringException: Invalid id: 王城
  • Unexpected token 'game'.」

debugで試したコード​

Apex

1Contact contact = [SELECT Name FROM Contact WHERE Name='王城']; 2Game__c game = new Game__c(Player1__c = contact.Name); 3insert game;

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Contact contact = [SELECT Account.Name FROM Contact WHERE Name = :game.Player1__c LIMIT 1];

game.Player1__cはContactのIDになるので、Name = :game.Player1__cではレコードが取得できません。なので、contact変数はnullになります。

ちなみにすでにご存じかもしれないが、参照関係ではなく、主従関係でつくることで自動で子のレコード数をカウントしてくれる積み上げ項目を作ることができます。ただし、1オブジェクトに作れる主従関係の項目数に制限があるのでご注意ください。

投稿2021/07/07 14:32

comefigo

総合スコア1051

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

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

yamaday0u

2021/07/07 22:23

ありがとうがございます!ひとつ前に進むことができました!
comefigo

2021/07/08 00:15

解決されてよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問