[SalesForce] API SOAP: Method retrieve, combine 3 or more filter conditions

I am trying to apply 3 filter conditions to a soap call to get DataFolder info.
Single conditions are (as SimpleFilterPart elements):

<Filter xsi:type="SimpleFilterPart">
    <Property>ContentType</Property>
    <SimpleOperator>equals</SimpleOperator>
    <Value>email</Value>
</Filter>
<Filter xsi:type="SimpleFilterPart">
    <Property>IsActive</Property>
    <SimpleOperator>equals</SimpleOperator>
    <Value>true</Value>
</Filter>
<Filter xsi:type="SimpleFilterPart">
    <Property>ParentFolder.Name</Property>
    <SimpleOperator>equals</SimpleOperator>
    <Value>my emails</Value>
</Filter>

But in this way only first condition was applied.
To combine 2 conditions i have to use ComplexFilterPart, so my selection conditions become:

<Filter xsi:type="par:ComplexFilterPart" xmlns:par="http://exacttarget.com/wsdl/partnerAPI">
   <LeftOperand xsi:type="par:SimpleFilterPart">
      <Property>IsActive</Property>
      <SimpleOperator>equals</SimpleOperator>
      <Value>true</Value>
   </LeftOperand>
   <LogicalOperator>AND</LogicalOperator>
   <RightOperand xsi:type="par:SimpleFilterPart">
      <Property>ContentType</Property>
      <SimpleOperator>equals</SimpleOperator>
      <Value>email</Value>
   </RightOperand>
</Filter>
<Filter xsi:type="SimpleFilterPart">
    <Property>ParentFolder.Name</Property>
    <SimpleOperator>equals</SimpleOperator>
    <Value>my emails</Value>
</Filter>

But in this way only conditions between ComplexFilterPart were applied…
How can I set the conditions?

Best Answer

The SOAP logic will look something like this after combining the ComplexFilterParts and SimpleFilterParts.

<Filter xsi:type="ComplexFilterPart">
    <LeftOperand xsi:type="ComplexFilterPart">
        <LeftOperand xsi:type="SimpleFilterPart">
            <Property>IsActive</Property>
            <SimpleOperator>equals</SimpleOperator>
            <Value>true</Value>
        </LeftOperand>
        <LogicalOperator>AND</LogicalOperator>
        <RightOperand xsi:type="SimpleFilterPart">
           <Property>ContentType</Property>
           <SimpleOperator>equals</SimpleOperator>
           <Value>email</Value>
        </RightOperand>
    </LeftOperand>
    <LogicalOperator>AND</LogicalOperator>
    <RightOperand xsi:type="SimpleFilterPart">
        <Property>ParentFolder.Name</Property>
        <SimpleOperator>equals</SimpleOperator>
        <Value>my emails</Value>
    </RightOperand>
</Filter>
Related Topic