Tag Archives: lists.asmx

Lists.asmx, GetListItems และโฟลเดอร์

ฉันได้ทำงานวิจัยบางบุคคลวันนี้รอบบริการเว็บ list.asmx ให้เป็นส่วนหนึ่งของ SharePoint 2010 (และรุ่นก่อนหน้า).  เธอได้รับในรายการที่โฟลเดอร์ราก (รวมทั้งชื่อของ sub-folders), แต่ไม่ได้รับสินค้าใน sub-folders  ไม่บางอย่างรอบคอบในการ internets และคำถามทั่วไปอย่างแปลกใจ  ยัง, ฉันไม่สามารถได้รับคำตอบสำหรับคำถามที่วิดี, "ถ้ารู้ว่าโฟลเดอร์, ฉันรับสินค้าในโฟลเดอร์?”  จะซื่อสัตย์, ไม่ได้พยายามทั้งหมดที่หนักเนื่องจากผมได้ต้องการรูปหนึ่งนี้ออกด้วยตัวเองสำหรับในขณะ ยิ้ม.

การตั้งค่านี้, ไซต์มีชื่อว่า "สถานการณ์ของบล็อก" และรายการแบบกำหนดเองที่ชื่อว่า "กำหนดเองรายการกับโฟลเดอร์ย่อย" สร้าง  สร้างโฟลเดอร์ชื่อแล้ว:

  • ปี 2005
  • ปี 2006
  • ปี 2007

เพิ่มเพียงไม่กี่รายการไปที่โฟลเดอร์ "ปี 2549"  นี่คือสิ่งที่มีลักษณะเหมือน:

image

เพื่อนของฉันไม่ได้เขียน C# โค้ด แต่แทนที่จะ ใช้ Java, ดังนั้น ละครซองจดหมายถูกอะไรเธอจริง ๆ ต้อง  รับที่, ฉันเขียนบิตของ jQuery และใช้ fiddler รับสนทนา HTTP ที่แท้จริงแล้ว.

นี่คือ jQuery เกี่ยวข้อง (คัดลอกรหัสลงด้านล่างหากคุณต้องการคัดลอก/วาง):

image

พวกเขาแรกคีย์คือการ รวมทั้งสองแบบ <queryOptions> และ <QueryOptions> โหนด  ปุ่มที่สองคือที่ <โฟลเดอร์> โหนดคือ URL ที่ไคลเอ็นต์เข้า.

อาจจะมีวิธีอื่น ๆ ที่ได้รับนี้, แต่นี้ทำงานได้ดีสำหรับฉันเมื่อใช้ jQuery.

นี่คือละครซองจดหมายสำหรับด้านบน:

<soapenv:Xmlns ซองจดหมาย:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’>                
  <soapenv:เนื้อความ>
    <GetListItems xmlns =’
http://schemas.microsoft.com/sharepoint/soap/’>
      <listName>รายการที่กำหนดเองกับโฟลเดอร์ย่อย</listName>
      <viewFields>  
        <ViewFields>
          <ชื่อ FieldRef =' ชื่อเรื่อง’ />
          <ชื่อ FieldRef ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <โฟลเดอร์>
http://demoserver1/บล็อก รายการสถานการณ์/รายการ/กำหนดเองกับ Sub โฟลเดอร์/ปี 2549</โฟลเดอร์>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:เนื้อความ>
</soapenv:ซองจดหมาย>

ตัวอย่างและการอภิปรายรอบนี้มากมายทำให้ฉันเชื่อว่า ทั้งหมดที่ต้องแก้ไข <QueryOptions> และระบุชื่อโฟลเดอร์  สำหรับฉัน, ฉันต้องการทั้งสองตัดนั้นภายใน <queryOptions> ตลอดจนระบุ URL ที่ครบถ้วนสำหรับการ <โฟลเดอร์> โหนด.

นี่คือการตั้งค่าของ jQuery AJAX:

$(เอกสาร).พร้อม(ฟังก์ชัน() {
       var soapEnv =
           "<soapenv:Xmlns ซองจดหมาย:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’> \
               <soapenv:เนื้อความ> \
                    <GetListItems xmlns =’http://schemas.microsoft.com/sharepoint/soap/’> \
                       <listName>รายการที่กำหนดเองกับโฟลเดอร์ย่อย</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <ชื่อ FieldRef =' ชื่อเรื่อง’ /> \
                              <ชื่อ FieldRef ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <โฟลเดอร์>http://demoserver1/Blogging รายการสถานการณ์/รายการ/กำหนดเองกับ Sub โฟลเดอร์/ปี 2549</โฟลเดอร์> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:เนื้อความ> \
           </soapenv:ซองจดหมาย>";

</สิ้นสุด>

สมัครสมาชิกไปยังบล็อกของฉัน.

ทำตามฉันใน Twitter ที่ http://www.twitter.com/pagalvin

Lists.asmx, GetList และ "ค่าไม่สามารถเป็น null”

พบวันนี้ที่ GetList() วิธีการใน lists.asmx มีบริการเว็บเรียกระมัดระวัง หรือมีแนวโน้มที่จะโยนความลึกลับยกเว้น "ค่าไม่สามารถเป็น null" (และที่จะสมมติว่า คุณสามารถเรียกดูผ่านข้อผิดพลาดทั่วไปยิ่งแย่ลง, "ข้อยกเว้นของชนิด ' Microsoft.SharePoint.SoapServer.SoapServerException’ เกิดขึ้น")  โดยเฉพาะอย่างยิ่ง, พบว่า คุณไม่สามารถให้ชนิดใด ๆ ของคำนำหน้ากับวิธี GetList  ส่วนย่อยของ jQuery ดังต่อไปนี้แสดงให้เห็นถึงจุด:

image

ถ้าคุณทำเช่นนั้น, บริการเว็บการตอบสนอง ด้วยการ "ค่าไม่สามารถเป็น null" ตามนี้ พู้ทำเล่น-ให้เสียงบรรยาย HTTP:

<?xml version = "1.0" เข้ารหัส = "utf-8"?>
  <สบู่:ซองจดหมาย
     xmlns:สบู่ ="
http://schemas.xmlsoap.org/soap/envelope/"    
     xmlns:xsi = "
http://www.w3.org/ 2001/XMLSchema-อินสแตนซ์
     xmlns:xsd ="
http://www.w3.org/ 2001/XMLSchema">

  <สบู่:เนื้อความ>
    <สบู่:ข้อบกพร่อง>
      <faultcode>สบู่:เซิร์ฟเวอร์</faultcode>
      <faultstring>
        ข้อยกเว้นของชนิด ' Microsoft.SharePoint.SoapServer.SoapServerException’ เกิดขึ้น.
      </faultstring>
      <รายละเอียด>
        <errorstring xmlns ="
http://schemas.microsoft.com/sharepoint/soap/">
ค่าไม่สามารถเป็น null.
        </errorstring>
      </รายละเอียด>
    </สบู่:ข้อบกพร่อง>
  </สบู่:เนื้อความ>
</สบู่:ซองจดหมาย>

แน่นอน, คุณอาจจะไม่เพิ่มคำนำหน้าว่า "s0" ด้วยตนเอง, แต่เครื่องมือบางชนิดมีแนวโน้มที่ (เช่นอุปราคา).

นี่คือความสับสนทั้งหมด / frustrating เนื่องจากวิธีการอื่น ๆ ทนนำหน้า  สำหรับอินสแตนซ์, ที่ GetListCollection วิธีไม่รังเกียจถ้าจะได้รับสิ่ง, แม้จะ มีหน้าที่พูดจาเหลวไหลเช่น "xyzzy":

image

นี้ "ค่าไม่สามารถเป็น null" ดูเหมือนว่าค่อนข้างปกติ lists.asmx เพื่อหวังว่านี้จะช่วยให้คนออกในอนาคต.

</สิ้นสุด>

สมัครสมาชิกไปยังบล็อกของฉัน.

ทำตามฉันใน Twitter ที่ http://www.twitter.com/pagalvin