Páginas de Visualforce como acciones personalizadas específicas de objeto
Una página de Visualforce agregada como acción personalizada en un objeto se invoca en el contexto de un registro de ese tipo de objeto. Se asigna un Id. de registro específico a la acción personalizada: el registro consultado por el usuario al hacer clic en la acción personalizada. Diseñe la página para trabajar en ese tipo de registro específico.
Ediciones necesarias
| Disponible en: Salesforce Classic y Lightning Experience |
| Disponible en: Group Edition, Professional Edition, Enterprise Edition, Performance Edition, Unlimited Edition, Contact Manager Edition, Database.com Edition y Developer Edition |
Las páginas de Visualforce que cree para utilizarlas como acciones específicas de objeto deben utilizar un controlador de objetos estándar. Utilice extensiones de controlador para agregar códigos personalizados, incluyendo métodos de @RemoteAction que puede llamar utilizando Comunicación remota de JavaScript.
Su código personalizado debe hacer algo más que realizar actualizaciones en el registro de origen. Por ejemplo, la acción personalizada Crear pedido rápido busca mercancías coincidentes. Entonces crea una factura y una partida, todo como parte de la creación de un pedido de una pieza. Esta lógica ocurre en el contexto del registro de cuenta de origen, la factura está relacionada con el registro de cuenta donde se ha invocado la acción de pedido rápido.
La siguiente muestra de código presenta una página designada para su uso como acción personalizada en el objeto de cuenta, de modo que utiliza el controlador de cuentas estándar. Esta acción permite que los usuarios creen casos desde páginas de detalles de cuentas y tiene una interfaz de usuario diferente de las acciones de creación estándar.
public with sharing class CreateCaseExtension {
private final SObject parent;
public Case theCase {get; set;}
public String lastError {get; set;}
public CreateCaseExtension2(ApexPages.StandardController controller) {
parent = controller.getRecord();
theCase = new Case();
theCase.accountId = parent.id;
lastError = '';
}
public PageReference createCase() {
createNewCase();
theCase = new Case();
theCase.accountId = parent.id;
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 standardcontroller="Account" extensions="CreateCaseExtension" 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 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:538px;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>
</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 para actualizar páginas host
Si desea realizar una acción personalizada global o específica del objeto para actualizar las noticias en tiempo real de la página que las aloja, la página de Visualforce que cree para utilizarla como acción debe:
- Haga referencia al archivo JavaScript del publicador:
<script type='text/javascript' src='/canvas/sdk/js/publisher.js'/>. (La creación de acciones de Visualforce personalizadas no requiere el SDK de Lienzo.) - Incluya esta llamada de JavaScript:
Sfdc.canvas.publisher.publish({name : 'publisher.refresh', payload : {feed:true}});.
- Páginas de Visualforce como acciones personalizadas globales
Las páginas de Visualforce utilizadas como acciones globales se pueden invocar en diferentes sitios y no tienen un registro específico asociado a ellas. Tienen libertad de acción completa, lo que significa que depende de usted escribir el código. - Ocultar el encabezado de acción para acciones personalizadas de Visualforce
Al crear una página de Visualforce para utilizar como una acción personalizada, puede elegir ocultar el encabezado de la acción. Ocultar el encabezado de acción ayuda a evitar la confusión del usuario, especialmente si tiene sus propios botones especificados en la página de Visualforce.
