无法使用Get_Workers()(python)从Workday获取员工信息

无法使用Get_Workers()(python)从Workday获取员工信息,python,workday-api,Python,Workday Api,我正在尝试使用python和Get_-Workers方法从Workday获取员工信息。但是,它会导致失败。有没有任何例子说明如何使用它?基本目的是获取员工的位置信息。是!下面是一个示例,演示如何使用suds模块 这是基于 这应该提供一个基础,您可以使用它访问您需要的任何内容 导入机密 导入系统 从suds导入客户端 从suds.wsse导入安全性,UsernameToken 从suds.sax.text导入原始 从suds.sudsobject导入asdict 从suds导入WebFault w

我正在尝试使用python和Get_-Workers方法从Workday获取员工信息。但是,它会导致失败。有没有任何例子说明如何使用它?基本目的是获取员工的位置信息。

是!下面是一个示例,演示如何使用suds模块 这是基于

这应该提供一个基础,您可以使用它访问您需要的任何内容

导入机密
导入系统
从suds导入客户端
从suds.wsse导入安全性,UsernameToken
从suds.sax.text导入原始
从suds.sudsobject导入asdict
从suds导入WebFault
wsdl_url=https://wd2-impl-services1.workday.com/ccx/service/yourTenantHere/Human_Resources/v32.0?wsdl'
员工ID='139420'
client=client.client(wsdl\uURL)
安全性=安全性()
令牌=用户名令牌(secrets.username,secrets.password)
security.tokens.append(令牌)
client.set_选项(wsse=security)
xmlstring=''
{id}
''。格式(id=员工id)
xml=Raw(xmlstring)
尝试:
结果=client.service.Get_Workers(xml)
除了WebFault作为e:
#员工ID可能不存在。
打印(e)
sys.exit()
定义递归_asdict(d):
“”“将Suds对象转换为可序列化格式。”“”
out={}
对于asdict(d)中的k,v.items():
如果hasattr(v,“\uuuuu键列表”):
out[k]=递归的(v)
elif isinstance(v,列表):
out[k]=[]
第五项:
如果hasattr(项目“\uuuuu键列表”):
out[k].追加(递归\u asdict(项))
其他:
out[k]。追加(项)
其他:
out[k]=v
返回
worker\u dict=递归\u asdict(结果)
worker=worker\u dict['Response\u Data']['worker'][0]['worker\u Data']
lname=worker['Personal_Data']['Name_Data']['Legal_Name_Data']['Name_Detail_Data']['Last_Name']
打印(lname)

欢迎来到StackOverflow。请提供有关您已经尝试过的内容的更多信息和代码片段(不是完整的代码)。我用于获取员工信息的代码如下:result=client.service.Get_Workers(CustomerObjectType)print result我收到以下错误:回溯(最后一次调用):文件“test.py”,第34行,在结果=client.service.Get_Workers(CustomerObjectType)文件“/usr/lib/python2.7/site packages/suds/bindings/binding.py”中,第149行,在Get_reply soapenv.promotePrefixes()AttributeError中:“NoneType”对象没有属性“promotePrefixes”,感谢您的响应。我尝试过使用它,但得到了相同的错误:文件“/usr/lib/python2.7/site packages/suds/bindings/binding.py”,第149行,在get_reply soapenv.promotePrefixes()AttributeError:“NoneType”对象没有属性“promotePrefixes”,我已在本地下载了wsdl文件,并使用以下命令引用它:wsdl\u url=urlparse.urljoin('file:',urllib.pathname2url(os.path.abspath(“/home/…../Human_Resources.wsdl”))这应该不是问题,对吧?问题是响应没有soap信封。关于我可能出错的地方,有什么建议吗?对不起,@PDsilva-我想我们需要更多信息来帮助。我会尝试调试,以找出为什么您的响应没有soap信封(或者根本没有soap信封?)。您还可以尝试使用租户提供的wsdl,以确保其准确性。
import secrets

import sys

from suds import client
from suds.wsse import Security, UsernameToken
from suds.sax.text import Raw
from suds.sudsobject import asdict
from suds import WebFault

wsdl_url = 'https://wd2-impl-services1.workday.com/ccx/service/yourTenantHere/Human_Resources/v32.0?wsdl'
Employee_ID = '139420'
client = client.Client(wsdl_url)

security = Security()
token = UsernameToken(secrets.username, secrets.password)
security.tokens.append(token)
client.set_options(wsse=security)

xmlstring = '''
<ns0:Worker_Reference>
    <ns0:ID ns0:type="Employee_ID">{id}</ns0:ID>
</ns0:Worker_Reference>
'''.format(id=Employee_ID)

xml = Raw(xmlstring)

try:
    result = client.service.Get_Workers(xml)
except WebFault as e:
    # Employee ID probably doesn't exist.
    print(e)
    sys.exit()

def recursive_asdict(d):
    """Convert Suds object into serializable format."""
    out = {}
    for k, v in asdict(d).items():
        if hasattr(v, '__keylist__'):
            out[k] = recursive_asdict(v)
        elif isinstance(v, list):
            out[k] = []
            for item in v:
                if hasattr(item, '__keylist__'):
                    out[k].append(recursive_asdict(item))
                else:
                    out[k].append(item)
        else:
            out[k] = v
    return out

worker_dict = recursive_asdict(result)
worker = worker_dict['Response_Data']['Worker'][0]['Worker_Data']
lname = worker['Personal_Data']['Name_Data']['Legal_Name_Data']['Name_Detail_Data']['Last_Name']

print(lname)