Who-hoo – The new Apex Interactive Debugger is finally here!!!

UPDATE on 3/1/2017: If you are interested in learning more about the Debugger, check out this Developers Relations Post. I would also suggest you check out this very interesting StackExchange Post, in which someone who has actually used the Debugger chimed in. FYI: It costs about $18,000/year.

Any Salesforce developer that has migrated from another language (especially .NET) knows that the debugging capabilities in Force.com are…ummm, how shall I put it?

They suck! Yeah, that’s it.

Well, guess what? As of Winter 16, Salesforce is offering a new Apex Interactive Debugger that will finally make developers of other platforms feel right at home.

I am talking about an interactive debugger that allows you to set, remove and suspend breakpoints. It also allows you to step in, step out, step over and through your code, as well as view variables at any point in the stack and also output System.debug statements to the console window.

This new interactive debugger is being offered as an eclipse plug-in (see image below).

ApexDebugger

Now, I must offer full disclosure right up front and tell you that there is one really big gotcha with this announcement and that is this:

It’s going to cost you. As in money. I would imagine a good amount of it too (although you will have to contact your Account Executive to find out exactly how much). Supposedly you can purchase debugger sessions that can be shared by your whole development team.

But why? Salesforce has always offered development tools for free.

The big reason for this cost is not because Salesforce is trying to make a lot of money off customers. It is to effectively limit the use of the tool. Because Salesforce is a multi-tenanted environment and resources are shared, if every customer all of a sudden was granted access to the new Apex Interactive Debugger, guess what would happen?

Crash!!!! as in all the servers lock up and no one is happy.

The Interactive debugger uses a debugger session manager and every debugging session is a transaction that can last up to 30 minutes. Each transaction needs a thread and a database connection. These are very expensive resources and in a shared environment, if every customer was able to do this, performance problems would quickly result.

Another thing to note is that the debugger uses the debugging API and at this time, that API is not publically available. This means that you will not find this kind of functionality offered in any third-party tools, such as MavensMate. Once Salesforce works out the kinks, they will likely release it publically, but in the meantime, the eclipse plug-in is the only way to go.

Also, for obvious reasons, this will only work on Sandbox orgs.

If you are a partner or a big development shop (now I am starting to wish I was one of those), then these limitations and the cost will likely not offset the benefit to having this super new tool. If you are interested in learning more, check out this Dreamforce video in which Josh Kaplan walks you through using the new debugger.

Happy debugging!!!!

UPDATE on 3/1/2017: If you are interested in learning more about the Debugger, check out this Developers Relations Post. I would also suggest you check out this very interesting StackExchange Post, in which someone who has actually used the Debugger chimed in. FYI: It costs about $18,000/year.

Book Review of “The Silent Intelligence: The Internet of Things”

SilentIntelligenceI recently had the pleasure of reading, “The Silent Intelligence: The Internet of Things”. This book was written by two machine to machine (M2M) experts who incorporated their own hard earned experiences along with the opinions of over thirty industry experts.

If you are on the fence about the Internet of Things (IOT) and not sure if this is just some trendy fad, then this is the book for you. It will definitely make you a believer and get you excited and slightly prepared for all the good stuff to come.

And if you are a Salesforce developer, have no fear, you have the right skills to capitalize on this soon to explode market. The cloud, and in particular the Force.com platform is in the perfect position to handle and benefit from all the data that will be streaming in from these devices. As Steve Pazol, of nPhase and Qualcomm says:

“At the end of the day, M2M is really about data. You’re getting data off devices or sensors that have been hard to get, but once it’s in the cloud, it’d data. So all the data tools, if it’s big data or any kind of business intelligence software, all that stuff is applicable”.

After reading that you should definitely be thinking about Wave and all that will be possible once all that IOT data makes it to the Force.com platform.

Ok, so once you read this and decide that you undoubtedly want to learn more, check out Pat Patterson and Reid Carlberg’s excellent posts on DeveloperForce about IOT and the Force.com platform specifically. Have fun!!!

Force.com Canvas and .NET Considerations

Introduced in Winter 2013, Force.com Canvas offers a way to host non-native (aka, non-force.com) web applications within Salesforce. Using a signed request, applications developed with your language of choice (including .NET) can connect to Salesforce and access data without requiring the authenticated Salesforce user to also log in to your web application.

I really like this technology because it opens up lots of opportunities for developers and allows shops with little Force.com experience another option. However, that does not mean that using it is all sunshine and butterflies. For one, it is very new and so there is not a lot of documentation out there (especially about .NET). The official developers guide is focused more towards Java developers, yet there are some very specific considerations that need to be made when working in the .NET environment. I recently had the opportunity to convert a Java Canvas app to an MVC Canvas app and this article highlights some of the main considerations you need to make when working in that environment.

MVC Project must use No Authentication

If you are creating a new MVC app, you will need to click “Change Authentication” when creating the project and select “No Authentication” (see NewMVCprojectImage). This will mean that the authentication scaffolding that ASP.NET adds to the project will not be included. I was not able to make a canvas app work with this scaffolding included. Perhaps, it can be done, but the only way I could make it work was to create a new project without the authentication (which makes sense since the authentication is being handled by the signed request and Force.com Canvas).

Must set SSL Enabled Property to True

Regardless of whether an ASP.NET Web forms or MVC application is used, you will need to set the site binding as HTTPS by setting the SSL Enabled property to True. You will also need to ensure that the Managed Pipeline Mode is set as Integrated. These properties can be CanvasMVCPropertiesaccessed by right-clicking the project in Solution Explorer and looking at the properties in the Properties window(see image). Also, note here that the SSL URL is the one you will want to use as the Canvas App URL when setting up the Connected App in Salesforce.

May want to consider using the following GitHub project to do handle the Server-side Authentication

In my project, I created a couple of class files to handle the server side validation of the signed request token passed in from Salesforce. However, to make your life easier and speed your time to development, you may want to consider downloading and using the following GitHub code to do the verification part. I did not find this code until after I had written mine and I thought mine was more streamlined, so I opted to go with it instead. But, looking at Shawn Blanchard’s code could give you a HUGE head start. If you don’t like that example, then you can check out the code that Paul Short posted here. It shows how to do the verification part for both a web form app and an MVC app.

 

 

 

 

 

 

Clean Code: Writing Code for Humans

I am a proud monthly subscriber of the online training website Pluralsight. I cannot imagine staying up to date in this field without that subscription. Since my blog focuses on Salesforce concepts, I will tell you that Pluralsight offers several brilliant courses that cover Salesforce.

CleanCodeBut, this post is titled “Clean Code: Writing Code for Humans” by Cory House, a brand new course just offered on Pluralsight. The course is described as the following:

“Anyone can write code a computer can understand, but professional developers write code *humans* can understand. Clean code is a reader-focused development style that produces software that’s easy to write, read and maintain.”

If you are new to programming (of ANY language), then this course if for YOU!

Even if you are an experienced programmer (of ANY language), then this course is for YOU TOO!  I have been doing software programming for over 20 years and have regularly espoused many of the concepts covered in this class, and I learned plenty by watching it. We are ALL prone to writing dirty code and this course has great practical advice for how to avoid this.

If your goal is to remain a programmer (more specifically, a productive and respected programmer), then this course is definitely for YOU!!!!!

Even if you do not already have a subscription to Pluralsight, never fear, they offer a free 10-day trial subscription. So, you really have no excuse. Go and see it I tell you.

Proper Use of ActionStatus component

In preparation for the Advanced Developer exam, I have been painstakingly going page by page through the Visualforce Developers Guide (which can be found online here). Almost every single person that has passed the exam has suggested that you become intimate with this document, but I wonder how many people truly are. I keep finding that the code listed in the tutorials does not work as it should. My last post was about one such error and now I have another big one.

On page 44 of the guide, they provide an example of using the ActionStatus component to provide a status for Ajax operations. Great! It is an awesome tool, but unfortunately, the code example they provide on that page does not work. If you copy the code from this tutorial and use it in a page and then try to see the text, you will not see it.

You can however, make two simple code changes to the code they provide and it will work as promised. But, only if you do this, will it work. So, the code that does work is seen below. What the tutorial authors missed was that an id attribute is needed for the ActionStatus component and that id value must be referenced in the status attribute of another component on the page.

ActionStatusProblemCode

Hope this helps someone else from not being confused about how ActionStatus is supposed to work. At first, I thought I was just not seeing it quickly enough (silly me…)

On Being a Certified Salesforce Developer

sf_cert_dev_rgbAfter six very intense weeks of study, I finally cemented my status as a Certified Salesforce Developer on March 9, 2013. As a former Microsoft MCSD, MCDBA and MVP, let me just say that Salesforce sure ain’t giving these things away. The test was VERY tricky and reminded me of the certification tests for Microsoft SQL Server (those were not easy either).

The funny part is that if you look at the official logo on the left, one might be led to think that the large slash through Software would indicate this stuff is a piece of cake. That is not exactly the case.

While I will admit that Salesforce has removed many of the complexities associated with software development, such as setting up and maintaining development and database servers, it has not totally done away with software (as their logo might suggest). What they have done is expose to small and mid-level businesses the potential of using some very highly functioning and scalable business applications through their affordable and subscription-based cloud-based platform.

As a software developer with twenty-years of experience building enterprise-level business applications for a variety of industries, adding the expertise of cloud-based development using the Force.com platform was a no-brainer. I simply cannot lose with this certification. The demand for highly-trained cloud-based developers is sky rocketing and I intend to strap myself to the top of that rocket.

In the next few weeks, I will continue my education as I prepare for the Salesforce Advanced Developer Certification. This distinction will be even harder to get, as I need to not only pass a grueling test, but I also need to complete a programming assignment and then defend my programming choices in a proctored essay exam. I feel like at the end of this I will have earned a Salesforce PhD.

I am using the excellent Premier Training available from Salesforce to do most of my training. In the coming weeks, I will be posting notes from the online training in hopes that it benefits anyone else out there trying for this certification. There cannot possibly be too many of us. The better trained other developers are in this field, the easier it is for me to work with them. It is also better for me, because they will be producing good solutions that highlight the platforms enormous potential and create opportunities for EVERYONE!

Please share with me your thoughts about cloud-based development and specifically the Force.com platform. I would love to hear from you.