2

试图找出一种方法让简单的销售人员只给我列表中的所有字段名称。我想创建与 Select * 在 sql 中所做的几乎相同的事情的 soql 查询。

对于对象中的 obj:

fields = [x["name"] for x in sf[obj].describe()["fields"]]

谢谢

4

3 回答 3

2

对象中的字段名称列表可以实现如下:

def getObjectFields(obj):
    fields = getattr(sf,obj).describe()['fields']
    flist = [i['name'] for i in fields]
    return flist

getObjectFields('Contact')

您获得效果的查询SELECT *将如下所示:

sf.query_all('SELECT {} FROM Contact LIMIT 10'.format(','.join(getObjectFields('Contact'))))

在相关说明中:

如果有帮助,可以按如下方式实现标签/名称对的字典:

def getObjectFieldsDict(obj):
    fields = getattr(sf,obj).describe()['fields']
    fdict = {}
    for i in fields:
        fdict[i['label']] = i['name']
    return fdict

getObjectFieldsDict('Contact')

我发现这对于找出标签不遵循标准格式的字段名称很有用(即“Favorite_Website__c”字段名称的“我最喜欢的网站”字段标签)

于 2019-04-10T00:53:07.000 回答
0
#!/usr/bin/env python3

import argparse
import os
import simple_salesforce

parser = argparse.ArgumentParser()
parser.add_argument('--sandbox', action='store_true',
                    help='Use a sandbox')
parser.add_argument('sfobject', nargs='+', action='store',
                    help=('Salesforce object to query (e.g. Contact)'))
args = parser.parse_args()

sf = simple_salesforce.Salesforce(
    username       = os.getenv('USERNAME'),
    password       = os.getenv('PASSWORD'),
    security_token = os.getenv('SECURITY_TOKEN'),
    sandbox        = args.sandbox)

for sfobject in args.sfobject:
    print(sfobject)
    fields = [x['name'] for x in getattr(sf, sfobject).describe()['fields']]
    print(fields)
于 2019-03-17T14:16:46.840 回答
0

此方法将返回一个查询字符串,其中包含传入对象的所有字段。以及用户有权访问的所有字段。

 public static string getFullObjectQuery(String sObjectName){
Schema.SObjectType convertType = Schema.getGlobalDescribe().get(sObjectName);
Map<String,Schema.sObjectField> fieldMap = convertType.getDescribe().Fields.getMap();
Set<String> fields = fieldMap.keySet();
String Query = 'SELECT ';
for(String field: fields){
  Schema.DescribeFieldResult dfr = fieldMap.get(field).getDescribe();
  if(dfr.isAccessible()){
    Query += field + ',';
  }
}
Query = query.SubString(0,Query.length() - 1);
Query += ' FROM ' + sObjectName;

return Query;
}
于 2017-10-09T23:43:47.817 回答