从事销售力量的工作。我有Transaction-1和Transaction-2对象,它们与Case对象有着详细的关系。动态查询正在创建,它在数据库上执行,结果如下所示。
这是案例的样本结果:
({Id=500c000000B1LYCAA3,CaseNumber_c=RPQ-00001231,CreatedById=005c000UUUU,LastModifiedDate=2018-01-02 12:56:03,LastModifiedById=005c000UUUU,OwnerId=005c000UUUU,Category__c=Payment,SubCategory__c=Chase Paymentech,Origin=Email,CreatedDate=2018-01-01 15:22:14,Status=Pending,ContactId=003c000})
我需要根据登录用户区域设置的所有日期和DateTime字段的格式。主要是-嗯-是的。
List<Sobject> s = Database.query(queryStr);S有以上所有的结果。如何识别所有日期和DateTime字段?我是否需要迭代它并使用RegEx来识别日期或日期/时间字段?
发布于 2018-01-03 18:51:07
我尝试了如下所示,从链接中获取一个参考:getmap.htm
Map<String, Object> finalMap = new Map<String, Object>();
List<Case> mylist = new List<Case>();
Map<String, Object> fieldsToValue = myCase.getPopulatedFieldsAsMap();
for(String fieldName : fieldsToValue.keySet()){
if(fieldsToValue.get(fieldName) instanceOf Date){
Date dateValue = Date.valueOf(fieldsToValue.get(fieldName));
finalMap.put(fieldName, DateTime.newInstance(dateValue.year(), dateValue.month(), dateValue.day()).format());
}else if(fieldsToValue.get(fieldName) instanceOf DateTime){
Date dateValue = Date.valueOf(fieldsToValue.get(fieldName));
finalMap.put(fieldName, DateTime.newInstance(dateValue.year(), dateValue.month(), dateValue.day()).format());
}else{
finalMap.put(fieldName, fieldsToValue.get(fieldName));
}
}如何将Map finalMap转换回SObject?
发布于 2018-01-05 22:35:41
您是如何创建动态查询的?如果您使用“描述”调用来学习所有字段的名称,那么您就不远了。
还请记住,仅仅因为查询是动态的,这并不意味着您必须将结果存储在List<sObject>中。将其转换为Cases是非常好的,然后使用它们变得非常容易(如果您要在VF页面上使用结果,它应该为您处理日期格式!)List<Case> records = Database.query('SELECT Subject FROM Case LIMIT 10');应该会没事的。
但是,如果你真的必须这样做,让我们尝试手动完成它。我将阅读联系人上的所有字段(在开发版中我没有任何日期字段),并检查如何格式化它们。
Map<String, Schema.SObjectField> fieldMap = Schema.SObjectType.Contact.fields.getMap();
Set<String> dateFields = new Set<String>();
Set<String> dateTimeFields = new Set<String>();
List<String> allFields = new List<String>(fieldMap.keyset());
allFields.sort();
System.debug(allFields);
for(String key : fieldMap.keyset()){
Schema.DescribeFieldResult dfr = fieldMap.get(key).getDescribe();
Schema.DisplayType t = dfr.getType();
if(t == DisplayType.Date){
dateFields.add(key);
} else if(t == DisplayType.DateTime){
dateTimeFields.add(key);
}
}
System.debug('Date: ' + dateFields);
System.debug('DateTime: ' + dateTimeFields);
String query = String.join(new List<String>{
'SELECT ' + String.join(allFields, ','),
'FROM Contact',
'LIMIT 10'
}, '\n');
List<Contact> contacts = (List<Contact>) Database.query(query);
for(Contact c : contacts){
System.debug(c);
for(String field : dateFields){
String value = c.get(field) == null ? '(empty)' : ((Date) c.get(field)).format();
System.debug(field + ': ' + value);
}
for(String field : dateTimeFields){
String value = c.get(field) == null ? '(empty)' : ((DateTime) c.get(field)).format();
System.debug(field + ': ' + value);
}
}https://stackoverflow.com/questions/48081145
复制相似问题