salesforce 零基础学习(五十八)通过sObject的field返回其对应的基础类型

项目中有时候会要求通过sObject的Field的type类型返回其对应的基本类型,然后对其进行相关的处理,创建sObject的field可以选择的type类型是固定多的。

上述类型可以转换成几种基本类型:Boolean、Date、Datetime、Double、Integer、String、Time。

1.封装Primitive枚举类:封装基本类型

 1 public enum Primitive {
 2     TYPE_BOOLEAN, 
 3     TYPE_DATE, 
 4     TYPE_DATETIME, 
 5     TYPE_DOUBLE, 
 6     TYPE_INTEGER, 
 7     TYPE_STRING, 
 8     TYPE_TIMEOFDAY,
 9     TYPE_UNKNOW
10 }

2.创建PrimitiveHelper帮助类:通过字段的DataType返回相关的基本类型

 1 public without sharing class PrimitiveHelper {
 2 
 3     public static Primitive getPrimitiveTypeByField(String sObjectName,String fieldName) {
 4         Schema.DisplayType fieldType = getFieldDisplayType(sObjectName,fieldName);
 5         if(fieldType == Schema.Displaytype.BOOLEAN){
 6             return Primitive.TYPE_BOOLEAN;
 7         }
 8         else if(fieldType == Schema.Displaytype.BASE64 || fieldType == Schema.Displaytype.COMBOBOX || fieldType == Schema.Displaytype.EMAIL ||
 9                 fieldType == Schema.Displaytype.ENCRYPTEDSTRING || fieldType == Schema.Displaytype.ID || fieldType == Schema.Displaytype.MULTIPICKLIST ||
10                 fieldType == Schema.Displaytype.PHONE || fieldType == Schema.Displaytype.PICKLIST || fieldType == Schema.Displaytype.REFERENCE ||
11                 fieldType == Schema.Displaytype.STRING || fieldType == Schema.Displaytype.TEXTAREA || fieldType == Schema.Displaytype.URL){
12             return Primitive.TYPE_STRING;
13         }
14         else if(fieldType == Schema.Displaytype.CURRENCY || fieldType == Schema.Displaytype.DOUBLE || fieldType == Schema.Displaytype.PERCENT){
15             return Primitive.TYPE_DOUBLE;                       
16         }
17         else if(fieldType == Schema.Displaytype.INTEGER){
18             return Primitive.TYPE_INTEGER;                      
19         }
20         else if(fieldType == Schema.Displaytype.DATE){
21             return Primitive.TYPE_DATE;
22         }
23         else if(fieldType == Schema.Displaytype.DATETIME){
24             return Primitive.TYPE_DATETIME;
25         }
26         else {
27             throw new MyException('无对应的基础类型');
28         }
29     }
30     
31     
32     private static Schema.DisplayType getFieldDisplayType(String sObjectName,String fieldName) {
33         List<Schema.DescribeSObjectResult> sObjectTypes = Schema.describeSObjects(new String[]{sObjectName});
34         if(sObjectTypes == null || sObjectTypes.size() == 0) {
35             throw new MyException('无此Object Name');
36         }
37         Schema.DescribeSObjectResult sObjectDescribeResult = sObjectTypes.get(0);
38         Map<String,Schema.SObjectField> objectFieldMap = sObjectDescribeResult.fields.getMap();
39         Schema.SObjectField objectField = objectFieldMap.get(fieldName);
40         if(objectField == null) {
41             throw new MyException('无此Field Name');
42         }
43         Schema.DescribeFieldResult fieldResult = objectField.getDescribe();
44         
45         return fieldResult.getType();
46     }
47     
48     private class MyException extends Exception{}
49 }

效果:

1.存在的相关字段的基本类型

2.不存在的字段的结果显示

总结:此篇用于通过sObject的字段来判断此字段属于哪种基本类型,然后可以通过的基本类型对其进行相关操作。有错误的地方欢迎留言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊storm supervisor的启动

storm-core-1.2.2-sources.jar!/org/apache/storm/daemon/supervisor/Supervisor.java

973
来自专栏Java成神之路

Java企业微信开发_02_通讯录同步

       登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取或者编辑通...

2202
来自专栏向治洪

android异步操作

为了使UI在数据获取时不僵死,数据获取需要在新开Worker线程中进行,然后将返回结果在UI线程中进行读取并渲染页面。面对这种异步处理,到底如何写才简洁,先后面...

1868
来自专栏个人分享

Hive metastore整体代码分析及详解

  从上一篇对Hive metastore表结构的简要分析中,我再根据数据设计的实体对象,再进行整个代码结构的总结。那么我们先打开metadata的目录,其目录...

1683
来自专栏wannshan(javaer,RPC)

Spring 事件传播机制分析

Spring4.0.4 Spring 事件机制采用的是观察者模型(又叫订阅发布模型) 有以下角色 ? 这里,观察者就是监听者,被观察者就是事件对象。 事件发布流...

33510
来自专栏cnblogs

.Net WebApi 初探

实现服务层与api层共用,也就表明Service层就是api层。 关键类和接口 System.Web.Http.Dispatcher.DefaultHttpC...

1809
来自专栏后端之路

跨域二三事之options请求

背景 今天小伙伴问了一个比较奇怪的问题 在某个子系统中通过跨域请求发现POST请求无法正常拿到cookie导致报错 我们从代码来分析一下原因 思路 最重要的永...

4128
来自专栏xingoo, 一个梦想做发明家的程序员

【手把手教你全文检索】Lucene索引的【增、删、改、查】

前言   搞检索的,应该多少都会了解Lucene一些,它开源而且简单上手,官方API足够编写些小DEMO。并且根据倒排索引,实现快速检索。本文就简单的实现增...

1985
来自专栏熊二哥

Java基础组件快速入门

最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜。现在手头的工作基本完成了,因此打算好好来归纳下j...

2136
来自专栏菩提树下的杨过

利用Boost影响Lucene查询结果的排序

以下代码在Lucene2.1下通过,主要是通过设置Document的Boost来影响文档的权重,以达到控制查询结果顺序的目的(前提是不利用Sort排序的情况下...

1828

扫码关注云+社区