Salesforce API: как идентифицировать дело по ссылочному коду электронной почты («[Ref: ...: Ref]»)? - PullRequest
1 голос
/ 26 июля 2011

Я пишу службу Windows, которая будет опрашивать мой почтовый ящик IMAP4 на наличие писем от клиентов и создавать на их основе новые Случаи в Salesforce.

Иногда приходят электронные письма с кодом ссылки в теме. Пример: "[ref: 00FFwxyz.500FFJJS5: ref]". Я хотел бы назначить такие электронные письма существующему делу, указанному в коде, а не создавать новое.

Мои вопросы: Существует ли окончательная формула для извлечения уникального идентификатора Case из кода ссылки? Я видел несколько формул, которые делают обратное, но все они выглядят как догадки: * Запись блога на KnowThyCloud.com , Обсуждение на форуме Force.com .

Ответы [ 3 ]

3 голосов
/ 26 июля 2011

Нашли достаточно приличное решение.Я ошибся, назвав пост на KnowThyCloud.com догадки.В правильном контексте все работает нормально.

Мое решение заключается в создании нового настраиваемого поля в записи дела типа «Формула (текст)».Значение поля является формулой, упомянутой в сообщении в блоге:

TRIM(" [ ref:" + LEFT( $Organization.Id, 4) + RIGHT($Organization.Id, 4) +"."+ LEFT( Id, 4) + SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Id, RIGHT( Id, 4), ""), LEFT( Id, 4), ""), "0", "") + RIGHT( Id, 4) + ":ref ] ")

Теперь значение настраиваемого поля для каждой записи дела совпадает со ссылочным идентификатором в письмах, и я могу просто запросить его с помощьюSalesforce API.

2 голосов
/ 21 января 2012

Я реализовал решение Urig, и оно работает хорошо.

Вот решение Apex-кода, которое находит Case без этого поля.

String emailSubject = 'FW: Re: RE: order 36000862A Case: 00028936 [ ref:00D7JFzw.5007Ju10k:ref ]';
String caseNumber = null;
/*  
Extract the text after ref: and before the period. Could use this to locate the organization.
In the text after the period and before the :ref split into a 4 digit number and remaining number.
Insert 0's to get ref id.
*/  
String patternString = '.*ref:(.{8}).(.{4})(.+):ref.*';
Pattern thePattern = Pattern.compile(patternString);
Matcher matcher = thePattern.matcher(emailSubject);

if (matcher.matches()) {
    String caseId = matcher.group(2) + '000000' + matcher.group(3);
    Case[] matchingCases = [Select CaseNumber from Case where Id = :caseId];
    if(matchingCases.size() == 1) {
        Case theCase = matchingCases[0];
        caseNumber = theCase.CaseNumber;
    }    
} 
1 голос
/ 27 августа 2012

Я изменил приведенный выше фрагмент кода Яна, чтобы он поддерживал новую справочную строку, содержащую подчеркивания (например, _00DC0PxQg._500C0KoOZS).

String patternString = '.*ref:(.{11}).(.{5})(.+):ref.*';
Pattern thePattern = Pattern.compile(patternString);
Matcher matcher = thePattern.matcher(emailSubject);

if (matcher.matches()) {
    String caseId = matcher.group(2) + '00000' + matcher.group(3);
    system.debug('### '+caseId);
    Case[] matchingCases = [Select CaseNumber from Case where Id = :caseId];
    if(matchingCases.size() == 1) {
        Case theCase = matchingCases[0];
        caseNumber = theCase.CaseNumber;
    }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...