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

Posted

技术标签:

【中文标题】无法使用 Get_Workers() 从 Workday 获取员工信息(python)【英文标题】:Unable to fetch Employee information from Workday using Get_Workers() ( python) 【发布时间】:2019-09-15 15:57:41 【问题描述】:

我正在尝试使用 Python 使用 Get_Workers 方法从 Workday 获取员工信息。但是,它会导致失败。有没有可用的例子展示如何使用它?基本意图是获取Employee的Location信息。

【问题讨论】:

欢迎来到 ***。请提供有关您已经尝试过的更多信息和代码 sn-ps(不是完整代码)。 我用来获取员工信息的代码如下: result = client.service.Get_Workers(CustomerObjectType) print result 我得到以下错误: Traceback (最近一次调用最后一次): File “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' object has no attribute 'promotePrefixes' 【参考方案1】:

是的!这是一个展示如何使用 suds 模块的示例 这是基于this gist of which I am not affiliated with。

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

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)

【讨论】:

感谢您的回复。我试过使用它,但我得到了同样的错误:文件“/usr/lib/python2.7/site-packages/suds/bindings/binding.py”,第 149 行,在 get_reply soapenv.promotePrefixes() AttributeError: ' NoneType' 对象没有属性 'promotePrefixes' 我已经在本地下载了 wsdl 文件并使用以下方法引用它: wsdl_url = urlparse.urljoin('file:', urllib.pathname2url(os.path.abspath("/home/. ..../Human_Resources.wsdl"))) 这应该不是问题吧?问题是响应没有肥皂信封。关于我可能出错的任何建议。 抱歉,@PDsilva - 我想我们需要更多信息来提供帮助。我会尝试调试以找出为什么您的回复在没有肥皂信封的情况下返回(或根本没有?)。您也可以尝试使用租户提供的 wsdl 以确保其准确无误。

以上是关于无法使用 Get_Workers() 从 Workday 获取员工信息(python)的主要内容,如果未能解决你的问题,请参考以下文章

从 Android for Work 应用程序访问 SD 卡数据

Android 应用无法构建——依赖:androidx.work:work-runtime:2.7.0-beta01

Fedora26 vmare work无法启动问题

无法使用 Play 框架解决依赖关系

错误: 无法初始化主类 works.work2 原因: java.lang.NoClassDefFoundError: [LString;

Docker centos7 systemctl deos not work : 无法连接 D-bus