c# – SalesForce查询方法不返回可用数据

c# – SalesForce查询方法不返回可用数据,第1张

概述我正在尝试与SalesForce中的SOAP Web服务集成.我的目标是简单地从SalesForce下拉用户数据,以便我们将其集成到我们的系统中.我能够使用从SalesForce网站上的合作伙伴WSDL生成的代理类(C#)成功登录.我要做的下一件事是查询用户,拉下FirstName,LastName,ect …… 重要的是要知道我被迫修改生成的代理代码,因为它生成错误.它填充xml序列化字段以匹配 我正在尝试与SalesForce中的SOAP Web服务集成.我的目标是简单地从SalesForce下拉用户数据,以便我们将其集成到我们的系统中.我能够使用从SalesForce网站上的合作伙伴WSDL生成的代理类(C#)成功登录.我要做的下一件事是查询用户,拉下Firstname,Lastname,ect ……

重要的是要知道我被迫修改生成的代理代码,因为它生成错误.它填充xml序列化字段以匹配在进行Web服务调用时抛出异常的私有字段.它还为我删除的sObject类的“Any”属性生成了一个空白名称空间.如果你想知道为什么我做出这些选择,我会从this StackOverflow topic获得建议.

这是我的查询的样子:

qResult正好包含3条记录(这是准确的,因为我只有3个用户).问题是除了“type”之外,sObject上的每个属性都是null.

我无法想象我在尝试查询时是否犯了一个简单的错误,或者我必须修改代理类并删除Any字段上的命名空间导致此问题.我不知道此时该怎么做.开发人员控制台(SalesForce.com)中的相同查询返回正确的数据.还值得一提的是,我的查询结果返回了适当数量的元素,它们只是没有任何数据.它必须是简单的东西……比如添加命名空间绑定但要弄清楚它应该是什么或者向属性添加xmlbinding.

我只是想知道是否有人知道该怎么做.也许某人有同样的事情发生在他们身上?

编辑:所以我花时间执行一些令人难以置信的Hacky技术来拦截来自生成的webservice客户端的请求,我最终得到了SalesForce发送的原始数据以响应我的请求.这里是:

<?xml version="1.0" enCoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sf="urn:sobject.partner.soap.sforce.com">    <soapenv:Body>        <queryResponse>            <result xsi:type="queryResult">            <done>true</done>            <queryLocator xsi:nil="true"/>            <records xsi:type="sf:sObject">                <sf:type>User</sf:type>                <sf:ID xsi:nil="true"/>                <sf:Firstname>Bob</sf:Firstname>                <sf:Lastname>Dyllan</sf:Lastname>                <sf:Email>bob@bob.com</sf:Email>                <sf:Companyname xsi:nil="true"/>                <sf:Phone xsi:nil="true"/>                <sf:Title xsi:nil="true"/>            </records>            <records xsi:type="sf:sObject">                <sf:type>User</sf:type>                <sf:ID xsi:nil="true"/>                <sf:Firstname>Zachary</sf:Firstname>                <sf:Lastname>Sheppard</sf:Lastname>                <sf:Email>some_guy@yahoo.com</sf:Email>                <sf:Companyname>Yahoo</sf:Companyname>                <sf:Phone xsi:nil="true"/>                  <sf:Title xsi:nil="true"/>            </records>            <records xsi:type="sf:sObject">                 <sf:type>User</sf:type>                <sf:ID xsi:nil="true"/>                <sf:Firstname xsi:nil="true"/>                <sf:Lastname>Chatter Expert</sf:Lastname>                   <sf:Email>noreply@chatter.salesforce.com</sf:Email>                <sf:Companyname xsi:nil="true"/>                        <sf:Phone xsi:nil="true"/>                <sf:Title xsi:nil="true"/>            </records>            <size>3</size>            </result>        </queryResponse>    </soapenv:Body>    </soapenv:Envelope>

这似乎与这些sObjects上的“sf”属性的序列化问题……但我如何使其与我的C#匹配?这是目前sObject类的C#:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml","4.0.30319.1")][System.SerializableAttribute()][System.Diagnostics.DeBUGgerStepThroughAttribute()][System.ComponentModel.DesignercategoryAttribute("code")][System.Xml.Serialization.XmlTypeAttribute(namespace="urn:sobject.partner.soap.sforce.com")]public partial class sObject{    /// <remarks/>    public string type;    /// <remarks/>    [System.Xml.Serialization.XmlElementAttribute("fIEldsToNull",IsNullable=true)]    public string[]        fIEldsToNull;    /// <remarks/>    [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]    public string        ID;    /// <remarks/>    public System.Xml.XmlElement[]        Any;}
解决方法 经过一段漫长的研究和挫折之后,我终于遇到了SalesForce的sObject类的“Any”属性的正确属性. SalesForce试图将相关的xml元素扫描到这个sObject类中,这允许它们将sObject类保留为动态类型.因此,为了强制C#类将所有xml标记写入“Any”属性,我们只需应用:

[System.Xml.Serialization.XmlAnyElement]

所以要明确的是,当您从SalesForce帐户生成WSDL时,它可能不是开箱即用的.您需要重命名一些传递给属性的字符串参数,并将sObject类的“Any”属性上的空命名空间替换为XmlAnyElement属性,以便从API的查询调用中获得成功的结果.可以在this StackOverflow topic主题中找到进行客户端功能所需的更改.

我现在能够成功调用SalesForce API的查询功能并返回我查询的字段……我感觉好多了!

总结

以上是内存溢出为你收集整理的c# – SalesForce查询方法不返回可用数据全部内容,希望文章能够帮你解决c# – SalesForce查询方法不返回可用数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1229324.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存