Sie befinden sich hier:
Visualforce-Seiten als objektspezifische benutzerdefinierte Aktionen
Eine Visualforce-Seite, die als benutzerdefinierte Aktion für ein Objekt hinzugefügt wurde, wird im Kontext eines Datensatzes dieses Objekttyps aufgerufen. Der benutzerdefinierten Aktion wird eine spezifische Datensatz-ID zugewiesen – der Datensatz, den der Benutzer angezeigt hat, als er auf die benutzerdefinierte Aktion geklickt hat. Gestalten Sie die Seite so, dass mit diesem spezifischen Datensatztyp agiert wird.
Erforderliche Editionen
| Verfügbarkeit: Salesforce Classic und Lightning Experience |
| Verfügbarkeit: Group, Professional, Enterprise, Performance, Unlimited, Contact Manager, Database.com und Developer Edition |
Visualforce-Seiten, die Sie für die Verwendung als objektspezifische Aktionen erstellen, müssen ein Standardsteuerfeld für Objekte verwenden. Verwenden Sie Steuerfelderweiterungen, um benutzerdefinierten Code, einschließlich mit JavaScript Remoting aufrufbarer @RemoteAction-Methoden, hinzuzufügen.
Ihr benutzerdefinierter Code kann mehr als nur Aktualisierungen am ursprünglichen Datensatz vornehmen. Beispielsweise sucht die benutzerdefinierte Aktion "Schnellauftrag erstellen" nach übereinstimmenden Waren. Sie erstellt dann eine Rechnung und einen Belegposten – und zwar alles als Teil der Erstellung eines Auftrags für ein Teil. Diese Logik tritt im Kontext des ursprünglichen Accountdatensatzes auf. Die Rechnung wird dem Accountdatensatz zugeordnet, für den die Schnellauftragsaktion aufgerufen wurde.
Im folgenden Codebeispiel wird eine Seite dargestellt, die als benutzerdefinierte Aktion für das Account-Objekt bestimmt ist, sodass das Standardsteuerfeld für "Account" verwendet wird. Über diese Aktion können Benutzer Kundenvorgänge auf Account-Detailseiten erstellen und sie verfügt über eine andere Benutzeroberfläche als standardmäßige Erstellaktionen.
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>
Anforderungen für die Aktualisierung von Host-Seiten
Wenn eine objektspezifische oder globale benutzerdefinierte Aktion den Feed auf der Seite aktualisieren soll, die als dessen Host fungiert, muss die von Ihnen erstellte Visualforce-Seite, die Sie als diese Aktion verwenden, folgende Voraussetzungen erfüllen:
- Sie muss auf die Publisher-JavaScript-Datei verweisen:
<script type='text/javascript' src='/canvas/sdk/js/publisher.js'/>hinzu. (Zum Erstellen benutzerdefinierter Visualforce-Aktionen ist das Zeichenbereich-SDK nicht erforderlich.) - Sie muss folgenden JavaScript-Aufruf enthalten:
Sfdc.canvas.publisher.publish({name : 'publisher.refresh', payload : {feed:true}});hinzu.
- Visualforce-Seiten als globale benutzerdefinierte Aktionen
Als globale Aktionen verwendete Visualforce-Seiten können an vielen verschiedenen Stellen aufgerufen werden und ihnen ist kein spezieller Datensatz zugeordnet. Sie weisen komplette Freiheit hinsichtlich der Aktionen auf. Das bedeutet, es obliegt Ihnen, den Code zu schreiben. - Ausblenden der Aktionsüberschrift für benutzerdefinierte Visualforce-Aktionen
Wenn Sie eine Visualforce-Seite erstellen, die als benutzerdefinierte Aktion verwendet werden soll, können Sie wahlweise die Aktionsüberschrift ausblenden. Das Ausblenden der Aktionsüberschrift kann dazu beitragen, Verwirrung bei den Benutzern zu vermeiden, insbesondere wenn Sie auf der Visualforce-Seite Ihre eigenen Schaltflächen angegeben haben.

