以下练习适合刚刚接触Saleforce平台,并已经做完官方salesforce文档中招聘事例,对Apex语言有一些基础认知,需要练习的童鞋。
需要文档的请移步官方网站:https://developer.salesforce.com/docs/
懒人网盘链接:http://pan.baidu.com/s/1bp1oGqz 密码:b0zm
进入正题:
1.对象字段配置:
新建一个对象:对象名为会员(Member)。
上面新建几个字段:
记录编号(自动编号)autoNum__c,编号样式MM-0001;
性别(选项列表):gender__c,选项列表值(男,女,未知),设置默认值为 ‘男’;
成为会员日期(日期类型):memdate__c,默认值今天;
已购商品(选项列表):buyedgoods__c; 选项列表值(洗发素,沐浴露,洗衣液);
是否已购商品(复选框):ifbuyed__c;
客户(查找字段,查找客户):account__c;
客户地址 address__c;
标准对象:客户
新建字段:
会员数量(数字):mennum__c;默认值为0;
2.新建工作流:
新建或更新会员记录时,如果‘已购商品’字段为空,则‘是否已购商品’值变为未勾选,如果‘已购商品’字段选择了值,则‘是否已购商品’值变为已勾选。
3、配置实现:
会员对象上的客户地址 address__c;取客户上的地址
4.Trigger和Class:
1、 利用trigger和class,来实时统计该客户下有多少个会员。新建,更新,删除会员时,统计该客户的会员记录数量,给客户上的‘会员数量’字段赋值。
2、当会员上的是否已购商品打钩时,在该客户下创建一条任务。主题为”您有新的会员任务需要跟进”、到期日期取当前日期的后三天。
5.简单页面:
做一个会员展示页面,分页显示所有会员记录,每页显示2条记录,需要展示会员所有自定义字段。
前三题,对于做过官方文档招聘事例的童鞋都是温故的内容,后面两题给大家提供下本人的解决方法。
第四题,第一小题
trigger:
trigger MemberTrigger on Member__c (after insert,after update,after delete,after undelete) { if(trigger.isAfter){ Cbl_MemberCount memberCount=new Cbl_MemberCount(); if(trigger.isInsert){ memberCount.memberCount(trigger.new); } if(trigger.isUpdate){ memberCount.memberCount(trigger.new,trigger.old); } if(trigger.isDelete){ memberCount.memberCount(trigger.old); } if(trigger.isUndelete){ memberCount.memberCount(trigger.new); } } }
trigger辅助类:
public class Cbl_MemberCount { //适用于新建、删除时的操作 public void memberCount(List<Member__c> list_Member){ Set<ID> set_ID=new Set<ID>(); List<ID> list_id=new List<id>(); //遍历得到的集合,去重复得到操作过的客户ID for(Member__c objMember:list_Member){ set_ID.add(objMember.account__c); } //将最终结果用list保存 list_id.addAll(set_ID); //重新查询进行操作过的客户ID下有多少个会员 AggregateResult[] memberNum=[select Count(Member__c.autoNum__c) from Member__c where Member__c.account__c in :list_id]; system.debug(memberNum.size()); //将查询结果放入List中 List<Account> list_updateAccout=new List<Account>(); for(Integer i=0;i<memberNum.size();i++){ Account account=new Account(); system.debug(memberNum[i]); account.menNum__c=(Decimal)memberNum[i].get('expr0'); account.id=list_id.get(i); list_updateAccout.add(account); } system.debug(list_updateAccout); //更新 update list_updateAccout; } //适用于修改操作 public void memberCount(List<Member__c> list_Member,List<Member__c> oldlist_Member){ Cbl_MemberCount memberCount=new Cbl_MemberCount(); memberCount.memberCount(list_Member); memberCount.memberCount(oldlist_Member); } }
第四题,第二小题
这个问题本人能力有限,不知道如何用代码实现,暂时通过salesforce进程生成器配置完成了
点击:设置-》创建-》工作流和批准-》进程生成器
新建一个进程,然后配置如下所示:
注意相关项ID选择会员所属客户ID,这样一旦是否购物记录为True,就会新建一条任务记录,分配到相关的客户下显示。
第五题
本人分页参考了zero大大一篇博客,大家可以移步去看看,写的比较详细http://www.cnblogs.com/zero-zyq/p/5343287.html
分页控制类:
public class MemberController { //实例化StandardSetController查询定位器 public ApexPages.StandardSetController con{ get{ if(con==null){ con=new ApexPages.StandardSetController(Database.getQueryLocator([select Name,autoNum__c, gender__c,memdate__c,
buyedgoods__c, ifbuyed__c, account__c, address__c from Member__c])); con.setPageSize(2); } return con; } set; } public List<Member__c> getMember(){ return (List<Member__c>)con.getRecords(); } //首页 public void first(){ con.first(); } //尾页 public void last(){ con.last(); } //上一页 public void previous(){ con.previous(); } //下一页 public void next(){ con.next(); } //当前页码 public Integer getPageNumber(){ return con.getPageNumber(); } //总共页数 public Integer getPageCount(){ if(con.getResultSize()<=2){ return 1; } if(math.mod(con.getResultSize(),con.getPageSize())==0){ return con.getResultSize()/con.getPageSize(); } return con.getResultSize()/con.getPageSize()+1; } //当前页记录数 public Integer getPageSize(){ return con.getPageSize(); } }
visualforce页面代码:
<apex:page Controller="MemberController"> <apex:form > <apex:pageBlock title="会员展示页面"> <!--表格内容 下面的Member对应get后的方法名--> <apex:pageBlockTable value="{!Member}" var="mem"> <apex:column value="{!mem.autoNum__c}" /> <apex:column value="{!mem.Name}"/> <apex:column value="{!mem.gender__c}"/> <apex:column value="{!mem.buyedgoods__c}"/> <apex:column value="{!mem.ifbuyed__c}"/> <apex:column value="{!mem.memdate__c}"/> <apex:column value="{!mem.account__c}"/> <apex:column value="{!mem.address__c}"/> </apex:pageBlockTable> </apex:pageBlock> <table style="margin:0 auto;120%;"> <tr> <td style="30%"></td> <!--页面信息展示--> <td style="40%;text-align:justify"> <apex:outputText >第{!PageNumber}页,</apex:outputText> <apex:outputText >共{!PageCount}页,</apex:outputText> <apex:outputText >每页{!PageSize}条</apex:outputText> </td> <!--分页组件--> <td style="30%;text-align:right"> <apex:panelGrid columns="5" > <apex:commandLink action="{!first}" value="首页"/> <apex:commandLink action="{!previous}" value="上一页"/> <apex:outputText >{!PageNumber}</apex:outputText> <apex:commandLink action="{!next}" value="下一页"/> <apex:commandLink action="{!last}" value="尾页"/> </apex:panelGrid> </td> </tr> </table> <apex:detail /> </apex:form> </apex:page>
本人初出茅庐程序员一只,学习Salesforce为今半个多月,代码写得不好请多多包涵,有什么不足的地方也请评论指出,一起学习共同进步。