Salesforce 开发整理(九) 开发中使用的一些小技巧汇总[持续更新]
2024-09-27 11:37:04
1.查询一个对象下所有字段
当需要查询一个对象所有字段进行复制或其他操作,可以使用一段拼接的语句来查询
String query = 'select ';
for(String fieldApi : Schema.SobjectType.Opportunity.fields.getMap().keySet()){
if(fieldApi=='Id')
continue;
query += fieldApi + ', ';
}
query += 'Id from Opportunity';
System.debug(query);
2.获取记录类型的几种方式
//第一种
String recordType = Schema.SObjectType.Good__c.getRecordTypeInfosByName().get('中端品牌').getRecordTypeId();
system.debug('第一种:' + recordType);
//第二种:
List<RecordType> list_type = [Select id,Name,IsActive,DeveloperName FROM RecordType where Name = '奢侈品牌' and IsActive = true];
System.debug('第二种:' + list_type); //第三种
List<RecordType> list_type3=[select Id,DeveloperName,Name from RecordType where (DeveloperName='MiddleBrand' OR DeveloperName='extravagant')
AND SObjectType='Good__c'];
System.debug('第三种:' + list_type3); //第四种
List<RecordType> list_type2 = [Select Id,Name,DeveloperName From RecordType where sobjecttype = 'Good__c'];
System.debug('第四种:' + list_type2); //************************************************************************************************************ /*********
*
* @function
* 传入对象名,获取一个Map<对象记录类型id,对象记录类型名>
*
*
*/
public static Map<ID,RecordType> getObjectRecordType(String objectName){ Map<ID,RecordType> RecordTypeMap = new Map<ID,RecordType>([
SELECT
Id,DeveloperName
FROM
RecordType
WHERE
SObjectType =: objectName
]); return RecordTypeMap;
}
3.List<sobject>与JSON串的转换
String json_String = JSON.serialize(List<Opportunity> list_object);
List<Opportunity>)JSON.deserialize(String json_String, List<Opportunity>.class);
提供一个工具网站,将JSON自动转换成Apex类:JSON to Apex
4.BASE64位与MD5加密
// base64Encode:base64编码
String AccountId = 'X66666694292';
String mytime = Datetime.now().format('yyyyMMddHHmmss');
String authorizationHeader = EncodingUtil.base64Encode(Blob.valueOf(AccountId + ':' + mytime));
System.debug('authorizationHeader:' + authorizationHeader); //sig的值为 32位大写MD5加密 (帐号Id + 帐号APISecret +时间戳)
String sig = AccountId + APISecret + mytime;
String token = EncodingUtil.convertToHex(Crypto.generateDigest('MD5', Blob.valueOf(sig))).toUpperCase();
5.订单产品页面布局调整
调整标准的订单产品添加页面字段,调整后预览如下
修改订单产品页面布局右上方下的多行式项目布局即可
6.自定义标签提示错误信息
通过自定义标签创建一条提示消息
然后在trigger里面判断,如果不满足条件可以抛出这条错误消息。效果如下图
对应的代码,其实可以看到提示消息就是一个字符串,但是使用自定义标签能够支持配置提示消息。
trigger OpportunityTrigger on Opportunity (after insert) { if(trigger.isInsert && trigger.isAfter){
for(Opportunity opp:trigger.new){
opp.addError(Label.Opp_Machine_Approval);
}
}
}
7.自定义设置没有列表
在方案设置中开启列表类型
开启后预览效果
8.生成随机数
发现Salesforce没有比较顺手的随机数生成方法,自己写了一个功能函数备用
// @size 0-size范围的随机数
public static Integer getRandomNumber(Integer size){
return ((math.random()) * size).intValue();
} // @size 【lowerValue,upperValue】 范围的随机数
public static Integer getRandomNumber(Integer lowerValue,Integer upperValue){
return (math.random() * (upperValue - lowerValue + 1 ) + lowerValue).intValue();
}
9.自定义提交待审批按钮
按钮实现JS代码
{!REQUIRESCRIPT("/soap/ajax/35.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/35.0/apex.js")} var recordtype = '{!Opportunity.RecordType}';
var status = '{!Opportunity.ApprovalStatus__c}';// 审批状态
var stage = '{!Opportunity.StageName}'; if(recordtype != '需要的记录类型'){
alert('当前业务机会记录类型为:' + recordtype + '不能使用该审批!');
}else if(status == '审批中'){
alert('当前业务机会正在审批中,请耐心等待审批结果!');
}else if(status == '已通过'){
alert('当前业务机会已审批通过,请不要重复提交');
}else{
var request = new sforce.ProcessSubmitRequest();
request.objectId = "{!Opportunity.Id}";
var processRes = sforce.connection.process([request]);
if(processRes[0].getBoolean('success')){
alert("已提交报价审批,请等待审批完成!");
window.location.reload();
}else{
alert("提交审批错误:" + processRes[0].errors.message);
}
}
需要注意的,是保证对审批流条件的控制,虽然不做控制系统也会自动识别该选择那条审批流,但是这样没办法友好的提示用户有那些条件是审批必须要满足的
10 删除Chatter数据
List<FeedItem> list_feed = new List<FeedItem>([select id from FeedItem]);
delete list_feed;
11 正则表达式拆分中英文
String str = '123中文英文Englist通过正则@#!!进行&^%拆分';
System.debug('规格型号:' + str.replaceAll('[\u4E00-\u9FA5]',' '));
System.debug('名称:' + str.replaceAll('[^\u4e00-\u9fa5]',''));
拆分后预览
12 事件不超过24H限制解除
错误消息:
Duration must be between 0 and 1440 minutes - Salesforce Error - [FIELD_INTEGRITY_EXCEPTION]
最新文章
- Activiti学习(二)数据表结构
- log4jdbc 使用
- C++高精度计算代码运行时间(转载)
- IIS相关问题整理
- ahjesus约束方法或属性的调用方
- 【Python】函数总结
- IDEA Maven项目的Mybatis逆向工程
- 面向连接的TCP概述
- datasnap isapi程序iis设置
- flask 路由和视图
- CentOS系统下安装 LNAM环境
- ubuntu16.04 下 卸载CUDA9.1
- python ros 回充调用demo
- Apache Thrift - 可伸缩的跨语言服务开发框架 ---转载
- Atom中设置你的Snippet,atom技巧(二)
- 【2018.06.26NOIP模拟】T1纪念碑square 【线段树】*
- Python的7种性能测试工具:timeit、profile、cProfile、line_profiler、memory_profiler、PyCharm图形化性能测试工具、objgraph
- 【python模块】——logging
- CIA 读书笔记
- 2017-10-19 NOIP模拟赛