0

ここに投稿されたソリューションに取り組んでいます: http://mysalesforcecode.blogspot.com/2012/09/how-to-copy-record-owner-from-cloning.html

ボタンとトリガーは期待どおりに機能しますが、テストで 2 番目のシステム アサートが原因でテストが失敗し続けます (元の所有者フィールドごとに商談所有者が保持されているかどうかをテストします。私は Apex の初心者なので、明らかに間違ったことをしています...そう願っています-ありがとう!

ボタン:

{!URLFOR( $Action.Opportunity.Clone,Opportunity.Id,     
[cloneli=1,opp11='Prospecting',opp12='10',opp9= 
TEXT(MONTH(Opportunity.CloseDate))+"/" 
+TEXT(DAY(Opportunity.CloseDate))+"/" 
+TEXT(YEAR(Opportunity.CloseDate)+1) 
])}&00NZ0000000kfYf={!Opportunity.OwnerId}&retURL={!Opportunity.Id}

トリガー(以下の回答ごとに更新):

trigger OwnerIdChange on Opportunity (before insert)
{
 for(Opportunity o : Trigger.new)
 {
  if(o.OriginalOwner__c != null)
     o.OwnerId = o.OriginalOwner__c;
 }
}

テスト クラス:

@istest
private class Opportunities_Test {

    static testMethod void Opportunities_Test1() {
    test.starttest();

      Profile p = [SELECT Id FROM Profile WHERE Name='Standard User'];
      User u = new User(Alias = 'standt', Email='standarduser@testorg.com',
      EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US',
      LocaleSidKey='en_US', ProfileId = p.Id,
      TimeZoneSidKey='America/Los_Angeles', UserName='standarduser@testorg.com');
      insert u;

      Profile s = [SELECT Id FROM Profile WHERE Name='System Administrator'];
      User u2 = new User(Alias = 'admin', Email='admin@testorg.com',
      EmailEncodingKey='UTF-8', LastName='Testing2', LanguageLocaleKey='en_US',
      LocaleSidKey='en_US', ProfileId = s.Id,
      TimeZoneSidKey='America/Los_Angeles', UserName='admin@testorg.com');
      insert u2;

     Account a = new account(Name = 'Test1');
     insert a;

     List <Opportunity> Opportunity;
            Opportunity O1 = new Opportunity();
            O1.ownerid = u.id;
            O1.accountid = a.id;
            O1.Amount= 1;
            O1.CloseDate = Date.today();
            O1.Name = 'Testing';
            O1.StageName= 'Prospecting';
            insert O1;

 Account b = new account(Name = 'Test2');
 insert b;

      List <Opportunity> Opportunity2;
        Opportunity O2 = new Opportunity();
        O2.accountid = b.id;
        O2.ownerid = u.id;
        O2.Amount= 1;
        O2.CloseDate = Date.today();
        O2.Name = 'Testing2';
        O2.StageName= 'Prospecting';
        O2.OriginalOwner__c= u2.id;
        insert O2;  


List<Opportunity> z = [SELECT Id, Ownerid, Name FROM Opportunity WHERE id= :O2.id];

 system.assertEquals(O1.ownerid, u.id);
 system.assertEquals(O2.OwnerID, u2.id);

     test.stoptest();          
    }
}
4

1 に答える 1

1

あなたのトリガー ロジックは少しクレイジーです。次のように変更してみて、異なる結果が得られるかどうかを確認してください。

trigger OwnerIdChange on Opportunity (before insert)
{
   for(Opportunity o : Trigger.new)
   {
      if(o.OriginalOwner__c != null)
         o.OwnerId = o.OriginalOwner__c;
   }
}

EDIT:以下のコメントによると、レコードを挿入して更新した後、レコードの更新された値を取得していないことも指摘する必要があります。商談レコードを再クエリし、返された値に基づいてアサートします。

于 2013-03-01T07:33:53.077 に答える