SalesForce の SOAP Web サービスと統合しようとしています。私の目標は、SalesForce からユーザー データを単純に取得して、システムに統合できるようにすることです。SalesForce Web サイトのパートナー WSDL から生成したプロキシ クラス (C#) を使用して、正常にログインできます。次にやりたいことは、FirstName、LastName などをプルダウンして、Users にクエリを実行することです...
生成されたプロキシ コードが正しく生成されなかったため、生成されたプロキシ コードを変更せざるを得なかったことを知っておくことは重要です。Web サービス呼び出しを行うときに例外をスローするプライベート フィールドと一致するように、xml シリアライゼーション フィールドを設定しました。また、削除した sObject クラスの「Any」プロパティの空白の名前空間も生成されました。私がこれらの選択をした理由を知りたい場合は、この StackOverflow トピックからアドバイスを受けました。
これは私のクエリがどのように見えるかです:
qResult には正確に 3 つのレコードが含まれています (ユーザーが 3 人しかいないため、これは正確です)。問題は、「type」を除く sObject のすべてのプロパティが常に null であることです。
クエリを実行しようとしたときに単純なエラーが発生したのか、それともプロキシ クラスを変更して Any フィールドの名前空間を削除しなければならなかったことがこの問題の原因なのかわかりません。この時点で何をすべきかわかりません。開発者コンソール (SalesForce.com) で同じクエリを実行すると、正しいデータが返されます。また、クエリの結果が適切な量の要素を返したことにも言及する価値があります。それらにはデータが含まれていません。それは単純なものでなければなりません...名前空間バインディングを追加し直すが、それがどうあるべきかを理解するか、プロパティにxmlbindingを追加するなどです。
誰かがこれについて何をすべきか知っているかどうか疑問に思っていました。たぶん誰かが彼らに同じことが起こったことがありますか?
編集: そこで、生成された Web サービス クライアントからの要求をインターセプトするための信じられないほどハックな手法を実行するのに時間をかけ、要求に応じて 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>
これらの sObject の「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;
}