salesforce-零基础开发入门学习_第1页
salesforce-零基础开发入门学习_第2页
salesforce-零基础开发入门学习_第3页
salesforce-零基础开发入门学习_第4页
salesforce-零基础开发入门学习_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

salesforce零根底开发入门学习〔四〕多表关联下的SOQL以及表字段Datatype详解建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表。1.采用schemaBuilder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schemaBuilder或者build-->schemaBuilder进入;2.采用forceExplorer通过自己写查询语句来查询数据。此链接为forceExplorer的下载链接:下载完成后通过用户,密码,Securitytoken账号登陆即可,见〔篇一〕。此篇主要讲解表字段的Datatype的每种类型以及多表关联下的SOQL查询,由于多表关联涉及到Datatype中的lookup或者master-detail,所以先讲一下Datatype类型。一〕Datatype当数据表创立表的列时,会选择DataType,不同的DataType在页面处理以及数据插入时会有不同的处理。而且不同的字段会有其相对应的数据类型与之对应。1.AutoNumber:系统生成的序列号,通过自身定义的形式显示,为每条新纪录自动递增数;2Formula:声明一个计算式,功能很强大,以后会单独篇章讲解formula用法;3.LookupRelationship:创立链接一个对象和另一个对象的关系,创立关系后,通过一个对象可以访问另一个对象的内容信息;4.Master-DetailRelationship:创立一个特殊的父子关系〔主从关系〕,和lookupRelationship的相同与差异在下面介绍;5.ExternalLookupRelationship:创立一个对象和另一个额外对象的关系。其中这个对象的数据存储在额外对象的数据源中;6.Checkbox:声明一个布尔类型;7.Currency:声明一个货币类型;8.Date:声明一个Date类型,用户在前台绑定后可以直接使用Date类型相应的控件;9.Date/Time:声明一个Date和Time类型,用户选择日期后,日期和当前时间便赋值到输入域;10.Email:声明一个Email类型;11.Geolocation:声明一个位置的类型,此类型包含经纬度信息;12.Number:允许输入任何的数字,如果输入的全是0那么全部移除;13.Percent:声明一个百分比类型;14.Phone:声明一个号码类型,输入的内容自动转换成此类型;15.Picklist:声明一个列表类型,类似于HTML中的<select><option></option></select>关系,下面会有例子讲解;16.Picklist〔Multi-Select〕:声明一个列表类型,区别上面的为允许多项选择;17.Text:声明一个字符串类型,最大长度为255;18.TextArea:和Text类型相似,区别为内容可以换行;19.TextArea(Long):和TextArea相似,最大长度为131072;20.TextArea(Rich):富输入框,可以存储图片等;21.Text(Encrypted):可以加密的形式存储;22.URL:声明一个URL类型。在工程中有一些是我们需要经常用到的类型,比方2,3,4,6,7,8,9,10,12,15,16,17,19,20,22.有一些类型配置相对简单,选中Datatype类型,输入字段名称然后一直执行下一步便可以完成操作;有一些类型配置那么相对麻烦。接下来主要描述LookupRelationship,Master-detailRelationship,Picklist这三种类型配置。1〕PickListPickList声明一组数据,类似HTML中的选择框。通常用于确定的内容选择,比方学生表可以声明学生的学历--Education__c字段。他的值为确定范围的:幼稚园,小学,初中,高中,大学。。。所以这个字段可以声明为PickList类型字段。即此字段适用于值是确定范围的,有穷的情况。声明PickList操作步骤如下:1.如果存在Student表情况下,在setup-->create-->Objects下找到Student,点击进入。如果不存在Student,那么按照上一篇步骤新建Student表;2.在CustomFields&Relationships模块下点击add新建一个字段并选择PickList点击Next;3.在FieldLabel中输入Education,鼠标移动到FieldName中那么自动输入。将Value选择第二个EnterValue,并在输入框中输入相应值,如图1所示;4.一直选择Next,最后点击Save按钮新增PickList类型字段。图12〕LookupRelationship与Master-detailRelationship二者均可以关联两个数据表,实现其他数据库语言类似join功能,二者区别如下:1.masterdetail关系比拟紧密,可以自动进行级联删除,Lookup关系相对灵活,不可以级联删除,如果删除操作,那么需要先删除从表,再删除主表操作;2.用lookup允许父为空,master不允许--master模式需要级联删除,如果master情况父为空那么无法级联删除。具体使用那种分数据表关系,如果数据表关联比拟紧密,删除时需要级联删除那么可以选择master-detail模式,如果关系相对松散,希望表之间灵活控制,那么推荐使用lookup关系。以权限表和角色表两个表关系来引入Lookup.做过权限管理的人都知道,一个权限可以对应多个角色,一个角色可以分配多种权限,权限与角色是多对多关系。比方,查看文章的权限可以是管理员具有查看权利,也可以是普通用户具有查看的权利;一个管理员可以有查看的权限,也可以有修改的权限。所以应该引入一个中间表角色权限表作为中间表,实现以上的数据表结构构造,如图2所示。图2通过图2可以看出,PRIVELEGEROLE__c外键依赖于PRIVELEGE__c以及ROLE__c,即PRIVELEGEROLE__c的PRIVELEGEID__c字段与PRIVELEGE__c的Id字段进行关联,PRIVELEGEROLE__c的ROLEID__c的Id字段进行关联,通过这两个关联字段可以访问到这两个关联的表中。访问方式比拟特殊,即通过PRIVELEGEID__r可以访问到PRIVELEGE表〔对应的sObject为PRIVELEGE__c〕中的字段,通过ROLEID__r可以访问到ROLE表(对应的sObject为ROLE__c)中的字段。注意:这三个表如果按照Master-Detail关系情况,那么PRIVELEGE__c和ROLE__c为主表,PRIVELEGEROLE__c为从表〔外键依赖于另外两个表〕。通过外键依赖的sObject,将sObject最后的c改成r便可以访问此表。eg:SELECT

PRIVELEGEID__r.Id,PRIVELEGEID__r.PRIVELEGENAME__c,

ROLEID__r.ROLENAME__c,IdFROM

PRIVELEGEROLE__c通过上面例子可以看出:PRIVELEGEROLE__c表中的PRIVELEGEID__c是表中的一个字段,通过LookUp关系关联到PRIVELEGE__c,那么PRIVELEGEID__r那么相当于PRIVELEGE__c表的一个引用,通过PRIVELEGEID__r那么可以访问PRIVELEGE__c表中的数据,为了更加明确的了解,将数据表查询结果通过JSON形式显示,便会更加的一目了然。通过查询输出的json结果可以看出,PRIVELEGEID__r他的类型为PRIVELEGE__c,并且把此条记录中的PRIVELEGE__c需要的字段信息查出,ROLEID__r类型为ROLE__c,并且将此条记录中ROLE__c表需要的字段信息查出。推荐下方的网页查看json,它可以将输出的混乱的json格式变得整洁,增强可读性。json在线转换网页:查询结果转成JSON语句:1234567StringqueryString='SELECT

PRIVELEGEID__r.Id,PRIVELEGEID__r.PRIVELEGENAME__c,

ROLEID__r.ROLENAME__c,ROLEID__c,Id

FROMPRIVELEGEROLE__c';List<PRIVELEGEROLE__c>prs=Database.query(queryString);StringqueryJson=JSON.serialize(prs);System.debug(queryJson);以下为查询的输出json结果。1[2{3"attributes":{4"type":"PRIVELEGEROLE__c",5"url":"/services/data/v36.0/sobjects/PRIVELEGEROLE__c/a03280000089RbkAAE"6},7"PRIVELEGEID__c":"a012800000KufW5AAJ",8"ROLEID__c":"a0228000008fwJ6AAI",9"Id":"a03280000089RbkAAE",10"PRIVELEGEID__r":{11"attributes":{12"type":"PRIVELEGE__c",13"url":"/services/data/v36.0/sobjects/PRIVELEGE__c/a012800000KufW5AAJ"14},15"Id":"a012800000KufW5AAJ",16"PRIVELEGENAME__c":"权限添加"17},18"ROLEID__r":{19"attributes":{20"type":"ROLE__c",21"url":"/services/data/v36.0/sobjects/ROLE__c/a0228000008fwJ6AAI"22},23"Id":"a0228000008fwJ6AAI",24"ROLENAME__c":"角色添加"25}26}27]接下来讲解如何在网站中构建出LookUp关系,如果不懂如何创立表和字段,请查看上一篇内容。1.创立PRIVELEGE表,按照图二的表结构可以看出,需要创立PRIVELEGENAME和PRIVELEGEDESCRIBE两个字段,创立后,系统会自动为其创立APIName;2.创立ROLE表,按照图二的表结构可以看出,需要创立ROLENAME和ROLEDESCRIBE两个字段,创立后,系统会自动为其创立APINAME;3.创立PRIVELEGEROLE表;4.创立和PRIVELEGE表的依赖,新增一个字段,Datatype选择LookUp,点击Next,如图3;5.在RelateTo下拉框处选择需要关联的表,此处选择PRIVELEGE表,如图4,然后点击Next;6.在FieldLabel输入字段名称,此处输入PRIVELEGEID,鼠标移动到FieldName,那么自动赋值,如图5,一直点击next;7.点击save&new按钮,重复4--6步骤,将于ROLE表关联的字段创立,FieldLabel处输入ROLEID,最后save,关联结束,如图6.图3图4图5图6使用Master-Detail关系和使用LookUp关系创立根本相同,这里不在做说明。接下来说明DML操作。现在说一下增删查操作,改操作和其他相同,那么不再讲述。上述代码查询出来的内容为PRIVELEGEROLE__c对象,那么如何检索出需要的PRIVELEGE__c对象的字段或者ROLE__c对象的字段呢?apex提供简单的方式来处理,即如果各层级嵌套,那么可以通过类似方式来获取需要的内容。查询操作代码将与删除操作代码在下方一起显示。因为表之间存在关联关系,所以进行增加操作时,应先处理主表,然后再处理从表;进行删除操作时,应先删除从表,在删除主表。这里在啰嗦一下:主表表示独立的表,从表表示外键依赖于其他表的表。主表有时也被成为父表,子表有时也被成为子表,上述的例子中,PRIVELEGEROLE为从表,其他为主表增加操作代码举例:PRIVELEGE__cprivelege=newPRIVELEGE__c(PRIVELEGENAME__c='权限添加',PRIVELEGEDESCRIBE__c='权限描述');ROLE__crole=newROLE__c(ROLENAME__c='角色添加',ROLEDESCRIBE__c='角色描述');insertprivelege;//执行insert后,privelege的ID字段便会自动被赋值,且唯一insertrole;IDroleId=[selectIdfromROLE__climit1][0].ID;IDprivelegeId=[selectIdfromPRIVELEGE__climit1][0].ID;PRIVELEGEROLE__cprivelegeRole=newPRIVELEGEROLE__c();privelegeRole.ROLEID__c=roleId;privelegeRole.PRIVELEGEID__c=privelegeId;insertprivelegeRole;

//添加操作需要先添加主表,主表添加以后,ID便自动赋值,然后再取出ID操作从表。删除操作代码举例:1StringdeletePrivelegeRoleSql='SELECTROLEID__c,2Id,PRIVELEGEID__r.ID,ROLEID__r.ID'+3'FROMPRIVELEGEROLE__c';4Li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论