คลังเก็บหมวดหมู่: พัฒนาของ SharePoint

HTTP 406 ข้อผิดพลาดเมื่อใช้ $http.get แองกูลาร์กับ SharePoint เหลือจุด

โปรแกรมปรับปรุง: Ndersson AD มาร์คชี้ให้เห็นชิ้นส่วนของข้อมูลนี้ดี: http://blogs.office.com/2014/08/13/json-light-support-rest-sharepoint-api-released/. ที่อธิบายมาก :).

ที่อาจเป็นเรื่องเลวร้ายที่สุดของบล็อกโพสต์เคย! Anyhoo.

โดยทั่วไปทำต้นแบบของฉันกับอินสแตนซ์ของ O365 ทั้งหมด. มีอินสแตนซ์ของฉันส่วนบุคคลเพื่อให้ไม่ต้องกังวลเกี่ยวกับผลกระทบต่อใคร. เป็นพังเพย – จำเมื่อเราเรียกมีรอบเครื่องเสมือนบนแล็ปท็อปของเรากับมอส – SQL Server, IIS, ไฮเปอร์-V เทียบกับการตัดสินใจ. VMWare? Anyhoo ...

ฉันได้พัฒนา app ใช้เชิงมุมในสภาพแวดล้อมนี้ไม่, ในสิ่งอื่น ๆ, นี้:

$http.get(serverUrl)
.ประสบความสำเร็จ(ฟังก์ชัน(ข้อมูล, สถานะ, หัวข้อ, การกำหนดค่า) {

var getLinksResponse =ข้อมูล;

getLinksResponse.value.forEach(ฟังก์ชัน(theResult) {

// และอื่น ๆ และอื่น ๆ froth

นี้ทำงานเพียงแค่ปรับในสองแตก SharePoint ออนไลน์. อย่างไรก็ตาม, เมื่อเพื่อนร่วมงานของฉันส่งมันไปที่อินสแตนซ์ Cloudshare, เขาได้รับการ HTTP 406 ข้อผิดพลาด (ซึ่งเป็นครั้งแรกที่เคยได้ที่หนึ่งหรือไม่, ดังนั้น...เย่, ฉันเดาเอา). เราได้บิตของการวิจัย และพบว่า หัวข้อ "ยอมรับ" ถูกปิด. SharePoint แบบออนไลน์ได้อย่างมีความสุขกับ:

ยอมรับ: แอพลิเคชัน/เจซัน

แต่อินสแตนซ์ cloudshare (ซึ่งเป็น SP ในเปรม, โฮสต์ในเซิร์ฟเวอร์เสมือน) ต้องคลาสสิค " odata = verbose " เพิ่มในเช่น:

ยอมรับ: แอพลิเคชัน/เจซัน;odata = verbose

การแก้ไขปัญหานั้น, เราได้เพิ่มหัวข้อเช่น:

กำหนดค่า var = {หัวข้อ: {
'ยอมรับ': ' แอพลิเคชัน/เจซัน;odata = verbose'
}
};

$http.get(serverUrl,การกำหนดค่า)
.ประสบความสำเร็จ(ฟังก์ชัน(ข้อมูล, สถานะ, หัวข้อ, การกำหนดค่า) {

var getLinksResponse =ข้อมูล;

getLinksResponse.value.forEach(ฟังก์ชัน(theResult) {

// และอื่น ๆ และอื่น ๆ froth

ที่ได้รับการกำจัด 406, แต่ยังเปลี่ยนแปลงรูปแบบของการตอบสนอง. ก็เพิ่มเติม... verbose. (ฮาฮา!) เปลี่ยนแปลงที่ถูกต้อง และนี่คือผลลัพธ์ขั้นสุดท้าย:

กำหนดค่า var = {หัวข้อ: {
'ยอมรับ': ' แอพลิเคชัน/เจซัน;odata = verbose'
}
};

$http.get(serverUrl,การกำหนดค่า)
.ประสบความสำเร็จ(ฟังก์ชัน(ข้อมูล, สถานะ, หัวข้อ, การกำหนดค่า) {

var getLinksResponse =ข้อมูล;

getLinksResponse.d.results.forEach(ฟังก์ชัน(theResult) {

// และอื่น ๆ และอื่น ๆ froth

นี้เปิดเข้าไปในตัว 30 ปัญหานาทีสำหรับเรา, ดังนั้น เรา lucked ออก. หวังว่าคนพบนี้มีประโยชน์.

</สิ้นสุด>

ความรู้เพิ่มขึ้น / ของ JavaScript กรอบ

เพื่อนร่วมงานของฉัน, รี Javed (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), เขียนโพสต์บล็อกสรุปย่อในกรอบที่เขาชอบ หรือที่ ได้ใช้กับกับ SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery ดูเหมือนว่า วิคเตอร์บนฟิลด์ได้, เพื่อที่จะพูด, ปีตอนนี้, แต่คนใหม่ และฟังก์ชั่นเรียงลำดับของการต่อสู้นั้น, เช่นเชิงมุม. (SPServices, แน่นอน, แล้วตัวรักษาชีวิตปี และจะยังคงเป็นดังคิด).

คนใช้อะไร? มีพวกเขาเน้นมากเครื่องมือของ Microsoft หรือไม่ (CSOM / JSOM) หรือย้ายขึ้นไปทางเชิงมุม, ชนะน็อกโดยเทคนิค, Ember, ฯลฯ?

มีความโน้มเอียงเพิ่มขึ้นไปทางกรอบเหล่านี้ไม่ใช่ของ Microsoft. ผมคิดว่า สิ่ง MSFT เป็นยาก และยากในการทำงานด้วย, ต้องเกือบมากที่สุดของเส้นโค้งการเรียนรู้เป็น dev ฝั่งเซิร์ฟเวอร์แบบเก่า.

ความคิดเห็นที่นี่ หรือไปที่ SharePoint บิ๊กแอปเปิ้ล ถ้าคุณต้องการพูดคุย (บิ๊กแอปเปิ้ลจะมีโอกาสมากกว่าการสนทนาที่ดี).

</สิ้นสุด>

ปั่นงานตัวจับเวลาของ SharePoint จากการกำหนดค่าไซต์คอลเลกชัน

เพื่อนร่วมงานของฉัน, พาเทลโคลฟ, เขียนบล็อกโพสต์ อธิบายสถาปัตยกรรมงานแบบยืดหยุ่นเวลา ที่แล้วบางความยืดหยุ่นที่ดีเพื่อสนับสนุนงานที่รันเป็นเวลานาน/ รายงาน  ในคำพูดของเขา:

1. วิเคราะห์ Checked ออกแฟ้ม และส่งจดหมายเตือนให้บุคคลเลขวัน (เนื่องจากแฟ้มถูกเช็คเอาท์) เกินขีดจำกัดขีดจำกัดบางอย่าง

2. เอาลิงค์จากเนื้อหาอื่น ๆ เมื่อมีลบ หรือเก็บถาวรจากระบบเนื้อหาเฉพาะ

3. ผู้ใช้ต้องการดูการแจ้งเตือนทั้งหมดที่เขาสมัครสมาชิกในเว็บทั้งหมดในไซต์คอลเลกชัน

4. ส่งการแจ้งเตือนผู้เขียนตรวจทานเนื้อหาเมื่อมีระบุเวลาทบทวนในเนื้อหา และ ที่กำลังมาถึงวัน

ดี, รายการไปใน...

– ดูเพิ่มเติมได้ที่: http://www.bigapplesharepoint.com/ หน้า/ดูอัน-Insight.aspx?BlogID=40#sthash.7cKuiwly.dpuf

มีเวลาในอดีตของฉันเมื่อมีบางสิ่งบางอย่างเช่นนี้มีประโยชน์มาก.

</สิ้นสุด>

วิธีการ: กำหนดทดสอบหน่วยและครอบคลุมกับ QUnit.js และ Blanket.js สำหรับสำนักงาน 365 โปรแกรมประยุกต์ SharePoint

บทนำ

ผมได้สำรวจหน่วยทดสอบ และทดสอบความครอบคลุมสำหรับ JavaScript ที่ทำงานบนโปรแกรมประยุกต์ SharePoint ที่ใหม่สำหรับ SharePoint แบบออนไลน์ในสำนักงาน 365 ท  เส้นทางวิจัยที่ชัดนำให้ Qunit.js และขวาหลังจากนั้น, ถึง Blanket.js.

QUnit ให้ฉันตั้งหน่วยทดสอบ และจัดกลุ่มลงในโมดูล  โมดูลเป็นเพียงวิธีง่าย ๆ ที่จะจัดการทดสอบที่เกี่ยวข้อง. (ผมไม่แน่ใจว่า ผมใช้มันตามที่ตั้งใจไว้, แต่ทำงานสำหรับฉันดังนั้นไกลกับชุดเล็กของการทดสอบดังนั้นไกลฉันกำหนด).

Blanket.js รวมกับ Qunit และมันจะแสดงบรรทัดจริงของ JavaScript ที่ มี – สำคัญ – ถูกไม่จริงปฏิบัติในหลักสูตรของการรันการทดสอบ  นี่คือ "ครอบคลุม" – รายการที่ดำเนินครอบคลุม โดยการทดสอบขณะไม่มี.

ระหว่างการตั้งค่ากรณีทดสอบที่ดี และดูความครอบคลุม, เราสามารถลดความเสี่ยงที่ว่า รหัสของเราได้ซ่อนข้อบกพร่อง  เวลาดี.

Qunit

สมมติว่า คุณมี Visual Studio โครงการตั้งค่า, เริ่มต้น ด้วยการดาวน์โหลดแพคเกจจาวาสคริปต์จาก http://qunitjs.com.  เพิ่ม JavaScript และ CSS ตรงกับโซลูชันของคุณ  มีลักษณะผมเช่นนี้:

image

รูป 1

เช่นที่คุณเห็น, ผมใช้ 1.13.0 เวลา ผมเขียนบทความบล็อกนี้. อย่าลืมดาวน์โหลด และเพิ่มแฟ้ม CSS.

ที่นึง, ขั้นตอนต่อไปคือ การสร้างสิ่งของเทียมทดสอบอ้างอิงบิต Qunit  ฉันกำลังทดสอบพวงของฟังก์ชันในแฟ้มสคริปต์ที่เรียกว่า "QuizUtil.js" เพื่อสร้างเพจ HTML เรียกว่า "QuizUtil_test.html" ดังรูป:

image รูป 2

นี่คือรหัส:

<!กำหนด DOCTYPE html>
<html xmlns= "http://www.w3.org/ 1999/xhtml">
<หัว>
    <ชื่อเรื่อง>ทดสอบ QuizUtil Qunit</ชื่อเรื่อง>
    <การเชื่อมโยง rel= "สไตล์" href="../CSS/qunit-1.13.0.css" />
    <สคริปต์ ชนิด= "ข้อ ความ/javascript" src="QuizUtil.js" ครอบคลุมข้อมูล></สคริปต์>
    <สคริปต์ชนิด ="ข้อ ความ/javascript" src ="qunit-1.13.0.js"></สคริปต์>
    <สคริปต์ชนิด ="ข้อ ความ/javascript" src ="blanket.min.js"></สคริปต์>

    <สคริปต์>
        โมดูล("getIDFromLookup");
        ทดสอบ("QuizUtil getIDFromLookupField", ฟังก์ชัน () {
            var goodValue = "1;#Paul Galvin";

            เท่ากับ(getIDFromLookupField(goodValue) + 1, 2), "ID ของ [" + goodValue + "] + 1 ควรมี 2";
            เท่ากับ(getIDFromLookupField(ยังไม่ได้กำหนด), ยังไม่ได้กำหนด, "อาร์กิวเมนต์ป้อนเข้าไม่ควรส่งคืนผลลัพธ์ไม่");
            เท่ากับ(getIDFromLookupField(""), ยังไม่ได้กำหนด, "ป้อนอาร์กิวเมนต์ว่างควรคืนค่าไม่");
            เท่ากับ(getIDFromLookupField("gobbledigood3 thq;เอ dkvn;skfja sdjfbvubvqrubqer0873407t534piutheqw;วีเอ็น"), ยังไม่ได้กำหนด,"ควรเสมอกลับแปลงผลลัพธ์เป็นจำนวนเต็ม");
            เท่ากับ(getIDFromLookupField("2;#บางคน"), "2", "ตรวจสอบ [2;#บางคน].");
            เท่ากับ(getIDFromLookupField("9834524;#ค่าแบบยาว"), "9834524", "การทดสอบค่าขนาดใหญ่");
            notEqual(getIDFromLookupField("5;#ใครก็ได้", 6), 6, "NotEqual การทดสอบ (5 ไม่เท่ากับ 6 สำหรับตัวอย่างนี้: [5;#ใครก็ได้]");

        });

        โมดูล("htmlEscape");
        ทดสอบ("QuizUtil htmlEscape()", ฟังก์ชัน () {
            เท่ากับ(htmlEscape("<"), "&lt;", "น้อยกว่าการดำเนินการหลบหนี ('<')");
            เท่ากับ(htmlEscape("<คลาส div =  "someclass">ข้อความบางอย่าง</div>"), "&lt;div คลา =&quot;someclass&quot;&gt;ข้อความบางอย่าง&lt;/div&gt;", "ซับซ้อนทดสอบสตริการ");
        });

        โมดูล("getDateAsCaml");
        ทดสอบ("QuizUtil getDateAsCaml()", ฟังก์ชัน () {
            เท่ากับ(getDateAsCaml(ใหม่ วัน("12/31/2013")), "2013-12-31T:00:00:00", "วันหนักรหัสการทดสอบ: [12/31/2013]");
            เท่ากับ(getDateAsCaml(ใหม่ วัน("01/05/2014")), "2014-01-05T:00:00:00", "วันหนักรหัสการทดสอบ: [01/05/2014]");
            เท่ากับ(getDateAsCaml(ใหม่ วัน("01/31/2014")), "2014-01-31T:00:00:00", "วันหนักรหัสการทดสอบ: [01/31/2014]");
            เท่ากับ(getTodayAsCaml(), getDateAsCaml(ใหม่ วัน()), "getTodayAsCaml() ควรเท่ากับ getDateAsCaml(วันใหม่())");
            เท่ากับ(getDateAsCaml("เหลวไหลค่า"), ยังไม่ได้กำหนด, "ลองไปวันที่ของเหลวไหลค่า");
            เท่ากับ(getDateAsCaml(ยังไม่ได้กำหนด), ยังไม่ได้กำหนด, "ลองดูวันที่ของการ [ยังไม่ได้กำหนด] วัน");
        });

        โมดูล("getParameterByName");
        ทดสอบ("QuizUtil getParameterByName (จากสายอักขระแบบสอบถาม)", ฟังก์ชัน () {
            เท่ากับ(getParameterByName(ยังไม่ได้กำหนด), ยังไม่ได้กำหนด, "พยายามพารามิเตอร์ไม่ควรกลับไม่");
            เท่ากับ(getParameterByName("ไม่มีอยู่"), ยังไม่ได้กำหนด, "ลองรับค่าพารามิเตอร์เมื่อเรารู้ว่า ไม่มีพารามิเตอร์");

        });

        โมดูล("คุกกี้");
        ทดสอบ(" QuizUtil คุกกี้ฟังก์ชันต่าง ๆ", ฟังก์ชัน () {
            เท่ากับ(setCookie("การทดสอบ", "1", -1), getCookieValue("การทดสอบ"), "คุกกี้ฉันตั้งรับควรทำงาน");
            เท่ากับ(setCookie("anycookie", "1", -1), จริง, "การทำอาหารถูกต้องควรกลับ 'จริง'");
            เท่ากับ(setCookie("ชื่อคุกกี้บ้า !@#$%"%\^&*(()?/><.,", "1", -1), จริง, "การตั้งชื่อดีคุกกี้ควรกลับ 'เท็จ'");
            เท่ากับ(setCookie(ยังไม่ได้กำหนด, "1", -1), ยังไม่ได้กำหนด, "ช่วยไม่ได้กำหนดเป็นชื่อคุกกี้");
            เท่ากับ(getCookieValue("ไม่มีอยู่"), "", "คุกกี้ไม่มีทดสอบ");
        });

    </สคริปต์>
</หัว>
<เนื้อความ>
    <div รหัส= "qunit"></div>
    <div รหัส= "แข่ง qunit"></div>

</เนื้อความ>
</html>

มีหลายสิ่งที่เกิดขึ้นที่นี่:

  1. การอ้างอิงรหัสของฉัน (QuizUtil.js)
  2. อ้างอิง Qunity.js
  3. กำหนดโมดูบาง (getIDFromLookup, คุกกี้, และผู้อื่น)
  4. วางเป็น <div> มีรหัสเป็น "qunit".

แล้ว, ผมดึงขึ้นหน้านี้ และคุณได้รับเช่นนี้:

image

รูป 3

ถ้าคุณมองข้ามด้านบน, คุณมีตัวเลือกน้อย, สองซึ่งเป็นที่น่าสนใจ:

  • ซ่อนที่ผ่านการทดสอบ: สวยชัดเจน  สามารถช่วยให้ตาของคุณจะเห็นพื้นที่ที่มีปัญหาและไม่มีความไม่เป็นระเบียบ.
  • โมดูล: (แบบหล่นลง): นี้จะกรองการทดสอบไปยังกลุ่มผู้ทดสอบต้อง.

สำหรับการทดสอบตัวเอง – ความเห็นไม่กี่:

  • มันไปโดยไม่บอกว่า คุณต้องเขียนรหัสของคุณจะอยู่ testable แรก  ใช้เครื่องมือช่วยบังคับวินัยนั้น. สำหรับอินสแตนซ์, มีฟังก์ชันเรียกว่า "getTodayAsCaml()”.  นี้ไม่ testable มากเนื่องจากมันจะไม่มีอาร์กิวเมนต์ป้อนเข้า และทดสอบสำหรับความเสมอภาค, เราจะต้องปรับปรุงรหัสทดสอบเพื่อแสดงวันปัจจุบันอย่างต่อเนื่อง  ผม refactored โดยการเพิ่มพารามิเตอร์สำหรับการป้อนค่าข้อมูล แล้วช่วยไว้เมื่อต้องวันนี้ในรูปแบบ CAML.
  • กรอบ Qunit เอกสารทดสอบตัวเอง และดูเหมือนว่าแข็งแรงสวย  มันสามารถทำสิ่งต่าง ๆ อย่างเช่นทดสอบความเท่าเทียมกัน และยัง มีการสนับสนุนสำหรับเรียกสไตล์อาแจ็กซ์ ("จริง" หรือ mocked โดยใช้ mocker ของคุณชื่นชอบ).
  • ไปผ่านกระบวนการยังบังคับให้คุณต้องคิดถึงขอบกรณี – สิ่งที่เกิดขึ้นกับ "ไม่" หรือเป็นการส่งผ่าน null เป็นฟังก์ชัน  มันทำให้ตายได้อย่างง่าย ๆ เพื่อทดสอบสถานการณ์เหล่านี้ออก  สิ่งที่ดี.

ความครอบคลุมกับ Blanket.js

Blanket.js เพิ่ม Qunit โดยการติดตามบรรทัดจริงของรหัสที่ดำเนินการในระหว่างการรันการทดสอบของคุณ  มันรวมขวาเป็น Qunit ดังนั้นแม้เป็น app แยกต่างหากทั้งหมด, มันเล่นดี – จริง ๆ เหมือนเป็น app หนึ่งจำแนก.

นี่คือ blanket.js ในการดำเนินการ:

image รูป 4

image

รูป 5

(คุณจะต้องคลิกที่กล่องกาเครื่องหมาย "ให้ครอบคลุม" ที่ด้านบน [ดูรูป 3] การเปิดใช้งานนี้)

รายการเน้นในรูป 5 ได้ดำเนินการ โดยมีการทดสอบของฉันไม่, เพื่อต้องการทดสอบที่ทำให้พวกเขาดำเนินการถ้าต้องการความคุ้มครองเต็ม ประดิษฐ์.

รับ blanket.js ทำงานตามขั้นตอนเหล่านี้:

  1. ดาวน์โหลดได้จาก http://blanketjs.org/.
  2. เพิ่มลงในโครงการของคุณ
  3. ปรับปรุงหน้าเทียมทดสอบ (QuizUtil_test.html ในกรณีของฉัน) ดังนี้:
    1. รหัสอ้างอิง
    2. ตกแต่งของคุณ <สคริปต์> อ้างอิงดังนี้:
    <สคริปต์ ชนิด= "ข้อ ความ/javascript" src="QuizUtil.js" ครอบคลุมข้อมูล></สคริปต์>

Blanket.js รับค่าแอตทริบิวต์ "ข้อมูลปก" และไม่วิเศษของ  มันไม้เป็น Qunit, ปรับปรุง UI เพื่อเพิ่มตัวเลือก "เปิดใช้งานความคุ้มครอง" และ voila!

สรุป (TL; DR)

Qunit ใช้เขียนกรณีทดสอบของคุณ.

  • ดาวน์โหลด
  • เพิ่มลงในโครงการของคุณ
  • เขียนหน้าเทียมทดสอบ
  • สร้างการทดสอบของคุณ
    • Refactor บางส่วนของรหัสจะ testable
    • มีความคิดสร้างสรรค์!  คิดถึงบ้า, สถานการณ์ที่เป็นไปไม่ได้ และทดสอบต่อไป.

ใช้ blanket.js เพื่อให้ครอบคลุม

  • แน่ใจ Qunit ทำงาน
  • ดาวน์โหลด blanket.js และเพิ่มลงในโครงการของคุณ
  • เพิ่มหน้าเทียมทดสอบ:
    • เพิ่มการอ้างอิงถึง blanket.js
    • เพิ่มแอตทริบิวต์ "ข้อมูลปก" เพื่อคุณ <สคริปต์> แท็ก
  • รันการทดสอบของ Qunit.

ฉันไม่ได้นี้ก่อน และมีบางสิ่ง rudimentary กำมือของชั่วโมงทำงาน 

ทดสอบความสุข!

</สิ้นสุด>

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

ทำตามฉันใน 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

ซ้อนกันไม่รู้จบ <div> แท็กและ jQuery

นี้ดูเหมือนว่าหัวข้อ oddball การดังกล่าว, ผมไม่แน่ใจว่าเป็นจริงคุ้มค่าบล็อกเกี่ยวกับ, แต่ที่ไม่เคยหยุดฉันก่อน, ดังนั้นที่นี่เราไป ยิ้ม

ฉันกำลังหาโครงการที่ผมกำลังดึงข้อมูลบางอย่างจากการค้นหา, ในที่สุดเปลี่ยนการบรรจุค่าเป็นข้อความ XML และ XML ที่เป็น HTML ผ่าน XSLT  มีจำนวนมากของ jQuery ที่เกี่ยวข้อง, หนึ่งบิตที่ใช้งาน tabbing  เมื่อคุณคลิกบนแท็บ (จริง ๆ, การ <div>), .hide เรียกใช้ jQuery() และ.show() บนว่า divs ต่าง ๆ (โหลดหน้าแรกดาวน์โหลดเนื้อหาทั้งหมดดังนั้นในกรณีนี้มี postbacks ไม่).

พวงของชั่วโมงที่ผ่านมา, แท็บสลับตรรกะเริ่มประพฤติผิด และมันจะไม่แสดงหนึ่งแท็บของฉัน  ในที่สุดติดตามมันลงจริงที่เทอร์ (น้อย) ความคิดที่จะ <div> แท็กซ้อนไกล, ไกลลึกกว่า intendedต้องแสดงแถบเครื่องมือนักพัฒนา:

-<รหัส div = "Tab1Content">
  -<div>
    -<div>
      -<รหัส div = "Tab2Content">
        -<div>
           …………………………
                   </div>  <ตัวสุดท้าย แสดงปิดทางลงที่นี่!

ดังนั้น, ถ้าฉันไม่มี $("#Tab1Content").ซ่อน(), ฉันจะซ่อน Tab2 และฉันอาจไม่เคยแสดง Tab2 ถ้าฉันไม่แสดง Tab1  ผมคัดลอก และวางรหัสค่าสตูดิโอภาพและเห็นซับของ div ค่าทั้งหมดอย่างดี, เหมือนพวกเขาควรจะทำ, มองเช่นนี้:

-<รหัส div = "Tab1Content">
  +<div>
  +<div>
-<รหัส div = "Tab2Content">
  +<div>
  +<div>

ฉันตีศีรษะกำแพงในขณะ และสังเกตเห็นว่า ใน HTML จริง รหัสถูกสร้างมากเปล่า <div> แท็ก, เช่น:

<เนื้อความ>

  <รหัส div = "Tab1Content">

    <รหัส div = "row1" />
    <รหัส div = "row2" />

  </div>

  <รหัส div = "Tab2Content">

    <รหัส div = "row1" />
    <รหัส div = "row2" />

  </div>

</เนื้อความ>

(ด้านบนมี oversimplified waaaaaaaaaaaay  แท็ก div เปล่าถูกทั้งหมด. บางอย่างของฉัน <div> แท็กเต็มไปด้วยเนื้อหา, แต่ไม่มาก  ผมมารับรู้ที่ที่ของฉัน <xsl:แต่สำหรับละ> คำสั่งถูกเปล่งแบบสั้น div แท็กเมื่อ xsl:ไม่ได้แต่สำหรับละ ' การค้นหาข้อมูลใด ๆ  ฉันบังคับคิดเป็น HTML ในการแสดงผล, ดังที่แสดง:

image

 

หลังจากไม่ได้ที่, ทั้งหมดของ div ตั้งเรียงรายอย่างสวยงาม และสลับแท็บของฉันเริ่มทำงาน.

เป็นเสมอ, ฉันหวังว่า นี้ช่วยให้คนในเหน็บแนม.

</สิ้นสุด>

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

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

สาเหตุหนึ่งสำหรับ "ผู้สร้างข้อบกพร่องนี้ไม่ได้ระบุเหตุผล”

ผมได้ทำมากของการทำงานกับการค้นหา SharePoint เมื่อเร็ว ๆ นี้และโดยเฉพาะคลา KeywordQuery, คุณสมบัติและวิธีการ.

ถ้าคุณต้องการผลลัพธ์ที่กำหนดให้ผลลัพธ์เหนือกว่าสงสัยปกติ (ดูที่นี่), เพิ่มชุด SelectedProperties, เช่นใน:

myKeywordQuery.SelectProperties.Add("xyzzy");

ขอบคุณมากมายและคำแนะนำของหาดใหญ่ไป Corey Roth และ โพสต์บล็อกเป็นประโยชน์มหาศาลนี้ (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

ในกรณีของฉัน, "xyzzy" ไม่จริงคุณสมบัติการจัดการ  เมื่อฉันเพิ่มมัน SelectedProperties ต่อไป, SharePoint โยนหนึ่งชื่นชอบเคยรันไทม์ข้อยกเว้น:

"ผู้สร้างข้อบกพร่องนี้ได้ระบุเหตุผล"

โดยเฉพาะอย่างยิ่งผมชอบทุน "R" ในเหตุผล  นี้คล้ายกับผมเหมือนกับ.NET การ"มีปากไม่มี, และฉันต้องร้อง.”

</สิ้นสุด>

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

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

สะดวกในการอ้างอิง: เริ่มต้นที่ผลลัพธ์จากการค้นหา KeywordQuery

เมื่อคุณเรียกใช้การดำเนินการ() วิธีการในการ KeywordQuery, คุณสามารถสร้าง ResultTable ตาม ResultType.RelevantResults  โค้ดนี้อธิบายไง:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

ตารางผลลัพธ์จะมีคอลัมน์ของข้อมูลต่อไปนี้: 

WorkId
อันดับ
ชื่อเรื่อง
ผู้เขียน
ขนาด
เส้นทาง
คำอธิบาย
เขียน
SiteName
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

ฉันได้มารายการนี้จากการ SharePoint 2010 สภาพแวดล้อม, องค์กรฉบับ  หวังว่ามันจะมีประโยชน์กับคนในอนาคต.

</สิ้นสุด>

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

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

เหตุผลหนึ่ง: "ไม่สามารถแยกไฟล์ cab ในโซลูชัน”

ในขณะที่ทำงานบน web part visual studio โครงการวันนี้, ฉันไม่ได้เป็นรองเรื่องสุดกล่องของแฟ้มบางแฟ้มจะใส่ลงในโฟลเดอร์ _layouts เป็นส่วนหนึ่งของกระบวนการปรับใช้. โดยเฉพาะอย่างยิ่ง, ฉันเปลี่ยนชื่อแฟ้มได้.js จาก "TypeAhead.js" "TypeAhead(เก่า).js"  ฉันจะลบออกทันทีที่ทำต่อของ "TypeAhead.js" พิสูจน์ความถูกต้อง  มันดูดังนี้:

image

นี้ทำให้เกิดปัญหา ด้วย visual studio ทันทีเมื่อฉันพยายามปรับใช้โครงการ:

เกิดข้อผิดพลาดในขั้นตอนการปรับใช้ 'เพิ่มโซลูชั่น': ล้มเหลวในการแยกไฟล์ cab ในโซลูชัน.

แต่มันไม่ชัดว่า คุณไม่ควรวางในวงเล็บในชื่อแฟ้ม  ฉันเอาออกการ parens และที่แก้ไขปัญหา.

</สิ้นสุด>

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

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