Python 3 Простое Salesforce Testing, чтобы увидеть, существует ли объект и содержит ли он данные - PullRequest
2 голосов
/ 19 марта 2019

Есть ли простой способ проверить, существует ли объект и не является ли он пустым, используя простой salesforce?У меня есть некоторый код, который работает для извлечения записей, и мне нужно убедиться, что объекты, которые я получаю из файла, созданного кем-то другим, существуют и не являются пустыми.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Предполагая, что «пустой» объект означает объект без записей, я бы предложил что-то вроде этого:

def checkSalesforceObject(objName):
    try:
        getattr(sf,objName).metadata()
        a = len(sf.query_all('SELECT Id FROM {}'.format(objName))['records'])
        return {'IsObject':True,'Records':a}
    except:
        a = sys.exc_info()
        return {'IsObject':not("Resource {} Not Found".format(objName) in str(a[1])),'Records':None}

так что sfpack.checkSalesforceObject('Contact') вернет что-то вроде {'IsObject': True, 'Records': 21}

и sfpack.checkSalesforceObject('Contct') вернутся {'IsObject': False, 'Records': None}

Если нюанс существующего объекта по сравнению с объектом без записей не имеет значения, эту функцию можно изменить далее, чтобы просто возвращать true для любого объекта, который либо не существует, ИЛИ не имеет записей.

def objectInUse(objName):
    try:
        getattr(sf,objName).metadata()
        if len(sf.query('SELECT Id FROM {} LIMIT 1'.format(objName))['records']) == 0:
            return False
        else:
            return True
    except:
        a = sys.exc_info()
        if "Resource {} Not Found".format(objName) in str(a[1]):
            return False
0 голосов
/ 23 марта 2019

Вот что я в итоге сделал, он не имеет дело с «пустыми» объектами, но, по крайней мере, проверяет, существует ли объект:

try :
    getattr(sf,nextObj).describe()
except (SalesforceGeneralError, SalesforceMoreThanOneRecord, SalesforceMalformedRequest, SalesforceExpiredSession, SalesforceRefusedRequest, SalesforceResourceNotFound) as e :
    print(e.content[0]['message'] +', writing next object and ending')
    updateNextObj(nextObj, s3NextObjDestination)
    sys.exit(1)
...