كيف يمكنني استخدام QueryOverride في CQWP عند نشر مثيل جزء ويب باستخدام Elements.xml؟

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/49628

سؤال

أحتاج إلى استخدام CQWP مع أكثر من ثلاثة مرشحات، وبالتالي أنا ذاهب لاستخدام QueryOverride باستخدام استعلام CAML مثل الموصوف هنا .لا أستطيع الحصول على هذا للعمل عند نشر مثيل جزء ويب باستخدام ELEMENTS.XML I.E. Alluserswebart و CDATA.

الطريقة التي فعلت بها مع المرشحات العادية كانت مثل ما يلي (من Elements.xml) giveacodicetagpre.

ومع ذلك يتطلب QueryOverride استخدام CDATA أيضا.المشكلة هي أنني لا أعتقد أن عناصر CDATA المتداخلة مسموح بها.لقد حاولت HTML ترميز CAML كحل مؤقت /نهج، ولكن دون جدوى.

ما هو الحل هنا؟أعتقد أنني يمكن أن أكتب بعض رمز الاستقبال الميزة، ولكن أود تجنب ذلك إذا استطعت.

هل كانت مفيدة؟

المحلول 2

@Andrey's response pinpointed me to the answer of this question. The Query needs to be Encoded. I tried that in my initial approach, but I must have missed something.

I had this CAML that I wanted to have in my QueryOverride

<Where>
  <And>
     <And>
        <Or>
           <Eq>
              <FieldRef Name='Status' />
              <Value Type='Choice'>Not Started</Value>
           </Eq>
           <Eq>
              <FieldRef Name='Status' />
              <Value Type='Choice'>Not Closed</Value>
           </Eq>
        </Or>
        <Leq>
           <FieldRef Name='TargetImplDate' />
           <Value Type='DateTime'>
              <Today />
           </Value>
        </Leq>
     </And>
     <Eq>
        <FieldRef Name='Category' />
        <Value Type='Choice'></Value>
     </Eq>
  </And>
</Where>
<OrderBy>
  <FieldRef Name='ProcessChoice' />
  <FieldRef Name='TargetImplDate' />
</OrderBy>

Using CDATA when I added the web part to the web part gallery, and adding it to the page and exporting it afterwards got the result

<property name="QueryOverride" type="string">&lt;Where&gt;&lt;And&gt;&lt;And&gt;&lt;Or&gt;&lt;Eq&gt;&lt;FieldRef Name='Status' /&gt;&lt;Value Type='Choice'&gt;Not Started&lt;/Value&gt;&lt;/Eq&gt;&lt;Eq&gt;&lt;FieldRef Name='Status' /&gt;&lt;Value Type='Choice'&gt;Not Closed&lt;/Value&gt;&lt;/Eq&gt;&lt;/Or&gt;&lt;Leq&gt;&lt;FieldRef Name='TargetImplDate' /&gt;&lt;Value Type='DateTime'&gt;&lt;Today /&gt;&lt;/Value&gt;&lt;/Leq&gt;&lt;/And&gt;&lt;Eq&gt;&lt;FieldRef Name='Category' /&gt;&lt;Value Type='Choice'&gt;&lt;/Value&gt;&lt;/Eq&gt;&lt;/And&gt;&lt;/Where&gt;&lt;OrderBy&gt;&lt;FieldRef Name='ProcessChoice' /&gt;&lt;FieldRef Name='TargetImplDate' /&gt;&lt;/OrderBy&gt;</property>

which worked as expected. Thanks @Andrey

نصائح أخرى

Kind of workaround, but still: deploy CQWP without this property to a page, set the property programmatically, and then export webpart to .webpart file.

I anticipate some kind of double HTML encoding nightmare like as a result.

P.S. Not tested.

P.S.S. If you will not be able to export the webpart from browser, try using programmatic approach (ExportWebPart method of SPLimitedWebPartManager).

Please keep in mind that

<where> or &lt;Where&gt;

tag should go on the same line with

<property name="QueryOverride" type="string">

like this

 <property name="QueryOverride" type="string">&lt;Where&gt;
        &lt;Or&gt;
          &lt;Eq&gt;
            &lt;FieldRef Name="AssignedTo"/&gt;
            &lt;Value Type="User"&gt;
              &lt;UserID/&gt;
            &lt;/Value&gt;
          &lt;/Eq&gt;
          &lt;Membership Type="CurrentUserGroups"&gt;
            &lt;FieldRef Name="AssignedTo"/&gt;
          &lt;/Membership&gt;
        &lt;/Or&gt;
      &lt;/Where&gt;</property>

and NOT like this

 <property name="QueryOverride" type="string">
     &lt;Where&gt;
        &lt;Or&gt;
          &lt;Eq&gt;
            &lt;FieldRef Name="AssignedTo"/&gt;
            &lt;Value Type="User"&gt;
              &lt;UserID/&gt;
            &lt;/Value&gt;
          &lt;/Eq&gt;
          &lt;Membership Type="CurrentUserGroups"&gt;
            &lt;FieldRef Name="AssignedTo"/&gt;
          &lt;/Membership&gt;
        &lt;/Or&gt;
      &lt;/Where&gt;
</property>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top