课程章节介绍
同学们好,这节课我们来说说 Apex 里怎么动态地创建和操作 sObject。这可比在运行时查描述信息再拼 SOQL 还要直接。
你可能会想,不写 SOQL 也能造记录吗?可以的。用 ,sObject 类型, 上的 `newSObject` 方法就行。比如 `Account.sObjectType.newSObject()`,这就给你生成了一个空的客户记录。不过要注意,这个方法的返回是个通用的 sObject,你得把它,转换,成具体的类型——比如 `Account`,才能当客户对象继续用。
如果你在 newSObject 时直接传入一个记录 ID,比如 `newSObject('001...')`,那你拿到的就是一个引用已有记录的 sObject,可以直接给它改值做更新,非常省事。
那么字段值怎么读、怎么写呢?通用的 ,get, 和 ,put, 方法就派上用场了。`get('Name')` 能取出名字,`put('Name', '新名字')` 就能把名字设进去。这里的参数可以是字段的 API 名称字符串,也可以直接传字段标记(像 `Account.Name`),内部是一样的效果。
那碰到关联关系,特别是想通过,外部 ID, 来关联父记录怎么办?这时就要用到 ,getSObject, 和 ,putSObject, 了。举个例子,你有一个订单,它有个外部 ID 字段叫 `ExternalCustomerId__c`,你想把它指向一个客户,但你手里只有客户的外部 ID 值,没有 Salesforce 的 ID。那你就可以构建一个只设了外部 ID 的客户 sObject,然后用 `putSObject` 把它塞进订单的关系字段里,系统会自动按外部 ID 去匹配。这样你就不用先花一次 SOQL 去查客户的 ID,代码少、效率高。
总结一下,灵活运用 newSObject、get/put 和 getSObject/putSObject,就能让咱们的动态代码更简洁,也更强大。好,这节课就到这里,大家试着动手写写看吧。
关键词
Apex
Salesforce
Developer Guide