Más contenido relacionado La actualidad más candente (20) Similar a Cloud Entwicklung mit Apex (20) Cloud Entwicklung mit Apex2. Apex?
Apex Code extends the powerful and proven success of the Force.com platform by
introducing the ability to write code that runs on salesforce.com servers.
4. Use Case
Beschwerde Managment
Anforderung: Konversationen sollen auf der Case-Seite möglichst
schnell editierbar sein.
6. Views & Controller
Aufruf einer Visualforce Page über:
( https://emea.salesforce.com/apex/yourpage )
<apex:page controller="TestController">
Hallo {!name}
</apex:page>
Class TestController{
public String name { get; set; }
public TestController{
this.name = UserInfo.getName();
}
}
7. Controller Extensions
Für eine bessere Integration in SalesForce!
( https://emea.salesforce.com/5002000000MVOBr )
<apex:page standardController="Case" extensions="CaseControllerTest">
Hallo {!caseID} !
</apex:page>
8. Controller Extensions
Für eine bessere Integration in SalesForce!
( https://emea.salesforce.com/5002000000MVOBr )
<apex:page standardController="Case" extensions="CaseControllerTest">
Hallo {!caseID} !
</apex:page>
Class TestController{
public String caseID { get; set; }
public TestController(ApexPages.StandardController controller){
if(controller != null){
caseID = controller.getId();
}
}
}
10. Add new Conversation
Controller Extension
public class ConversationController {
public ConversationController(ApexPages.StandardController controller){
if(controller != null){
caseID = controller.getId();
}
}
public Conversation__c conversation{
public get{
if(conversation==null){
conversation = new Conversation__c( Case__c = caseID );
}
return conversation;
}
private set;
}
}
11. The Apex Tag-Library
<apex:form id="conversation_form">
<apex:pageblock>
<apex:pageblocksection columns="1">
<apex:pageblockSectionItem >
{!$ObjectType.Conversation__c.Fields.Name.label}
<apex:inputfield value="{!conversation.Name}"/>
</apex:pageblockSectionItem>
<apex:pageblockSectionItem >
{!$ObjectType.Conversation__c.Fields.Type__c.label}
<apex:inputfield value="{!conversation.Type__c}"/>
</apex:pageblockSectionItem>
<apex:pageblockSectionItem >
{!$ObjectType.Conversation__c.Fields.Note__c.label}
<apex:inputfield value="{!conversation.Note__c}"/>
</apex:pageblockSectionItem>
<apex:pageblockSectionItem >
<apex:commandButton action="{!addConversation}" value="Add Conversation" rerender="conversation_form"/>
</apex:pageblockSectionItem>
</apex:pageblocksection>
</apex:pageblock>
</apex:form>
12. The Action-Function
public class ConversationController {
......
/**
* Our ActionFunction to add a new Conversation to the Log:
*/
public PageReference addConversation(){
/* save conversation */
insert(this.conversation);
/* create a new one */
conversation = new Conversation__c( Case__c = caseID );
return null;
}
......
}
13. Conversation List
public class ConversationController {
......
public List<Conversation__c> conversations{
public get{
if(conversations==null){
conversations = getConverationsForCase(this.caseID);
}
return conversations;
}
private set;
}
...
public List <Conversation__c> getConverationsForCase(Id caseID){
return [Select c.Type__c, c.SystemModstamp, c.Note__c,
c.Name, c.LastModifiedDate, c.LastModifiedById, c.IsDeleted, c.Id, c.CreatedDate,
c.CreatedById, c.Case__c
From Conversation__c c where c.Case__c = :caseID
order by c.CreatedDate desc];
}
}
14. Conversation List
<apex:pageblock id="conversation" title="Conversation Log">
<apex:pageblocksection >
<apex:pageblockSectionItem id="coversation_table">
<apex:dataTable value="{!conversations}" var="conv">
<apex:column onclick="selectConversation('{!conv.id}');">
<apex:facet name="header">
{!$ObjectType.Conversation__c.fields.Name.label}
</apex:facet>
<apex:outputField styleClass="taskdate" value="{!conv.Name}"/>
</apex:column>
.....
15. Conversation List
.....
</apex:dataTable>
</apex:pageblockSectionItem>
<apex:pageblockSectionItem >
<apex:pageblock id="conversationdetail">
<p>{!selectedConversation.Note__c}</p>
</apex:pageblock>
</apex:pageblockSectionItem>
</apex:pageblocksection>
</apex:pageblock>
</apex:form>
16. Select a Conversation
public class ConversationController {
.......
public String selectConversationID{ get; set; }
public Conversation__c selectedConversation{ public get; private set; }
public PageReference selectConversation(){
if( selectConversationID != null ){
/* find the conversation */
for(Conversation__c c : this.conversations ){
if( c.id == (Id)selectConversationID ){
this.selectedConversation = c;
return null;
}
}
}
return null;
}
.....
17. Select a Conversation
<apex:actionfunction action="{!selectConversation}" rerender="conversationdetail">
<apex:param name="selectConversationID" assignTo="{!selectConversationID}" />
</apex:actionfunction>
....
<apex:pageblock id="conversation" title="Conversation Log">
<apex:pageblocksection >
<apex:pageblockSectionItem id="coversation_table">
<apex:dataTable value="{!conversations}" var="conv" title="Conversations">
<apex:column onclick="selectConversation('{!conv.id}');">
....
<apex:pageblockSectionItem >
<apex:pageblock id="conversationdetail">
<p>{!selectedConversation.Note__c}</p>
</apex:pageblock>
</apex:pageblockSectionItem>
</apex:pageblocksection>