Peter's Blog

「用有趣的方式看世界」

在 VS Code 中使用 Apex Debugger

在我们的日常开发中,调试 apex 的最常见做法是使用调试日志. 然而, Salesforce 提供了对你调试代码很有用的一些其他方案. 可以像 Java, Golang, PHP 那样通过断点调试自己的code. Apex Interactive Debugger, 也叫 Apex Debugger, 允许客户使用VS Code作为客户端, 在沙盒和scratch orgs中实时调试他们...

在 Apex 中使用 JWT Flow

在之前的文章中介绍了什么是 JWT Token, 以及如何创建 JWT Token, 并通过 JWT Token 获取 Salesforce 访问令牌, 今天主要介绍如何在 Salesforce Apex 类中使用同样的功能. 目前 Salesforce 只支持Java Keystore(JKS)格式, 用于将私钥/公钥对(含证书)导入 Salesforce org 中. 将私钥/公钥对转...

Salesforce OAuth: JWT Bearer 流程

JWT Bearer Flow 是一种 OAuth 流程, 其中外部应用程序(也称为客户端)向Salesforce发送一个称为 JWT 的签名 JSON 字符串, 以获得一个访问令牌(access token). 然后外部应用程序可以使用该访问令牌来读取和写入 Salesforce 中的数据. 与其他一些 OAuth 流程不同的是, JWT流程不需要最终用户操作. 外部应用程序发送 JWT...

使用 MuleSoft Anypoint Studio 同步 Salesforce 数据至 Postgres

在本教程中, 我们将学习如何从在 Salesforce 中订阅 Change Data Capture(CDC)事件然后利用 MuleSoft 平台将数据同步至外部数据库(本示例为 Postgres). 本教程主要包括: 在 Salesforce 的联系人对象上发布一个 change data capture 事件 使用 Salesforce Connector 设置 Repla...

「译」Salesforce 中的执行上下文

本篇文章的译文内容节选自「Advanced Apex Programming - Fifth Edition」第一章的第一部分 - Thinking in Apex, 该书的作者是 Dan Appleman. 个人感觉这本书写的不错, 但是国内目前没有发现有中文版本, 所以就尝试着翻译这本书, 该书共有三大章节, 13个小节, 只在自己空闲的时间翻译一点, 目前第一章的进度大概在 70% 左...

探讨 Salesforce 中的 QA 自动化测试

当 Salesforce 于 2000年2月份首次推出 CRM 服务时, 它只是一个用于存储客户信息和跟踪销售机会的数据库. 如今, 它几乎无人不晓, 因为从销售和市场营销到运营和财务的各种部门都依赖 Salesforce 来推动业务发展. 现在,每个 ORG 都有自己独特的工作流程,自定义对象和众多第三方集成,以满足其业务需求.这些定制优化了流程和功能,但在没有测试自动化的情况下部署这些功...

Apex Trigger 中的递归调用现象

递归 Trigger 对 Salesforce 开发人员来说是个大问题. 我们总是希望在 Salesforce 中避免递归调用 Trigger. 但是, 如果我们有一个庞大的功能复杂的Org, 其中有多个带有父子关联的记录更新的触发器, 包括 Process builder 和 Workflow field updates等. 那么我们就会很容易面临递归调用 Trigger 的问题. 因此...

Apex 中的 Abstract, Virtual, Interface

Object-oriented programming (OOP) is a programming paradigm based on the concept of “objects”, which can contain data and code. The data is in the form of fields (often known as attributes or pr...

Salesforce DevOps Center 入门指南

DevOps Center是 Salesforce 在2022年6月发布的一个新工具.简单地说,这个工具允许你将元数据从一个Salesforce Org部署到另一个.例如,将自定义对象,Apex Class,Profiles等从沙盒部署到生产.传统上,我们使用Change Sets来执行这项任务. 目前较为常用的针对 Salesforce 项目部署方案有如下几种: DevOps C...

探讨 Salesforce DevOps Center

DevOps Center is all about change and release management and introducing DevOps best practices to our entire community, regardless of where you fall on the low-code to pro-code spectrum – Karen ...

使用 User Mode 保护你的 Apex 代码

我们知道, 在默认情况下, Apex 代码以系统模式(System Mode)运行, 这意味着它具有比运行代码的用户更高的权限, 因此在执行代码的时候将忽略当前用户的权限, 这样一来, 即使运行的用户没有访问某个对象的权限, 但他们也能访问该对象. 如果应用程序构建不当, 这可能对于数据库的记录来说是一个安全风险. 有人可能会删除记录,即使他/她对该对象没有删除权限. 这篇文章将解释用户模式...

理解 JavaScript 中的 Async/Await

async/await 是以更舒适的方式使用 promise 的一种特殊语法. 在 Salesforce 中, 如果你有开发过 lwc 相关的组件, 想必应该使用过 Async/Await 语法. 其实在 JavaScript 中做异步开发时,我们通常会毫不犹豫的使用 Async/Await. 不管是并发还是串行, Async/Await 都能处理的很好, 而且还保证了代码的可读性...

「译」代码重构的原则和意义?

译自: https://www.techtarget.com/searchapparchitecture/definition/refactoring 什么是重构? 重构是对代码进行重新组织的过程, 但不改变它的原始功能. 重构的目标是通过进行许多小的改变来改进内部代码, 而不会改变代码的外部行为. 计算机程序员和软件开发人员重构代码以改进软件的设计,结构和实现. 重构提高了代...

使用Google Cloud Function创建Salesforce数据

由于之前有接触过 GCP 和 Salesforce 集成相关的项目, 但是没有认真的了解过中间的实现细节, 那么今天这篇文章主要介绍如何在Google Cloud上创建一个Cloud Function并认证连接到Salesforce. 在本篇内容中, 我们的挑战主要包括: 创建一个 Google Cloud Function 使用Secret Manager在GCP中存储Sal...

浅谈 LWC 中的数据渲染

在 LWC 中, 如果一个属性的值发生了变化, 并且该属性在 tempalte 中有使用, 或者声明在一个属性的 getter 方法中, 该组件会重新显示新的值. 如果一个属性被分配给一个对象或一个数组, 框架会观察该对象或数组内部的一些变化, 比如当你分配了一个新值. 当一个组件重新渲染时, 模板中使用的表达式被重新评估, renderedCallback() 生命周期钩子会被执行. ...