2013-08-01 88 views
5

我使用PHP和SOAP連接到Dynamics CRM 2011 Online,並遇到了問題。以下RetrieveMultiple忽略我的標準並返回所有記錄。Dynamics CRM 2011 SOAP RetrieveMultiple查詢忽略標準

我想要的是任何具有'[email protected]'作爲電子郵件地址的聯繫人。

有人能告訴我我的標準/條件下面有什麼問題嗎?

謝謝!

<RetrieveMultiple xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services"> 
    <query xmlns:b="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" i:type="b:QueryExpression"> 
     <b:ColumnSet> 
     <b:AllColumns>false</b:AllColumns> 
     <b:Columns xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
      <c:string>firstname</c:string> 
     </b:Columns> 
     </b:ColumnSet> 
     <b:Criteria> 
     <b:Conditions> 
      <b:Condition> 
       <b:AttributeName>emailaddress1</b:AttributeName> 
       <b:Operator>Equal</b:Operator> 
       <b:Values> 
        <b:Value i:type="xsd:string">[email protected]</b:Value> 
       </b:Values> 
      </b:Condition> 
     </b:Conditions> 
     <b:FilterOperator>And</b:FilterOperator> 
     <b:Filters /> 
     </b:Criteria> 
     <b:Distinct>false</b:Distinct> 
     <b:EntityName>contact</b:EntityName> 
     <b:LinkEntities /> 
     <b:PageInfo> 
     <b:Count>250</b:Count> 
     <b:PageNumber>1</b:PageNumber> 
     <b:PagingCookie i:nil="true" /> 
     <b:ReturnTotalRecordCount>false</b:ReturnTotalRecordCount> 
     </b:PageInfo> 
    </query> 
</RetrieveMultiple> 

回答

3

上述查詢有一些問題。 (特別是我的一些別名感到困惑)。正如Jeff Xiong所建議的那樣,SOAPLogger幫助了我。

該標準也是不正確的。以下工作皁:

<RetrieveMultiple xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <query xmlns:b="http://schemas.microsoft.com/xrm/2011/Contracts" i:type="b:QueryExpression"> 
     <b:ColumnSet> 
     <b:AllColumns>false</b:AllColumns> 
     <b:Columns xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
      <c:string>firstname</c:string> 
      <c:string>emailaddress1</c:string> 
     </b:Columns> 
     </b:ColumnSet> 
     <b:Criteria> 
     <b:Conditions> 
      <b:ConditionExpression> 
       <b:AttributeName>emailaddress1</b:AttributeName> 
       <b:Operator>Equal</b:Operator> 
       <b:Values xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
        <c:anyType xmlns:d="http://www.w3.org/2001/XMLSchema" i:type="d:string">[email protected]</c:anyType> 
       </b:Values> 
      </b:ConditionExpression> 
     </b:Conditions> 
     <b:FilterOperator>And</b:FilterOperator> 
     <b:Filters /> 
     </b:Criteria> 
     <b:Distinct>false</b:Distinct> 
     <b:EntityName>contact</b:EntityName> 
     <b:LinkEntities /> 
     <b:PageInfo> 
     <b:Count>250</b:Count> 
     <b:PageNumber>1</b:PageNumber> 
     <b:PagingCookie i:nil="true" /> 
     <b:ReturnTotalRecordCount>false</b:ReturnTotalRecordCount> 
     </b:PageInfo> 
    </query> 
</RetrieveMultiple> 
+0

感謝這個工作示例:) –

4

嘗試使用以下格式SOAP:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
    <Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
     <request i:type="a:RetrieveMultipleRequest" xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts"> 
     <a:Parameters xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic"> 
      <a:KeyValuePairOfstringanyType> 
      <b:key>Query</b:key> 
      <b:value i:type="a:QueryExpression"> 
       <a:ColumnSet> 
       <a:AllColumns>false</a:AllColumns> 
       <a:Columns xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
        <c:string>firstname</c:string> 
       </a:Columns> 
       </a:ColumnSet> 
       <a:Criteria> 
       <a:Conditions> 
        <a:ConditionExpression> 
        <a:AttributeName>emailaddress1</a:AttributeName> 
        <a:Operator>Equal</a:Operator> 
        <a:Values xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
         <c:anyType i:type="d:string" xmlns:d="http://www.w3.org/2001/XMLSchema">[email protected]</c:anyType> 
        </a:Values> 
        </a:ConditionExpression> 
       </a:Conditions> 
       <a:FilterOperator>And</a:FilterOperator> 
       <a:Filters /> 
       <a:IsQuickFindFilter>false</a:IsQuickFindFilter> 
       </a:Criteria> 
       <a:Distinct>false</a:Distinct> 
       <a:EntityName>contact</a:EntityName> 
       <a:LinkEntities /> 
       <a:Orders /> 
       <a:PageInfo> 
       <a:Count>0</a:Count> 
       <a:PageNumber>0</a:PageNumber> 
       <a:PagingCookie i:nil="true" /> 
       <a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount> 
       </a:PageInfo> 
       <a:NoLock>false</a:NoLock> 
      </b:value> 
      </a:KeyValuePairOfstringanyType> 
     </a:Parameters> 
     <a:RequestId i:nil="true" /> 
     <a:RequestName>RetrieveMultiple</a:RequestName> 
     </request> 
    </Execute> 
    </s:Body> 
     </s:Envelope> 

BTW。您可以使用位於SDK \ samplecode \ cs \ client \ soaplogger中的SOAPLogger來獲取正確的SOAP表達式。

+0

謝謝@Jeff您的回覆似乎100%有效我沒有將其標記爲答案的唯一原因是因爲使用SOAPLogger我得到的結果與我的問題格式相同。 – Campey

+0

您是否使用QueryExpression生成SOAP格式?如果是的話,你shoudl使用此statments添加ConditionExpression:yourquery.criteria.addcondition(新conditionexpresison()) –

+0

糾正我使用的查詢表達式是以下 QueryExpression查詢=新QueryExpression(){ 實體名稱=「接觸「 ColumnSet =新ColumnSet( 」姓名「), 條件=新FilterExpression() { 條件= { 新ConditionExpression { 的AttributeName = 」emailaddress1「, 算= ConditionOperator.Equal, 值= {」 [email protected]「} } } } }; – Campey