Wade6:11
Thank you, Srini. It is awesome to be here today. This is without a doubt my favorite part of Dreamforce, being able to spend time with you, being able to geek out a little bit. We're going to look at some code and we're going to take a look at a lot of the great capabilities in the platform, especially things that we've released in Winter '18. And as Srini mentioned, we have to build apps fast. None of us in this room can afford to take time and to not deliver continuous value to all of our customers. And so all of this starts with the Salesforce platform where there's a full spectrum of capabilities from no code all the way to code, and it's centered around our multi-tenant platform where we manage your infrastructure and we deliver updates continuously. Whether you're a developer or you work in code all day long, it also lets you as teams work together to continuously deliver using tools you love and processes that your teams have adopted. It also includes the number one enterprise marketplace in the world, and that is the AppExchange, where you can get applications that have been pre-built by amazing partners or you can get components that you can use in your own custom apps. Now we have not been idle here in Winter '18, and so I want to give you a few updates on some of the great things that we've delivered. You may have seen in the keynote yesterday, Parker talked about dynamic Lightning pages. We're going to show this in action, and it provides an amazing way for you to create declarative experiences that will customize the way that your components are available in Winter '18. We're going to see a lot of them in the demo coming up here shortly. And then of course, Visualforce pages can automatically get updated so that it's taking advantage of the Lightning Design System, richly rendering all of those controls in a way that looks just like the Lightning applications. Now in Heroku, we've also made a lot of updates. And if you're building applications that combine apps running in Heroku as well as in the Lightning platform, that data synchronizes back and forth five times faster than it did in the past using Heroku Connect. And if you're building applications that require compliance, HIPAA, PCI, you can do that now using Heroku Shield, building it and using it along with the rest of the apps you're building in the Lightning platform. Now last year, we got to introduce you all to Salesforce DX, pulling together an amazing developer experience. Now in Winter '18, we've got a bunch of new capabilities as well. One of the things I'm most excited about is our next-generation packaging technology. And so whether you're an ISV or a customer, you can use this packaging technology to distribute your applications, to package it up, to version it, to be able to deliver it into your environments, whether it's sandbox or production. So definitely take a look at this next-generation packaging technology. We've also introduced updates to scratch orgs that are going to allow you to create a scratch org that reflects the shape of your production environment. So if you're a developer, you can be confident that everything you have enabled in production exists and is enabled in that scratch org so that you can build what you or our partners build. And so we're going to talk about them a little bit today. Now to show how all this comes together, I want to introduce you to an amazing Trailblazer, the Caribou Center. The Caribou Center is an organization that is changing lives and empowering people in rural Kenya, and they're doing this through high-tech agriculture. Their mission is to provide education to children and in doing so, provide ways with which their parents can end up getting employed, and really trying to change the dynamic of how that family structure exists. Now the Caribou Center is sustainably funded by a social enterprise called Organic Savannah. And what Organic Savannah does is it ends up harvesting crops that are used to make products. They are really taking advantage of the Salesforce platform in order to build apps and to build apps fast. They're using it to connect students and parents together, they're using it to track how harvests are doing in the fields, and they're doing it all. They're also using it to sell their products to distributors as well as individuals. And so what we're going to do is we're going to take a look at that second use case. We're going to see how the Caribou Center is using the Salesforce platform to manage their harvests and to track their crops. So we're going to start in GitHub, and GitHub is where the source of truth is for the application that the Caribou Center is building. Now they're using source-driven development with Salesforce DX. And as part of this, they're creating scratch environments. The way that our partners, our tooling partners, are creating amazing experiences in the tools here, you can see the Illuminated Cloud, which is a tool built by Scott Wells, and it's an extension to IntelliJ providing all the rich capabilities that you'd expect for Salesforce. It's got IntelliSense, syntax highlighting, code navigation, as well as a command palette that interacts with all the commands and capabilities that the CLI and Salesforce DX take advantage of. Now the other thing I want to highlight is that the Caribou Center is using this new capability with scratch orgs to create a scratch org that looks exactly like their production environment. So here you can see the source org ID so that when we create the scratch org, it has all the fields organized by crops. And so when we expand that, you can see all these fields. This is a brand new control, a Lightning component available in Winter '18, the tree view, and you can interact with it. Notice on the right, it's lighting up that pane and we can see all the details related to that field. One of the things on the right I want to call out is we've got this ability now to expand and collapse different parts of the screen to take best advantage of the real estate, and we're using another new Lightning component available in Winter '18, and that is the accordion control that you can use to provide this capability. Now if we look back on the left, not only can we render these fields in a tree control, we can also list it as a rich data table, and that is using yet another new Lightning component available in Winter '18, and that is the data table where we can multi-select many items. Another Lightning component available in Winter '18 is the dual list box. Now remember I said we've got a lot of new exciting Lightning components here, and so these are four that I think you're all going to love. So we can go ahead and submit this. Now you see how this ends up in an end user experience. Let's go ahead and switch back to our code and take a look at what this looks like for a developer. It's really pretty straightforward. Here you can see we've got a line of code, or maybe four lines of code, but one line of code representing the data table and everything about it. Below we've got a Lightning tree control. We can also specify details about what that's going to be rendering. And if we flip over, we can take a look at the dual list box, yet another line of code. And so all of this comes together to provide some pretty rich capabilities that we can use for rendering it as a custom Lightning component as a rich map where we can interact with the fields, and we can also see some information about it based on the color of the rendering of it. Here you can see a field that needs some attention. You can see the alert on the right: the irrigation level is below threshold. So what we're going to do is we're going to toggle this button right here and we're going to go ahead and turn on the irrigation. We're going to provide some water to this field. Notice when we toggled that, we got an overlay on the custom components on the left. We see that little label that is now overlaid on there. How is this working? How are we, through an action on this right pane, updating the left? Well, we're doing it taking advantage of the Lightning Data Service. So why don't we switch back to our code and see how this works? We also specified all the fields that we're interacting with, including if we move over a little bit to the left, you'll see irrigation. So when we toggle that control, we're saving the record and the Lightning Data Service is updating all the Lightning components. Here you can see the JavaScript where we're actually saving that record, where we're using again that service ID, and we're going to go ahead and save that record. And so again, all those Lightning components can receive that updated information and render accordingly. So let's now switch back to the application and want to highlight a couple of additional things that are exciting here in Winter '18. Now here's a field that needs some attention. If we click the detail, we can look at all the details of that field and notice how in this view it's not really calling out to us that there's something wrong. So we're going to create a filter that if the status is not OK, it's going to go ahead and render that component. Now this is taking advantage of dynamic Lightning pages so that based on the data for that record, we can arbitrarily decide what renders and what doesn't. So let's go ahead and save this and go back, and then notice how on the record that we've got selected, it's got the alert so we know that there's something we need to do. If we select another field where everything is okay, that component doesn't render. So dynamic Lightning pages provides a really great declarative experience for rendering how those pages get rendered. Now another thing that's exciting here is the ability to create new types of templates that end users can end up creating. And so how did we do this? What enables this? Well, it turns out that a custom template is nothing more than a Lightning component. So let's switch back to the code and see how it is that this works. Notice here in the top, we've got a couple of attributes, left and right. These represent the two different panes that we're rendering on this page. And then below, we've got some additional layouts here where we're specifying again that left and right. This is where the components are going to end up getting rendered. So in addition to this, we've got a design file, and that design file specifies some of the layouts for the flexi pages. So all of this comes together to create a pretty simple, straightforward custom template, and hopefully you can get an imagine how you can create some pretty sophisticated pages. We've shown this in different IDEs and in different editors, and you can see all the same sorts of things here. This is Visual Studio Code, and we've got a full panel of capabilities that are going to end up invoking commands available in Salesforce DX. Now we made a change in that scratch org, so what we're going to do is we're going to pull those changes now out of the scratch org. We're going to invoke this command, and only the things that we have changed and only the customizations we've made in that scratch org are going to come back out so that we can use this now and commit it into our source control. Once we've pulled it, now we can go ahead and commit it and push it back into the repo. And what's awesome is the Caribou Center is going that next step and they've got continuous integration setup listening to changes in this repo. So here you can see what it's doing itself: it's creating a scratch org, it's running tests, it's pushing source, it's deleting the scratch org when it's done. But the one thing I really want to highlight is that last command, and that is the Caribou Center is creating a next-generation package, a package that they'll then use to install into their sandbox environments as well as their production environments. And so all of this comes together: these updates with Winter '18 for Lightning, Salesforce DX to drive continuous delivery, and packaging in order to distribute to help the Caribou Center build apps fast. And so with that, pass it back to you, Srini. Thank you.