【发布时间】:2017-08-22 07:46:01
【问题描述】:
我正在研究用户可以从生产框中获取数据并将其插入开发人员沙箱的要求,只需提供生产 URL 和凭据。我能够获取数据,但不知何故无法将 JSON 转换为所需的对象类型。由于我是 Salesforce 的新手,请不要介意基本问题。
下面是工作逻辑和问题:
for(DataMigrationNAP__c d : dataMigrationNAP) // this loop will give all NAP object names and its corresponding fields like {'Account','Name,Phone,Id'},{'Opportunity', 'ID,Name, blah,blah'}...
{
final PageReference theUrl = new PageReference(SERVER_URL + '/services/data/v22.0/query/');
String soql = 'Select '+d.NAPObjectFields__c+' From '+d.Name+' a limit ' + recordCount;
theUrl.getParameters().put('q',soql);
request = new HttpRequest();
request.setEndpoint(theUrl.getUrl());
request.setMethod('GET');
request.setHeader('Authorization', 'OAuth ' + SESSION_ID);
String body = (new Http()).send(request).getBody();
JSONParser parser = JSON.createParser(body);
do{
parser.nextToken();
}while(parser.hasCurrentToken() && !'records'.equals(parser.getCurrentName()));
parser.nextToken();
String typeName = 'List<' + d.Name + '>';
Type t = Type.forName(typeName);
List<sobject> acc1 = (List<sobject>) parser.readValueAs(t);
insert acc1;
System.debug('Values inserted : ' + acc1);
}
通过上述逻辑,我试图逐个对象获取数据对象并将其插入到开发沙箱中,我能够以 JSON 格式完美获取数据,但无法从 JSON 转换为所需对象。问题是我无法硬编码对象或类型名称,因为它将是对象列表。如果您需要任何其他详细信息,请告诉我,并提前致谢。也可以使用任何其他方法,但它应该只通过顶点编码。
【问题讨论】:
-
你为什么要反序列化soql请求字符串而不是body变量?
-
抱歉我的错误,我正在尝试其他方法,正在更新代码
-
@AlexPashkin 现在请看一下,如果我在最后第三行从 List
修改 List ,则上面的代码正在工作, List acc1 = (List ) 解析器.readValueAs(t); -
最好使用 upsert 方法而不是 insert
-
是的 @AlexPashkin 与 upsert 一起使用,并且在 upsert 之前将 sobject 转换为特定对象的小变化。谢谢
标签: json salesforce apex