salesforce 零基础学习(五十六)实现getById

本来想通过template封装DAO中的getById,结果template中无法选择$(object_name),所以此种想法打消了,直接封装成一个Helper类,方便以后项目中如果有类似需要可以使用。

 1 public virtual with sharing class ObjectDAOHelper {
 2     /*
 3     *    @param sObjectName   sobject api name
 4     *    @param id              sobject record id
 5     *    return 返回此记录ID,如果不存在返回null
 6     */
 7     public static sObject getById(String sObjectName,String id) {
 8         String queryStr = 'select ';
 9         List<Schema.DescribeSObjectResult> sObjectResults = Schema.describeSObjects(new List<String>{sObjectName});
10         if(sObjectResults == null || sObjectResults.size() == 0) {
11             return null;
12         }
13         Schema.DescribeSObjectResult sObjectResult = sObjectResults.get(0);
14         Map<String,SObjectField> maps = sObjectResult.fields.getMap();
15         Integer i = 0;
16         for(Schema.SObjectField objectField : maps.values()) {
17             Schema.DescribeFieldResult fieldResult = objectField.getDescribe();
18             if(fieldResult.isAccessible()) {
19                 queryStr += fieldResult.getName();
20                 if(i != maps.keySet().size() - 1) {
21                     queryStr += ',';
22                 }
23                 i++;
24             }
25         }
26         queryStr += ' from ' + sObjectName + ' where Id = :id';
27         system.debug('queryStr : ' + queryStr);
28         List<sObject> objects = Database.query(queryStr);
29         if(objects == null || objects.size() == 0) {
30             return null;
31         }
32         return objects.get(0);
33     }
34 }

运行代码:

 结果展示:

queryStr : select Id,OwnerId,IsDeleted,Name,RecordTypeId,CreatedDate,CreatedById,LastModifiedDate,LastModifiedById,SystemModstamp,LastViewedDate,LastReferencedDate,GoodsName__c,GoodsBrand__c,GoodsPrice__c,GoodsCostPrice__c,GoodsPicture__c,Status__c,Goods_Code_Unique__c,GoodsDescribe__c,GoodsProfit__c,No__c from Goods__c where Id = :id

{
  "attributes" : {
    "type" : "Goods__c",
    "url" : "/services/data/v38.0/sobjects/Goods__c/a052800000Ejg1vAAB"
  },
  "Id" : "a052800000Ejg1vAAB",
  "OwnerId" : "00528000002JyclAAC",
  "IsDeleted" : false,
  "Name" : "a052800000Ejg1v",
  "RecordTypeId" : "01228000000U1u0AAC",
  "CreatedDate" : "2016-12-13T07:16:03.000+0000",
  "CreatedById" : "00528000002JyclAAC",
  "LastModifiedDate" : "2016-12-13T07:16:03.000+0000",
  "LastModifiedById" : "00528000002JyclAAC",
  "SystemModstamp" : "2016-12-13T07:16:03.000+0000",
  "GoodsName__c" : "测试商品1",
  "GoodsBrand__c" : "其他",
  "GoodsPrice__c" : 200.000000,
  "GoodsCostPrice__c" : 100.000000,
  "Goods_Code_Unique__c" : "GC00001",
  "GoodsDescribe__c" : "测试描述",
  "GoodsProfit__c" : 100.00,
  "No__c" : "2016-142"
}

总结:简单的helper类以及方法,篇中有问题的欢迎指出,不懂得欢迎留言。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏坚毅的PHP

Hbase 源码分析之 Get 流程及rpc原理

分析版本为hbase 0.94 附上趋势团队画的图: rpc角色表: HBase通信信道 HBase的通信接口 客户端 服务端 HBase Cl...

3504
来自专栏后端之路

爬虫的故事

1、爬虫占总PV比例较高,这样浪费钱(尤其是三月份爬虫)。 三月份爬虫是个什么概念呢?每年的三月份我们会迎接一次爬虫高峰期。 最初我们百思不得其解。直到有一次,...

2067
来自专栏码匠的流水账

spring security reactive获取security context

本文主要研究下reactive模式下的spring security context的获取。

882
来自专栏码匠的流水账

聊聊lettuce的sentinel连接

lettuce-core-5.0.4.RELEASE-sources.jar!/io/lettuce/core/RedisClient.java

512
来自专栏吴小龙同學

Android 进程间通信

什么鬼!单例居然失效了,一个地方设置值,另个地方居然取不到,这怎么可能?没道理啊!排查半天,发现这两就不在一个进程里,才恍然大悟…… 什么是进程 按照操作...

2384
来自专栏IT笔记

Shiro安全框架基于Redis的分布式集群方案

前段时间做了一个市场推广相关的项目,安全框架使用的是Shiro,缓存框架使用的是spring-data-redis。为了使用户7x24小时访问,决定把项目由单机...

3126
来自专栏搜云库

FutureTask的用法及两种常用的使用场景

FutureTask的用法及两种常用的使用场景 FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任...

25510
来自专栏后端之路

junit测试之第三方组件mock

今天某个一直稳定运行的测试挂了,没有开发同学出来认领。 ? 对应模块的小伙伴询问此处依赖的环境是哪个,可以去调查失败的原因。 好吧,回顾一下关于第三方组件mo...

1945
来自专栏大内老A

如何实现对上下文(Context)数据的统一管理 [提供源代码下载]

在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息;或者基于当前方法...

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

Java程序员的日常—— POI与JDBC、Mockmvc与单元测试

周日没怎么休息好,周一一天都迷迷糊糊的,不过还算是干了不少的活。 总结一下,大致有以下几点内容: 1 使用poi以及mysql jdbc实现了一个复杂ex...

1849

扫码关注云+社区