Salesforce 技术总结(全是干货,喜欢点个关注会持续跟新)

2024-01-05 02:40

本文主要是介绍Salesforce 技术总结(全是干货,喜欢点个关注会持续跟新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接

1、获取记录类型

        RecordType Type =  [select Id from RecordType where SobjectType = 'DocumentCompiling' and DeveloperName = 'BidDocumentation' limit 1];        

        Id  recordTypeId = Schema.SObjectType.对象API.getRecordTypeInfosByName().get('记录类型名').getRecordTypeId();//说一下这里,中文环境下记录类型Name才能用,否则会报错

        Schema.getGlobalDescribe().get(objectName).getDescribe().getRecordTypeInfosById().get(strRecordTypeId).getName();  //根据记录类型Id获取记录类型的名字

        Id rid = [select Id from RecordType where DeveloperName = 'Campaign' and sobjecttype ='DocumentCompiling__c'][0].Id;

2、计算两个日期之间的时间差

        TODAY() - DATEVALUE( CreatedDate )日期必须为标准工时

3、完整版REST services demo

        @RestResource(urlMapping='/Cases/*')
global with sharing class CaseManager {
    @HttpGet
    global static Case getCaseById() {
        RestRequest req = RestContext.request;
        String caseId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
        Case result = [SELECT CaseNumber, Subject, Status, Origin, Priority
                       FROM Case
                       WHERE Id = :caseId];
        return result;
    }
    /*
HttpGet步骤:
1、创建RestRequest类型的req对象(RestContext.request的返回值类型就是RestRequest)
2、通过req对象的requestURI属性利用字符串检索技术拿到caseId
3、创建Case对象result,并将通过caseId查到的记录赋值给该对象,注意“WHERE Id = :caseId”
4、返回Case对象
*/
    @HttpPost
    global static ID createCase(String subject, String status,
        String origin, String priority) {
        Case thisCase = new Case(
            Subject=subject,
            Status=status,
            Origin=origin,
            Priority=priority);
        insert thisCase;
        return thisCase.Id;
    }
    /*
HttpPost步骤:
1、声明并创建一个Case类型对象thisCase,并为该对象的标准字段赋值
2、将自定义对象插入到Case表中形成一条记录
3、返回一个新纪录的类型为ID的变量Id用于查找新纪录
*/
    @HttpDelete
    global static void deleteCase() {
        RestRequest req = RestContext.request;
        String caseId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
        Case thisCase = [SELECT Id FROM Case WHERE Id = :caseId];
        delete thisCase;
    }
    /*
思路:
要删除某一条记录首先要找到该记录,而方法可以是利用soql语言查找到某一记录的主码,这里是Id(使用rest服务请求获取到uri后从uri中取得的id)
HttpDelete步骤:
1、创建ResrRequest对象req
2、声明caseId,并将rest请求到的uri截取/后的值赋给该变量
3、利用soql语句查到Id = :caseId的那条记录
4、删除该记录
*/
    @HttpPut
    global static ID upsertCase(String id, String subject, String status, String origin, String priority) {
        Case thisCase = new Case(
        Id = id,
            Subject = subject,
            Status = status,
            Origin = origin,
            Priority = priority
        );
        upsert thisCase;
        return thisCase.Id;
    }
    /*
HttpPut步骤:
1、声明并创建一个Case类型对象thisCase,并为该对象定义标准字段赋值
2、将自定义对象插入到Case表中形成一条记录或者更新Id为id的记录
3、返回一个新纪录的类型为ID的变量Id用于查找新纪录
*/
    @HttpPatch
    global static ID updateCaseFields() {
        RestRequest req = RestContext.request;
        String caseId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
        Case thisCase = [SELECT Id FROM Case WHERE Id = :caseId];
        Map<String, Object> params = (Map<String, Object>)JSON.deserializeUntyped(req.requestBody.toString());
        for(String fieldName : params.keySet()) {
            thisCase.put(fieldName, params.get(fieldName));
        }
        update thisCase;
        return thisCase.Id;
    }
    /*
HttpPatch步骤:
1、创建RestRequest类型的req对象(RestContext.request的返回值类型就是RestRequest)
2、通过req对象的requestURI属性利用字符串检索技术拿到caseId
3、创建Case对象,并把按Id查到的Case表记录赋值给该对象
4、将请求获得的requestBody转化成字符串后,反序列化为对象强制转化为Map<String, Object>后赋值给Map变量params
5、遍历对象的key,并在通过id找到的Case对象thisCase中写入key-value
6、更新记录
7、返回记录的id
*/
}
/*
共性:
1、每个对象系统自带一个Id属性,它是系统自动分配的;
2、每一种Http方法均为global static
3、@HttpPut与@HttpPost的区别(upsert,insert)
*/

原文链接:Salesforce Apex 中常用技能总结(持续更新)_salesforce apex 赋值-CSDN博客

4、Apex中在使用类继承时需要使用到的关键字:

extends,super,virtual,override.跟Java继承不同的是,超类必须使用virtual修饰,子类使用override和extends修饰,如果需要重写父类的方法,父类中该方法需要用virtual修饰,子类需要使用override。另外如果子类需要使用超类的域或者方法则需要使用super关键字,注意构造方法的复用不需要用成对的virtual和override关键字修饰超类的构造方法和子类的构造方法。
原文链接:https://blog.csdn.net/Mrs_chens/article/details/103913966

5、MD5加密

String myString = 'Some String';//要加密的数据
Blob myBlob = Blob.valueOf(myString);
Blob md5hash = Crypto.generateDigest('MD5',myBlob);
System.debug(EncodingUtil.convertToHex(md5hash));//显示密文

6、Basic64转码

String uspastr = EncodingUtil.base64Encode(str );
 

7、图片压缩

// 创建 Image 对象
var img = new Image();
img.src = "image.jpg";
img.onload = function () {
  var _this = this;
  var canvas = document.getElementById("canvas");
  canvas.width = img.width;
  canvas.height = img.height;
  var ctx = canvas.getContext("2d");
  ctx.drawImage(_this, 0, 0, img.width, img.height);
  // 使用 toDataURL 方法压缩图像
  var dataUrl = canvas.toDataURL("image/jpeg", 0.5);
  // 使用新的 Data URL 更新图像
};

例子:

var maxSize = 100 * 1024; // 最大文件大小为100KB
var img = new Image();
img.src = "base64 or path";
img.onload = function () {
  const _this = this;
  var canvas = document.createElement("canvas");
  var ctx = canvas.getContext("2d");
  var width = img.width;
  var height = img.height;
  canvas.width = width;
  canvas.height = height;
  ctx.drawImage(_this, 0, 0, width, height);
  var quality = 0.8;
  let newBase64Image, resultBlob;
  do {
    newBase64Image = canvas.toDataURL("image/jpeg", quality);
    resultBlob = base64ToBlob(newBase64Image);
    quality -= 0.1;
  } while (resultBlob.size > maxSize && quality > 0.1);
};
 
// 将base64 转换为Blob
function base64ToBlob(base64) {
  var arr = base64.split(","),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
    type: mime,
  });
}

原文链接

如何使用js对图像进行压缩_js 图片压缩-CSDN博客

8、获取页面URL

Url.getSalesforceBaseUrl().toExternalForm()   

ApexPages.currentPage().getURL()//获取的完全链接

9、发邮件

public class EmailManager {
    // Public method
    public static void sendMail(String address, String subject, String body) {
        // Create an email message object
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        String[] toAddresses = new String[] {address};
        mail.setToAddresses(toAddresses);
        mail.setSubject(subject);
        mail.setPlainTextBody(body);
        // Pass this email message to the built-in sendEmail method 
        // of the Messaging class
        Messaging.SendEmailResult[] results = Messaging.sendEmail(
                                 new Messaging.SingleEmailMessage[] { mail });
        // Call a helper method to inspect the returned results
        inspectResults(results);
    }
    // Helper method
    private static Boolean inspectResults(Messaging.SendEmailResult[] results) {
        Boolean sendResult = true;
        // sendEmail returns an array of result objects.
        // Iterate through the list to inspect results. 
        // In this class, the methods send only one email, 
        // so we should have only one result.
        for (Messaging.SendEmailResult res : results) {
            if (res.isSuccess()) {
                System.debug('Email sent successfully');
            }
            else {
                sendResult = false;
                System.debug('The following errors occurred: ' + res.getErrors());                 
            }
        }
        return sendResult;
    }
}

10、Apex重置密码

system.setpassword(Userld, newPassword);

11、触发器
 

使用上下文变量
要访问导致触发器触发的记录,请使用上下文变量。例如,Trigger .new包含insert或update触发器中插入的所有记录。
Trigger.old提供在update触发器中更新之前的旧版本sObject,或 delete触发器中已删除的 sObject列表。当插入一条记录或通过API或Apex批量插入记录时,会触发触发器。因此,诸如Trigger.new 之类的上下文变量只能包含一条或多条记录。您可以遍历Trigger.new来获取每个独立的sObject。
 

变量

使用情况

isExecuting

如果 Apex 代码的当前上下文是触发器,而不是 Visualforce 页面、Web 服务或 executeanonymous() API 调用,则返回 true。

isInsert

如果此触发器由于插入操作,并从 Salesforce 用户界面、Apex 或 API 触发,则返回 true

isUpdate

如果此触发器由于更新操作,并从 Salesforce 用户界面、Apex 或 API 触发,则返回 true

isDelete

如果此触发器由于删除操作,并从 Salesforce 用户界面、Apex 或 API 触发,则返回 true

isBefore

如果在保存任何记录之前触发此触发器,则返回 true

isAfter

如果在保存任何记录之后触发此触发器,则返回 true

isUndelete

如果在从回收站恢复记录后触发此触发器,则返回 true。从 Salesforce 用户界面、Apex 或 API 执行取消删除操作后,会出现恢复记录的情况。

new

返回 sObject 记录的新版本列表。

此 sObject 列表仅在 insertupdate 和 undelete 触发器中可用,并且只能在 before 触发器中修改记录。

newMap

ID 到 sObject 新版本记录的映射。

此映射仅在 before updateafter insertafter update 以及 after undelete 触发器中可用。

old

返回 sObject 记录的旧版本列表。

此 sObject 列表仅在 update 和 delete 触发器中可用。

oldMap

ID 到 sObject 旧版本记录的映射。

此映射仅在 update 和 delete 触发器中可用。

operationType

返回与当前操作对应的 System.TriggerOperation 类型的枚举。

System.TriggerOperation 枚举的可能值包括:BEFORE_INSERTBEFORE_UPDATEBEFORE_DELETEAFTER_INSERTAFTER_UPDATEAFTER_DELETE 和 AFTER_UNDELETE。如果您根据不同的触发器类型改变编程逻辑,请考虑使用 switch 语句,该语句具有独特触发器执行枚举状态的不同排列。

size

触发器调用中包含的新旧记录总数。

12、触发器获取old的数据

Trigger.oldMap.get(objectId);

13、JSON数据的序列化与反序列化

比如String filedata = '[{"fileType":"123", "fileName":"Test", "fileContent":"123"}]';

JSON.deserialize( filedata,List<object>.class或者object.class );

(下班了,会持续更新)

=========================================================================

14、Switch语句

String waterLevel = 'empty';
  
//option 1 using a single value
switch on waterLevel {
    when 'empty' {
       

这篇关于Salesforce 技术总结(全是干货,喜欢点个关注会持续跟新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571408

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保