2014-06-09 3 views
0

다음 CAMLQuery가 있습니다.여러 날짜 필드가있는 SPServices 사이

<Query> 
<Where> 
    <Or> 
    <Or> 
     <Or> 
     <Or> 
      <Or> 
      <Eq> 
       <FieldRef Name='Title' /> 
       <Value Type='Text'>Titulo</Value> 
      </Eq> 
      <Geq> 
       <FieldRef Name='Vencimento_x0020_Certid_x00e3_o_' /> 
       <Value Type='DateTime'>txtDataDeCNDTribMobil</Value> 
      </Geq> 
      <Leq> 
       <FieldRef Name='Vencimento_x0020_Certid_x00e3_o_' /> 
       <Value Type='DateTime'>txtDataAteCNDTribMobil</Value> 
      </Leq> 
      </Or> 
      <Geq> 
      <FieldRef Name='Vencimento_x0020_CND_x002f_INSS' /> 
      <Value Type='DateTime'>txtDataDeCNDINSS</Value> 
      </Geq> 
      <Leq> 
      <FieldRef Name='Vencimento_x0020_CND_x002f_INSS' /> 
      <Value Type='DateTime'>txtDataAteCNDINSS</Value> 
      </Leq> 
     </Or> 
     <Geq> 
      <FieldRef Name='Vencimento_x0020_CRF' /> 
      <Value Type='DateTime'>txtDataDeCRF</Value> 
     </Geq> 
     <Leq> 
      <FieldRef Name='Vencimento_x0020_CRF' /> 
      <Value Type='DateTime'>txtDataAteCRF</Value> 
     </Leq> 
    </Or> 
    <Geq> 
     <FieldRef Name='Vencimento_x0020_CND_x0020_Tribu' /> 
     <Value Type='DateTime'>txtDataDeCNDTribFederais</Value> 
    </Geq> 
    <Leq> 
     <FieldRef Name='Vencimento_x0020_CND_x0020_Tribu' /> 
     <Value Type='DateTime'>txtDataAteCNDTribFederais</Value> 
    </Leq> 
    </Or> 
    <Geq> 
     <FieldRef Name='Vencimento_x0020_Seguro_x0020_de' /> 
     <Value Type='DateTime'>txtDataDeSegurodeVida</Value> 
    </Geq> 
    <Leq> 
     <FieldRef Name='Vencimento_x0020_Seguro_x0020_de' /> 
     <Value Type='DateTime'>txtDataAteSegurodeVida</Value> 
    </Leq> 
</Or> 
</Where> 
    <OrderBy> 
     <FieldRef Name='Title' /> 
    </OrderBy> 
</Query> 

코드는 기본적으로 : 날짜의 여러 열을 포함 셰어 포인트 2013의 목록을 참조, 입력 날짜의 여러 필드가 형성. 문제는 제가 만든 양식 사이입니다. CAMLQuery는 아무것도 반환하지 않습니다. CAMLQuery가 잘못되었다는 한 가지 실수 만 있습니다.

누구나 여러 날짜 필드로 CAMLQuery를 만드는 방법을 알고 있습니까?

TKS

+0

당신이 하시겠습니까? "제목 = Titulo을"내부 또는 모든 날짜 필터의 외부? 문제가 불균형 CAML 인 것을 볼 수는 있지만 답변은 Title = Titulo 및 일련의 필터를 날짜에 적용할지 여부에 따라 달라질 수 있습니다. 또는 Title = Titulo를 조건 중 하나가되게하려면 모든 날짜와 함께. – Stevangelista

답변

0

당신은 모든 날짜 필터를 따라 < 또는 > 조건으로 제목 = Titulo을 평가하려는 참으로 경우, 아래 당신이 필요로하는 CAML입니다. 대신 Title = Titulo를 true로 설정하고 < 또는 > 필터를 사용하여 질문에 의견을 말하고 답변을 업데이트하면 대답이 업데이트됩니다.

CAML :

<Query> 
    <Where> 
     <Or> 
      <Or> 
       <Eq> 
        <FieldRef Name='Title' /> 
        <Value Type='Text'>Titulo</Value> 
       </Eq> 
       <Or> 
        <Or> 
         <Geq> 
          <FieldRef Name='Vencimento_x0020_Certid_x00e3_o_' /> 
          <Value Type='DateTime'>txtDataDeCNDTribMobil</Value> 
         </Geq> 
         <Leq> 
          <FieldRef Name='Vencimento_x0020_Certid_x00e3_o_' /> 
          <Value Type='DateTime'>txtDataAteCNDTribMobil</Value> 
         </Leq> 
        </Or> 
        <Or> 
         <Geq> 
          <FieldRef Name='Vencimento_x0020_CND_x002f_INSS' /> 
          <Value Type='DateTime'>txtDataDeCNDINSS</Value> 
         </Geq> 
         <Leq> 
          <FieldRef Name='Vencimento_x0020_CND_x002f_INSS' /> 
          <Value Type='DateTime'>txtDataAteCNDINSS</Value> 
         </Leq> 
        </Or> 
       </Or> 
      </Or> 
      <Or> 
       <Or> 
        <Or> 
         <Geq> 
          <FieldRef Name='Vencimento_x0020_CND_x002f_INSS' /> 
          <Value Type='DateTime'>txtDataDeCNDINSS</Value> 
         </Geq> 
         <Leq> 
          <FieldRef Name='Vencimento_x0020_CND_x002f_INSS' /> 
          <Value Type='DateTime'>txtDataAteCNDINSS</Value> 
         </Leq> 
        </Or> 
        <Or> 
         <Geq> 
          <FieldRef Name='Vencimento_x0020_CRF' /> 
          <Value Type='DateTime'>txtDataDeCRF</Value> 
         </Geq> 
         <Leq> 
          <FieldRef Name='Vencimento_x0020_CRF' /> 
          <Value Type='DateTime'>txtDataAteCRF</Value> 
         </Leq> 
        </Or> 
       </Or> 
       <Or> 
        <Or> 
         <Geq> 
          <FieldRef Name='Vencimento_x0020_CND_x0020_Tribu' /> 
          <Value Type='DateTime'>txtDataDeCNDTribFederais</Value> 
         </Geq> 
         <Leq> 
          <FieldRef Name='Vencimento_x0020_CND_x0020_Tribu' /> 
          <Value Type='DateTime'>txtDataAteCNDTribFederais</Value> 
         </Leq> 
        </Or> 
        <Or> 
         <Geq> 
          <FieldRef Name='Vencimento_x0020_Seguro_x0020_de' /> 
          <Value Type='DateTime'>txtDataDeSegurodeVida</Value> 
         </Geq> 
         <Leq> 
          <FieldRef Name='Vencimento_x0020_Seguro_x0020_de' /> 
          <Value Type='DateTime'>txtDataAteSegurodeVida</Value> 
         </Leq> 
        </Or> 
       </Or> 
      </Or> 
     </Or> 
    </Where> 
    <OrderBy> 
     <FieldRef Name='Title' /> 
    </OrderBy> 
</Query> 
+0

이 CAMLQuery는 "작동합니다". 그것은 어떤 오류 (내 반환)하지만 폼에 넣은 모든 데이터를 반환하지 않습니다 코드는 모든 결과 목록을 반환합니다 –

+0

필터의 이러한 큰 다양성과 함께, 나는 놀라지 않을거야 :) 농담 제쳐두고, 왜냐하면 모두 조건은 을 기반으로하므로 주어진 항목 내에서 하나만 반환해야 반환 할 수 있습니다. 모든 항목을 반환하지 않아야 함을 확인 했습니까? CAML의 처리는 SP 객체 모델에 의해 수행되며, 사용자가 보았 듯이 CAML의 형식이 잘못되면 오류가 발생합니다. 대부분의 경우, CAML 쿼리가 데이터를 반환하지만 당신이 기대하지 않은 것이 아니기 때문에 문제는 쿼리 자체입니다. – Stevangelista

+0

나는 이해한다. 모든 필드의 유효성을 검사하고 클라이언트가 요청한대로 CAMLQuery를 실행할 수 있다면 여기에 게시합니다. 어쨌든 감사합니다. :) –

0

이것은 내 문제에 대한 발견의 해결책이었다. 나는 세계 최고의 코드가 아닙니다 알고 있지만, 그것을 작동합니다 :)

calmQuery = "<Query>"+ 
       "<Where>"; 
//If the Subcontratados is not empty and all the dates are, applies the "" 
if(Subcontratados != '' && (txtDataDeCNDTribMobil == '' && txtDataAteCNDTribMobil == '' && txtDataDeCNDINSS == '' && txtDataAteCNDINSS == '' && txtDataDeCRF == '' && txtDataAteCRF == '' && txtDataDeCNDTribFederais == '' && txtDataAteCNDTribFederais == '' && txtDataDeSegurodeVida == '' && txtDataAteSegurodeVida == '')){ 
     calmQuery += ""; 
//If the Subcontratados is not empty and no other date also applies the AND 
}else if(Subcontratados != '' && (txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '' || txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
     calmQuery += "<And>"; 
//If none of the above conditions applies the OR 
}else{ 
     calmQuery += "<Or>"; 
} 
     calmQuery += "<Eq>"+ 
          "<FieldRef Name='Title' />"+ 
          "<Value Type='Text'>"+Subcontratados+"</Value>"+ 
         "</Eq>"; 

     if(txtDataDeCNDTribMobil != '' && txtDataAteCNDTribMobil != '' && (txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "<Or>"; 
     }else if(txtDataDeCNDINSS != '' && txtDataAteCNDINSS != '' && (txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "<Or>"; 
     }else if(txtDataDeCRF != '' && txtDataAteCRF != '' && (txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "<Or>"; 
     }else if(txtDataDeCNDTribFederais != '' && txtDataAteCNDTribFederais != '' && (txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "<Or>"; 
     }else if(txtDataDeSegurodeVida != '' && txtDataAteSegurodeVida != '' && (txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '')){ 
      calmQuery += "<Or>"; 
     } 


      //If txtDataDeCNDTribMobil and is txtDataAteCNDTribMobil is not empty 
      if(txtDataDeCNDTribMobil != '' && txtDataAteCNDTribMobil != ''){ 
       calmQuery += "<And>"+ 
           "<Geq>"+ 
            "<FieldRef Name='Vencimento_x0020_Certid_x00e3_o_' />"+ 
            "<Value Type='DateTime'>"+txtDataDeCNDTribMobil+"</Value>"+ 
           "</Geq>"+ 
           "<Leq>"+ 
            "<FieldRef Name='Vencimento_x0020_Certid_x00e3_o_' />"+ 
            "<Value Type='DateTime'>"+txtDataAteCNDTribMobil+"</Value>"+ 
           "</Leq>"+ 
           "</And>"; 
      } 
      //If txtDataDeCNDINSS and txtDataAteCNDINSS is not empty 
      if(txtDataDeCNDINSS != '' && txtDataAteCNDINSS != ''){ 
       calmQuery += "<And>"+ 
           "<Geq>"+ 
            "<FieldRef Name='Vencimento_x0020_CND_x002f_INSS' />"+ 
            "<Value Type='DateTime'>"+txtDataDeCNDINSS+"</Value>"+ 
           "</Geq>"+ 
           "<Leq>"+ 
            "<FieldRef Name='Vencimento_x0020_CND_x002f_INSS' />"+ 
            "<Value Type='DateTime'>"+txtDataAteCNDINSS+"</Value>"+ 
           "</Leq>"+ 
           "</And>"; 
      } 
      //If txtDataDeCRF and txtDataAteCRF is not empty 
      if(txtDataDeCRF != '' && txtDataAteCRF != ''){ 
       calmQuery += "<And>"+ 
           "<Geq>"+ 
            "<FieldRef Name='Vencimento_x0020_CRF' />"+ 
            "<Value Type='DateTime'>"+txtDataDeCRF+"</Value>"+ 
           "</Geq>"+ 
           "<Leq>"+ 
            "<FieldRef Name='Vencimento_x0020_CRF' />"+ 
            "<Value Type='DateTime'>"+txtDataAteCRF+"</Value>"+ 
           "</Leq>"+ 
          "</And>"; 
      } 
      //If txtDataDeCNDTribFederais and txtDataAteCNDTribFederais is not empty 
      if(txtDataDeCNDTribFederais != '' && txtDataAteCNDTribFederais != ''){ 
       calmQuery += "<And>"+ 
           "<Geq>"+ 
            "<FieldRef Name='Vencimento_x0020_CND_x0020_Tribu' />"+ 
            "<Value Type='DateTime'>"+txtDataDeCNDTribFederais+"</Value>"+ 
           "</Geq>"+ 
           "<Leq>"+ 
            "<FieldRef Name='Vencimento_x0020_CND_x0020_Tribu' />"+ 
            "<Value Type='DateTime'>"+txtDataAteCNDTribFederais+"</Value>"+ 
           "</Leq>"+ 
           "</And>"; 
      } 
      //If txtDataDeSegurodeVida and txtDataAteSegurodeVida is not empty 
      if(txtDataDeSegurodeVida != '' && txtDataAteSegurodeVida != ''){ 
       calmQuery += "<And>"+ 
           "<Geq>"+ 
            "<FieldRef Name='Vencimento_x0020_Seguro_x0020_de' />"+ 
            "<Value Type='DateTime'>"+txtDataDeSegurodeVida+"</Value>"+ 
           "</Geq>"+ 
           "<Leq>"+ 
            "<FieldRef Name='Vencimento_x0020_Seguro_x0020_de' />"+ 
            "<Value Type='DateTime'>"+txtDataAteSegurodeVida+"</Value>"+ 
           "</Leq>"+ 
           "</And>"; 
      } 
     if(txtDataDeCNDTribMobil != '' && txtDataAteCNDTribMobil != '' && (txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "</Or>"; 
     }else if(txtDataDeCNDINSS != '' && txtDataAteCNDINSS != '' && (txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "</Or>"; 
     }else if(txtDataDeCRF != '' && txtDataAteCRF != '' && (txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "</Or>"; 
     }else if(txtDataDeCNDTribFederais != '' && txtDataAteCNDTribFederais != '' && (txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "</Or>"; 
     }else if(txtDataDeSegurodeVida != '' && txtDataAteSegurodeVida != '' && (txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '')){ 
      calmQuery += "</Or>"; 
     } 

     //CLOSE - If the Subcontratados is not empty and all the dates are, applies the "" 
     if(Subcontratados != '' && (txtDataDeCNDTribMobil == '' && txtDataAteCNDTribMobil == '' && txtDataDeCNDINSS == '' && txtDataAteCNDINSS == '' && txtDataDeCRF == '' && txtDataAteCRF == '' && txtDataDeCNDTribFederais == '' && txtDataAteCNDTribFederais == '' && txtDataDeSegurodeVida == '' && txtDataAteSegurodeVida == '')){ 
      calmQuery += ""; 
     //CLOSE - If the Subcontratados is not empty and no other date also applies the AND 
     }else if(Subcontratados != '' && (txtDataDeCNDTribMobil != '' || txtDataAteCNDTribMobil != '' || txtDataDeCNDINSS != '' || txtDataAteCNDINSS != '' || txtDataDeCRF != '' || txtDataAteCRF != '' || txtDataDeCNDTribFederais != '' || txtDataAteCNDTribFederais != '' || txtDataDeSegurodeVida != '' || txtDataAteSegurodeVida != '')){ 
      calmQuery += "</And>"; 
     //CLOSE - If none of the above conditions applies the OR 
     }else{ 
      calmQuery += "</Or>"; 
     } 
    calmQuery += "</Where>"+ 
        "<OrderBy>"+ 
         "<FieldRef Name='Title' />"+ 
        "</OrderBy>"+ 
       "</Query>";