zoukankan      html  css  js  c++  java
  • 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;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为今半个多月,代码写得不好请多多包涵,有什么不足的地方也请评论指出,一起学习共同进步。

  • 相关阅读:
    用VSTS进行网站压力测试
    紧急求助!powerdesigner 12的问题!
    决定你是富人还是穷人的12法则(转)
    LINQ to SQL公共基类
    Web.config详解(转)
    向iframe中的页面传递参数
    [转]mysql 乱码问题解决终结
    [转]mysql多次调用存储过程的问题
    未能加载类型“System.Web.Mvc.ViewPage<String>”
    javascript之典型高阶函数
  • 原文地址:https://www.cnblogs.com/maskfirer/p/6780841.html
Copyright © 2011-2022 走看看