Salesforce.com InboundEmailHandler - неразрешенные исключения - PullRequest
0 голосов
/ 28 января 2011

В настоящее время у меня проблемы с моим InboundEmailHandler в Salesforce. В настоящее время мы сохраняем все электронные письма, отправленные через EmailHandler, в объект, называемый журналом связи, который связан между контактами и учетными записями. Журнал сообщений содержит всю информацию из исходного электронного письма, включая / из / cc, тему, тело, вложения и т. Д. Имеется код для усечения длины данных, вводимых в поля, но в некоторых странных случаях создаются исключения, сообщающие о превышении максимальной длины (32000) поля RTF (тела) в журнале связи , Я пару дней чесал голову, пытаясь понять это.

Вот где поля усекаются: строка truncatedBody = GetTruncatedString (messageLog.Body_ c, 32000); messageLog.Body _c = truncatedBody;

Вот метод усечения: открытая строка GetTruncatedString (строка currentValue, целое число maxLength) { строка truncatedString = null;

if(currentValue != null)
{
    if(currentValue.length() > maxLength)
    {
        truncatedString = currentValue.substring(0,maxLength - 1);
    }
    else
    {
        truncatedString = currentValue;
    }
}

return truncatedString;

}

1 Ответ

0 голосов
/ 29 января 2011

Документы неверны, ограничение не 32000 символов, а 32000 байт, строка хранится в utf-8, поэтому, если у вас есть строка 32000 символов, она будет превышать ограничение, если у вас есть какие-либо символы в строке, которая требует еще 2 байта для хранения в utf-8. Вы можете использовать объект blob, чтобы получить количество байтов, необходимое для хранения строки.

Integer numBytes = Blob.valueOf(s).size();

Возможно, вы захотите усечь до 32000 символов, а затем начать обрезать дополнительные символы в зависимости от количества байтов, превышающих лимит.

...