The problem with Billy's code is that it will create a new Order record every time the Opportunity is updated, even if it was already closed previously.
A better approach would be to use the Trigger Pattern to check for changes to the Opportunity and only create the Order if the Opportunity changes to the closed state. This can be done using the Trigger Pattern with the State design pattern.
Some key points:
- Use Trigger Pattern to separate trigger logic from main logic
- Check for changes to Opportunity using Trigger.oldMap and Trigger.newMap
- Only process if Opportunity changes to closed state
- Use State design pattern to represent different Opportunity states
- Create Order only if state changes to "Closed"
This
"We'll need an Apex trigger to do that." Sound familiar? Take your advanced Admin skills to the next level by developing Apex triggers to solve complex business requirements that can't be implemented using just the configuration-driven features of Force.com. Join us to learn when and how to write your first Apex trigger, and some best practices for making them effective.
Platform Events enables a new event-driven architecture for Salesforce focused on events and record changes, rather than full record processing. Join us to learn about Platform Events and what this will mean to the future of integration with Salesforce.
In this exclusive webinar, you'll learn about
- How Platform Events enable real-time integration
- Defining, publishing and subscribing to Platform Events in Salesforce
- How Platform Events work through live demonstrations
Apex Triggers can be your best friend or your worst enemy. When a trigger is firing properly your data is under control and remains sane, but when a trigger doesn't fire properly, your users can be faced with the frustration of exceptions when saving a record, or worse: incorrect data. Join us to learn tips and tricks on how to debug and solve the most complex issues, including: Ambiguous Field Validation, After Insert Activity Errors, and SOQL and Governor Limit Errors. You'll learn the origins of these kinds of advanced trigger issues and gain solutions for avoiding them.
"We'll need an Apex trigger to do that." Sound familiar? Take your advanced Admin skills to the next level by developing Apex triggers to solve complex business requirements that can't be implemented using just the configuration-driven features of Force.com. Join us to learn when and how to write your first Apex trigger, and some best practices for making them effective.
Platform Events enables a new event-driven architecture for Salesforce focused on events and record changes, rather than full record processing. Join us to learn about Platform Events and what this will mean to the future of integration with Salesforce.
In this exclusive webinar, you'll learn about
- How Platform Events enable real-time integration
- Defining, publishing and subscribing to Platform Events in Salesforce
- How Platform Events work through live demonstrations
Apex Triggers can be your best friend or your worst enemy. When a trigger is firing properly your data is under control and remains sane, but when a trigger doesn't fire properly, your users can be faced with the frustration of exceptions when saving a record, or worse: incorrect data. Join us to learn tips and tricks on how to debug and solve the most complex issues, including: Ambiguous Field Validation, After Insert Activity Errors, and SOQL and Governor Limit Errors. You'll learn the origins of these kinds of advanced trigger issues and gain solutions for avoiding them.
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.
The new queueable Apex feature is not only a great way to make asynchronous calls, it also enables new design patterns that let you dramatically increase the reliability of those calls. In addition, you can detect and recover from a wide variety of errors and exceptions with clarity. Join us to learn how to use queueable Apex to build robust asynchronous code.
The Salesforce object model and the SOQL query language form the foundation of working with Salesforce data. While most developers are SQL-literate, there are small but important distinctions between SOQL and SQL. In this webinar, developers new to Salesforce will come to understand these differences, jumpstarting their Salesforce developer success.
You can create simple and some complex logic using workflows in Force.com, but sometimes you may need something more. Apex triggers provide the ability to solve complex logic and are an essential part of any Salesforce implementation.
Learn how to build and manage triggers and best practices on when to use them. Lastly, we’ll also take a look at some debugging techniques and tools that will make coding Apex triggers a breeze.
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.
The Salesforce platform offers system as well as application level security capabilities for building robust and secure applications. Join us as we introduce the system-level security features of Salesforce, like authentication and authorization mechanisms that include various Single Sign-On and OAuth flows. We'll also cover declarative application-level security features, like user profiles, roles and permissions, and how an Organization Wide Security and record-sharing model enforces a finer level of access control over the data.
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.
Salesforce integration best practices columbus meetupMuleSoft Meetup
onnectivity Overview
Connectivity to Salesforce Clouds
Connectors and Salesforce APIs
Connector interacting with Salesforce core
Composite Connector
Triggers
Establishing a connected app for MuleSoft Connectors
Salesforce Integration Best Practices
When to move data into SFDC
Appropriate use of APEX
Salesforce integration technologies and considerations
Data Virtualization/Live Read
Data Manipulation and Migration
Real-time changes, events and Streaming
Resources
Salesforce Accelerators for Service Cloud and Commerce Cloud
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.
Any structure expected to stand the test of time and change needs a strong foundation! Software is no exception. Engineering your code to grow in a stable and effective way is critical to your ability to rapidly meet the growing demands of users, new features, technologies, and platform capabilities. Join us to obtain architect-level design patterns for use in your Apex code to keep it well factored, easy to maintain, and in line with platform best practices. You'll follow a Force.com interpretation of Martin Fowler's Enterprise Architecture Application patterns, and the practice of Separation of Concerns.
Understanding the Salesforce Architecture: How We Do the Magic We DoSalesforce Developers
Join us for a deep dive into the architecture of the Salesforce1 Platform. We'll explain how multitenancy actually works and how it affects you as a Salesforce customer. By understanding the technology we use and the design principles we adhere to, you'll see how our platform teams manage three major upgrades a year without causing any issues to existing development. We'll cover the performance and security implications around the platform to give you an understanding of how limits have evolved. By the end of the session, you'll have a better grasp of the architecture underpinning Force.com and understand how to get the most out of it.
Join us as we provide an overview of how to integrate to Salesforce using the built-in tools, and look at integration on the different layers of Salesforce (User Interface, Data Logic, and Database). We'll be providing tips, best practices, and real-life examples.
As companies and their product/service lists grow, it becomes increasingly difficult to manage product pricing, identify great upsell opportunities, and keep track of deals being offered by your competition. On top of this, sales reps aren’t given up-to-date pricing information on their products, leading to slower quote times and lost opportunities. Configuring a quote can be a time consuming task, especially when critical data is not easily accessible in real time.
Have you ever wanted to write a trigger? This workshop is designed for people who would like begin learning the basics of implementing business logic using Apex, the primary programming language of the Salesforce platform. This workshop will begin exploring the building blocks of Apex, and provide you with the best practices for implementing complex business logic.
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.
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
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.
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.
The new queueable Apex feature is not only a great way to make asynchronous calls, it also enables new design patterns that let you dramatically increase the reliability of those calls. In addition, you can detect and recover from a wide variety of errors and exceptions with clarity. Join us to learn how to use queueable Apex to build robust asynchronous code.
The Salesforce object model and the SOQL query language form the foundation of working with Salesforce data. While most developers are SQL-literate, there are small but important distinctions between SOQL and SQL. In this webinar, developers new to Salesforce will come to understand these differences, jumpstarting their Salesforce developer success.
You can create simple and some complex logic using workflows in Force.com, but sometimes you may need something more. Apex triggers provide the ability to solve complex logic and are an essential part of any Salesforce implementation.
Learn how to build and manage triggers and best practices on when to use them. Lastly, we’ll also take a look at some debugging techniques and tools that will make coding Apex triggers a breeze.
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.
The Salesforce platform offers system as well as application level security capabilities for building robust and secure applications. Join us as we introduce the system-level security features of Salesforce, like authentication and authorization mechanisms that include various Single Sign-On and OAuth flows. We'll also cover declarative application-level security features, like user profiles, roles and permissions, and how an Organization Wide Security and record-sharing model enforces a finer level of access control over the data.
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.
Salesforce integration best practices columbus meetupMuleSoft Meetup
onnectivity Overview
Connectivity to Salesforce Clouds
Connectors and Salesforce APIs
Connector interacting with Salesforce core
Composite Connector
Triggers
Establishing a connected app for MuleSoft Connectors
Salesforce Integration Best Practices
When to move data into SFDC
Appropriate use of APEX
Salesforce integration technologies and considerations
Data Virtualization/Live Read
Data Manipulation and Migration
Real-time changes, events and Streaming
Resources
Salesforce Accelerators for Service Cloud and Commerce Cloud
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.
Any structure expected to stand the test of time and change needs a strong foundation! Software is no exception. Engineering your code to grow in a stable and effective way is critical to your ability to rapidly meet the growing demands of users, new features, technologies, and platform capabilities. Join us to obtain architect-level design patterns for use in your Apex code to keep it well factored, easy to maintain, and in line with platform best practices. You'll follow a Force.com interpretation of Martin Fowler's Enterprise Architecture Application patterns, and the practice of Separation of Concerns.
Understanding the Salesforce Architecture: How We Do the Magic We DoSalesforce Developers
Join us for a deep dive into the architecture of the Salesforce1 Platform. We'll explain how multitenancy actually works and how it affects you as a Salesforce customer. By understanding the technology we use and the design principles we adhere to, you'll see how our platform teams manage three major upgrades a year without causing any issues to existing development. We'll cover the performance and security implications around the platform to give you an understanding of how limits have evolved. By the end of the session, you'll have a better grasp of the architecture underpinning Force.com and understand how to get the most out of it.
Join us as we provide an overview of how to integrate to Salesforce using the built-in tools, and look at integration on the different layers of Salesforce (User Interface, Data Logic, and Database). We'll be providing tips, best practices, and real-life examples.
As companies and their product/service lists grow, it becomes increasingly difficult to manage product pricing, identify great upsell opportunities, and keep track of deals being offered by your competition. On top of this, sales reps aren’t given up-to-date pricing information on their products, leading to slower quote times and lost opportunities. Configuring a quote can be a time consuming task, especially when critical data is not easily accessible in real time.
Have you ever wanted to write a trigger? This workshop is designed for people who would like begin learning the basics of implementing business logic using Apex, the primary programming language of the Salesforce platform. This workshop will begin exploring the building blocks of Apex, and provide you with the best practices for implementing complex business logic.
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.
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
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.
Developing Offline Mobile Apps With Salesforce Mobile SDK SmartStoreSalesforce Developers
At some point, all mobile app users lose their data signal. Join us to learn best-practices for coding for offline requirements with the salesforce.com Mobile SDK. We'll develop a simple app using SmartStore offline storage, highlighting the new SmartSQL and SmartSync features. With these tools, you can take your mobile apps to the next level, developing native and hybrid applications on iOS and Android that have offline access to your data.
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.
TrailheaDX 2019 : Truly Asynchronous Apex Triggers using Change Data CaptureJohn Brock
For the first time ever, the Salesforce Platform has the capability to execute truly asynchronous Apex Triggers. To deliver this feature, we have enabled Apex Triggers for Change Data Capture events. During this session we will enable Change Data Capture in our org, refactor a piece of existing code to execute asynchronously, and discuss other use-cases where this pattern could be used. Come learn how to speed up transactions for end users and decrease your frustration with limits by moving trigger logic into asynchronous triggers.
Presentation from the Salesforce1 Platform ELEVATE workshop on December 18, 2013. The event took place at USC's Davidson Continuing Education Conference Center. Developer Evangelists Samantha Ready and Pat Patterson were on hand to present and lead attendees through various hands-on exercises.
Presented these slides at Dreamforce Global Gathering on Nov 24, 2018 #DFGG18 to the developer community with the intent to introduce them to a new way of process integration using platform events and data integration using change data capture
Introduction to Developing Android Apps With the Salesforce Mobile SDKSalesforce Developers
This session will show mobile developers how to build enterprise Android applications using our new Salesforce Mobile SDK. Not only will users be shown how to use the new features and functions of the SDK but we'll also dive into best practices for building mobile APIs focussed on enterprise business applications.
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.
Discover how to use the Salesforce API's and Java apps for loading data when there are more complex relationships involved. You can even build your own custom data loader (BYODL) For example, how do you add data to your Custom Object with a Master-Detail relationship with the Account Object, as well as multiple lookup relationships to other custom objects referenced only by ID's? Using the SOAP, REST, and Metadata API's with Apex and Java code, you will see example of how to solve many of the common data loading scenarios that Salesforce developers experience.
Talk given by Marat Vyshegorodtsev and Sergey Gorbaty. Enterprise Security team at Salesforce, in January 2017.
Discusses a set of open source tools that analyze the Apex/VisualForce code and advise on its quality.
Get ready for your platform developer i certification webinarJackGuo20
Whether you’re just starting out with developing on Salesforce, or been working with the platform for a while, you should consider getting Platform Developer I (PDI) certified. With a PDI certification, you can show your level of expertise against industry standards, discover product features you’ve never heard of before, and even connect with other professional developers building with Salesforce. Join this webinar to learn what content the PDI exam covers, how exams are designed, and pick up tips and tricks from Developer Evangelists who have taken the exam.
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.
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.
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.
With the MuleSoft Anypoint Platform, you can build scalable data integrations and flows across any application, data source, and device - whether in the cloud or on-premise. The platform provides a suite of out-of-the-box connectors that work across any system, and you can customize them to whatever you need with minimal code. This means you can integrate and deploy innovative, robust customer apps even faster. Join this webinar, learn the basics of the Anypoint Platform, and see how it works with Salesforce and any of your third party systems.
This webinar focuses on what’s available for app delivery and development lifecycles on the Salesforce platform. We’ll walk through a real-life scenario that spans VS Code, the Salesforce CLI, sandboxes, scratch orgs, and packaging. Join us and learn patterns and considerations that you can immediately use to modernize your development using Salesforce DX.
At Dreamforce 2018, we brought you new and exciting ways to build apps faster, integrate apps easier, and make apps smarter. Join us to learn more about how the Salesforce platform helps developers build apps of the future.
Knowing how an IDE works can drastically simplify a developer's day-to-day job. In this webinar, Zayne and René dive into Visual Studio Code. No matter if you're a Salesforce Developer familiar with the good old Force.com IDE, now looking to move to VS code or if you’re brand new to developing on the Salesforce Platform. This webinar will bring you up to high-productivity!
Effectively using an IDE works can drastically simplify your daily development. In this webinar, we dive into Visual Studio Code. Whether you're expanding your skill set from Force.com IDE, or if you’re brand new to developing on the Salesforce Platform, this webinar is for you!
Developers need data to create great apps, but often find managing lots of data to be a painful process. Big Objects brings the power and scale of big data to the Lightning Platform, all while using the same Salesforce platform tools and APIs you already know.
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.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
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.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
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.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
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
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
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.
3. Richard Vanhook
Senior Technical Solution Architect
@richardvanhook
Dennis Thong
Director - Technical Solution Architect
@denniscfthong
4. The Plan
Cover four design patterns
▪ Problem
▪ Pattern Abstract
▪ Code
Your participation is encouraged!
6. Meet Billy, Your Admin
• 3+ yrs as Salesforce Admin
• Just recently started coding
• Sad because of this:
Trigger.AccountTrigger: line 3, column 1
System.LimitException: Too many record
type describes: 101
• Needs your help!
7. The Offending Code
01
02
03
04
05
06
trigger AccountTrigger on Account (before insert, before update) {
for(Account record : Trigger.new){
AccountFooRecordType rt = new AccountFooRecordType();
....
}
}
07
08
09
10
11
12
13
public class AccountFooRecordType {
public String id {get;private set;}
public AccountFooRecordType(){
id = Account.sObjectType.getDescribe()
.getRecordTypeInfosByName().get('Foo').getRecordTypeId();
}
}
• When a single Account is inserted, what happens?
• When 200+ Accounts are inserted…?
9. Let’s Code It!
01
02
03
04
05
06
trigger AccountTrigger on Account (before insert, before update) {
for(Account record : Trigger.new){
AccountFooRecordType rt = new AccountFooRecordType();
....
}
}
07
08
09
10
11
12
13
public class AccountFooRecordType {
public String id {get;private set;}
public AccountFooRecordType(){
id = Account.sObjectType.getDescribe()
.getRecordTypeInfosByName().get('Foo').getRecordTypeId();
}
}
• Above is the offending code again
• Changes are highlighted in next slides
10. Let’s Code It!
01
02
03
04
05
06
trigger AccountTrigger on Account (before insert, before update) {
for(Account record : Trigger.new){
AccountFooRecordType rt = (new AccountFooRecordType()).getInstance();
....
}
}
07
08
09
10
11
12
13
14
15
16
public class AccountFooRecordType {
public String id {get;private set;}
public AccountFooRecordType(){
id = Account.sObjectType.getDescribe()
.getRecordTypeInfosByName().get('Foo').getRecordTypeId();
}
public AccountFooRecordType getInstance(){
return new AccountFooRecordType();
}
}
11. Let’s Code It!
01
02
03
04
05
06
trigger AccountTrigger on Account (before insert, before update) {
for(Account record : Trigger.new){
AccountFooRecordType rt = AccountFooRecordType.getInstance();
....
}
}
07
08
09
10
11
12
13
14
15
16
public class AccountFooRecordType {
public String id {get;private set;}
public AccountFooRecordType(){
id = Account.sObjectType.getDescribe()
.getRecordTypeInfosByName().get('Foo').getRecordTypeId();
}
public static AccountFooRecordType getInstance(){
return new AccountFooRecordType();
}
}
12. Static
▪ Can modify member variables, methods, and blocks
▪ Executed when?
• When class is introduced (loaded) to runtime environment
▪ How long does that last in Java?
• Life of the JVM
▪ In Apex?
• Life of the transaction
13. Let’s Code It!
01
02
03
04
05
06
trigger AccountTrigger on Account (before insert, before update) {
for(Account record : Trigger.new){
AccountFooRecordType rt = AccountFooRecordType.getInstance();
....
}
}
07
08
09
10
11
12
13
14
15
16
public class AccountFooRecordType {
public String id {get;private set;}
public AccountFooRecordType(){
id = Account.sObjectType.getDescribe()
.getRecordTypeInfosByName().get('Foo').getRecordTypeId();
}
public static AccountFooRecordType getInstance(){
return new AccountFooRecordType();
}
}
14. Let’s Code It!
01
02
03
04
05
06
trigger AccountTrigger on Account (before insert, before update) {
for(Account record : Trigger.new){
AccountFooRecordType rt = AccountFooRecordType.getInstance();
....
}
}
07
08
09
10
11
12
13
14
15
16
17
18
public class AccountFooRecordType {
public static AccountFooRecordType instance = null;
public String id {get;private set;}
public AccountFooRecordType(){
id = Account.sObjectType.getDescribe()
.getRecordTypeInfosByName().get('Foo').getRecordTypeId();
}
public static AccountFooRecordType getInstance(){
if(instance == null) instance = new AccountFooRecordType();
return instance;
}
}
15. Let’s Code It!
01
02
03
04
05
06
trigger AccountTrigger on Account (before insert, before update) {
for(Account record : Trigger.new){
AccountFooRecordType rt = AccountFooRecordType.getInstance();
....
}
}
07
08
09
10
11
12
13
14
15
16
17
18
public class AccountFooRecordType {
private static AccountFooRecordType instance = null;
public String id {get;private set;}
public AccountFooRecordType(){
id = Account.sObjectType.getDescribe()
.getRecordTypeInfosByName().get('Foo').getRecordTypeId();
}
public static AccountFooRecordType getInstance(){
if(instance == null) instance = new AccountFooRecordType();
return instance;
}
}
16. Let’s Code It!
01
02
03
04
05
06
trigger AccountTrigger on Account (before insert, before update) {
for(Account record : Trigger.new){
AccountFooRecordType rt = AccountFooRecordType.getInstance();
....
}
}
07
08
09
10
11
12
13
14
15
16
17
18
public class AccountFooRecordType {
private static AccountFooRecordType instance = null;
public String id {get;private set;}
private AccountFooRecordType(){
id = Account.sObjectType.getDescribe()
.getRecordTypeInfosByName().get('Foo').getRecordTypeId();
}
public static AccountFooRecordType getInstance(){
if(instance == null) instance = new AccountFooRecordType();
return instance;
}
}
19. Your Suggestion to Billy
01
02
03
04
05
06
public class GoogleMapsGeocoder{
public static List<Double> getLatLong(String address){
//web service callout of some sort
return new List<Double>{0,0};
}
}
07
08
System.debug(GoogleMapsGeocoder.getLatLong('moscone center'));
//=> 13:56:36.029 (29225000)|USER_DEBUG|[29]|DEBUG|(0.0, 0.0)
But then Billy mentions these requirements
▪ Need other options besides Google Maps
▪ Allow client code to choose provider
20. Solution: Strategy
Context
Strategy
strategies
Client
+operation()
1
*
+operation()
defines a family of algorithms,
ConcreteStrategyA
encapsulates each one, and makes
them interchangeable
+operation()
▪ Context => Geocoder
▪ operation() => getLatLong()
▪ Strategy => GeocodeService
▪ ConcreteStrategyA => GoogleMapsImpl
▪ ConcreteStrategyB => MapQuestImpl
ConcreteStrategyB
+operation()
21. Let’s Code It
01
02
03
public interface GeocodeService{
List<Double> getLatLong(String address);
}
04
05
06
07
08
public class GoogleMapsImpl implements GeocodeService{
public List<Double> getLatLong(String address){
return new List<Double>{0,0};
}
}
09
10
11
12
13
public class MapQuestImpl implements GeocodeService{
public List<Double> getLatLong(String address){
return new List<Double>{1,1};
}
}
26. Question
How do we extend the functionality of an sObject in Apex without adding new fields?
Transient selection
checkboxes
Calculated Fields
with Updates
28. Example - Scenario
Weather sObject
▪ City__c
▪ TempInFahrenheit__c (in Fahrenheit)
VisualForce Requirements
▪ Stored temperature in Fahrenheit is displayed in Celcius
▪ User enters Temperature in Celcius and is stored to the record in Fahrenheit
Bi-directional Display and
Calculation
29. The Code – Decorated sObject Class
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class DecoratedWeather {
public Weather__c weather { get; private set; }
public DecoratedWeather ( Weather__c weather) {
this.weather = weather;
}
public Decimal tempInCelcius {
get {
if (weather != null && tempInCelcius == null )
tempInCelcius = new Temperature().FtoC(weather.TempInFahrenheit__c);
return tempInCelcius;
}
set {
if (weather != null && value != null )
weather.TempInFahrenheit__c= new Temperature().CtoF(value);
tempInCelcius = value;
}
}
}
30. The Code – Custom Controller
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
public class Weather_Controller {
public List<DecoratedWeather> listOfWeather {
get {
if (listOfWeather == null) {
listOfWeather = new List<DecoratedWeather>();
for (Weather__c weather : [ select name, temperature__c from Weather__c]) {
listOfWeather. add(new DecoratedWeather(weather));
}
}
return listOfWeather;
}
private set;
}
}
31. The Code – VisualForce Page
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<apex:page controller="weather_controller">
<!-- VF page to render the weather records with Ajax that only rerenders
the page on change of the temperature
-->
<apex:form id="theForm">
<apex:pageBlock id="pageBlock">
<apex:pageBlockTable value="{!listOfWeather}" var="weather">
<apex:column value="{!weather.weather.name}"/>
<apex:column headerValue="Temperature (C)">
<apex:actionRegion >
<apex:inputText value="{!weather.tempInCelcius}">
<apex:actionSupport event="onchange"
reRender="pageBlock"/>
</apex:inputText>
</apex:actionRegion>
</apex:column>
<apex:column headerValue="Temperature (F)"
value="{!weather.weather.Temperature__c}"
id="tempInF"/>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>
No client side
logic!!!
34. Billy Has a New Problem!
Billy wrote a trigger to create an order on close of an opportunity,
however:
▪ It always creates a new order every time the closed opportunity is
updated
▪ When loading via Data Loader, not all closed opportunities result in an
order
35. The Offending Code
01
02
03
04
05
06
07
08
trigger OpptyTrigger on Opportunity (after insert, after update) {
if (trigger.new[0].isClosed) {
Order__c order = new Order__c();
…
insert order
}
}
Poor reusability
Occurs regardless
of prior state
No Bulk
Handling
36. Any Better?
01
02
03
04
05
trigger OpptyTrigger on Opportunity (after insert, after update) {
01
02
03
04
05
06
07
08
09
10
11
12
13
public class OrderClass {
new OrderClass().CreateOrder(trigger.new);
}
public void CreateOrder(List<Opportunity> opptyList) {
for (Opportunity oppty : opptyList) {
if (oppty.isClosed) {
Order__c order = new Order__c();
Occurs regardless
...
of prior state
insert order;
}
}
}
}
Not bulkified
37. How’s this?
01
02
03
04
0506
trigger OpptyTrigger on Opportunity (before insert, before update) {
if (trigger.isInsert) {
new OrderClass().CreateOrder(trigger.newMap, null);
else
new OrderClass().CreateOrder(trigger.newMap, trigger.oldMap);
01
public class OrderClass {
02
03
public void CreateOrder(Map<Opportunity> opptyMapNew
04
Map<Opportunity> opptyMapOld) {
05
List<Order__c> orderList = new List<Order__c>();
06
for (Opportunity oppty : opptyMapNew.values()) {
07
if (oppty.isClosed && (opptyMapOld == null ||
08
!opptyMapOld.get(oppty.id).isClosed)) {
09 least it’s
Order__c order = new Order__c();
At
10
...
bulkified
11
orderList.add(order);
12
}
13
}
14
insert orderList ;
15
}
This code is highly coupled
and not reusable
38. Solution – Bulk Transition
•
•
•
Checks for eligible records
that have changed state and
match criteria
Calls utility class method to
perform the work
Only eligible records are
passed in
•
Generic utility class method that can
be called from any context
39. At Last!!!
01
02
03
04
05
06
07
08
09
10
11
trigger OpptyTrigger on Opportunity (after insert, after update) {
if (trigger.isAfter && (trigger.isInsert || trigger.isUpdate)) {
List<Opportunity> closedOpptyList = new List<Opportunity>();
for (Opportunity oppty : trigger.new) {
if (oppty.isClosed && (trigger.isInsert ||
(trigger.isUpdate &&
!trigger.oldMap.get(oppty.id).isClosed)))
closedOpptyList.add(oppty);
}
if (!closedOpptyList.isEmpty())
new OrderClass().CreateOrderFromOpptys(closedOpptyList)
01
02
03
04
05
06
07
08
09
public class OrderClass {
public void CreateOrdersFromOpptys(List<Opportunity> opptyList) {
List<Order__c> orderList = new List<Order__c>();
for (Opportunity oppty : opptyList) {
Order__c order = new Order__c();
This method is now a lot
...
more reusable and is bulkorderList.add(order);
safe
}
insert orderList ;
Trigger handles state
transition
41. Resources
Wrapper Classes - http://wiki.developerforce.com/page/Wrapper_Class
Apex Code Best Practices - http://wiki.developerforce.
com/page/Apex_Code_Best_Practices
Apex Web Services and Callouts - http://wiki.developerforce.
com/page/Apex_Web_Services_and_Callouts
Sample Code - https://github.com/richardvanhook/Force.com-Patterns
42. More at #DF13
Apex Enterprise Patterns: Building Strong Foundations
Tuesday, November 19th: 12:15 pm - 01:00 pm - Moscone Center West – 2009
High Reliability DML and Concurrency Design Patterns for Apex
Monday, November 18th: 11:15 am - 12:00 pm - Moscone Center West – 2009
Making Your Apex and Visualforce Reusable
Tuesday, November 19th: 12:15 pm - 01:00 pm - Moscone Center West – 2022
Design Patterns for Asynchronous Apex
Tuesday, November 19th: 05:15 pm - 06:00 pm - Moscone Center West – 2024
The Apex Ten Commandments
Wednesday, November 20th: 04:00 pm - 04:45 pm - Moscone Center West - 2006 / 2008
44. We want to hear
from YOU!
Please take a moment to complete our
session survey
Surveys can be found in the “My Agenda”
portion of the Dreamforce app