Salesforce 正在尝试清除ApexPages.Messages容器

Salesforce 正在尝试清除ApexPages.Messages容器,salesforce,visualforce,apex,Salesforce,Visualforce,Apex,我为这个冗长的问题道歉 背景: 我们有一个映射,基本上把一个物体上的场映射到另一个物体上的场。对象A到对象B。在对象A的触发器中,我们查看是否有到对象B的映射。如果有,我们加载对象B记录并将值从A中的特定字段复制到B中的字段。在复制完所有副本后,我们更新B 我们对B的更新进行了一次尝试捕获,以捕获任何异常。我们面临的问题是,异常是从Salesforce验证而不是自定义验证规则引发的,并自动创建消息。例如,有人输入123.45,对象b中试图传输到的字段格式为2.0。这将为无效范围生成DML异常。这

我为这个冗长的问题道歉

背景: 我们有一个映射,基本上把一个物体上的场映射到另一个物体上的场。对象A到对象B。在对象A的触发器中,我们查看是否有到对象B的映射。如果有,我们加载对象B记录并将值从A中的特定字段复制到B中的字段。在复制完所有副本后,我们更新B

我们对B的更新进行了一次尝试捕获,以捕获任何异常。我们面临的问题是,异常是从Salesforce验证而不是自定义验证规则引发的,并自动创建消息。例如,有人输入123.45,对象b中试图传输到的字段格式为2.0。这将为无效范围生成DML异常。这很好。问题是Salesforce还在apexPages.Messages容器中添加错误。因此,如果页面上有一个,它将显示Salesforce错误

这有两个问题。 1.这条消息对用户并不友好。 2.消息包含对象B上字段的字段标签,而不是对象A上的字段。此上下文中的用户将不知道该字段是什么,并且由于他们填写的页面上可能有100个字段,他们可能无法跟踪该字段

我更希望SF不会自动添加消息,允许我捕获异常并格式化消息。但我看无论如何都不能阻止SF创建消息或清除消息容器,以便我们可以添加自己的消息

有没有办法阻止Salesforce自动添加邮件,或者在不刷新页面的情况下清除apexPage.Messages

编辑以显示快速示例代码:

list<Contact> contacts = [Select id,Email from Contact where id='someSFId'];
contacts[0].email = 'badEmail';
try{
    update contacts;
}
catch(Exception ex)
{
    System.debug(Apexpages.hasMessage());
}
list contacts=[Select id,Email from Contact,其中id='someSFId'];
联系人[0]。电子邮件='badEmail';
试一试{
更新联系方式;
}
捕获(例外情况除外)
{
debug(Apexpages.hasMessage());
}
您将看到调试结果将为真,即使我没有添加消息

希望这对任何人都有帮助

   List<ApexPages.Message> msgs = ApexPages.getMessages();
    for(ApexPages.Message message : msgs ){
       // get the object A field label from maaping 
       // construct custom error message/ replace field label string
    }

List

这是由触发器处理还是由visualforce控制器处理,还是两者的混合处理?为什么不使用try/catch语句来捕获特定类型的异常并在那里精心编写消息呢?谢谢您的帮助,但这不起作用,因为您无法替换现有消息。您甚至不能更新,只能添加到messages容器中。因此,如果通过编写的循环添加一条消息,它将只显示现有的消息和新的自定义消息。我发现唯一的解决办法是删除它,并用完全自定义的消息替换它。但这让我们很容易错过一个潜在的意外例外。