Winter '10 Release coming soon


This release looks great, meatier than the last one!

See some of the ideas coming in this next release:
http://ideas.salesforce.com/popular/coming_in_winter_10

I still cannot find the formal release notes, nor an estimated date.... when is winter in San Francisco anyways?

I'm thinking we'll see these features launched in line with Dreamforce this year. Whilst on the topic of Dreamforce, if you work in the salesforce.com realm, hit up your boss or use your travel budget to attend this function, it really is truly revolutionary, I've been the last few years.

You'll come back with ideas on how to dramatically change the way your business operates, and you will become part of the small-ish percentage of people who are leading the charge in transforming organisations using the internet, and implementing Web 2.0 business strategies ahead of the pack...

Cloud Computing changes the Consulting Model

Interesting Article. Copy pasted below...

When a company uses a consulting firm to build an application, it is beneficial to have the firm take responsibility for the entire project. If you don't do this, it will be impossible to assign blame when things fall apart.

The other aspect of this is that the team needs to work closely together, else miscommunication and other mayhem ensue.

So this forces the consulting firm to staff up with ALL the various competencies that are needed to complete a project - and for the organization to use this one-stop shop.

But when you use a platform like Force.com, this becomes less important. The architecture of the application is already in place, all the hard things like security and authentication are taken care of, there is no database tuning needed, there is much closer communication with the users, etc. The development cycles are much shorter and the overall number of people involved is significanly less, so the need for project management and system documentation doesn't have the same level of criticality.

This means that it is relatively easy to slot different people in at different times from different companies - because they are all working in the same playground they know well. It's not a problem to carve out a snippet of APEX code to be developed by someone who is not heavily involved in the project, or for someone to build a VisualForce screen. It just plugs right in (or should).

Besides, because many of the applications that will be built on a platform like Force will be ever-evolving, it will be much harder to keep a complete team in place at all times. (This is beyond "maintenance" - there is no such thing as maintenance for situational applications - just ever-evolving software).

This means that we are going to see the rise of boutique firms that specialize in different aspects of Force development - application/business process design, APEX/VF programming, and cloud node integration. The old one-stop shop will become increasingly less necessary for building many types of applications, and companies will simply be able to call in specialists as needed from whatever firm has the resources available at the time.

Or not?

Sites changes the game...

Salesforce.com Sites is now out.

Got into salesforce.com, click setup, develop, then sites. Register your force.com domain!

I've registered http://hallman.force.com/.

This is a fundamental shift in what salesforce.com can do as a platform.

Really really exciting stuff.

Force.com is now becoming not only a CRM, but now a true database and application development platform.

Watch out Websphere and the likes.

To put this in perspective, people normally take in the region of 10 to 20 days of consulting and development for a simple integration from a website with salesforce.com, now using Sites, we could do it in 2-10 days.

Great for our team of developers, since we're much better at coding in Sites (Visualforce and Apex) than messing around with troublesome middleware and custom integration servers!

Simpler and cheaper, could you want for more?

First Australian Sites Deployment

Great to see some Aussie companies getting on board with Salesforce.com Sites.

See news article.

This organisation was lucky enough to get on the pre-release schedule for Sites.

Our company was lucky enough to work with a number of the Australian pre-release clients to build out their Sites pages...

Now that Sites is available, I can start rolling it out on my website.

When is salesforce.com Sites released?

Summer 09 release went live over the weekend.

That's great, we have a whole lot more neat features.

I was hoping that Salesforce.com Sites was going to be included in this release, even though the release notes didn't mention it.

The official Sites page says that it will be available Calendar 09... lets hope it's coming in the next release?

If anyone else knows when to expect it let me know.

Cloud Computing Explained, a Video




This is a neat video.


If you hear people talking about Cloud Computing, and never really fully understood what it is, this is a great start.

Some leading vendors in cloud computing for Businesses:

* Google - Not only search, new Enterprise Apps, in the Cloud (Enterprise Email, Calendars etc)
* Salesforce.com - CRM, Sales, Marketing and Customer Support Cloud Systems
* Amazon.com - EC2 and S3 Cloud Services for businesses
* Eloqua - Web Marketing Automation in the Cloud
* Boomi - Systems Integration in the Cloud

They are just some that spring to mind.

Maintenance


Tried to access the appexchange and got this message.

It begs the question, if sites is powering your public website, and the public websites of others, will maintenance always bring the entire website down?

When Sites goes GA (generally available), will thousands of websites and business systems go down for 4 hours every quarter during the release update window?

Can salesforce.com deliver an update without bringing down the system I wonder?

Summer 09 going live 14th June 2009


The new release of salesforce.com, Summer 09, seems to be scheduled to roll out between 4am and 10am on Sunday the 14th of June, Sydney time, mark your calendars.


Despite being the start of winter for us here in Australia, Summer 09 looks set to be a nice solid release.

From my readings it appears that there are a lot of Force.com / Platform updates, nothing really earth shattering, but simply making things work as they should. For example:

- Picklist Values for State & Country
- Can now customize Campaign Member, Partner Roles and Contact Role tables
- Better lookup filters
- Better support and auditing for Visualforce code
- Better mobile support, for iPhone and Blackberry Storm for example
- Can now merge Partner & Contact records who have portal accounts (I've been waiting for this!)

There are also some nice enhancements to the reporting engine, and one of my favourites, a nice Graphical Editor for Approval Workflow.

See the list of new features at:
http://ideas.salesforce.com/popular/coming_in_summer_09

If anyone spots the full release notes coming out, let me know, that should reach us soon I beleive.

SaaS Recession proof?

Even in this difficult economic climate, software as a service seems to growing, this can be indicated by salesforce.com's success and in turn Benioff's pay structure.

Mobile Lite - Salesforce.com Mobile for Free



Salesforce.com's mobile product is quite powerful, but also quite pricey.

It's designed more for complicated Field Service, Field Sales, or Mobile Order Entry processes for example.

For this purpose it's good value for money.

But for those of us who just wanted to have our salesforce.com contacts on our blackberry or iphone, then this was too possibly too expensive (unless you have Unlimited edition like us, where it's thrown in for free).

But now, rejoyce, for Mobile Lite has just been released, and it's free!
Check it out at:
http://www.salesforce.com/mobile/lite/

As per my previous blog post on the 3 major trends in software, Mobility, Social Networks, and Cloud Delivery, we can now say that salesforce.com has hit 3 for 3, lets see how the adoption of Mobile Lite changes the way we use our salesforce.com or force.com applications.

MYOB connector for Salesforce.com?




Found this link on the web.

Havent evaluated it yet myself. It's a connector between MYOB and salesforce.com.

Would be interesting if it worked well.

New version of Eclipse Force.com IDE

See:
http://www.eweek.com/c/a/Application-Development/Salesforcecom-announces-New-Eclipsebased-Forcecom-IDE-376539/

For those of you who arent aware.

There is a complete programming langauge inside salesforce.com called Apex, and a complete user interface design language, called Visualforce.

You can program in any software, you can program straight into the salesforce.com web browser or into notepad if you want, but the benefits of using Eclipse are pretty strong.

Namely code checking, syntax highlighting simplified migration between orgs.

If you are a programmer, or interested in starting to code, check it out.

Salesforce.com Finance Package


I just received an invitation to do an online survey, from Wendy Close at salesforce.com.

I accepted, and the survey was about market research into the need for an On Demand Financial Package that is part of salesforce.com.

I am excited about this. As long as it is done correctly...

Salesforce.com Integrates with Twitter

Apparently as part of the Salesforce.com 'Service Cloud', we can now expect to see integration with twitter.

http://venturebeat.com/2009/03/22/salesforcecom-lets-you-answer-customer-complaints-on-twitter/

I think the service cloud is innovative, but innovative in a Moore way.

Will this concept cross the chasm? Personally, I feel that this technology is a bit too bleeding edge, and in it's current form will not become a dominant business solution.
In concept though it is great, and I'm looking forward to this being refined so that it does become the killer 'Service Cloud' we all need.

Microsoft Azure down for 22 hours straight

See:
http://www.crn.com/software/215900816

Makes you realise that salesforce.com having gone down in total mabye 3 hours in the past 2 years is not too bad.

What is cloud computing?

Everyone's talking about it...
But what really is it?
Neat video from salesforce.com which explains how Cloud Computing should relate to your business.
Interestingly enough, it describes well what our company does, enables organisations to deploy and use cloud technologies (force.com).
Check out the video


New Salesforce.com Data Centre in Singapore

Salesforce.com 10 months after announcing plans to build a data centre in Singapore are now ready to go live.

According to information I have obtained just this morning, I am lead to believe that certain user 'orgs' have been asked to become among the first to be migrated across to the new data centre platform.

If you view trust.salesforce.com, you will see incredibly fast page delivery speeds, but importantly, these speeds are 'delivery' speeds, and do not account necessarily for the actual speed it may take for you to get a salesforce.com page open on your computer.

Will this new data centre mean faster speeds for salesforce.com users in Australia? With less hops to us? I am not expert on telecommunications infrastructure between Sydney and Singapore, but I wonder which ISP's in Australia will have the fastest connections to the Singapore data centre?

Will this mean that salesforce.com users on the Singapore data centre will not be subject to the Patriot Laws that are in affect in the USA?

trust.google.com?

Salesforce.com has had their 'Trust' website for a long time now.
trust.salesforce.com is a central place to see the performance of the salesforce.com servers, inlcuding down time, maintenance, or page delivery times for example.


It seems google have now just recently mimmicked this service.

Imitation is the sincerest form of flattery?

Just goes to show that Google and other Cloud Computing vendors are only now, implementing things that salesforce.com has had for years.

I would still like to see Google acquire salesforce.com, not this year... but maybe next?

Force.com Sites - some real life examples

I am really very excited about the imminent full release of Force.com Sites.

For those of you unaware of what it is, it allows one click publishing of salesforce.com pages directly to a website.

Integrating with your CRM with your website has long been a challenge, and now I'm really excited to see that this is a real achievable goal, without the need to invest in costly custom server side development or middle-ware platforms.

Salesforce.com asked their community to build some sample Sites, to demonstrate the power of the system, before this goes Generally Available, here are 3 sites that have been built solely in Force.com Sites:

- Gaming E-Commerce Site

- Force.com Sites Wiki

- Force.com Sites E-Commerce Shop

What are some sample applications you can use for sites?

- List your upcoming Events (Campaigns) on your website and enable smarter registration.
- Online E-Commerce and Purchasing via a credit card gateway?
- Manage your forms (e.g. Contact Me, Trial Downloads, Whitepapers) dynamically without the need to re-program web-to-lead forms.

Literally, any time you need Dynamic Content on your website, where the content is (or could be) in salesforce.com, you can now do this!

British Telecom to Resell Salesforce.com

See BT's new business website and the press release from Astadia.

Salesforce.com have a strong vision to move from being solely a direct sales organisation, to a more channel focussed company.

In short, BT are now reselling salesforce.com, along with an implementation package bundled in from Astadia (a US Salesforce.com consulting partner).

I wonder if or when we will see Telstra or Optus partnering with salesforce.com in Australia.

Image quality when using renderAs=”PDF”

This is one I’ve come across a couple of times with clients wanting to use the native renderAs attribute of the apex:page component to create ‘higher’ quality merged PDF documents such as Certificates or Letters of Appreciation.

Now the concept is simple you design a nice visual force page using a mix of visual force components and html to create a neat layout for your print document and create a custom controller or extension to query the data you need in your merge document. (Be sure to use the div id="NewPage" style=""> /div wrapper to ensure that each page rendered has the same margins)

Once you have your rendered document you click print and find that your images have come out ‘blurry’ but your text remains fine!!!

Now without boring you with a rant about image resolution, pixel dimensions, vectors and document size we have 1 major issue causing your blurry image quality problem “Image Resolution”.

Image resolution has everything to do with printing your image and has nothing to do with how your image appears on your computer screen, which is why images you download off the internet appear much larger and of higher quality on your screen than they do when you print them.

The Solution:

Instead of using small source .JPEG images in your apex pages, use much larger source .JPEG images and squash them down with the image tag. This essentially squeezes more ‘image’ into a fixed portion of your apex page.

So whereas previously you might have had a .JPEG file that was 300px by 70px as your company logo, replace it with a .JPEG image that is 1000px by 700px (of good quality of course.. don't just blow up your 300px by 70px image!!!!!) and squash it back down to 300x70 using the image tag.

apex:image id="theImage" value="/img/myimage.bmp" width="300" height="100"

Obviously using larger .JPEG files will increase your load time for rendering and will use up more storage space if you intend to reference your file from within your salesforce instance so there’s always a bit of a juggling act between performance and print resolution, but hopefully you can find the right balance.

A good way to test whether or not your images will come out blurry is to open up your PDF and zoom in to 400%, if you notice any image degradation at 400% then your image will print blurry.

The fallacy of “if it’s not broke don’t fix it”

Any software consultant worth their weight in requirement specs will have no doubt come across a client or system user who drops the line “if it’s not broke don’t fix it”. In Australia we are blessed with a large serving of cynicism and fear of change (in my opinion) and while in many cases this is great when it comes to Business processes and system implementations it can be a hurdle that is hard to overcome.

See the problem with the “if it’s not broke don’t fix it” ideology is that it doesn’t take into consideration factors like changing business requirements, innovation or the ever increasing workload of the Australia employee. While it is obviously dangerous to jump head first in with the newest hottest trend/fad, it is ‘AS’ dangerous to maintain the status quo on the grounds that it has worked fine in the past. While I might be slightly biased due to the nature of my vocation, the value in understanding the potential negative and positive impacts of a new approach, system or methodology on a business or process should be apparent.

Businesses and individuals should leverage the critical way in which Australians approach change. If you or your employer are fortunate enough to be at the crossroads and there is a chance to review what you do and how you do it, ask the important questions:

• Why and what do we do?
• How do we achieve this?
• Is there are better way to carry this process?
• What are the positive and negatives of investing in innovation?

Tying back to the title of this post, I think the phrase should be amended to “if it’s not broke don’t fix it, but if there is a better way to do it, IT’S BROKEN!”

Meta-Meta Data

One of the reasons why salesforce.com is successful, is because it is meta data driven.

What this means, is that when you make customisations in salesforce.com, no code is changed, your changes are stored as records in the meta data layer.

This type of customisation has been done for a long time on consumer websites. For example, when you log into Amazon.com, you can show a different home page or layout depending on how your user profile is set up. You get your personal look and feel and login account, despite the fact that you are accessing the same website as millions of others.

Salesforce.com borrowed this approach.

When you first sign up to salesforce.com, you get a clean 'Org' as it's called, much like a fresh sign up to Amazon.com.

You then go about making changes (customising) the system. Every customisation you make is stored in Meta-Objects, Meta-Tables, and Meta-Records. You can actually get access to the Meta Data API, and query these tables, and make configuration changes via web services for example.

So what am I getting to?

Well, having meta data is great, it allows me to easily customise the database, without the need for actually changing a single thing at the database level. This is the one reason why Salesforce.com can push out updates that dont break their existing client's configurations.

But what about when I install applications from the Appexchange?

Well, a Native-Managed Application (as it's termed), from the Appexchange, is in fact a meta-data snapshot. So someone else has configured salesforce.com, saved their configuration as a template of sorts, and put it up on the Appexchange. It is stored as a collection of meta data.

You install it, and it copies those meta data configurations to your Org, and, if it's a managed App, it locks it down so you cant change it.

The entire point I wanted to make with this post, is a problem I see with the entire concept of the appexchange and native managed apps.

The great thing about salesforce.com is that it is customisable via Meta Data - but if I download say a recruiting application from the Appexchange, this app itself is a set of Meta Data, that I cannot change.

Since when I deploy Recruiting from the appexchange, and I want to change the name from 'Candidates' to 'Applicants', I cannot, since it's already been changed and locked down in meta-records.

So much of the benefit of salesforce.com has been stripped, when you buy a module from the Appexchange.

What we need, is Meta-Meta-Data.

We need the ability to customise managed applications, from the appexchange, without the Appexchange vendor losing the ability to push out updates seamlessly and without losing integrity of the code....

I just find this interesting.... will salesforce.com release Meta-Meta-Data? Maybe if I coin a buzzword for it, Web m.0? Or Meta Cloud Computing?

The Salesforce.com Story, 1999 to Now

This press release gives a good snapshot of the current SaaS market and salesforce.com's role within it.

For me it was a good read.

Ideas... how to spread them

My colleague passed me this link it's a Seth Godin presentation at TED.
Similar ideas to Moore, Gladwell, and Chris Anderson.

Related to marketing strategy, I found it entertaining.

The future of sofware

How can I cover such a broad subject in one blog post...

Well it's nigh impossible..

But to summarise there are 3 key trends which I think will shape the next decade:

Social Networking
Email, I believe, is becoming non existant. I receive many important notifications through my facebook account, or my linked in account, and the richness and relevance of this information is greatly extended in comparison to a singular email.
Not only will Social Netoworking drastically change the way every marketer in the world operates (mass email marketing is all but dead right now unless its context specific, segmented, and drip fed), Social Netoworking will become a unified shared platform of user authentication and a source for data enrichment for every software platform in the future. Social Networking will replace email. Facebook or Google or another vendor will incorporate social networking tools as a corporate email replacement option.
Social Netoworking will drive the meta-internet, and will also drive context based content. I will have a single social profile, which every device I own or software I use will authenticate through. I will log into my internet enabled on demand pay tv service at home, with my social network login. Then advertisements on television will be delivered directly to me contextually based on my social network profile. The games I play on my TV will have in game product placement, driven by the data in my social network profile. Social networking will be the channel for every form of communication we have, whether it be making a phone call, sending a message, having a birthday party, or running a corporate event.

Mobility
The computer screen will be relegated to one of the least used forms of accessing your software.
Increasingly, internet access is being embedded into every electrical device we use. Initially this in the form of mobile devices, such as blackberries and iphones etc. This will be extended to absolutely everything.
What does this mean?
It means that we need a singular channel for software delivery.
In the past, for example, microsoft, would offer different 'versions' of software for each platform you wanted to install the software on, so you'd download MS App for your Windows Vista PC, then a different version for your Apple (if it was offered), then a different version for your phone, then a different version for you Pocket PC... the list would go on.
As the number of devices increases to infinity, there is no way any software vendor can offer their software on every possible device.
How can we deliver software to any and every device, without the need for versioning....
The answer is Internet based software.
Ubiquitous connectivity will be paramount, and wireless technology will be the primary means of internet access. Every Internet enabled electronic device will come with an ability to automatically connect to a wireless internet provider (where it be Mobile based technology or long range Wi-Fi / Wi - Max style networks).
We will access our software, as a service, and we will expect it to be internet enabled and accessible through every electronic device we own.

Cloud Computing
If you take these first two trends, you will notice they both indicate that the internet will become the primary source of information and primary channel for information delivery.
That said, in 10 years time, I believe every piece of software used by an organisation or an individual will be hosted by a cloud computing infrastructure. The IT department will no longer manage servers or networks, just simply manage a constant internet connection. IT managers and CTO's will no longer talk in megabytes, but simply be drivers of organisational change and operational efficiency through the access and placement of information.
Look at Google, salesforce.com, Amazon, Facebook, Linked In, Microsoft Azure, SAP By Design, the list literally goes on and on.
There will be a convergence between consumer and business based cloud computing infrastructures. Integration between software will turn from being extremely difficult coded connections between different systems, to being all Web Services or other Web XML based. Pre built connectors will dominate the integration space and even custom integration will be able to be developed quickly. When you subscribe to Google Apps, or Microsoft Azure, you will be able to almost instantly, connect it to your Corporate Facebook account, your salesforce.com system, your Amazon S3 account, your On Demand Business Intelligence platform, your On Demand Telephony account... more and more and more.
Microsfot Windows be slowy deteriorate from being an operating system, to becoming a means of accessing the internet. The Operating System market will commodotise and maybe Google, Apple, Linux, another commercial vendor will build a lite OS which essentially be a window to the internet, as the internet will house every piece of data, and every application we need in our home and business lives.


So the advice I can give, if you are involved in making any decision about software strategy for your organisation, keep these trends in mind, and partner with vendors who share this vision.

Salesforce.com new Webiste

Hot off the press,

http://www.salesforce.com/aloha.jsp


I think it looks nice... puts a stronger emphasis on their platform offering, which is good.

Salesforce.com CFO moves on

Steve Cakebread the CFO for salesforce.com was set to retire, as I understood it, about 2 years ago. He then deferred his retirement to stay on for another 2 years at salesforce.com.

It was no surprise that he has now decided to move on, but I guess the surprise for me was that he was not actually retiring, he is in fact moving over to Xactly Corporation, an Appexchange partner for salesforce.com, and is becoming their CFO.

See press release here.

This move draws my attention to Xactly, I've heard about them before, but I didnt realise they had the attraction power to draw someone like Cakebread.

I've met Steve Cakebread once, and seen him present a number of times. He's an amazing orator, and the knowledge I gleaned from a 1 hour session with him 3 years ago in in the Sydney salesforce.com offices was immense.

So I'm going to check out Xactly some more, see what is so amazing about their product!

salesforce.com & Agile

When undertaking any substantial body of work, whether it be a development (coding) or project rollout, the methodology refers to the steps taken to get from beginning to end.

As a software engineer myself, I recall back in university days, we'd learn time and time again about the Waterfall methodology, image courtesy of wikipedia below:


This was a strict process, where typically the entire scope of the project was planned out at the beginning, and then the project manager would move the project through to subsequent stages. A key principle of the waterfall methodology, is that if requirements change, one must move back to the start of the process. This methodology brings a lot of discipline to project management and it was designed to ensure that the outcome exactly matched clients initial requirements.

There were a few problems with this approach though, it assumed that clients requirements were fixed and it also ran with the ethos that software developers or business analysts needed an exact blueprint of requirements and design before they could commence.

Some say that this approach showed a lack of faith in software developers and business analysts, because the project manager would have to assign them a detailed list of business requirements (written down to exact specification) before they could commence work.

The other key problem was that customers didn't always know their requirements, or could not express them clearly, and typically customer requirements would change over time. This meant that monolithic projects would last for 12-18 months and longer, because each time a customer wanted to update the system design to meet a change in their business process, the whole methodology would start from the beginning again.

A newer approach to project management is one called Agile, principles of Agile PM are:
- Software Developers & Business Analysts know what they are doing
- Requirements should be captured, but not to the infinite extent required by Waterfall
- and importantly, the customer should always get a functional release at the end of each 'Sprint'

This approach would set about discussing the top requirements with a customer (say 5-10 high level requirements), then the Business Analysts & Developers would commit to delivering these within a 'Sprint', a sprint would be a window of days, anywhere between 14-60 days usually. The programmers would work in a less structured and more collaborative way and use their own initiative and knowledge to deliver the smaller set of requirements within the rapid timeframe.

Because software development was a risky business back in the 80's and 90's, people would use this same waterfall methodology, which is also used in construction for example, in building a multi billion dollar building or bridge. But requirements dont change that often when building a bridge.... and you cant just say to a Construction Engineer, go ahead and build the arch how you see fit...

Although due to advances in software technologies, it is now a reality that usable functionality can be delivered within short periods of time (Sprints), and that developers can take a high level requirement and deliver it without the large amounts of planning and paperwork that waterfall requires.

I was watching this webinar, about how salesforce.com themselves use an Agile approach in delivering functionality to their customers.

We've built our consulting practice within my company on an agile approach also, by giving more responsibility to the developer or consultant, and by starting with a reduced set of high level requirements, and keeping paperwork low.

I feel this enables us to react faster to customer requests and deliver more value to clients because we wont over analyse and document everything we are going to do, we will document at a high level, and then simply proceed and do it, this way we can present a prototype quite rapidly to our clients, and get feedback.

How to write a trigger in Apex

I thought it may be a good idea to share some basic information on how to write a Trigger in Apex within your salesforce.com instance.

But to start, why would I need a trigger?

Well essentially, a trigger is an action performed by the system, and it's called a 'Trigger' because it is invoked, or called to execute when triggered by an action in salesforce.com.

It is really like an advanced form of workflow.

For example, if I have a business rule that on the account screen, if someone enters the employee size, greater than 500, then I want to update a field on the account to 'Enterprise Customer', I can use a trigger to do this, for example, go to:

Setup -> Develop -> Apex Classes -> New

Then choose the type as Apex Trigger.

A basic portion of code:

trigger myTrigger on Account (after insert) {

Account myAccount = trigger.new[0];
if (myAccount.Employees > 500) {
myAccount.Type = 'Enterprise Customer';
update myAccount;
}// else nothing
}

So a few things to note, in the first line:

trigger - this defines that our class is a trigger, and that the returned object will be a variable called 'trigger'
myTrigger - this is the name of my trigger, we could have called it anything really
on Account - this means that the action we are undertaking will occur when a change is made to the Account object, we can specify any object here
(after insert) - there are a variety of specifiers you can place here, after insert means that this code will execute whenever a new Account is inserted into the database, and it will execute immediately after the new account has been inserted, the modifiers you can use are:
  • before insert
  • before update
  • before delete
  • after insert
  • after update
  • after delete
  • after undelete
Now that covers off the first line of code.
The second line of code, 'Account myAccount = trigger.new[0];', this is important.
When a trigger is executed, the code is passed a list of objects, not just one object. The list is actually an array list of sObjects which are the primitive type of objects in salesforce.com.
The reason why we are passed a list of sObjects is because salesforce.com executes triggers in batch. So for example, if you were uploading data to salesforce.com, it actually writes these to the database in batches, each batch size can vary (depending on the upload settings), but will typically be up to 200 records.
So imagine that this trigger is executing after an upload of new accounts, or for example, two users insert an account at exactly the same time, in these cases you would be passed an array of sObjects in the 'trigger' object.
So whilst my code works, it is actually badly written in this example, what we always should do is find the size of our trigger (trigger.size()), and loop through each element and perform the update on each, because in my code right now, it will only reference the first element, trigger[0].
I am assigning the value trigger[0] to an Account variable.
I can then access the fields on the account, as you can see I change the value of Type. Then I update the database. The commit to the database is fired once the code completes.

This is a basic example of how to write a trigger. There are other things such as 'Govener Limit Exceptions' and 'Order of Execution Rules' which need to be considered, but I hope this gives any budding trigger coder a start in the right direction.

The great thing about triggers, is that you can make salesforce.com do absolutely anything you want. For example, maybe every time an account is entered, you want to do an outbound web services call to an address validation service (such as QAS), and then you want to do an outbound call to your accounting package, you really can perform any logic you like, this is the really neat part.

Salesforce.com wants YOU

The US Army are using salesforce.com for recruiting.

There are quite a few companies using salesforce.com for recruiting, and I recall electronic arts were also one of these, they won an award for the best use of technology in a recruitment process.

I'm looking forward to when salesforce.com builds out further it's ISV Channel, so that way we can have an array of tailored recruitment products using the force.com platform.

Social Network Marketing with Facebook



I did an earlier post on Appirio's social network marketing tool, which connects salesforce.com and facebook.

I found the proper website for this, so check it out at:
http://appirio.com/products/rms/

It's $25k (presumably USD), and looks pretty nifty.

Sneak preview, Integrate Now

So I've been pained for too long that my accounting package and salesforce.com do not connect.

Unlike the professional plumber who has the worst faucets in his own home, I've decided to take a step to correct this.

I've spent a bit of time on building something I call, 'Integrate Now'.

Its a native force.com app, built with a modular archtecture, which allows you to integrate endpoints into salesforce.com.

The first module I've written is an outbound web services call to my accounting package, Saasu. I have got the prototype running now, and it correctly reads in my invoice data from Saasu and populates it in salesforce.com.

I need to add testing, error resiliency and a few more features, but I hope to get this done on the weekend, and I'll even package it on the appexchange, so fellow salesforce.com and saasu users can finally integrate.

Some teasers below.

Calling an Apex method from a Button

This is also a common need in salesforce.com development. How to call an Apex method via a button press.
I thought I'd put a post explaining your options on how to achieve this.

Firstly, create a new VF controller extension, which extends the object on whose screen you'll need the button.

For example, you want a button on the Account page which triggers some custom apex, so go ahead and create a new controller called, AccountExtension, (this is a new Apex class):

public class AccountExtension {

// global class variable for the Account object that
// triggered this page view
private final Account a;

// constructor for controller extension
// takes the standard controller as input
public AccountExtension(ApexPages.StandardController stdController) {

// takes the Account object which spawned the page view
// retrieves the standard controller and casts it
// and assigns it to this page
this.a= (Account)stdController.getRecord();
}

public void myMethod {
// put your custom apex code here
// typically your would instantiate another object and execute it
// but a code block works just the same
}

public String getMethod {
// put your custom apex code here
// typically your would instantiate another object and execute it
// but a code block works just the same, in this case a String is returned
}

public void setMethod(String mystring) {
// put your custom apex code here
// typically your would instantiate another object and execute it
// but a code block works just the same, in this case a string must
// be passed to the method
}
}

Now once you have saved this, create a new VisualForce page, there are 3 ways you can initiate custom Apex via a visualforce page, each require the extension with the code.

Option 1 - Action Method
By following the below code, you can see as an attribute in the vf page, we have something called 'action'. The action attribute will execute whichever method it is provided on page load. In this case I've put the action in the page element, but it can be in other elements too.

<apex:page standardcontroller="Account" extensions="AccountExtension" action="{!mymethod}">
<apex:sectionheader title="My Page">
</apex:sectionheader>
</apex:page>

Option 2 - Getter Method
This approach is different to an action method, as it is executed in line with the rest of the vf page, and getter methods can return a value.

<apex:page standardcontroller="Account" extensions="AccountExtension">
<apex:sectionheader title="My Page">
{!Method}
</apex:sectionheader>
</apex:page>

Option 3 - Setter Method
Setter methods pass values from the UI to an apex method. It is also executed inline on the page.

<apex:page standardcontroller="Account" extensions="AccountExtension">
<apex:sectionheader title="My Page">
<apex:inputtext id="my lovely string value" value="{!Method}">
</apex:inputtext>
</apex:sectionheader>
</apex:page>

The tricky bit for me was the naming syntax. For example, to be a getter method, the name of method in the controller class must begin with get, and similarily with setter methods, it must begin with set, although for action methods, you can call it from it's full name.
Then just go ahead and create a new custom button on the Accounts page, which links to the Visualforce page you've just created, and voila!
You can read more about this here

Salesforce.com and Facebook



I just read this press release.

Looks pretty nifty, its a Salesforce.com and Facebook advertising platform.
You control and manage a Facebook Site via Salesforce.com.
You then can invite facebook members to interact with the facebook page.
You can then interact with the company for example, get notified of job positions, or news and announcements, and this is all powered by Force.com... kinda cool.

What is the Service Cloud?

Salesforce.com recently launched the 'Service Cloud'.

What is it?

Well I watched all the tours and I still don't understand....

I think they are just re-branding their service and support suite as an integrated offering.
And have thrown in a few neat little extras like facebook integration...

If anyone else can understand more than this, let me know.

Spring 09 - released soon...


I keep getting emails about Spring '09, but I searched the web (albeit for only 15 minutes), and I couldn't find any information on which date it will actually be rolled over.

I gather it must be soon, maybe next weekend? If anyone knows, let me know!

From my view the major features that I am looking forward to:

* Mobile Enhancements, including simplified provisioning
* Advanced Page Layout Editor, glad this tool is getting a face lift
* Visual Force Controllers, we can now create custom UI for the Ideas object
* MS Office Edition 4.0, still cant wait until we get better google apps integration!

On the whole, this seems to me like a minor release package, with some basic enhancements, still, having this delivered automatically to myself and my customers is great, I'm still so glad I dont need to ask my customers "what version of salesforce.com are you running?", since we are all always on the latest version.

Versioning and patching is always a pain, every 2-3 months I'll get an email from my web designer saying a Patch is available for my CMS system... this signifies for me another upgrade process that I need to pay them for... if only I could find a good On Demand Website CMS! At least salesforce.com doesn't pain me in this way.

I'm still waiting with baited breath for Sites to come out... fingers crossed for the Autumn 09 release? Maybe that could solve my CMS problems too...

Renewforce?


Interesting, it seems Netsuite, another On Demand vendor, is offering 50% off the price of your salesforce.com subscription if you transfer from salesforce.com to them.

I have my doubts about this form of promotion. To compare this to our business, I guess people like Accenture are the people we look up to, and see them as one of the leaders in CRM Consulting, but I would never offer 50% off our services costs if people switched from Accenture to us. In fact, I never discount our services, I believe the value we offer is clear and the price we charge is valid.

By discounting your product or service, what impression do you give to the market? Does Net Suite have a profit margin so large that they can afford to discount to 50% of salesforce.com's price? If so, why dont they invest that margin back into R&D and making their product better, rather than giving 50% off to customers who switch from salesforce.com?

Isn't now offering 50% off a huge slap in the face to existing customers who paid full price to Net Suite for their offering?

To me this looks like an act of desperation rather than a promotion.

I guess I am not a fan of huge discounting in order to get new customers, I prefer to new customers through referrals from my existing and happy customers.

If I owned a Ferrari, and say, Skoda were offering 50% off to people who swapped their Ferrari for a Skoda, I wonder how many takers they would get?

Also, isnt offering 50% off to people switching from Salesforce.com an advertisement for salesforce.com themselves? Isnt this Netsuite admitting that salesforce.com is a better product, and the only way they can compete is to be cheaper?

I'm not sold. Sorry Netsuite.

Salesforce.com in Fortune 100's best companies to work for



Makes me wonder why I ever left. Salesforce.com was a great place to work, their Foundation was a great differentiator for me, being part of a company who gives back to the community was important.

On Demand Accounting?

So like many other small businesses, my own small business has a need for proper accounting.

And just like many other small businesses my accountant was doing my accounts for me, and she would use MYOB.

I must admit, it was a bit frustrating, whenever I needed an update on my P&L or Balance Sheet, I had to email my accountant, and whilst she was quick, it would still take maybe a few hours for her to email me the data I needed.

Emailing back and forth data files? This sounds like the old days of small business CRM?

So after doing some online research, I found 3 major vendors who actually offered On Demand small business accounting.

- Saasu www.saasu.com
- Xero www.xero.com.au
- Coda2Go www.coda2go.com

They all seemed like they had Pro's and Con's, but I elected to go with Saasu, and I must say that I'm really enjoying this product so far. Saasu will keep your contact list synchronised with salesforce.com, but I'm also lead to believe that they are writing a full integration piece with salesforce.com, which should hopefully synchronise my invoices, and payments between Saasu and SFDC - if so, I'd be in heaven.

This type of problem, getting select accounting data to your sales and marketing teams (or other salesforce.com users), is a typical one, no matter how large the business.

There are many integration designs you can use to solve this issue, but it is still a large effort. I'll write another post on integration another day explaining all the options and issues you may face with integrating salesforce.com to an accounting package (or any other system).

But hopefully as more and more systems provision built in salesforce.com integration, we can look to the future where integration is done in a point and click way, rather than needing an army of consultants to spend months to achieve this.

The Market for Software as a Service

According to a new Gartner report, "nearly 90% of organizations surveyed expect to maintain or grow their use of SaaS in the coming year, citing cost-effectiveness and ease/speed of deployment as primary reasons for adoption."

Interesting stuff...

Download the report

Salesforce.com Sites, cancel your website integration projects...



I was at dreamforce when this was announced, and we are all really excited here about the release of sites.

As companies move more and more to the web, it's becoming imperative that your internal CRM system communicates in some way with your website.

Previously with salesforce.com, you only had a few options, for example, Lead Capture forms, Case Capture Forms, Public Customer Support Knowledge Bases, or Customer / Partner portals which neeeded authentication.

There have been many integration projects, connecting salesforce.com to a website, in order for it to deliver dynamic content on the public web... these integration projects are always costly and difficult to execute correctly.

Now with Force.com Sites, it really becomes as simple as a button push.

Any data you have in salesforce.com can be rendered as a "Site", which is essentially a public visualforce page.

So if you have a product catalogue, or if you want to display all your upcoming company events (e.g. Campaigns), or if you have content published in the Documents or Content area in salesforce.com, you can now selectively expose this directly to your public website - just build a 'Sites' Visualforce page, and you are done.

So if you have ever wanted to expose your CRM data directly to the website, in an un-authenticated way, but thought integration was too risky, complicated or expensive, I would suggest you take a close look at Sites.

See a bit of a demo here:
http://www.salesforce.com/platform/sites/

Obama uses Salesforce.com


This is really cool, I was told the other day that Barack Obama has deployed the salesforce.com Idea Exchange product to take opinions from the public....

Did a quick google search, and there it is! I honestly dont know why more organisations arent using Idea Exchanges... they are very good.

This is really amazing, to see an American President use technology in this way, lets try and get Kevin Rudd to deploy the Ozzy Idea's Exchange, I guess we'll be all voting for more public holidays right?

Generate a PDF from salesforce.com

One of the questions I get asked very frequently is, "How do I generate a PDF from within salesforce.com?".

Well I'm not sure if everyone knows this, but in fact, Visualforce has a built in PDF renderer.


So this means that you can have buttons on your pages in salesforce.com, which when clicked, generate a PDF that you've designed.

This particular feature is available to all users of salesforce.com, from Group and Professional to Enterprise and Unlimited.

But if you do have Enterprise or Unlimited, you can even use the PDF & Email API's to automatically send emails with a PDF attachment.

Once you've built the class, it is then accessible via your standard workflow rules, so you can use it in many scenarios.

We have deployed this for a number of clients, and we use it ourselves internally.

To achieve this in Group or Professional Edition, try creating a new Visual Force Page, Call it "PDF" and use the following code:

< standardcontroller="Opportunity" renderas="pdf" standardstylesheets="false" sidebar="false" showheader="false">
Hey Hey!
< / apex:page>

Then you are done - well kind of! You can now view this new page at:
https://emea.salesforce.com/apex/PDF

But it's a bit useless right now, so why not decorate it with data from salesforce.com. You can place any standard HTML code within the center of the page block and it will render it nicely.

Then create a custom button on the Opportunity Page which links to:
https://emea.salesforce.com/apex/PDF&id={!Opportunity.Id}
Probably best to have this custom button open in a new screen.

So if you want to pull across any fields from the salesforce.com opportunity, just place references within your HTML Code:

E.g.
{!Opportunity.Name} - Brings back the opportunity name
{!Opportunity.Account__r.Name} - Goes to the related account, and brings back account name.

The fist part of this parameter references the object you are currently on, so in this case, we defined this VF Page to use the Opportunity Controller, the next part is a field name, or it can be a relationship, so you can traverse through more objects.

So hope this gives you a bit of an idea, get someone to design up your forms in HTML, replace all the dynamic data with {!} dot syntax, and add a button and VF page to render it as a PDF.

A couple of caveats, this uses the standard controller, which means we can access any fields on the opportunity or on related objects. In some cases, you may want to pull data from multiple objects at once, in this case you'd use a Controller Extension Class or Custom Controller class, alas only available in EE/UE.

Also, I've written a lot now, so I'll put another post later on how you can use the Email API to trigger emails with PDF attachments.

Sample CRM Project Plan

I think this article is very useful for people who have not been involved in a CRM deployment before. It has been developed by salesforce.com as a guide to best practices in CRM deployment. Our advice if you decide to deploy any CRM system is to clearly define what you are hoping to achieve, make sure you get executive level sponsorship within your organisation, and take a phased approach dont try and deliver everything in one hit.

Process Map
Download Here

Force.com Platform as a Service

A neat video from salesforce.com, it speaks about the history of computing technologies, and what they believe is the future, On Demand Application Platforms, namely their Force.com platform.

As of the time of writing, Hallman Consulting have the only two Force.com Certified consultants in Australia (Level 3 Salesforce.com Certification).