2013-08-01 23 views
5

Mi sto connettendo a Dynamics CRM 2011 online utilizzando PHP e SOAP e ho riscontrato un problema. Il seguente RetrieveMultiple ignora i miei criteri e restituisce tutti i record.Dynamics CRM 2011 RIPRISTINO SOAPI criteri di ignoranza multipli della query

Tutto quello che voglio sono tutti i contatti che hanno '[email protected]' come loro indirizzo email.

Qualcuno potrebbe dirmi cosa c'è di sbagliato con i miei criteri/condizioni di seguito?

Grazie!

<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> 

risposta

3

C'erano alcune cose che non andavano nella query precedente. (in particolare alcuni dei miei alias erano confusi). Come suggerito da Jeff Xiong, SOAPLogger mi ha aiutato.

Anche i criteri non erano corretti. Sapone di funzionamento di seguito:

<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

Grazie per questo esempio di lavoro :) –

4

Tenta di utilizzare seguente formato 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. è possibile utilizzare SOAPLogger in cui si trovava in SDK \ samplecode \ cs \ client \ soaplogger per ottenere l'espressione SOAP corretta.

+0

Grazie @Jeff la risposta sembra al 100% valida l'unica ragione per cui non segnarlo come la risposta era perché utilizzando il SOAPLogger ho ottenuto un risultato che è nello stesso formato come la mia domanda. – Campey

+0

Hai utilizzato QueryExpression per generare il formato SOAP? Se sì, si shoudl utilizzare questo statments aggiungere ConditionExpression: yourquery.criteria.addcondition (nuova conditionexpresison()) –

+0

Correggere l'espressione di query che ho usato è stata la seguente query QueryExpression = new QueryExpression() { EntityName = "contatto " columnset = new columnset ("Nome"), Criteri = nuova FilterExpression() { Condizioni = { nuovo ConditionExpression { AttributeName = "emailaddress1", Operatore = ConditionOperator.Equal, valori = {" [email protected] "} } } } }; – Campey