日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

061_Apex 异常捕捉

發布時間:2023/12/6 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 061_Apex 异常捕捉 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Trigger 中的錯誤處理

在 Trigger 中,我們可以為進行操作的數據進行驗證,類似于驗證規則。如果遇到不符合條件的數據,可以通過 addError() 函數來將錯誤顯示給用戶,并記錄日志。

在如下代碼中,當一個“業務機會”對象被插入或更新之前,系統會檢查“金額”字段的值是否不小于1000。如果“金額”的數值小于1000,該“業務機會”記錄將不能被插入或更新。

錯誤信息的顯示適用于前端和后端:

  • 如果該記錄是從用戶頁面修改的,則用戶會看到錯誤信息
  • 如果該記錄是從 Apex 程序中被插入或修改,則錯誤信息會被記錄在日志中 trigger OppyMaxAmountTrigger on Opportunity (before insert, before update) {for(Opportunity opp : Trigger.New) {if(opp.amount < 1000) {opp.addError('Amount should not be less than 1000!');}} }

     Apex 例如如果在批量處理的過程中 出現的某一條Error處理方式:

  • public class LvOrderBy {public string fieldNameOrPath {set;get;}public string nullsPosition {set;get;}public string sortDirection {set;get;}private string nullsPosSOQL() {// Name ASC NULLS FIRST, Id ASC NULLS FIRST",if (nullsPosition!=null && nullsPosition!='') {if ('first'.equalsIgnoreCase(nullsPosition)) {return ' NULLS FIRST ';} else if ('last'.equalsIgnoreCase(nullsPosition)) {return ' NULLS LAST ';} else {throw new A('Invalid nullsPosition.[' + fieldNameOrPath + '], must be \'first\' or \'last\'');}} else {return '';}}

      

    public class A extends Exception {// 使用object類型作為參數,將其序列化作為message,// 方便與前段JS通信(JS可以解析message,從而細化錯誤消息) public A(object msg) {this.setMessage(JSON.serialize(msg));}}

      

?

?

例子:批量更新一批數據,其中個別數據是由validation 限制的,其余的都可以正常update,那么問題來了

1. 如何正常更新正確的數據;

2.如何正常更新正確的數據,并且log能獲取到哪條失敗的數據;

3.當其中有不滿足條件的就全部不更新;

4.當其中有不滿足條件的就全部不更新,并且頁面提示錯誤;

?

?

第一種情況:直接update goods;

這種屬于第二種情況;

for(Goods__c god : goods){ god.GoodsDescribe__c = 'Nice2';}try{update goods;}catch(Exception ex){ // system.debug(ex.getMessage()); }

?

這種屬于第四種情況

for(Goods__c god : goods){god.GoodsDescribe__c = 'Nice2';}try{update goods;}catch(Exception ex){// throw new MM(ex.getMessage()); }

  public class MM extends Exception {
  // 使用object類型作為參數,將其序列化作為message,
  // 方便與前段JS通信(JS可以解析message,從而細化錯誤消息)
  ? public MM(object msg) {
  ? ? this.setMessage(JSON.serialize(msg));
  ? }
  }

Visualforce Error MM: "Update failed. First exception on row 2 with id a007F000001FDheQAG; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, this is englist: [GoodsDescribe__c]" Error is in expression '{!Doit}' in component <apex:commandButton> in page guoqingpage: Class.Controller.Doit: line 20, column 1


第三種情況郵件提醒:
如果換成 ?sendEmail(ex.getMessage());

public void sendEmail(String Msg){
// Send Email to Admin
Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
message.setToAddresses(new String[] { 'guang@%%.com' });
message.setSubject('Group Upsert');
message.sethtmlBody('Error:'+Msg);
Messaging.sendEmail(new Messaging.Email[] {message});
}

?

assertEquals的用法:
Goods__c a = new Goods__c();a.Name = 'testScheduledApexFromTestMethod';insert a;System.assertEquals('testScheduledApexFromTestMethod1',[SELECT Id, Name FROM Goods__c WHERE Id = :a.Id].Name);

  

?? ? ? Database.upsert(goods,false); 這種寫法可以忽悠掉錯誤的數據而不終止insert,正常的數據還是可以插入的,忽略錯誤的;

?

?對Database.insert(List<SObject> sobjects, allOrNothing)方法中第二個參數的認識:
如果allOrNothing為false表示允許部分insert成功,如果true表示一有失敗全部操作失敗,項目中多用false。
實例:
List<Account> accList = new List<Account>{
? ? new Account(Name='ttt'),
? ? new Account()
};
Database.SaveResult[] srList = Database.insert(accList, false);
for(Database.SaveResult sr : srList) {
? ? if (!sr.isSuccess()) {
? ? ? ? // Operation failed, so get all errors? ? ? ? ? ? ? ??
? ? ? ? for(Database.Error err : sr.getErrors()) {
? ? ? ? ? ? System.debug('The following error has occurred.');? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? System.debug(err.getStatusCode() + ': ' + err.getMessage());
? ? ? ? ? ? System.debug('Fields that affected this error: ' + err.getFields());
? ? ? ? }
? ? }
}?

?

?

?

轉載于:https://www.cnblogs.com/bandariFang/p/9628373.html

總結

以上是生活随笔為你收集整理的061_Apex 异常捕捉的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。