Visualforce, a flexible Web-based framework that lets you develop custom UIs for Salesforce and Force.com desktop and mobile apps, lets you implement pages and controllers as you see fit. Often times, though, new or aging designs yield pages that are slow and unresponsive. Join us to learn how to build efficient Visualforce pages. We'll focus on two key areas for tuning, then treat you to the unveiling of a new third-party tool you can use to scan your org, and find tuning opportunities in the source code for your Visualforce pages and controllers.
How to wire an ON-OFF-ON switch for both backlighting and indicationNewWireMarine
This tutorial shows you - in depth - how to wire a Double Pole Double Throw (DPDT) rocker switch so that the top independent lamp is used as a backlight, and the bottom lamp is used as an indicator for both the UP and DOWN position
Albin Lambotte était un éminent chirurgien, un généraliste courageux et habile, un homme modeste, philanthropique et en plus un artiste et un talentueux luthier. Incontestablement, il est un des pères de l'ostéosynthèse et de l'orthopédie moderne. Il fut largement visité, admiré, chirurgien invité à Heidelberg, Paris, Lyon, Buenos Aires … et puis pratiquement oublié!
Join us to learn about Custom Visualforce Design Patterns built in-house and used by Yahoo! Inc. Sales Cloud to support Partnerships revenue. In standard salesforce.com pages, doing CRUD and any other complex tasks on the Grand Children records from the Parent Detail Page can be extremely painful as we have to drill down from one page to another, and any new Sales user can get lost in the navigation. We'll share several custom Visualforce patterns that help solve such inefficiencies and keep navigations simple. Along the way, we'll also discuss some cool tricks used in these patterns.
How to wire an ON-OFF-ON switch for both backlighting and indicationNewWireMarine
This tutorial shows you - in depth - how to wire a Double Pole Double Throw (DPDT) rocker switch so that the top independent lamp is used as a backlight, and the bottom lamp is used as an indicator for both the UP and DOWN position
Albin Lambotte était un éminent chirurgien, un généraliste courageux et habile, un homme modeste, philanthropique et en plus un artiste et un talentueux luthier. Incontestablement, il est un des pères de l'ostéosynthèse et de l'orthopédie moderne. Il fut largement visité, admiré, chirurgien invité à Heidelberg, Paris, Lyon, Buenos Aires … et puis pratiquement oublié!
Join us to learn about Custom Visualforce Design Patterns built in-house and used by Yahoo! Inc. Sales Cloud to support Partnerships revenue. In standard salesforce.com pages, doing CRUD and any other complex tasks on the Grand Children records from the Parent Detail Page can be extremely painful as we have to drill down from one page to another, and any new Sales user can get lost in the navigation. We'll share several custom Visualforce patterns that help solve such inefficiencies and keep navigations simple. Along the way, we'll also discuss some cool tricks used in these patterns.
Visualforce pages that execute efficiently respond quickly to user requests--and contribute to overall user productivity. As a Force.com developer or architect, delivering a positive application experience to your users means maximizing Visualforce page efficiency, which involves both finding inefficient pages and fixing them. In this workshop, you study some wasteful Visualforce page designs, then implement designs that execute more efficiently. You also learn how to find inefficient pages using some nifty tools.
New to Force.com and need an orientation to bring you up to speed? This monthly series of introductory sessions on Force.com, the world’s leading cloud platform that lets you build apps rapidly using configuration-driven development and powerful programmatic logic.
If you are familiar with object-oriented languages like Java or C#, Apex may be the language you already almost know. Apex is the cloud-based programming language used on the Salesforce1 Platform to take your enterprise applications to the next level. In this webinar, get an introduction to how Apex is similar to other languages, how you can start coding in Apex with just a web browser, and an overview of the many functions Apex can perform for your applications and users.
Key Takeaways
Programmers familiar with object-oriented languages will be able to learn Apex easily
Apex can perform a wide range of functions from serving as a controller for Visualforce pages to scheduled tasks in the background.
Join us to learn about processes that enable system performance data analysis and powerful visualization using Salesforce Wave. We'll cover raw performance data such as response time and throughput, show you how to quickly make new data sets available in Wave, and explore them using powerful visualization tools. With just a few steps, you'll learn how to integrate key performance metrics with your data and share with the rest of your organization on a Wave dashboard.
Lightning Data Service: Eliminate Your Need to Load Records Through ControllersSalesforce Developers
The Lightning Data Service is a centralized data broker and data caching framework for record data in lightning components. By using the Lightning Data Service, components share a single copy of the record data and eliminates the need to refresh other components when a record is updated. The service is also pre-integrated into the Aura Storage Service for automatic offline caching. Come meet the team responsible for the service and learn how to integrate Lightning Data Service into your component.
A mini framework for event handling on the OpportunityContactRole (OCR) and AccountContactRole (ACR) objects. Using a custom (dynamic) Visualforce page driven by a controller extension, you can replace the standard related lists
Force.com lets developers rapidly create and deploy trusted cloud apps that are secure and scalable. Part 1 of this webinar series gave you the platform overview, in Part 2 you learn how to customize your app using the foundational features of Force.com.
- Key Takeaways
- Part 1 recap with demo
- Get an understanding of Visualforce Pages and Standard Controllers
- See basic uses of Controller Extensions and Custom Controllers
- Writing test classes for unit testing to improve code coverage
Intended Audience
This session is geared towards Developers (any programming background) who wish to learn about Force.com basics and to create apps faster with code on Force.com platform
Join us to learn how to create a mini framework for event handling on the OpportunityContactRole (OCR) and AccountContactRole (ACR) objects. Using a custom Visualforce page driven by a controller extension, you can replace the standard related lists, provide additional validation logic, and allow triggering of other actions, such as notifications to the sales team.
Join us to learn how Salesforce IT is using the App Cloud to build our IT Knowledge Search and IT Ticket Management tool, Concierge. We will walk through the technologies used to create this app and how they all fit together. From Salesforce1 and Canvas to Heroku, and Hapi to AngularJs, we will also show how we easily took the mobile application, and with very few modifications, turned it into a responsive app for desktop leveraging the same technology stack.
New to Force.com and needing a quick orientation to bring you up to speed? Join us for this series of brief introductory sessions on Force.com, the world’s leading cloud platform that lets you build apps rapidly using configuration-driven development and powerful programmatic logic.
Each Friday one of our experts will walk you through one of the core elements of the Force.com platform and cover the basics you need to build your first app in the cloud. Each session is 30 minutes long.
How We Built AppExchange and our Communities on the App Cloud (Platform)Dreamforce
Did you know AppExchange, Success Community, and Partner Community are all built 100% on Salesforce? Join us to learn how we did it, lessons learned, and our advice for being successful building on the Salesforce App Cloud. Watch the video now: https://www.youtube.com/watch?v=8qdMH2f4g0I
Javascript and Remote Objects on Force.com Winter 15Peter Chittum
A round up of the state of Javascript on Force.com now that remote objects are about to go GA on Force.com in Winter 15. There are now four great options for invoking Javascript on your Visualforce page. Learn what they are, and more importantly why you need all of them, and when to use each one. Delivered at Salesforce Developer Group North on 18 September, 2014.
Spring '16 Release Overview - Bilbao Feb 2016Peter Chittum
Slide presentation from my talk in Bilbao Spain. This was an overview of Salesforce major release Spring 16. Primary areas of focus were Lightning in Visualforce and the new Durable Generic Streaming API.
The Spring '14 Release is chock-full of great updates for developers, such as the ability to perform DML operations in JavaScript and tons of API updates. Watch this webinar to discover new and upcoming Salesforce1 Platform features slated for this release including:
Visualforce Updates: Visualforce enhancements in Spring ’14 include Visualforce Remote Objects for performing DML operations in JavaScript without the need for an Apex Controller, historical trending capabilities with the Analytics API, support for report chart components, PageReference URI support anchors, and several new components.
Force.com Canvas: Force.com Canvas continues to add useful features like the ability to access a Canvas app in the Chatter Publisher and Feed, the ability to add a Canvas app to the Salesforce1 App Mobile Navigation, support for using events between a Canvas app and a Visualforce page, as well as a new debugging console.
API Updates: New features have been added to SOQL, SOSL, REST API, SOAP API, Bulk API, Metadata API and the Streaming API. Additionally, we have opened up the ability to use the Data.com APIs, and added a new Place Order API to integrate Salesforce order data into any web or mobile application.
Developer Console: New features have been added that let you search through all files for specific snippets in your organization, change look and feel settings on your console, along with several user-experience additions like context menus.
Apex Code: Spring ‘14 adds new classes, methods and interfaces. You can now access reports in Apex with the Analytics API and updates have been made to Chatter in Apex.
Do you use Skuid and want to learn how to take your pages to the next level? Join us to learn how you can turbo-charge your Skuid pages with Apex. Through a series of short, simple, code examples, we'll show you proper techniques of how to access Apex from a Skuid page.
New to Force.com and needing a quick orientation to bring you up to speed? Join us for this series of brief introductory sessions on Force.com, the world’s leading cloud platform that lets you build apps rapidly using configuration-driven development and powerful programmatic logic.
Each Friday one of our experts will walk you through one of the core elements of the Force.com platform and cover the basics you need to build your first app in the cloud. Each session is 30 minutes long.
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSalesforce Developers
Exploring the code within sample applications is a great way to learn new languages, frameworks, and platforms. That’s why we built the Sample Gallery (https://trailhead.salesforce.com/sample-gallery), a collection of Salesforce Customer 360 Platform reference applications that demonstrate examples of what you can create and how to build it. In this interactive webinar, we introduce you to a few Sample Apps and show you how to make the best use of them in your day-to-day development projects.
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceSalesforce Developers
We all want the Salesforce Lightning Experience to be fast- but how do we define fast, and how do we make it even faster? When you’re building a UI, everything you add to the page affects performance, and to make load times faster and perform the way users expect, we need to treat speed as an essential design feature. In this presentation, you’ll learn how to measure performance, learn a few tips on how to maximize performance, and take responsibility for your feature’s performance from design to production.
Visualforce pages that execute efficiently respond quickly to user requests--and contribute to overall user productivity. As a Force.com developer or architect, delivering a positive application experience to your users means maximizing Visualforce page efficiency, which involves both finding inefficient pages and fixing them. In this workshop, you study some wasteful Visualforce page designs, then implement designs that execute more efficiently. You also learn how to find inefficient pages using some nifty tools.
New to Force.com and need an orientation to bring you up to speed? This monthly series of introductory sessions on Force.com, the world’s leading cloud platform that lets you build apps rapidly using configuration-driven development and powerful programmatic logic.
If you are familiar with object-oriented languages like Java or C#, Apex may be the language you already almost know. Apex is the cloud-based programming language used on the Salesforce1 Platform to take your enterprise applications to the next level. In this webinar, get an introduction to how Apex is similar to other languages, how you can start coding in Apex with just a web browser, and an overview of the many functions Apex can perform for your applications and users.
Key Takeaways
Programmers familiar with object-oriented languages will be able to learn Apex easily
Apex can perform a wide range of functions from serving as a controller for Visualforce pages to scheduled tasks in the background.
Join us to learn about processes that enable system performance data analysis and powerful visualization using Salesforce Wave. We'll cover raw performance data such as response time and throughput, show you how to quickly make new data sets available in Wave, and explore them using powerful visualization tools. With just a few steps, you'll learn how to integrate key performance metrics with your data and share with the rest of your organization on a Wave dashboard.
Lightning Data Service: Eliminate Your Need to Load Records Through ControllersSalesforce Developers
The Lightning Data Service is a centralized data broker and data caching framework for record data in lightning components. By using the Lightning Data Service, components share a single copy of the record data and eliminates the need to refresh other components when a record is updated. The service is also pre-integrated into the Aura Storage Service for automatic offline caching. Come meet the team responsible for the service and learn how to integrate Lightning Data Service into your component.
A mini framework for event handling on the OpportunityContactRole (OCR) and AccountContactRole (ACR) objects. Using a custom (dynamic) Visualforce page driven by a controller extension, you can replace the standard related lists
Force.com lets developers rapidly create and deploy trusted cloud apps that are secure and scalable. Part 1 of this webinar series gave you the platform overview, in Part 2 you learn how to customize your app using the foundational features of Force.com.
- Key Takeaways
- Part 1 recap with demo
- Get an understanding of Visualforce Pages and Standard Controllers
- See basic uses of Controller Extensions and Custom Controllers
- Writing test classes for unit testing to improve code coverage
Intended Audience
This session is geared towards Developers (any programming background) who wish to learn about Force.com basics and to create apps faster with code on Force.com platform
Join us to learn how to create a mini framework for event handling on the OpportunityContactRole (OCR) and AccountContactRole (ACR) objects. Using a custom Visualforce page driven by a controller extension, you can replace the standard related lists, provide additional validation logic, and allow triggering of other actions, such as notifications to the sales team.
Join us to learn how Salesforce IT is using the App Cloud to build our IT Knowledge Search and IT Ticket Management tool, Concierge. We will walk through the technologies used to create this app and how they all fit together. From Salesforce1 and Canvas to Heroku, and Hapi to AngularJs, we will also show how we easily took the mobile application, and with very few modifications, turned it into a responsive app for desktop leveraging the same technology stack.
New to Force.com and needing a quick orientation to bring you up to speed? Join us for this series of brief introductory sessions on Force.com, the world’s leading cloud platform that lets you build apps rapidly using configuration-driven development and powerful programmatic logic.
Each Friday one of our experts will walk you through one of the core elements of the Force.com platform and cover the basics you need to build your first app in the cloud. Each session is 30 minutes long.
How We Built AppExchange and our Communities on the App Cloud (Platform)Dreamforce
Did you know AppExchange, Success Community, and Partner Community are all built 100% on Salesforce? Join us to learn how we did it, lessons learned, and our advice for being successful building on the Salesforce App Cloud. Watch the video now: https://www.youtube.com/watch?v=8qdMH2f4g0I
Javascript and Remote Objects on Force.com Winter 15Peter Chittum
A round up of the state of Javascript on Force.com now that remote objects are about to go GA on Force.com in Winter 15. There are now four great options for invoking Javascript on your Visualforce page. Learn what they are, and more importantly why you need all of them, and when to use each one. Delivered at Salesforce Developer Group North on 18 September, 2014.
Spring '16 Release Overview - Bilbao Feb 2016Peter Chittum
Slide presentation from my talk in Bilbao Spain. This was an overview of Salesforce major release Spring 16. Primary areas of focus were Lightning in Visualforce and the new Durable Generic Streaming API.
The Spring '14 Release is chock-full of great updates for developers, such as the ability to perform DML operations in JavaScript and tons of API updates. Watch this webinar to discover new and upcoming Salesforce1 Platform features slated for this release including:
Visualforce Updates: Visualforce enhancements in Spring ’14 include Visualforce Remote Objects for performing DML operations in JavaScript without the need for an Apex Controller, historical trending capabilities with the Analytics API, support for report chart components, PageReference URI support anchors, and several new components.
Force.com Canvas: Force.com Canvas continues to add useful features like the ability to access a Canvas app in the Chatter Publisher and Feed, the ability to add a Canvas app to the Salesforce1 App Mobile Navigation, support for using events between a Canvas app and a Visualforce page, as well as a new debugging console.
API Updates: New features have been added to SOQL, SOSL, REST API, SOAP API, Bulk API, Metadata API and the Streaming API. Additionally, we have opened up the ability to use the Data.com APIs, and added a new Place Order API to integrate Salesforce order data into any web or mobile application.
Developer Console: New features have been added that let you search through all files for specific snippets in your organization, change look and feel settings on your console, along with several user-experience additions like context menus.
Apex Code: Spring ‘14 adds new classes, methods and interfaces. You can now access reports in Apex with the Analytics API and updates have been made to Chatter in Apex.
Do you use Skuid and want to learn how to take your pages to the next level? Join us to learn how you can turbo-charge your Skuid pages with Apex. Through a series of short, simple, code examples, we'll show you proper techniques of how to access Apex from a Skuid page.
New to Force.com and needing a quick orientation to bring you up to speed? Join us for this series of brief introductory sessions on Force.com, the world’s leading cloud platform that lets you build apps rapidly using configuration-driven development and powerful programmatic logic.
Each Friday one of our experts will walk you through one of the core elements of the Force.com platform and cover the basics you need to build your first app in the cloud. Each session is 30 minutes long.
Similar to Building Efficient Visualforce Pages (20)
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSalesforce Developers
Exploring the code within sample applications is a great way to learn new languages, frameworks, and platforms. That’s why we built the Sample Gallery (https://trailhead.salesforce.com/sample-gallery), a collection of Salesforce Customer 360 Platform reference applications that demonstrate examples of what you can create and how to build it. In this interactive webinar, we introduce you to a few Sample Apps and show you how to make the best use of them in your day-to-day development projects.
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceSalesforce Developers
We all want the Salesforce Lightning Experience to be fast- but how do we define fast, and how do we make it even faster? When you’re building a UI, everything you add to the page affects performance, and to make load times faster and perform the way users expect, we need to treat speed as an essential design feature. In this presentation, you’ll learn how to measure performance, learn a few tips on how to maximize performance, and take responsibility for your feature’s performance from design to production.
Last year was eventful for Salesforce Developers - we started with the launch of Lightning Web Components (LWC), open-sourced it, enabled local development, and ended the year by open-sourcing Base Lightning Components. In this webinar, we will explore exciting new developments within Base Components and we will show you how to use open-source Base Components to build engaging applications faster with local development.
In this session we will,
- Spin up a local development environment to build Lightning web components
- Use and customize the base components and recipes to build pages and apps quickly
- Explore the latest features of VS Code developer tooling while coding for a use case
Over the past two months, we’ve announced many new resources for developers at Dreamforce and TrailheaDX India. To learn all about them, watch this video, where we'll explore live demos showcasing the latest updates for Lightning Web Components (LWC), Einstein, Heroku, and a lot more on the Customer 360 Platform.
In this session we,
- Explore key highlights from TrailheaDX India
- Show live demos of generally available features
- Explain how you can benefit from these features
TrailheaDX (TDX) is coming to ‘namma’ Bengaluru in India on Dec 19th and 20th! TrailheaDX India is the conference for everyone who builds on and customises Salesforce — including admins, developers, architects, and partners. This event will have sessions, demos and fun for those just getting started with the platform, as well as for advanced admins, architects and developers.
You might have questions about the event - and to answer your questions Kavindra Patel, known as the father of the Indian Salesforce Community, joins Shashank Srivatsavaya, Head of APAC Developer Relations. Register for our exclusive webinar to:
- Get a sneak peek into exclusive sessions and activities
- Find out who you shouldn’t miss at TrailheaDX India
- Understand what comes with your #TDX19 registration
CodeLive: Build Lightning Web Components faster with Local DevelopmentSalesforce Developers
GitHub repo: https://github.com/satyasekharcvb/lwc-local-dev.git
With the release of a new beta version of Local Development, you can now build Lightning web components faster than ever before! You can now render changes, iterate rapidly, troubleshoot errors, and even connect with data from your org by spinning up a local development server on your machine.
In this session, we build Lightning web components in real time. The exciting new capabilities we showcase will enable you to be an even more productive developer.
In this CodeLive session we:
- Spin up a local development server from the CLI to rapidly edit and view components
- Observe how a rich error handling experience simplifies testing and debugging
- Learn how to proxy data from an org for more context and fine-tuned development
CodeLive: Converting Aura Components to Lightning Web ComponentsSalesforce Developers
GitHub repo: https://github.com/adityanaag3/aura2lwc
Lightning Web Components (LWC) give any JavaScript developer a modern, web standards-based path to building apps and experiences on the Salesforce Platform.
In this live coding session, you’ll learn how to first evaluate if an existing Aura Component needs to be converted, then convert it to LWC using the latest features of Salesforce Extensions for VS Code. We demonstrate conversion to LWC by walking through various components of a real world Aura Component - including input and output, Tables, Forms, and more.
In this live coding session we:
- Convert Aura Components to LWC
- Leverage the latest IDE features
- Share implementation best practices
Earlier this year, we released Lightning Web Components (LWC), a new UI framework based on web standards and optimized for performance and developer productivity. We have now open sourced the Lightning Web Components framework so that anyone can build applications on any platform.
Join our webinar where we'll explore how this framework, based on standard HTML, modern JavaScript (ES6+), and the best of native Web Components, helps you create web components and apps using the stack and tools you prefer.
We recently announced over 300 new features and enhancements at TrailheaDX '19 and for the Summer '19 release. In our Developer Highlights webinar we explore the top features with in-depth demos, including the latest updates for Lightning Web Components (LWC), LWC Open Source, CLI updates, Change Data Capture for external objects, Asynchronous Apex Triggers, Notification Builder and more.
Watch the recording here: https://youtu.be/kmOkk74QiCo
You can watch a recording of the live coding session at https://sforce.co/2IbU3yJ
In the fifth and final webinar of our five part series, we learn how to build Lightning web components for different use cases. We explore how to leverage all of the concepts you’ve learned in this webinar series to create modern apps with Lightning Web Components. We also demonstrate various ways to migrate Aura components to Lightning web components for a seamless transition.
In the fourth episode of our five part series on Lightning Web Components, we show you how static resources and custom JavaScript are used with Lightning Web Components. You’ll learn how to use external APIs in conjunction with Lightning Locker to secure your JavaScript code. And finally, we’ll demonstrate how you can test your Lightning Web Components using Jest.
LWC Episode 3- Component Communication and Aura InteroperabilitySalesforce Developers
Lightning Web Components gives JavaScript developers a web standards-based path to building apps on the Salesforce Lightning Platform.
In the third episode of our five part series on Lightning Web Components, we cover design considerations and compositions of Lightning Web Components.
Lightning Web Components give any JavaScript developer a modern, web standards-based path to building apps and experiences on the Lightning Platform.
In the second episode of our five part webinar series on Lightning Web Components, we will show you how to access data from the Salesforce org, get record data, create records and handle errors using Lightning Web Components. In this webinar you’ll learn all about Lightning Data Service, reactive wire service and Lightning App Builder.
Lightning Web Components are a JavaScript programming model for building web applications and interfaces that is built on the best of web standards.
Any front-end web developer can get started with LWC and leverage custom elements, and JavaScript APIs to create modern apps and experiences that are fully aware of Salesforce data and processes.
Migrate legacy Salesforce CPQ to Advanced Calculator with the help of JSQCP. With Advanced Calculator, you can boost the runtime of quote creation. Join this webinar to learn what is required for migration - we’ll also walk through JSQCP.
Replicate Salesforce Data in Real Time with Change Data CaptureSalesforce Developers
Migrate your batch processing, scheduled ETL, and nightly workloads to event-driven, real-time integrations using Change Data Capture. CDC means data change events are published to an event stream, allowing businesses to have up-to-date information across systems and applications. Join us to learn how to configure Change Data Capture and subscribe to the stream of change events, streamlining your architectures and processes.
Using Salesforce DX and its suite of offerings can significantly increase your development productivity.
Join this webinar to learn more about source control, scratch orgs, CLI, Metadata Coverage, VS Code, and Unlocked Packages. We will even do a live demo on continuous delivery using Salesforce DX.
Lightning Flow makes it easier for developers to build dynamic process-driven apps with Process Builder and the new Flow Builder. Join us and learn more about how you can get in the Flow!
Integrate CMS Content Into Lightning Communities with CMS ConnectSalesforce Developers
In this webinar we will show you how to display content from external Content Management Systems into Lightning Communities. This lets you take advantage of the Communities framework and help you centralize content in whatever CMS system you have chosen.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
Building Efficient Visualforce Pages
1. Building Efficient Visualforce Pages
Steve Bobrowski, salesforce.com, @sbob909
Markus Spohn, salesforce.com, @markus_spohn
Joseph Ferraro, Mavens Consulting, @joeferraro
2. Safe harbor
Safe harbor statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties
materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results
expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be
deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other
financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any
statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new
functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our
operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any
litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our
relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our
service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to
larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is
included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent
fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor
Information section of our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently
available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions
based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these
forward-looking statements.
28. Minimize data … examine data controller gets
public class invoiceController {
Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c, Invoice_Total__c, CreatedDate,
LastModifiedDate, LastModifiedById, OwnerId FROM Invoice__c ORDER BY Status__c ASC’
LIMIT 1000;
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
29. Minimize data … match page and controller data
public class invoiceController {
Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c ORDER BY Status__c ASC LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
30. Minimize data … only get the rows that page needs
public class invoiceController {
Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c
WHERE Status__c != 'Closed'
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
65. All about Joe Ferraro and Mavens Consulting
Mavens Consulting is the Life Science industry’s premier
salesforce.com implementation partner focused exclusively
on delivering optimized Force.com solutions.
Certified Force.com and Veeva Experts
Unparalleled Global Knowledge in Life Sciences
Specialists in Service Cloud Implementations for MedInfo Contact
Centers and Multi-Channel Portals for Physicians and Reps
STEVE: So what are we going to cover in today’s session? Well, I’m assuming that most of you work somewhere that uses Salesforceapps or perhaps a custom Force.com app.
STEVE: Perhaps you are a developer, maybe an architect, and you are in charge of maintaining an org.
STEVE: Let’s say the org has been around for a while. And there’s a bunch of Visualforce pages that are sloooowwww. So slow that they are hurting user productivity, which is obviously something we don’t want. Problem is, you’re not sure why they’re slow to begin with.
STEVE: So today, in this session, your job is to find all the pages that are implemented poorly and make them more efficient.
STEVE: And that’s what we are going to cover today. We are going to take a look at the most common problems that cause slow Visualforce pages, and then we’ll show you how to find and fix these problems in your org. Using the skills you learn today, you’ll be able to go back to work and make old, and new, Visualforce pages execute efficiently.
STEVE: My name is Steve Bobrowski, and I’m part of the Customer Centric Engineering group here at salesforce.com. But when I go out and talk to folks about Salesforce implementations and architecture, I think of myself as an “architect evangelist”, someone that can help you learn more about how Salesforce works under the hood so that you can implement better solutions on our platform.
STEVE: With me today is another member of our team, Markus Spohn, and together, we’d like to discuss what everyone should know about building efficient Visualforce pages.
STEVE: So what makes a Visualforce page efficient? Well, we all know that Visualforce is completely flexible to the way that you want to develop your app. You could use pure Visualforce, or you might use some custom JavaScript libraries, adjust HTML to your liking—the possibilities are almost endless. Considering this, we could throw together a really long list of things to watch out for, things that might or might not apply to your environment. Stuff about efficient Web technologies like HTML, CSS, and JavaScript. Then maybe discuss efficient user interface designs. And countless other things.
STEVE: But when you consider everything that you could do, there are two key things to focus on that will have the most effect on how well your Visualforce pages respond: how much memory they use, and how efficiently they access your databaseThese two things, if you make them efficient, have the biggest impact on Visualforce page response time. And that indirectly supports what we are after …
STEVE: … user productivity and satisfaction.
STEVE: Alright, so after we learn all about designing memory- and database-efficient Visualforce pages, you need to know how to go about finding the pages that could use some improvement. Maybe you already know about some problem pages from user feedback. But there’s a good chance there are others in your org that need attention. And finding those can be a real challenge … unless … you have the right tools to do the job. So in the final part of today’s session, we’re going to introduce you to various tools that you can use for Visualforce and Apex development. And we have a special guest, Joe Ferraro, that’s going to show you a great new feature in his open-source IDE, MavensMate, that lets you scan your entire org and identify source code that could use some improvement … all with a single mouse click.Now before we get started …
STEVE: I want to briefly mention that there will be related mini-workshops in the Dev Zone on Wednesday and Thursday. So if you want to apply all the things you learn today in this session, hands-on in a live org, make sure to register for the workshop with the same name.
STEVE: Let’s talk about designing memory-efficient Visualforce pages. Markus, why don’t you take us through this please.MARKUS: Thanks Steve. Hi everyone.
MARKUS: The most important contributor to a Visualforce page’s memory usage is something called view state. So let’s focus on view state for a few minutes and learn what it is, where it comes from, and then explore ways to examine it, reduce it, and eliminate it altogether.
MARKUS: First, let’s make sure we all understand what view state is.
MARKUS: Force.com automatically creates and manages view state for all Visualforce pages that contain an <apex:form> component. A page with a form has view state so that the information is available to rebuild a page when a postback happens.
MARKUS: A postback happens when a user submits a form to a server, something happens like a data validation error, and the server posts the submitted data back to the browser, which reconstructs the state of the page including the form data that was previously submitted.
MARKUS: When view state is grows, page rendering time and perceived page response time can suffer. This is particularly true with mobile clients that have limited memory available.
MARKUS: So your job, as a Visualforce page designer, is to make sure that pages with forms use the minimum amount of view state, which helps make pages more efficient and users happy.
MARKUS: So to repeat, here are the key things to understand about view state.View state comes from managing form data to support postbacks, and less view state makes your pages more efficient and responsive.
MARKUS: Next, let’s discuss how you can examine view state.
MARKUS: Considering this is an intermediate-level session, we’re going to assume that all of you know how to enable and already use “development mode” when you access Salesforce in your browser. What you also want to check that you have enabled is the “Show View State in Development Mode” option, which is right next to the Development Mode option on the Advanced User Details page.
MARKUS: After these settings are enabled, when you load a Visualforce page, the development mode footer displays information about the page’s view state when you click on the View State tab.
MARKUS: So before we go any further, let’s take a look at an example Visualforce page and controller. As we go along in this session, we’ll revisit the page and make the various improvements to the page that we suggest and see how things change. Steve, can you take us through the demo?STEVE: Sure thing.=====Switch screen to org with workshop org’s /apex/openInvoices page open.Explain purpose of the page: Shows open invoices above closed invoices, refreshes every 15 seconds to keep data current. Provides a list that users can start workflow on open invoices.Click on View State tab, discuss tree structure. Mention that max view state size is 135K.Briefly discuss page and controller source code. Make sure to point out that the page uses actionPoller to auto refresh every 15 seconds.Return to session deck.[TIMING: 7m]
MARKUS: Thanks Steve.Now everyone should know how to view and examine view state. Next, let’s learn how to reduce unnecessary view state to make your Visualforce pages more responsive.
MARKUS: One of the first things to check is that your page’s controller doesn’t get more data from the Force.com database than your page uses. For example, notice how this page uses the Id, Name, and Status field values for Invoices. Yet …
MARKUS: … the page’s controller fetches many more fields than the page uses. Considering that the page maintains all of this data within a form, there’s a bunch of unnecessary view state being maintained for data that the page doesn’t even utilize. That’s wasteful. Simple fix … just remove the fields that aren’t necessary from the query in the controller.
MARKUS: Like so. We’ve culled the SOQL query’s SELECT list to minimize the amount of fields retrieved from the database. But wait … there’s more that we can do to make this page’s controller more efficient. Considering that the purpose of the page is to present a list of all Invoices that are Open, can anyone tell me what else I can do to improve the efficiency of this controller?… audience responses …Correct, we can include a filter condition, or a WHERE clause, to fetch only the database records that meet our criteria. So let’s go ahead and add a filter condition that will suffice.
MARKUS: There … that’ll fetch just the records that are OPEN … or all records that are not CLOSED, in this case. Now if you see something wrong here with our new WHERE clause, just bite your tongue for a few minutes. We’ll be making some more improvements to the SOQL query in the proper context a bit later in this session. Right now, we are focusing on improving the memory-efficiency of the page itself.[TIMING:8.5m]
MARKUS: So let’s have Steve go back to the live page and make these changes to see what happens to the view state.STEVE: Ok, here we go.=====Switch screen to org with workshop org’s /apex/openInvoices page open.Click on View State tab, remind attendees of view state size and sources.Remove unnecessary fields from query, save controller.Examine view state size change.Add WHERE clause, save controller.Examine view state size change.Return to session deck.[TIMING: 11m]
MARKUS: So, these changes we made to the SOQL query in the page’s controller, minimizing the SELECT field list and adding a WHERE clause, help reduce the amount of view state that the page maintains. What else can we do to reduce things even more?
MARKUS: The next thing we might do is eliminate read-only data from the view state. Remember, view state is there to support postbacks. So whenever possible, make sure to set up your controller to use transient variables for read-only data.Continuing with our invoiceController, notice that the controller creates a list of invoices, which the page maintains in the view state. The more invoice records returned by the controller, the more view state that the page must maintain. It’s really easy to remove this read-only data from the view state …
MARKUS: Just use the transient keyword for variables that maintain read-only data.[TIMING: 12m]
MARKUS: So Steve, let’s go back to the live page and reduce the view state with a transient variable.STEVE: Thanks Marcus.=====Switch screen to org with workshop org’s /apex/openInvoices page open.Click on View State tab, remind attendees of view state size and sources.Make Invoices transient, save controller.Examine view state size change.Return to session deck.[TIMING: 14m]
MARKUS: So this simple change, marking read-only variables as transient, totally removes that data from the page’s view state.Alright, we’ve made some good progress making our Visualforce page more memory-efficient with just a few simple changes. What’s next?
MARKUS: So as we said earlier, the openInvoices page we’ve been working on, maintains a list of read-only data that drives user workflow. But if all the data on the page is read-only, then why do we have to use a form at all, and thus maintain any view state whatsoever? Anyone? We gave you a hint earlier.… audience responses …Correct, because the page is using an actionPoller tag, we have to maintain the query in the page’s view state or else the actionPoller tag won’t work. Thus the need for the form.So that bit of information should get you thinking: How could you redesign this page so that it doesn’t use actionPoller, which would eliminate view state altogether. And do this in such a way that the page still refreshes to show the current open Invoices?
MARKUS: You could do this several ways. For example, you could stick with a traditional polling approach and use either a meta tag or a JavaScript function to replace actionPoller. An even more efficient approach, though, that we’ll be demonstrating a little bit later, is to switch to a long polling approach that streams updates to your page.For now, the key takeaway here is this: Don’t maintain view state at all if you don’t have to. In our example, the only reason our page is maintaining view state is because we want to leverage the convenience of the actionPoller tag.[TIMING:16m]
MARKUS: So this simple change, marking read-only variables as transient, totally removes that data from the page’s view state.Alright, we’ve made some good progress making our Visualforce page more memory-efficient with just a few simple changes. What’s next?
MARKUS: Alright, now that you have a good idea of how to minimize view state and the memory required to render a Visualforce page, let’s switch gears and see how to make database access efficient. And here to help is Steve.STEVE: Thanks Markus. I think we all know, as Visualforce developers, that database access is a common bottleneck in data-driven applications. So the efficiency with which your Visualforce page controller accesses the Force.com database can directly affect the page's response time.
STEVE: Some key things we’ll be focusing on in the next few minutes include the efficiency of the SOQL in your page controllers, and the logic within your controllers. Both are important factors for database efficiency.
STEVE: First, let’s start with building and executing efficient SOQL queries in page controllers.
STEVE: We already learned a little about SOQL query tuning in the previous section, by minimizing the fields that SOQL queries fetch from the database.
STEVE: And we also learned that queries should use a WHERE clause to only fetch the rows from the database needed by the page. But if you are not careful, you might not be accessing the database as efficiently as you think unless you build your WHERE clause conditions with some specific things in mind. For example, who can tell me why this WHERE clause is not optimal?… audience responses …Correct, it’s because the WHERE clause uses a negative operator, !=. Just like most database query optimizers, the Force.com query optimizer automatically uses a full scan of all Invoice records when the WHERE clause condition uses a negative operator, even when the target result set is highly selective. And if there’s millions of Invoice records, that’s going to be a slow query.
STEVE: If facts like this about internals of the Force.com query optimizer are foreign to you, the Technical Enablement group that Markus and I are part of has produced a ton of helpful “under the hood” type information in the form of articles, webinars, and blog posts, all available from the Architect Core Resources page on Developer Force. Remember that URL and visit it often.One such piece of content is the Force.com Query and Search Optimization Cheat Sheet. You can pick up a hard copy of this cheat sheet in the Dev Zone while you are here at Dreamforce, or download a copy from the Architect Core Resources page.It teaches you all sorts of things about query optimization, including information about indexes, operators, and selectivity thresholds. Let’s apply some of this knowledge from this cheat sheet and see how it can make a difference for query execution times, and ultimately, Visualforce page response time.
STEVE: The easy fix here is to modify the WHERE clause with a condition that leverages an optimizable operator. In this case, we change != Closed to = Open.
STEVE: Now, the best scenario would be ifThe custom Status field has an indexAnd the Open field value is selective within that Status field of the Invoices object.As the cheat sheet points out, several standard fields are indexed. But in this case, there would have to be a custom index on Status, considering it’s a custom field. And the only way we can tell if the field value Open is selective would be to gather some stats about the data distribution of field values in Status.[TIMING: 19M]
STEVE: So let’s go back to our live demo and see how some simple changes to the query’s WHERE clause can affect the execution time and investigate the selectivity of the Open field value.=====Switch screen to Workbench original query in place.Run query and note execution time.Change WHERE clause to WHERE = OpenRun query and note faster execution time. Mention that there happens to be an index on the Status field.Run query that shows selectivity stats for the Status field. Explain vs. selectivity thresholds. Again refer to cheat sheet.Return to session deck.[TIMING: 24m]
STEVE: Let’s cover one last possibility to consider for optimal queries inside your Visualforce controllers: Leveraging the Salesforce sharing architecture.All records in Force.com have an owner. A Salesforce org's sharing architecture determines which users, other than the record owner, can query records of an object that uses an organization-wide default of Private. Now, you might not realize but that in addition to filter conditions, field selectivity, and indexes, the Force.com query optimizer also considers a sharing filter for private records to build an optimal query execution plan.For example, let’s say that a query has a selective filter condition that targets10% of the records in an object, a condition that uses an indexed field value. That’s pretty efficient. But a particular user executing the query can access only 5% of the records in a private object because of an org's sharing configuration. In this case, the optimizer would use the sharing filter as the primary selectivity driver for executing the query most efficiently rather than the query’s WHERE clause condition. Make sense?So if your org uses a private organization-wide default setting for objects in a Visualforce page controller, it might be best to leverage sharing in the controller. All that's necessary is that you add the with sharing keywords to the controller’s class declaration.
STEVE: To recap, make sure that with custom controllers, you do everything you can to make SOQL queries execute as efficiently as possible to minimize page response time. Most notably, build queries with selective WHERE clause conditions that reference indexed fields, and don’t forget to use your org’s sharing architecture as long as it makes sense to do so.
STEVE: Great, we’ve already learned a great deal about tuning database-access for Visualforce page controllers. With the example openInvoices page, you’ve seen how some simple database query tuning can really make a difference. Now let’s continue with some other ways that can improve database efficiency in the context of Visualforce pages.
STEVE: With the openInvoices page, we use a custom controller because the page requires some unique logic to support the actionPoller implementation. But if there weren’t any unique logic requirements for a Visualforce page, you should always leverage the page’s default, standard set controller. It’s optimized in many ways to make your Visualforce page access the Force.com database as efficiently as possible. For example, discuss pagination and query more. Get info from Sean’s pagination article. Discuss query more.
STEVE: If you have to use a custom controller or controller extension, there are some general design principles that they should obey for efficient database access. For example, always place SOQL queries and DML statements outside of for loops. Here we see an example of a loop that fetches rows from the database and updates them one by one. There are governor limits in place that would limit just how many iterations of this loop could execute because it would otherwise consume an extraordinary amount of database resources to process. Instead …
STEVE: … you could use a design like this:A single query populates a collection.A loop processes each member of the collection in memory.A single DML statement updates the database, in bulk, with all members in the collection.One query. One DML statement. No worries about governor limits. A much more efficient design because of bulk processing principles.
STEVE: Efficient design is not just for custom page controllers. What about the overall approach to a page? The overall approach itself should be efficient, otherwise, you risk having a slow page response time no matter how database-efficient you make things.To illustrate this concept, let’s take a step back and reconsider the openInvoices page we’ve been using throughout this session for the live demos.
STEVE: Remember, the openInvoices page displays a list open Invoices. This page design causes the page to refresh the entire list of invoices every 15 seconds, no matter whether any updates actually occur. Is this really the most efficient choice for the page design? And is it the most effective approach for our users who are actively watching the page trying to pick out changes to records within the list of invoices? Besides being inefficient, this page design might make all of our users cross-eyed.
STEVE: The approach actionPoller supports is what’s called traditional polling. The current openInvoices page “pulls” information from the server, and it’s the page itself that drives the update. But as I just stated, this design is very inefficient from a resource consumption perspective. It runs a potentially expensive database query every 15 seconds to refresh the page’s list, whether any new open Invoices arrive or not.So why should you care about this design? As long as it gets your users the information they need, what does it matter? Well, consider that the query you use to support actionPoller targets the Invoice object. When you start out, perhaps there’s a small number of Invoices. But as your business grows … and grows … and grows … the number of Invoice records gets quite large. So large that the time it takes to execute the query exceeds the refresh interval. Not to mention, the page consumes resources on behalf of each user that opens the page. So the more people that use the page concurrently … well, you begin to see this is a recipe for tremendous amount of resource consumption in terms of database access in our data center and lots of network bandwidth in your data center – and in the end, a really slow page implementation.So how might you reimplement the page more efficiently?
STEVE: One way is to switch to a more modern approach that “pushes” information to interested “subscribers” only when a change of interest happens—like when a new open Invoice appears, or an existing Invoice becomes open. In fact, this is the approach that most mobile apps use to get push notifications about things of interest. This type of design is known as long polling, and can easily be implemented with the Force.com Streaming API. And there are some side benefits too:Because you rid the page of actionPoller, it no longer needs a form, and no longer needs to maintain any view state whatsoever.Because you are only doing singleton page updates, the load on the database is much lighter, there’s very little network usage, and the page is more responsive.And finally, because you are not updating an entire list, we can make changes to the page much more readily apparent to users, help make them more productive, and save their eyesight.[TIMING: 29m]
STEVE: So let’s take a look at a reimplementation of the openInvoices page that uses the Streaming API and some cool JavaScript so you can see just what it takes to do the job.=====Demo the streaming pageSwitch screen to workshop org, streamingOpenInvoices page with Invoice list overlaid.Clone an open invoice, notice it appears on the streaming page.Highlights, then fades away.Show the page implementation detailsSwitch to Workbench, show the push topic. Explain.Switch to the workshop org with page.Show the page’s controller source code, then page source code. Walk through the parts of the code.Return to session deck.[TIMING: 34m]
STEVE: To recap this section, the overall reimplementation of the openInvoices page echos two key points that we want you to remember from this session:Minimize or eliminate view state for memory-efficient Visualforce pagesDesign database-efficient Visualforce page controllers
STEVE: Now that you understand some key key techniques for building efficient Visualforce pages and controllers, you can apply your knowledge to revising existing code in your org that might be suboptimal. But how do you find source code that has problems? Tools can help a great deal, and that’s what we are going to discuss now.
STEVE: First, let’s do a quick review of the primary Force.com development tools you should know about.
STEVE: Of course, in your browser, you can use the Force.com Setup tool along with the Developer Console to build Visualforce pages and controllers. These browser-based tools are nice, but they don’t provide any features that let you search the source code across an entire org for things of interest, like pages that poll or controllers that don’t use sharing.
STEVE: Then there’s the Force.com IDE, an Eclipse-based plugin that you can use for Force.com development. This tool lets you leverage the power of Eclipse for the Force.com platform, including the ability to search an entire project's source code for problems.There’s nothing wrong with the IDE, especially if you are already familiar with Eclipse. But some of us find it a bit heavyweight.
STEVE: As Force.com adoption has grown, several third-party and open source tools have emerged to support Force.com application development. The list here includes a few notable considerations.
STEVE: Here, we see a screen shot from one awesome member in this lineup called MavensMate. And here to discuss it more is it’s primary author, Joe Ferraro from Mavens Consulting. Joe?JOE: Thanks Steve. Hi everyone.
JOE: My name is Joe Ferraro and I’m the CTO of a company called Mavens Consulting. We were founded in 2007 by former Salesforce.com employees and we focus on building cloud software solutions for companies in the Healthcare and Life Sciences space. Mavens is committed to supporting the open source community and MavensMate is a great example of that.
JOE: So what is MavensMate? MavensMate is an open source application that equips Force.com developers with powerful tools to build applications in their favorite editors like Sublime Text. MavensMate utilizes a combination of the Salesforce.com Metadata API and the new Tooling API to provide all the functionality you’ll find in the Force.com IDE, but with some advanced features to make developing your applications easier. And I’m proud to say that we now officially support Windows & Linux as well, so thank you for your patience.
JOE: Here is a brief list of some of the features MavensMate offers: Run Apex tests and visualize test passes, failures, & coverageExecute anonymous apex and have those scripts logged for future useApex & Visualforce code assistSetup and fetch debug logs for any user in your orgGreat set of Apex & Visualforce metadata templates that are crowd-sourced from GitHub
JOE: So as we mentioned earlier, it’s one thing to fix problems with Visualforce pages in your org. But finding such problems can be difficult unless you can scan your org's source code for specific problems, many of which might be tricky to find. For example, DML statements within a FOR loop would be challenging to find, even if you know how to build regular expressions.Let’s see how a great new feature of MavensMate can help with problems like this.
JOE: I’d like to officially unveil a new feature of MavensMate called Project Health Check. With a single mouse click, MavensMate scan the source code of your entire org and gives you a concise report about common problems. You can even drill into a problem and go right to the line in your source code that corresponds to the problem situation.
JOE: So let me take a few minutes to give you a quick tour of MavensMate, including the new Project Health Check feature.=====DEMO StepsCreate project (connect to demo org with standard Apex/VF metadata)Compile an Apex Class (show that metadata templates are being source in real-time from crowd-sourced GitHub repository)Show code assist in VisualforceRun unit testsRun Health Check against demo projectSelect 1 or 2 Health Check items from the reportShow items in projectResolve an item[TIMING: 5-7m]
JOE: To recap, choose your tools wisely for Visualforce development. You may use more than one. In any case, make sure to use tools that can help you:Implement best practices for Visualforce design and development… and tools that can help you scan your org periodically to quickly identify pages that might need a tune up
STEVE: Wow, thanks Joe. That new feature of MavensMate is awesome. I’m sure everyone here is going to install it tonight and start scanning their orgs to see just how healthy things are.Alright, we’ve covered a lot of material in today’s session. Let’s do a quick summary and make sure that you leave here with three key things in mind.[TIMING: Xm]
STEVE: Remember, we told you at the beginning of today’s session that there are a tremendous number of things that we could have covered to help you implement efficient Visualforce pages that respond well and help your users be more productive. But we’ve decided to focus on two or three key things that will make a difference for everyone here.Build memory-efficient Visualforce pages. Examine, reduce, or eliminate what? … everyone! … that’s right, view stateNext, create database-efficient Visualforce page controllers. Execute efficient SOQL queries that use what? … everyone! … that’s right, selective filter conditions and with sharingAnd finally, make your life easier. Use some of these next generation tools like MavensMate that make it easy for you to build and fix Visualforce page implementations.