Salesforce APEX 自动从个案创建联系人
Salesforce APEX Auto Create Contact from Case
所以我这个项目的最终目标是为每个在我公司的保修注册页面上注册产品的客户创建一个联系人和一个案例。
我已经有一个 python 脚本连接到 MySQL 数据库并将所需信息保存到 .xlsx 文件中,然后另一个 python 脚本当前发送相同的数据从 .xlsx 文件到 salesforce,它适用于案例或联系人,但不能同时适用于两者。 Apex 触发器仅在我实际执行网络转个案或电子邮件转个案时才有效,但由于某种原因不适用于 python.
这将无限期地大约每 6 小时触发一次。我已经将其设置为不从数据库中提取相同数据两次的位置,因此它仅通过向每个 table 中的新列写入“1”来从 MySQL 数据库中获取新联系人,并且检查“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='jdoe_test_test@doe.com' + 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='jdoe_test_test@doe.com',
SuppliedName='John Doe',
Subject='Feedback - Something');
insert c;
List<Contact> johnDoes = [select Id from Contact where Email='jdoe_test_test@doe.com'];
//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='jdoe_test_test@doe.com');
insert cnt1;
Case case1 = new Case(SuppliedEmail='jdoe_test_test@doe.com',
SuppliedName='John Doe',
Subject='Feedback - Something');
insert case1;
List<Contact> johnDoes = [select Id from Contact where Email='jdoe_test_test@doe.com'];
//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='testEmailNameDoesntGetCreated@doe.com',
SuppliedName='testEmailNameDoesntGetCreated@doe.com',
Subject='Feedback - Something');
insert c;
List<Contact> johnDoes = [select Id from Contact where Email='testEmailNameDoesntGetCreated@doe.com'];
//there should be only 1 -- the trigger should not have created another
System.assert(johnDoes.size()==0, 'There should be no John Does!');
}
}
我让它工作了。
所以我首先创建了一个联系人,就像我已经使用 Simple-Salesforce 一样,然后在 Python 中使用 Selenium 包打开本地托管的网络转案例 html 文件并发送数据来自 .xlsx sheet 并提交。确认它为 .xlsx 中的每个客户创建一个案例 sheet 并确认销售人员将联系人和案例相互关联。
所以我这个项目的最终目标是为每个在我公司的保修注册页面上注册产品的客户创建一个联系人和一个案例。
我已经有一个 python 脚本连接到 MySQL 数据库并将所需信息保存到 .xlsx 文件中,然后另一个 python 脚本当前发送相同的数据从 .xlsx 文件到 salesforce,它适用于案例或联系人,但不能同时适用于两者。 Apex 触发器仅在我实际执行网络转个案或电子邮件转个案时才有效,但由于某种原因不适用于 python.
这将无限期地大约每 6 小时触发一次。我已经将其设置为不从数据库中提取相同数据两次的位置,因此它仅通过向每个 table 中的新列写入“1”来从 MySQL 数据库中获取新联系人,并且检查“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='jdoe_test_test@doe.com' + 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='jdoe_test_test@doe.com',
SuppliedName='John Doe',
Subject='Feedback - Something');
insert c;
List<Contact> johnDoes = [select Id from Contact where Email='jdoe_test_test@doe.com'];
//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='jdoe_test_test@doe.com');
insert cnt1;
Case case1 = new Case(SuppliedEmail='jdoe_test_test@doe.com',
SuppliedName='John Doe',
Subject='Feedback - Something');
insert case1;
List<Contact> johnDoes = [select Id from Contact where Email='jdoe_test_test@doe.com'];
//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='testEmailNameDoesntGetCreated@doe.com',
SuppliedName='testEmailNameDoesntGetCreated@doe.com',
Subject='Feedback - Something');
insert c;
List<Contact> johnDoes = [select Id from Contact where Email='testEmailNameDoesntGetCreated@doe.com'];
//there should be only 1 -- the trigger should not have created another
System.assert(johnDoes.size()==0, 'There should be no John Does!');
}
}
我让它工作了。
所以我首先创建了一个联系人,就像我已经使用 Simple-Salesforce 一样,然后在 Python 中使用 Selenium 包打开本地托管的网络转案例 html 文件并发送数据来自 .xlsx sheet 并提交。确认它为 .xlsx 中的每个客户创建一个案例 sheet 并确认销售人员将联系人和案例相互关联。