You need to sign in to do that
Don't have an account?

トリガで親オブジェクトの値を更新したい
お世話になります。
初歩的な質問で申し訳ないのですが、
子オブジェクトにデータが挿入されたら、参照関係の親オブジェクトの項目の値を
更新するというトリガを作りたいのですが、
テストクラスを作成してもうまく動作してくれません。
原因が中々掴めずにいます。。。ご教授いただければと思います。
開発環境
Eclipse 4.2.2
api version 29.0
です。
コードは以下のとおりです。
apexトリガ
trigger SyousaiCreate on AAAA__c (after insert) {
List<AAAA__c> values = Trigger.new;
AAAA__c value = values[0];
List<BBBB__c> InsertDatas = [SELECT Id, total_money__c from BBBB__c where Id = :value.BBBB_Relation__c];
BBBB__c InsertData = null;
if(InsertDatas.size() > 0){
InsertData = InsertDatas[0];
InsertData.total_money__c = InsertData.total_money__c + value.money__c;
Update(InsertDatas);
}
}
テストクラス
@isTest
private class testinsertSyosai {
static testmethod void testclass(){
AAAA__c InsertData_Syosai = new AAAA__c(BBBB_Relation__c = 'a001000000XXXXX' ,money__c = 5000);
insert(InsertData_Syosai);
}
}
※ BBBB_Relation__c が参照項目となっており、データは存在することを確認しています。
初歩的な質問で申し訳ないのですが、
子オブジェクトにデータが挿入されたら、参照関係の親オブジェクトの項目の値を
更新するというトリガを作りたいのですが、
テストクラスを作成してもうまく動作してくれません。
原因が中々掴めずにいます。。。ご教授いただければと思います。
開発環境
Eclipse 4.2.2
api version 29.0
です。
コードは以下のとおりです。
apexトリガ
trigger SyousaiCreate on AAAA__c (after insert) {
List<AAAA__c> values = Trigger.new;
AAAA__c value = values[0];
List<BBBB__c> InsertDatas = [SELECT Id, total_money__c from BBBB__c where Id = :value.BBBB_Relation__c];
BBBB__c InsertData = null;
if(InsertDatas.size() > 0){
InsertData = InsertDatas[0];
InsertData.total_money__c = InsertData.total_money__c + value.money__c;
Update(InsertDatas);
}
}
テストクラス
@isTest
private class testinsertSyosai {
static testmethod void testclass(){
AAAA__c InsertData_Syosai = new AAAA__c(BBBB_Relation__c = 'a001000000XXXXX' ,money__c = 5000);
insert(InsertData_Syosai);
}
}
※ BBBB_Relation__c が参照項目となっており、データは存在することを確認しています。
取引先と取引先責任者を例に説明させて頂きます。
最初にApexトリガーの処理はトリガーに直接書くのではなくHandlerクラスなどに書くようにすると管理しやすくなります。
Apexトリガー
Handlerクラス
大雑把ですがだいたいこんな感じです。
これで子オブジェクト(取引先責任者)が登録されたときに親オブジェクト(取引先)の値を変更して更新するという動きになります。
本題のテストクラスの方ですが、まずテストクラスでは組織に作られた既存のデータにはアクセスできないようになっています。
今回テストクラスが正常に実行できていないのは、親オブジェクトのデータをテストクラス内で用意していないことが原因と思われます。
テストデータの作成も含めてテストクラスの書き方はこんな感じになります。
テストクラス
これも大雑把な書き方をしていますが、テストクラスの処理はだいたいこんな流れになります。