【问题标题】:Using simple salesforce to get field names for each salesforce object in a loop使用简单的销售人员循环获取每个销售人员对象的字段名称
【发布时间】:2021-04-01 19:10:32
【问题描述】:

我正在使用 simple_salesforce 获取对象的所有字段名称的列表。

我有以下

from simple_salesforce import Salesforce

sf = Salesforce(username = username, password = pass....) #Connecting to sf

#I'm using salesforce object api names to get all the fields that belong to that object
Api_names = ["Account", "Contact", "Campaign"]

desc = {}
for obj in Api_names:
    if obj == "Account":
        desc = sf.Account.describe()
    elif obj == "Contact":
        desc = sf.Contact.describe()
    elif obj == "Campaign":
        desc = sf.Campaign.describe()

    field_names_list_1 = [field['name'] for field in desc['fields']]

    #do something with the list... for now, I'm just adding break
    break

我想写这样的东西

Api_names = ["Account", "Contact", "Campaign"]
for obj in Api_names:
    desc = sf.obj.describe()

但它将 obj 视为 api 名称。我确实尝试了soql的方式

query = sf.query("SELECT QualifiedApiName FROM FieldDefinition WHERE
EntityDefinition.QualifiedApiName IN ('{0}')".format("Account"))

field_names_list_2 = []
for i in range(0, query['totalSize']):
    field_names_list_2.append(query['records'][i]["QualifiedApiName"])

但是,对于 Account 对象,field_names_list_1field_names_list_2 具有不同的长度。 field_names_list_1 包含所有字段,但 field_names_list_2 缺少一些字段。不知道为什么。

我可以在 sf.obj.describe() 中更改什么,以便将 obj 视为实际变量而不是 Salesforce 对象名称?

【问题讨论】:

    标签: python salesforce simple-salesforce


    【解决方案1】:

    使用getattr()动态获取simple_salesforce中的对象代理:

    api_names = ["Account", "Contact", "Campaign"]
    for obj in Api_names:
        desc = getattr(sf, obj).describe()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2013-01-30
      • 2012-09-12
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多