Exception Salesforce.com InboundEmailHandler-未解决的异常

Exception Salesforce.com InboundEmailHandler-未解决的异常,exception,rtf,salesforce,Exception,Rtf,Salesforce,我目前在Salesforce上的InboundEmailHandler有问题。目前,我们将通过EmailHandler发送的所有电子邮件保存到一个名为通信日志的对象中,该对象在联系人和帐户之间链接。通信日志包含原始电子邮件的所有信息,包括收件人/发件人/抄送、主题、正文、附件等。有代码可以截断输入到字段中的数据长度,但在某些奇怪的情况下,会抛出异常,报告已超过通信日志中RTF字段(正文)的最大长度(32000)。几天来我一直在挠头,想弄明白这一点 以下是截断字段的位置: string trunc

我目前在Salesforce上的InboundEmailHandler有问题。目前,我们将通过EmailHandler发送的所有电子邮件保存到一个名为通信日志的对象中,该对象在联系人和帐户之间链接。通信日志包含原始电子邮件的所有信息,包括收件人/发件人/抄送、主题、正文、附件等。有代码可以截断输入到字段中的数据长度,但在某些奇怪的情况下,会抛出异常,报告已超过通信日志中RTF字段(正文)的最大长度(32000)。几天来我一直在挠头,想弄明白这一点

以下是截断字段的位置: string truncatedBody=GetTruncatedString(messageLog.Body_c,32000); messageLog.Body_c=truncatedBody

以下是截断方法: 公共字符串GetRunCatedString(字符串currentValue,整数maxLength) { string truncatedString=null

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

return truncatedString;

}文档在这方面是错误的,限制不是32000个字符,而是32000个字节,字符串存储在utf-8中,因此如果您有32000个字符串,那么如果字符串中有任何字符需要在utf-8中再存储2个字节,则将超过限制。可以使用blob对象获取存储字符串所需的字节数

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

您可能希望截断到32000个字符,然后根据超出限制的字节数开始截断其他字符。

我想您在调用
getRuncatedString(messageLog.Body\u c,32000)时已经遇到了问题。
。您正在向它传递一个字段,而不仅仅是一个包含真实原始电子邮件正文的字符串,如示例中的
email.plainTextBody
?在调用截断函数时,错误发生在哪一行,或者在截断之前,在哪一行首次为字段赋值?