Páginas do Visualforce como ações personalizadas globais
Páginas do Visualforce usadas como ações globais podem ser chamadas em muitos lugares diferentes e não são associadas a um registro específico. Elas têm total liberdade de ação, o que significa que fica a seu critério a criação do código.
Edições obrigatórias
| Disponível em: Salesforce Classic e Lightning Experience |
| Disponível em: Group, Professional, Enterprise, Performance, Unlimited, Contact Manager, Database.com e Developer Editions |
Páginas do Visualforce criadas para serem usadas como ações globais não podem usar um controlador de objeto padrão. Você deve criar um controlador personalizado para manipular a página.
Quando uma ação global é concluída, o usuário é redirecionado para um registro pai criado como parte da ação ou conduzido de volta ao ponto de partida.
Este exemplo de código mostra uma página do Visualforce projetada para ser usada como uma ação personalizada em qualquer objeto que ofereça suporte a ações. Esta ação permite que os usuários criem casos a partir de páginas de detalhes de registro, do Chatter, de grupos do Chatter (exceto grupos de clientes) ou da página inicial. Ela tem uma interface de usuário diferente das ações de criação padrão. Como acontece com todas as ações globais, os registros criados por essa ação não são associados a outros registros.
<!-- 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>Requisitos de atualização de páginas de host
Para que uma ação personalizada específica de objeto ou global atualize o feed na página que o hospeda, a página do Visualforce criada para ser usada como essa ação deve:
- Fazer referência ao arquivo JavaScript do editor:
<script type='text/javascript' src='/canvas/sdk/js/publisher.js'/>. (A criação de ações personalizadas do Visualforce não exige o uso do SDK do Canvas.) - Incluir esta chamada de JavaScript:
Sfdc.canvas.publisher.publish({name : 'publisher.refresh', payload : {feed:true}});.

