Chatter Publisher Actions and
Salesforce1
a practical introduction to Chatter Publisher Actions
Stephen Willcock, FinancialForce.com, Director of Product Innovation
@stephenwillcock
Carolina Ruiz Medina, FinancialForce.com, Principal Developer in Product Innovation
@CarolEnLaNube
All about FinancialForce.com
Revolutionizing the Back Office
#1 Accounting, Billing and PSA Apps on the Salesforce platform
▪ Native apps
▪ San Francisco HQ, 595 Market St
▪ R&D in San Francisco, Harrogate UK, and Granada ES
▪ We are hiring! Meet us at Rehab!
Salesforce One and Chatter Publisher Actions
Mobile
Force.com
Social
Mobile
Force.com
Social
Salesforce1
Chatter
Publisher
Actions
Mobile Cards
Flexipages
Notifications
Take a micro-moment…
Salesforce Chatter Mobile Makes Every Moment Count
New Chatter Mobile is the world’s first social and mobile
application that will allow employees to take any business action
instantly, from anywhere... With the new customizable
publisher, companies will be able to create actions that
empower employees to perform custom business activities...
Now, employees will get valuable work done in every micro-
moment—all from the Chatter feed.
Salesforce press release - July 2013
What are Chatter Publisher Actions?
Never mind about
Publisher Actions…
what is the
Chatter Publisher?
What are Chatter Publisher Actions?
→
Chatter Publisher Actions
Object
Global
Custom
Create
Update
Canvas
Log a Call
Visualforce
Clicks-not-code
Canvas
Mobile smart actions
Default actions
Actions in use
User
Profiles
Record
Types
Salesforce
One
Standard UI
Mobile
Desktop
Page
Layouts
Global
Publisher
Layouts
Objects
When to use custom actions
• Retrieve data from / update related records
• Multiple update / create
• Logic
• Respond to user interaction
• Calculation / process
• Call APIs
Custom Action use cases
Create case on Account
• Query other related records
• Apply logic to available values and guide the user
Time recording against Tasks
• Query related records and make a calculation based on them
• Insert or update related records depending on outcome
→
Implementation options
• Classic Visualforce
• Visualforce form submit
• AJAX Visualforce
• much Visualforce is valid, although some is not useful!
• Javascript Remoting + HTML/CSS/JavaScript
• Hybrid: Visualforce + HTML/CSS
Design considerations
• Recommended limit to 9 actions (including standard) per layout
• Custom action Visualforce page rendered in IFRAME
• Height must be specified and is fixed
• Take care when reaching outside of IFRAME
• Design for mobile and browser
• Compromise
• Adapt
• Micro-moments
Design considerations: action lifecycle
Model
Desktop / Web UI
Mobile / Salesforce1
APIs
Cyclic
Modal
Publisher Refresh (feed)
Redirect
Submit action
Plain old Visualforce
<apex:page standardcontroller="Account"
extensions="AccountActivityTimeActionController"
showHeader="false">
<apex:form >
<apex:selectList value="{!SelectedTask}" multiselect="false"
label="Task" size="10" style="width:100%;">
<apex:actionSupport event="onchange" action="{!changeTask}"
rerender="logPanel"/>
<apex:selectOptions value="{!SelectableTasks}"/>
</apex:selectList>
Plain old Visualforce
<apex:outputPanel id="logPanel">
<apex:repeat var="item" value="{!log}”>{!item}<br/></apex:repeat>
</apex:outputPanel>
</apex:form>
</apex:page>
Publisher APIs
<script type='text/javascript' src='/canvas/sdk/js/publisher.js'/>
Refresh feed (desktop)
Sfdc.canvas.publisher.publish({ name: 'publisher.refresh',
payload: {feed:true}
});
Submit hook (Salesforce1)
Sfdc.canvas.publisher.subscribe({name: "publisher.showPanel",
onData:function(e) {
Sfdc.canvas.publisher.publish({name:
"publisher.setValidForSubmit", payload:"true"});
}});
Sfdc.canvas.publisher.subscribe({ name: "publisher.post",
onData: function(e) {
alert("call some remote action here");
Sfdc.canvas.publisher.publish({ name: "publisher.close",
payload:{ refresh:"true" }});
}});
Redirect (Salesforce1)
sforce.one.navigateToSObject(recordId,view)
sforce.one.navigateToURL(url)
sforce.one.navigateToFeed(subjectId, type)
sforce.one.navigateToFeedItemDetail(feedItemID)
sforce.one.navigateToRelatedList(relatedListId, parentRecordId)
sforce.one.navigateToList(listViewId, listViewName, scope)
sforce.one.createRecord(entityName, recordTypeId)
sforce.one.editRecord(recordId)
Adapt
if( (typeof sforce != 'undefined') && (sforce != null) ) {
// Salesforce1
} else {
// Desktop
}
Salesforce1 and FinancialForce Accounting
• Use Case
• Collaborative Collections / 360º BackOffice
• Invoice Conversation
• Credit Limit Conversation
• Raise Account
• Etc.
• Implementation
Lets use what Salesforce1 has for us!
Implementation Element: Flexipage
Implementation
1. FlexiPage
What is it ?!
Setup → Create → Tabs
Flexipage Metadata
• List Views
• Recent Records
• Global Chatter Actions
Salesforce1 and FinancialForce Accounting
• Implementation
• FlexiPage
• List Views
• Recent Records
• Global Chatter Actions
Salesforce1 and FinancialForce Accounting
• Implementation
• Mobile Card
What is it?
It is like an inline Visualforce
page for mobile devices only.
Salesforce1 and FinancialForce Accounting
• Implementation
• Custom Action
• Visualforce
• JQuery Mobile
Invoice Conversation
Salesforce1 demonstration
→
Stephen Willcock
Director of Product
Innovation at
FinancialForce.com
@stephenwillcock
Carolina Ruiz
Principal Developer, Product
Innovation at
FinancialForce.com
@CarolEnLaNube