+ Start a Discussion
certi_vimalcerti_vimal 

How to measure User Adoption of Customized Functionalities?

Hi,

Can anyone please advise me as to how to measure User Adoption of customized functionalities built via Visualforce Pages, Apex codes, etc? Example, on a button click on Account detail page a Visualforce Page opens which shows Account Team Hierarchy of that account alongwith the teams at each account level(levels = 3).

I want to know how many users click on that button and see this page?

Similarly, there are couple of more Visualforce Pages on Account's and Contact's detail pages. I want to know whether users are really utilising it or not?

Is there any tool or App Exchange product/application for the same?

Please assist.


Thanks,

Vimal

Cory CowgillCory Cowgill

There is no application that I know of, but the pattern has been done before.

 

You can create a custom object and track this activity that way.

 

Whenever a user performs some functionality on a VF Page that you want to track, insert an activity record into the custom object and track infomraiton like Page Name, User Name, Date, ETC.

 

The only trick is you can't insert records during constructors of VF Page Controller, you'd need to insert the record when the button is clicked either through AJAX Toolkit http://wiki.developerforce.com/index.php/Documentation#Tools or in an action in the controller.

 

 

certi_vimalcerti_vimal

Thanks Cory.

But in my case, most of the Visualforce Pages are data display reports/tables and less of form fillings.

How can I tackle and grab statistics on them?

Thanks,

Vimal

bob_buzzardbob_buzzard

You'd still need to use the mechanism that Cory described - somehow information needs to get back to the server to indicate that a user has hit the page.

 

If you don't mind this data being stored outside of Salesforce, another option (though I've not tried this on internal VF pages myself) may be google analytics, phpmyvisites or similar web statistics gatherer.  In this case you'd include some javascript that identifies the page and hits an external server to record the access.

Jake GmerekJake Gmerek

Hey, I think that you could tackle this like Cory Cowgill says, but use a second VF page as a pass thru page. It would look something like this:

 

 

<apex:page standardController="your_object__c"
 extensions="someCustomController"
 action="{!yourAction}"
>
</apex:page>

 

Public Class someCustomController{

     Public PageReference yourAction(){

        String theId = ApexPages.currentPage().getParameters().get('id');
        
        //Will show the contents of the "Pass Thru" VF Page if no ID is passed
        //so you could add some error message to the above page
        if (theId == null) {
            return null;
        } 
      
        /*Here you can gather whatever tracking data you want and insert it
         *it into an object of your choice. 
        */
        
        //set the page to pass to; id parameter is optional and will give you a way to get 
        //back to your original page later if you want 
        PageReference pageRef = new PageReference('/apex/yourVFPage?id=' + theId);
        pageRef.setRedirect(true);
        return pageRef;
    }//end restTask

}

 That is just the basics but it should get you started if you want to pursue that method of tracking.

 

 

 

bob_buzzardbob_buzzard

Just to be pedantic here, the Visualforce Docs state that the page action method should not be used for initialization (which inserting obejcts comes under the heading of), and I've seen it frowned upon in one of the developer force blogs.

 

It does work, and I've not seen any explanation as to exactly why you shouldn't do it, but just a heads up.

Jake GmerekJake Gmerek

Bob, 

     A couple of moderators weigh in on that issue here:

 

http://boards.developerforce.com/t5/Visualforce-Development/Reason-why-action-attribute-of-apex-page-should-not-be-used-for/td-p/104343

 

From their description of the reasons I can't see any issue with the above code as the class would do nothing else so there would be little to no chance of getting out of sync as described.

bob_buzzardbob_buzzard

Thanks very much for that link.  I agree with your assessment that it wouldn't affect things in the light of the SF comments.  I guess the only downside would be that a user could hit the target page directly based on the URL and thus bypass the tracking.

 

 

 

JohanLiljegrenJohanLiljegren
Try installing Google Analytics inside of SFDC - basically a small Javascript tracking component on the lefthand sidebar. It tracks visits based on URL and since each Visualforce page would have it's own URL, you might get something out of it. If not, at least you'll start gathering cool (anonymous) statistics on what browsers your users are using, where (geographically) they are located etc.