试图清除ApexPages.Messages容器

时间:2018-06-05 01:11:37

标签: salesforce visualforce apex

我为这个冗长的问题道歉。

上下文: 我们有一个映射,它基本上将一个对象的字段映射到另一个对象的字段。 Object_A到Object_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());
}

即使我没有添加消息,您也会看到调试结果为真。

2 个答案:

答案 0 :(得分:0)

希望这有助于任何人。

   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
    }

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_apexpages.htm

答案 1 :(得分:-2)

夏季18日之后,您可以在顶点测试Intro to Python docs

中清除顶点页面消息