Java 从SOQL查询中获取列的元数据
我有一个简单的java SOQL查询,用于提取Salesforce标准对象,如下所示- String soqlQuery=从联系人中选择FirstName、LastName QueryResult qr=connection.querysoqlQueryJava 从SOQL查询中获取列的元数据,java,salesforce,metadata,wsc,Java,Salesforce,Metadata,Wsc,我有一个简单的java SOQL查询,用于提取Salesforce标准对象,如下所示- String soqlQuery=从联系人中选择FirstName、LastName QueryResult qr=connection.querysoqlQuery 我想获取对象字段的数据类型。我在下面编写了一个小函数,它将提供电话字段列表及其标签,这些电话字段和标签显示在Salesforce组织的自定义或标准对象中。我希望这可以帮助您编写代码的业务逻辑 public list<String>
我想获取对象字段的数据类型。我在下面编写了一个小函数,它将提供电话字段列表及其标签,这些电话字段和标签显示在Salesforce组织的自定义或标准对象中。我希望这可以帮助您编写代码的业务逻辑
public list<String> getFieldsForSelectedObject(){
selectedPhoneNumber = ''; //to reset home number field
list<String> fieldsName = new list<String>();
selectedObject = 'Object Name' // This should have the object name for which we want to get the fields type
schemaMap = Schema.getGlobalDescribe(); //Populating the schema map
try{
if(selectedObject != null || selectedObject != '' || selectedObject != '--Select Object--'){
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(selectedObject).getDescribe().fields.getMap();
for(Schema.SObjectField sfield : fieldMap.Values()){
schema.describefieldresult dfield = sfield.getDescribe();
schema.Displaytype disfield= dfield.getType();
system.debug('#######' + dfield );
if(dfield.getType() == Schema.displayType.Phone){// Over here I am trying to findout all the PHONE Type fields in the object(Both Custom/Standard)
fieldsName.add('Name:'+dfield.getName() +' Label:'+ dfield.getLabel ());
}
}
}
}catch(Exception ex){
apexPages.addMessage(new ApexPages.message(ApexPages.severity.ERROR,'There is no Phone or Fax Field Exist for selected Object!'));
}
return fieldsName;
}
字符串的示例输出列表::
名称:家用电话标签:家用电话
名称:Office\u Phone\uu c标签:Office Phone表示我们拥有以下soql 从Contact limit 2中选择FirstName和LastName QueryResult对象中的查询结果如下所示
{
[2]XmlObject
{
name={urn:partner.soap.sforce.com}records, value=null, children=
[
XmlObject{name={urn:sobject.partner.soap.sforce.com}type, value=Contact, children=[]},
XmlObject{name={urn:sobject.partner.soap.sforce.com}Id, value=null, children=[]},
XmlObject{name={urn:sobject.partner.soap.sforce.com}FirstName, value=Bill, children=[]},
XmlObject{name={urn:sobject.partner.soap.sforce.com}LastName, value=Gates, children=[]}
]
},
XmlObject
{
name={urn:partner.soap.sforce.com}records, value=null, children=
[
XmlObject{name={urn:sobject.partner.soap.sforce.com}type, value=Contact, children=[]},
XmlObject{name={urn:sobject.partner.soap.sforce.com}Id, value=null, children=[]},
XmlObject{name={urn:sobject.partner.soap.sforce.com}FirstName, value=Alan, children=[]},
XmlObject{name={urn:sobject.partner.soap.sforce.com}LastName, value=Donald, children=[]}
]
},
}
为了解析QueryResult并获取列名,我实现了下面的方法,该方法将以逗号分隔的字符串返回列名。我已经提到了代码中的逻辑
public String getColumnNames(QueryResult soqlResponse)
{
String columns = ""
try
{
// We are looping inorder to pick the 1st record from the QueryResult
for (SObject record : soqlResponse.getRecords())
{
Iterator<XmlObject> xmlList = record.getChildren();
int counterXml = 0;
while(xmlList.hasNext())
{
XmlObject xObj = xmlList.next();
// Since the 1st 2 nodes contains metadata of some other information, we are starting from the 3rd node only
if(counterXml > 1)
{
columns += xObj.getName().getLocalPart() + ",";
}
counterXml++;
}
// Since we can get the column names from the 1st record, we are breaking the loop after the data of 1st record is read
break;
}
// We are removing the last comma in the string
columns = columns.substring(0, columns.length() - 1);
}
catch(Exception ex)
{
}
return columns;
}
道歉。编辑以读取SQL。现在,revertedI正在Java中使用SalesforceAPI。上述代码在我的情况下不起作用,因为它在Apex中。