小白Salesforce--对object中数据进行简单处理?
在Salesforce中,常常要对各种数据进行处理,已满足业务逻辑。本篇文章会介绍如何实现从object获取数据,然后将取得的数据进行一系列简单处理。
第一步:SongName__c 是一个新建的object,向SongName__c object中插入数据:
/*向表SongName__c插入101条数据*/ public List<SongName__c> CreateData(){ List<SongName__c> songName = new List<SongName__c>(); for(Integer i=0; i<101; i++){ SongName__c a = new SongName__c(Song__c = '歌曲' + i,Contact_email__c ='wicky@sina.com',password__c ='19920122', usage__c = i+100, Active__c = true); songName.add(a); } try{ insert songName; } catch(DmlException e){ System.debug('An unexpected error has occurred'+e.getMessage()); } SongName = [Select usage__c FROM SongName__c Where CreatedDate>=2016-10-22T00:00:00+08:00 and CreatedDate<=2016-10-27T00:00:00+08:00 ]; system.debug('插入SongName__c的数据========================'+SongName); return SongName; }
打印出SongName__c object中的usage__c字段:
14:02:31.2 (505595323)|USER_DEBUG|[59]|DEBUG|......SongName__c.........========================(SongName__c:{usage__c=100, Id=a002800000rlMrEAAU}, SongName__c:{usage__c=101, Id=a002800000rlMrFAAU}, SongName__c:{usage__c=102, Id=a002800000rlMrGAAU}, SongName__c:{usage__c=103, Id=a002800000rlMrHAAU}, SongName__c:{usage__c=104, Id=a002800000rlMrIAAU}, SongName__c:{usage__c=105, Id=a002800000rlMrJAAU}, SongName__c:{usage__c=106, Id=a002800000rlMrKAAU}, SongName__c:{usage__c=107, Id=a002800000rlMrLAAU}, SongName__c:{usage__c=108, Id=a002800000rlMrMAAU}, SongName__c:{usage__c=109, Id=a002800000rlMrNAAU}, ...)
第二步:从 SongName__c 表中获得usage__c 字段(Decimal)的值,并调用快速排序方法将usage__c 字段的值从小到大排序。
/*从Object SongName__c 获得数据,并将获取结果排序*/
public List<Decimal> getData(){
List<SongName__c> SongName=CreateData();
Map<Id, Decimal> SongNameMap = new Map<Id, Decimal>();
for (SongName__c sn: SongName ){
SongNameMap.put(sn.id, sn.usage__c);
}
Set <Id> SongNameKey = new Set<Id>();
List<Decimal> songnameValue = new List<Decimal>();
SongNameKey = SongNameMap.keyset();
for(String key: SongNameKey){
songnameValue.add(SongNameMap.get(key));
}
system.debug('GET的数据是======================='+songnameValue);
Quicksort.sortStatic(songnameValue);
system.debug('排序结果======================='+songnameValue);
return songnameValue;
}
快速排序方法:
public class Quicksort {
private List<Decimal> mNumbers;
private Integer mNumber;
public static void sortStatic(List<Decimal> values){
(new Quicksort()).sort(values);
}//main function
public void sort(List<Decimal> values) {
if (values ==null || values.size()==0){
return;
}
this.mNumbers = values;
mNumber = values.size();
quicksort(0, mNumber - 1);
}
private void quicksort(Integer low, Integer high) {
Integer i = low, j = high;
Decimal pivot = mNumbers[low + (high-low)/2];
while (i <= j) {
while (mNumbers[i] < pivot) {
i++;
}
while (mNumbers[j] > pivot) {
j--;
}
if (i <= j) {
exchange(i, j);
i++;
j--;
}
}
if (low < j)
quicksort(low, j);
if (i < high)
quicksort(i, high);
}
private void exchange(Integer i, Integer j) {
Decimal temp = mNumbers[i];
mNumbers[i] = mNumbers[j];
mNumbers[j] = temp;
}
}
第三步:取usage__c 中最大的3个值和最小的三个值取平均然后乘以常量,常量会以随机方法生成。将结果插入表CustomerUsage__c 的UsageIndex__c字段。
public void insertUsage(){
List<Decimal> songnameValue = getData();
sortNum=songnameValue.size();
system.debug('数组长度=================='+sortNum);
averge= (songnameValue[0]+songnameValue[1]+songnameValue[2]+songnameValue[sortNum-3]+songnameValue[sortNum-2]+songnameValue[sortNum-1])/6;
system.debug('平均值========================'+averge);
sum = randomNumber * averge;
system.debug('平均值乘以常量结果========================'+sum);
CustomerUsage__c customnerUsage = new CustomerUsage__c();
customnerUsage.UsageIndex__c=sum;
insert customnerUsage;
}
第四步:在结果插入CustomerUsage__c object 前,会触发一个Triggger,如果随机生成的常量值>0.5就发一封邮件出来,不大于0.5会抛出一个exception出来
1 trigger Nov_CustomerUsage_Before_Insert on CustomerUsage__c(before insert){ 2 List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>(); 3 for (CustomerUsage__c CU : Trigger.new) { 4 if (TestUsage.randomNumber != null&& TestUsage.randomNumber > 0.5) { 5 Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); 6 List<String> sendTo = new List<String>(); 7 sendTo.add('weiqi.wang@novartis.com'); 8 mail.setToAddresses(sendTo); 9 mail.setReplyTo('weiqi.wang@novartis.com'); 10 mail.setSenderDisplayName('Official Bank of Nigeria'); 11 List<String> ccTo = new List<String>(); 12 ccTo.add('weiqi.a.wang@accenture.com'); 13 mail.setCcAddresses(ccTo); 14 mail.setSubject('您定义的常量大于0.5'); 15 String body = 'Dear ' + ', '; 16 body += '您定义的常量大于0.5'; 17 mail.setHtmlBody(body); 18 mails.add(mail); 19 Messaging.sendEmail(mails); 20 } 21 if(TestUsage.randomNumber != null && TestUsage.randomNumber <=0.5){ 22 CU.UsageIndex__c.addError('您定义的常量不符合规定'); 23 24 } 25 26 } 27 }
完整代码:
1 public class TestUsage { 2 public static final Decimal randomNumber = Decimal.valueOf(Math.random());//生成一个随机常量 3 public Integer sortNum;//List长度 4 public Decimal averge;//平均值 5 public Decimal sum; 6 7 8 /*插入数据到Object customnerUsage*/ 9 public void TestUsage(){ 10 List<Decimal> songnameValue = getData(); 11 sortNum=songnameValue.size(); 12 system.debug('数组长度=================='+sortNum); 13 averge= (songnameValue[0]+songnameValue[1]+songnameValue[2]+songnameValue[sortNum-3]+songnameValue[sortNum-2]+songnameValue[sortNum-1])/6; 14 system.debug('平均值========================'+averge); 15 sum = randomNumber * averge; 16 system.debug('平均值乘以常量结果========================'+sum); 17 CustomerUsage__c customnerUsage = new CustomerUsage__c(); 18 customnerUsage.UsageIndex__c=sum; 19 insert customnerUsage; 20 } 21 /*从Object SongName__c 获得数据,并将获取结果排序*/ 22 public List<Decimal> getData(){ 23 List<SongName__c> SongName=CreateData(); 24 25 Map<Id, Decimal> SongNameMap = new Map<Id, Decimal>(); 26 for (SongName__c sn: SongName ){ 27 SongNameMap.put(sn.id, sn.usage__c); 28 } 29 30 Set <Id> SongNameKey = new Set<Id>(); 31 List<Decimal> songnameValue = new List<Decimal>(); 32 SongNameKey = SongNameMap.keyset(); 33 for(String key: SongNameKey){ 34 songnameValue.add(SongNameMap.get(key)); 35 } 36 system.debug('GET的数据是======================='+songnameValue); 37 Quicksort.sortStatic(songnameValue); 38 system.debug('排序结果======================='+songnameValue); 39 return songnameValue; 40 } 41 /*向表SongName__c插入101条数据*/ 42 public List<SongName__c> CreateData(){ 43 List<SongName__c> songName = new List<SongName__c>(); 44 for(Integer i=0; i<101; i++){ 45 SongName__c a = new SongName__c(Song__c = '歌曲' + i,Contact_email__c ='wicky@sina.com',password__c ='19920122', usage__c = i+100, Active__c = true); 46 songName.add(a); 47 } 48 49 try{ 50 insert songName; 51 } 52 catch(DmlException e){ 53 System.debug('An unexpected error has occurred'+e.getMessage()); 54 } 55 SongName = [Select usage__c FROM SongName__c Where CreatedDate>=2016-10-22T00:00:00+08:00 56 and CreatedDate<=2016-10-27T00:00:00+08:00 ]; 57 58 system.debug('插入SongName__c的数据========================'+SongName); 59 return SongName; 60 61 } 62 63 }

浙公网安备 33010602011771号