There comes a time in every Salesforce implementation when the native lead conversion functionality needs to be extended. Most frequently, this is the result of needing to perform lead conversion in bulk. Lead conversion tends to be a slower process, and an unbulkified process runs the risk of timing out. This makes sense - the worst case scenario involves a contact, account, and opportunity being created, as well as the lead being updated. That's a lot to take care, under the hood! Let's div...| www.jamessimone.net
Structured Query Language (SQL) and the basic Salesforce equivalent, SOQL, share many commanalities. Each has the ability to pull data back from the database through the use of specialized keywords. SOQL has many peculiarities, not the least of which are the limits the aspiring developer is under when using it. What may seem like one of the best features of Apex -- its seamless integration with SOQL -- is, however, unusable when it comes to producing truly dynamic and flexible queries. As wel...| www.jamessimone.net
I'd like to take you through a routine refactoring exercise to showcase the power that objects wield when used correctly. This is, in my opinion, the single most _satisfying_ refactoring, because it showcases how maintanability improves by fixing an improper abstraction instead of letting it fester. This exercise will also highlight a curious junction between Test Driven Development (TDD) and Domain Driven Design (DDD) - which is to say that if the functionality that you're working to refacto...| www.jamessimone.net
Flows are increasingly a part of the Salesforce automation picture, and their seamless melding with Apex through invocable Apex is part of the reason why admins and developers alike are embracing Flow. Learn how easy it is to make simple, reusable Apex invocables, taking advantage of patterns to avoid tight coupling and code duplication.| www.jamessimone.net
Setting delays programmatically within Apex represents a unique challenge. We don't have access to the current thread instructions that are being carried out, nor do we have any kind of higher-level `delay` function. While this is frequently fine for internal usage, where the last thing you would want is for your compiled code to be slow, that's not always the case when interacting with external APIs. It's common for APIs to be 'rate-limited' - go over the number of requests you're supposed t...| www.jamessimone.net
Learn about Apex from the ground-level upwards: the basics of object-oriented programming, static types and type inference, virtual and abstract classes, interfaces, polymorphism, encapsulation and inheritance.| www.jamessimone.net
API development in Apex is mostly bespoke, requiring the duplication of rest resources. Let's look at how we can change that using inheritance and polymorphism to power our routes. Using extendable, dynamic APIs give us a huge amount of flexibility in spinning up new HTTP routes within the /apexrest/ path, letting us write code that external teams can stress-test and experiment with faster.| www.jamessimone.net
Synchronous apex methods typically use asynchronous future methods to perform API calls, or callouts in Apex. This article covers the best way to execute performant HTTP-related code, while allowing for further processing to be done. It makes use of the Queueable interface in Apex, and shows how to implement the Queueable interface with the least amount of boilerplate.| www.jamessimone.net
Learn how to use Repositories to protect your SOQL usage and easily swap implementations in unit tests| www.jamessimone.net
Cover the basics of mocking DML operations through the use of a DML class that can be swapped in unit tests.| www.jamessimone.net