Salesforce简单练习案例 - 适合初学者

 

 

以下练习适合刚刚接触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;width:120%;">
            <tr>
                <td style="width:30%"></td>
                <!--页面信息展示-->
                <td style="width:40%;text-align:justify">
                    <apex:outputText >第{!PageNumber}页,</apex:outputText>
                    <apex:outputText >共{!PageCount}页,</apex:outputText>
                    <apex:outputText >每页{!PageSize}条</apex:outputText>

                </td>
                   <!--分页组件-->
                <td style="width: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为今半个多月,代码写得不好请多多包涵,有什么不足的地方也请评论指出,一起学习共同进步。

 

posted @ 2017-04-28 11:41  MaskFirer  阅读(2520)  评论(3编辑  收藏  举报