このプロジェクトの最終目標は、私の会社の保証登録ページに製品を登録する各顧客の連絡先とケースを作成することです。Salesforce APEX自動作成ケースからの連絡
私は既にMySQLデータベースに接続し、必要な情報を.xlsxファイルに保存し、次に同じデータを.xlsxファイルからsalesforceに送信する別のpythonスクリプトを保存しています。または連絡先であるが両方ではない。エイペックスのトリガは、私が実際にウェブからケース、またはEメールからケースを行う場合にのみ機能しますが、何らかの理由でPythonで動作しません。
これは、およそ6時間ごとに無期限にトリガーされるものになります。私はすでにデータベースから同じデータを2回取得しない場所にセットアップを行っているので、MySQLデータベースの新しい連絡先を各テーブルの新しい列に「1」を書き込んで取得し、「1」が存在するかどうかをチェックしますそうであればそれをスキップします。コンタクトとケースを作成する以外はすべて動作しています。顧客が製品のトラブルシューティングのために電話をかけたときに必要なすべてのアドレス情報が含まれるため、具体的に連絡します。製品とシリアル番号が取り下げられて顧客に送信されるため、ケースが作成されたら電子メール。
public class CaseAutocreateContactTest {
public static testMethod void testBulkContactsGetCreated() {
List<Case> newCases = new List<Case>();
for (Integer i = 0; i<100; i++) {
Case c = new Case(SuppliedEmail='[email protected]' + i,
SuppliedName='John Doe' + i,
Subject='Feedback - Something' + i);
newCases.add(c);
}
insert newCases;
System.debug('here');
List<Id> newCaseIds = new List<Id>();
for (Case caseObj:newCases) {
newCaseIds.add(caseObj.Id);
}
List<Case> updatedCases = [Select ContactId From Case Where Id in :newCaseIds];
for (Case caseObj:updatedCases) {
System.debug(caseObj.Id + ' ' + caseObj.ContactId);
System.assert(caseObj.ContactId!=null,'There should be no null contacts');
}
}
public static testMethod void testContactGetsCreated() {
Case c = new Case(SuppliedEmail='[email protected]',
SuppliedName='John Doe',
Subject='Feedback - Something');
insert c;
List<Contact> johnDoes = [select Id from Contact where Email='[email protected]'];
//there should be only 1 -- the trigger should not have created another
System.assert(johnDoes.size()==1, 'There should be one John Doe!');
Case caseObj = [select ContactId from Case where Id=:c.Id];
System.assert(caseObj.ContactId!=null,'There should be no null contact on the case');
}
public static testMethod void testNoDupesAreCreated() {
Contact cnt1 = new Contact(FirstName = 'John',
LastName = 'Doe',
Email='[email protected]');
insert cnt1;
Case case1 = new Case(SuppliedEmail='[email protected]',
SuppliedName='John Doe',
Subject='Feedback - Something');
insert case1;
List<Contact> johnDoes = [select Id from Contact where Email='[email protected]'];
//there should be only 1 -- the trigger should not have created another
System.assert(johnDoes.size()==1, 'There should be only one John Doe!');
}
public static testMethod void testEmailNameDoesntGetCreated() {
Case c = new Case(SuppliedEmail='[email protected]',
SuppliedName='[email protected]',
Subject='Feedback - Something');
insert c;
List<Contact> johnDoes = [select Id from Contact where Email='[email protected]'];
//there should be only 1 -- the trigger should not have created another
System.assert(johnDoes.size()==0, 'There should be no John Does!');
}
}
あなたの質問で混乱します。テストメソッドをデータベースに既に存在するデータで処理しようとしているのですか、またはテストメソッドによってトリガされていないときにトリガが機能しない理由を尋ねていますか?トリガーコードまたは追加のコンテキストを提供してください。テストメソッドが既存の連絡先/ケースにアクセスできるようにするには、 "@isTest(SeeAllData = true)"フラグ[https://developer.salesforce.com/docs/atlas.en-us]を追加する必要があります。 apexcode.meta/apexcode/apex_testing_seealldata_using.htm] –
上記のテストクラスはトリガーで動作しますが、ケースが[email protected]、John Doeおよびsubjectで作成された場合にのみ動作します。フィードバック - 何かです。私は、SuppliedEmailが記入されたすべてのケースでトリガーが働く場所にして、John Doeの事前定義された変数を持つテストだけではないことを目指しています。私はトリガーとクラスを持っています:https://developer.salesforce.com/page/Autocreating_Contacts_From_Web_To_Case –
Ok。あなたは電子メールアドレス[email protected]とJohn Doeという名前がある場合、テストクラスだけが動作するか、トリガーが動作すると言っていますか?トリガーコードは、入力に完全に無関係です。異なるメールアドレスを持つケースのテスト方法は何ですか? –