Visualforce Pages as Global Custom Actions
Les pages Visualforce utilisées en tant qu'actions globales peuvent être invoquées dans de nombreux emplacements et n'ont aucun enregistrement spécifique associé. Elles sont totalement libres, ce qui signifie que vous pouvez écrire le code de votre choix.
Éditions requises
| Disponible avec : Salesforce Classic et Lightning Experience |
| Disponible avec : Group Edition, Professional Edition, Enterprise Edition, Performance Edition, Unlimited Edition, Contact Manager Edition, Database.com Edition et Developer Edition |
Les pages Visualforce que vous créez pour les utiliser en tant qu'actions globales ne peuvent pas utiliser un contrôleur d'objet standard. Vous devez écrire un contrôleur personnalisé pour gérer la page.
Lorsqu'une action globale se termine, l'utilisateur doit être redirigé vers l'enregistrement parent créé dans le cadre de l'action ou être renvoyé à son point de départ.
L'exemple de code suivant présente une page Visualforce conçue pour être utilisée comme action personnalisée dans tous les objets qui prennent en charge les actions. Cette action permet aux utilisateurs de créer des requêtes à partir de pages de détail d'enregistrement, de Chatter, de groupes Chatter (à l'exception de groupes de clients) ou de la page d'accueil. Son interface utilisateur est différente de celle des actions de création standard. Comme avec toute action globale, les enregistrements créés via cette action ne sont pas associés à d'autres enregistrements.
<!-- Custom controller -->
public with sharing class CreateCaseController {
public Case theCase {get; set;}
public String lastError {get; set;}
public CreateCaseController() {
theCase = new Case();
lastError = '';
}
public PageReference createCase() {
createNewCase();
theCase = new Case();
return null;
}
private void createNewCase() {
try {
insert theCase;
FeedItem post = new FeedItem();
post.ParentId = ApexPages.currentPage().getParameters().get('id');
post.Body = 'created a case';
post.type = 'LinkPost';
post.LinkUrl = '/' + theCase.id;
post.Title = theCase.Subject;
insert post;
} catch(System.Exception ex){
lastError = ex.getMessage();
}
}
}
<apex:page controller="CreateCaseController" showHeader="false">
<script type='text/javascript' src='/canvas/sdk/js/publisher.js'/>
<style>
.requiredInput .requiredBlock, .requiredBlock {background-color: white;}
.custompubblock div {display: inline-block;}
.custompublabel {width:54px;}
</style>
<script>
function refreshFeed() {
Sfdc.canvas.publisher.publish({name : 'publisher.refresh', payload : {feed: true}});
}
</script>
<div>
<apex:form >
<apex:actionFunction action="{!createCase}" name="createCase" rerender="out" oncomplete="refreshFeed();"/>
<apex:outputPanel id="out" >
<div class="custompubblock">
<div>Subject: </div><apex:inputField value="{!theCase.subject}" style="width:500px;" />
</div>
<div class="custompubblock">
<div class="custompublabel">Account:</div><apex:inputField value="{!theCase.accountId}"
style="margin-left:0;"/>
<div>Contact: </div><apex:inputField value="{!theCase.contactId}" />
</div>
<apex:inputField value="{!theCase.description}" style="width:500px;height:92px;margin-top:4px;" />
<div class="custompubblock" style="margin-top:5px;">
<div>Status: </div><apex:inputField value="{!theCase.status}" />
<div>Priority: </div><apex:inputField value="{!theCase.priority}" />
<div>Case Origin: </div><apex:inputField value="{!theCase.origin}" />
</div>
<div style="color:red;">{!lastError}</div>
</apex:outputPanel>
</apex:form><br/>
<button type="button" onclick="createCase();" style="position:fixed;bottom:0px;right:0px;padding:5px 10px;
font-size:13px; font-weight:bold; line-height:
18px;background-color:#0271BF;background-image:-moz-linear-gradient(#2DADDC, #0271BF);background-repeat:repeat-x;
border-color:#096EB3;" id="addcasebutton">Create Case</button>
</div>
</apex:page>Configuration requise pour l'actualisation de pages hôtes
Pour qu'une action personnalisée spécifique à un objet ou globale actualise le fil dans la page qui l'héberge, la page Visualforce que vous créez pour cette action doit :
- Référencer le fichier JavaScript de l'éditeur :
<script type='text/javascript' src='/canvas/sdk/js/publisher.js'/>. (le kit de développement Canvas n'est pas requis pour la création d'actions Visualforce personnalisées). - Inclure l'appel JavaScript suivant :
Sfdc.canvas.publisher.publish({name : 'publisher.refresh', payload : {feed:true}});.
