您的位置:首页 > 其它

salesforce extendsion and standart component 继承和标准组件的使用

2013-12-20 11:16 141 查看
//apex class 类
public without sharing class BMS_CN_Speaker_Query {//public without sharing 是这个类的访问限制条件。该类主要是实现查询  是对account类的扩展

public Account account {get;set;}//在官方文档中 是定义为final类型的
public list<Account> searchresult{get;set;}//如果想从页面上拿到这个数值,必须 getset

// Constructor
public BMS_CN_Speaker_Query(ApexPages.StandardController stdController) {//因为这个类继承了Account,所以用着中写法,这个是固定写法
this.account = (Account)stdController.getRecord();//拿到account对象。可以通过这个变量接收页面中传递过来的数值。
}

public PageReference search(){ //页面跳转的的一个方法。当返回值为空的时候 ,就不跳转。具体放在参看,稍后的其他文章

string namestr = account.Name;
string hospitalstr = account.Account_Group_vod__c;//医院接收不到数值。所以选择一个text类型的替代
if(namestr != null){
namestr ='%'+namestr+'%';
}else namestr = '%%';

if(hospitalstr != null){
hospitalstr ='%'+hospitalstr+'%';
}else hospitalstr = '%%';

this.searchresult = [SELECT Id,Department_BMS_CN__c, Name, Phone,Primary_Parent_vod__r.Name ,CreatedDate ,Speaker__c
FROM Account where Department_BMS_CN__c =  :account.Department_BMS_CN__c  and
Name like :namestr and
Primary_Parent_vod__r.Name like :hospitalstr and
IsActive_BMS_CN__c = true AND RecordTypeId IN
(SELECT Id FROM RecordType WHERE SobjectType = 'Account' AND Name = 'BMS - Individual')
];//查询语句。返回一个list给成员变量赋值。
system.debug('####'+searchresult .size()+'#####'+hospitalstr );
// Search result
if(searchresult.size() == 0) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, '查无结果'));//提示框,在页面中必须通过 一个<apex:pageMessages />

}

return null;

}

}


<apex:page standardController="Account" extensions="BMS_CN_Speaker_Query" standardStylesheets="true">
<apex:form >
<apex:pageBlock mode="edit"  id="block" title="Speaker Query">
<apex:pageMessages />
<apex:pageBlockSection title="检索条件" columns="1" >
<apex:pageBlockSectionItem >
<apex:outputLabel value="医生"></apex:outputLabel>
<apex:panelGroup >
<apex:inputField value="{! Account.Name}" required="true"/>
</apex:panelGroup>
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:outputLabel >科室</apex:outputLabel>
<apex:panelGroup >
<apex:inputField value="{! Account.Department_BMS_CN__c}"  required="false" />
</apex:panelGroup>
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:outputLabel >医院</apex:outputLabel>
<apex:panelGroup >
<apex:inputField value="{! Account.Account_Group_vod__c}" required="false" />
<apex:commandButton value="查找" action="{! search}"  rerender="block" status="status" />
</apex:panelGroup>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
<apex:actionStatus id="status" startText="查找中..."/>
<apex:pageBlockSection title="检索结果" id="resultsBlock" columns="1" rendered="{!  NOT(ISNULL(searchresult)) && NOT(searchresult.size == 0) }">
<apex:pageBlockTable value="{! searchresult }" var="act" >

<apex:column value="{! act.Name}" headerValue="医生"/>
<apex:column value="{! act.Department_BMS_CN__c}" headerValue="科室"/>
<apex:column value="{! act.Primary_Parent_vod__r.Name}" headerValue="医院"/>
<apex:column >
<apex:facet name="header">是否讲者?</apex:facet>
<apex:outputText value="{! act.Speaker__c}"/>
</apex:column>
<apex:column value="{! act.CreatedDate}" headerValue="创建时间"/>

</apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>

</apex:page>


通过使用标准组件和extendsion,省去了接收数据的过程。在页面上在form表单中红输入内容,数据自动就保存到account对象中去了。后面接数据的时候,直接去相应的属性中拿值就好了。

<apex:actionStatus id="status" startText="查找中..."/>
<apex:commandButton value="查找" action="{! search}"  rerender="block" status="status" />





单击‘查找’之后,会在页面中显示‘查找中。。。’的字样。 注意actionStatus 中的id和Button中的status的值一样。

在标准的控件中,如果你的数据类型是checkbox,在页面上渲染的时候 自动就是checkbox的形式。如果你想要显示成 true或者false,只好这样写了

<apex:column >
<apex:facet name="header">是否讲者?</apex:facet>
<apex:outputText value="{! act.Speaker__c}"/>
</apex:column>


另外,

<apex:inputField value="{! Account.Department_BMS_CN__c}"  required="false" />
这句代码只能用在standardcontroller中, required = true 是说 必填。false就是可选的了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: