Professional Documents
Culture Documents
SFDC 001
SFDC 001
/**
* An Apex class that creates a portal user
*/
public class SiteRegisterController {
// PORTAL_ACCOUNT_ID is the account on which the contact will be created on
// and then enabled as a portal user.
//Enter the account ID in place of <portal_account_id> below.
private static Id PORTAL_ACCOUNT_ID = '<portal_account_id>';
public SiteRegisterController () {
}
657
Reference Apex Classes
}
}
/**
* Test class.
*/
@isTest
private class SiteRegisterControllerTest {
// Test method for verifying the positive test case
static testMethod void testRegistration() {
SiteRegisterController controller = new SiteRegisterController();
controller.username = 'test@force.com';
controller.email = 'test@force.com';
controller.communityNickname = 'test';
// registerUser always returns null when the page isn't accessed as a guest user
System.assert(controller.registerUser() == null);
controller.password = 'abcd1234';
controller.confirmPassword = 'abcd123';
System.assert(controller.registerUser() == null);
}
}
The following is the Visualforce registration page that uses the SiteRegisterController Apex controller above:
The sample code for the createPersonAccountPortalUser method is nearly identical to the sample code above, with
the following changes:
• Replace all instances of PORTAL_ACCOUNT_ID with OWNER_ID.
• Determine the ownerID instead of the accountID, and use the createPersonAccountPortalUser method instead
of the CreatePortalUser method by replacing the following code block:
658
Reference Cookie Class
with
Cookie Class
The Cookie class lets you access cookies for your Force.com site using fApex.
Use the setCookies method of the pageReference class to attach cookies to a page.
Important:
• Cookie names and values set in Apex are URL encoded, that is, characters such as @ are replaced with a percent
sign and their hexadecimal representation.
• The setCookies method adds the prefix “apex__” to the cookie names.
• Setting a cookie's value to null sends a cookie with an empty string value instead of setting an expired attribute.
• After you create a cookie, the properties of the cookie can't be changed.
• Be careful when storing sensitive information in cookies. Pages are cached regardless of a cookie value. If you use
a cookie value to generate dynamic content, you should disable page caching. For more information, see “Caching
Force.com Sites Pages” in the Salesforce online help.
• The Cookie class can only be accessed using Apex that is saved using the Salesforce.com API version 19 and above.
• The maximum number of cookies that can be set per Force.com domain depends on your browser. Newer browsers have
higher limits than older ones.
• Cookies must be less than 4K, including name and attributes.
The following are the instance methods for the Cookie class, which is part of Force.com sites.
659
Reference Apex Classes
For more information on sites, see “Force.com Sites Overview” in the Salesforce online help.
The following example creates a class, CookieController, which is used with a Visualforce page (see markup below) to
update a counter each time a user displays a page. The number of times a user goes to the page is stored in a cookie.
public CookieController() {
Cookie counter = ApexPages.currentPage().getCookies().get('counter');
// This method is used by the Visualforce action {!count} to display the current
// value of the number of times a user had displayed a page.
// This value is stored in the cookie.
public String getCount() {
Cookie counter = ApexPages.currentPage().getCookies().get('counter');
if(counter == null) {
return '0';
}
return counter.getValue();
}
}
660
Reference Visualforce Classes
The following is the Visualforce page that uses the CookieController Apex controller above. The action {!count} calls
the getCount method in the controller above.
<apex:page controller="CookieController">
You have seen this page {!count} times
</apex:page>
Visualforce Classes
In addition to giving developers the ability to add business logic to Salesforce system events such as button clicks and related
record updates, Apex can also be used to provide custom logic for Visualforce pages through custom Visualforce controllers
and controller extensions:
• A custom controller is a class written in Apex that implements all of a page's logic, without leveraging a standard controller.
If you use a custom controller, you can define new navigation elements or behaviors, but you must also reimplement any
functionality that was already provided in a standard controller.
Like other Apex classes, custom controllers execute entirely in system mode, in which the object and field-level permissions
of the current user are ignored. You can specify whether a user can execute methods in a custom controller based on the
user's profile.
• A controller extension is a class written in Apex that adds to or overrides behavior in a standard or custom controller.
Extensions allow you to leverage the functionality of another controller while adding your own custom logic.
Because standard controllers execute in user mode, in which the permissions, field-level security, and sharing rules of the
current user are enforced, extending a standard controller allows you to build a Visualforce page that respects user permissions.
Although the extension class executes in system mode, the standard controller executes in user mode. As with custom
controllers, you can specify whether a user can execute methods in a controller extension based on the user's profile.
This section includes information about the system-supplied Apex classes that can be used when building custom Visualforce
controllers and controller extensions. In addition to these classes, the transient keyword can be used when declaring methods
in controllers and controller extensions. For more information, see Using the transient Keyword on page 148.
For more information on Visualforce, see the Visualforce Developer's Guide.
Action Class
You can use ApexPages.Action to create an action method that you can use in a Visualforce custom controller or controller
extension. For example, you could create a saveOver method on a controller extension that performs a custom save.
Instantiation
The following code snippet illustrates how to instantiate a new ApexPages.Action object that uses the save action:
Methods
The action methods are all called by and operate on a particular instance of Action.
The table below describes the instance methods for Action.
661