2016-09-20 2 views
0

Итак, моя конечная цель для этого проекта - создать контакт и случай для каждого клиента, который регистрирует продукт на странице регистрации гарантии на компании.Salesforce APEX Auto Создать контакт с футляром

У меня уже есть скрипт python, который подключается к базе данных MySQL и сохраняет необходимую информацию в файл .xlsx, а затем еще один скрипт python, который в настоящее время отправляет те же данные из файла .xlsx в salesforce, и работает для случая ИЛИ Contact, но не оба. Триггер Apex работает только в том случае, если я на самом деле выполняю привязку к сети или по электронной почте, но по какой-то причине не работает с python.

Это будет что-то, что будет запускаться примерно каждые 6 часов на неопределенный срок. Я уже установил, что он не вытаскивает одни и те же данные дважды из базы данных, поэтому он захватывает новые контакты из базы данных 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='testEm[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!'); 
} 
} 
+0

Я смущен на ваш вопрос. Вы пытаетесь заставить свои методы тестирования работать с данными, которые уже существуют в вашей базе данных, или вы спрашиваете, почему триггер не работает, когда он не запускается методом тестирования. Не могли бы вы предоставить код запуска или некоторый дополнительный контекст? Если вы хотите, чтобы ваш тестовый метод имел доступ к вашим существующим контактам/делам, вам нужно добавить флаг «@isTest (SeeAllData = true)» [https://developer.salesforce.com/docs/atlas.en-us. apexcode.meta/apexcode/apex_testing_seealldata_using.htm] –

+0

Итак, тестовый класс выше работает с триггером, но работает только тогда, когда был создан случай с [email protected], Джон Доу и субъект - Обратная связь - Что-то. Я пытаюсь сделать так, чтобы триггер работал для всех случаев с заполненным Поставляемым Email, а не только с тестовой версией с той предопределенной переменной John Doe. Я получил триггер и класс из: https://developer.salesforce.com/page/Autocreating_Contacts_From_Web_To_Case –

+0

Хорошо. Так вы говорите, что работает только тестовый класс или работает только триггер, когда у случая есть адрес электронной почты [email protected] и назовите его как John Doe? Код запуска полностью агностик для ввода. Каков ваш метод тестирования для случая с другим адресом электронной почты? –

ответ

0

Я получил его на работу.

Итак, я создал контакт как я уже работал с Simple-Salesforce, а затем использовал пакет Selenium в Python для открытия локального веб-файла html, размещенного локально, и отправки данных с листа .xlsx и отправки. Подтверждено, что он создает случай для каждого клиента в листе .xlsx, и подтвержденный salesforce связывает контакт и дело друг с другом.

Смежные вопросы