Java 从SOQL查询中获取列的元数据

Java 从SOQL查询中获取列的元数据,java,salesforce,metadata,wsc,Java,Salesforce,Metadata,Wsc,我有一个简单的java SOQL查询,用于提取Salesforce标准对象,如下所示- String soqlQuery=从联系人中选择FirstName、LastName QueryResult qr=connection.querysoqlQuery 我想获取对象字段的数据类型。我在下面编写了一个小函数,它将提供电话字段列表及其标签,这些电话字段和标签显示在Salesforce组织的自定义或标准对象中。我希望这可以帮助您编写代码的业务逻辑 public list<String>

我有一个简单的java SOQL查询,用于提取Salesforce标准对象,如下所示-

String soqlQuery=从联系人中选择FirstName、LastName

QueryResult qr=connection.querysoqlQuery


我想获取对象字段的数据类型。

我在下面编写了一个小函数,它将提供电话字段列表及其标签,这些电话字段和标签显示在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中。