Danh mục lưu trữ: Phát triển SharePoint

HTTP 406 Lỗi khi sử dụng góc $http.get chống lại SharePoint còn lại điểm

Cập Nhật: Marc quảng cáo ndersson chỉ ra này mảnh lớn của thông tin: http://Blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-Released/. Điều đó giải thích rất nhiều :).

Đó có thể là tên tồi tệ nhất của một bài đăng blog bao giờ! Anyhoo.

Tôi thường làm tất cả của tôi prototyping chống lại một thể hiện O365. Tôi có trường hợp cá nhân của tôi để tôi không cần phải lo lắng về ảnh hưởng đến bất cứ ai khác. Là một sang một bên-nhớ khi chúng tôi gọi mang xung quanh máy ảo trên máy tính xách tay của chúng tôi với RÊU-SQL Server, IIS, quyết định Hyper-V vs. VMWare? Anyhoo...

Tôi đã phát triển một ứng dụng bằng cách sử dụng góc trong môi trường này nào, trong số những thứ khác, Điều này:

$http.Get(serverUrl)
.thành công(chức năng(dữ liệu, tình trạng, tiêu đề, cấu hình) {

var getLinksResponse = dữ liệu;

getLinksResponse.value.forEach(chức năng(theResult) {

// và như vậy và như vậy tuyển

Điều này đã làm việc tốt trong hai khác nhau SharePoint môi trường trực tuyến. Tuy nhiên, Khi đồng nghiệp của tôi chuyển nó đến một trường hợp Cloudshare, ông đã nhận được một HTTP 406 lỗi (đó là lần đầu tiên tôi đã bao giờ nhận rằng một trong những, Vì vậy... yay, Tôi đoán). Chúng tôi đã làm một chút về nghiên cứu và nhận thấy rằng các tiêu đề "Chấp nhận" đã tắt. SharePoint trực tuyến là hoàn toàn hài lòng với:

Chấp nhận: ứng dụng/json

Nhưng trường hợp cloudshare (đó là SP trên prem, được tổ chức trong một máy chủ ảo) muốn cổ điển "odata = tiết" được thêm vào trong là tốt:

Chấp nhận: ứng dụng/json;oData = tiết

Để sửa chữa đó, chúng tôi thêm các tiêu đề như vậy:

var config = {tiêu đề: {
'Chấp nhận': ' ứng dụng/json;oData = tiết '
}
};

$http.Get(serverUrl,cấu hình)
.thành công(chức năng(dữ liệu, tình trạng, tiêu đề, cấu hình) {

var getLinksResponse = dữ liệu;

getLinksResponse.value.forEach(chức năng(theResult) {

// và như vậy và như vậy tuyển

Mà đã thoát khỏi các 406, nhưng nó cũng thay đổi định dạng của các phản ứng. Nó đã nhiều... tiết. (haha!) Nhiều thay đổi được yêu cầu và đây là kết quả cuối cùng:

var config = {tiêu đề: {
'Chấp nhận': ' ứng dụng/json;oData = tiết '
}
};

$http.Get(serverUrl,cấu hình)
.thành công(chức năng(dữ liệu, tình trạng, tiêu đề, cấu hình) {

var getLinksResponse = dữ liệu;

getLinksResponse.d.results.forEach(chức năng(theResult) {

// và như vậy và như vậy tuyển

Điều này chỉ biến thành một 30 Các vấn đề phút cho chúng tôi, Vì vậy chúng tôi lucked. Hy vọng rằng ai đó tìm thấy điều này hữu ích.

</kết thúc>

Nâng cao nhận thức ngày càng tăng / Việc áp dụng các JavaScript framework

Đồng nghiệp của tôi, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), đã viết một bài ngắn tóm tắt blog trên ông thích hoặc ít đã sử dụng với với SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery dường như là người chiến thắng trên các lĩnh vực, Vì vậy, để nói chuyện, trong năm nay, nhưng những người khác thêm mới và ảnh tĩnh loại chiến đấu với nó, như mô men. (SPServices, Tất nhiên, có là một cuộc sống tiết kiệm trong nhiều năm qua và sẽ tiếp tục vì vậy tôi nghĩ rằng).

Người sử dụng những gì? Họ được tập trung hơn vào dây chuyền của Microsoft (CSOM / JSOM) hoặc di chuyển hơn đến góc, Loại trực tiếp, Ember, vv?

Tôi có một xu hướng ngày càng tăng đối với các khuôn khổ không phải của Microsoft. Tôi nghĩ rằng những thứ MSFT là khó khăn hơn và khó khăn hơn để làm việc với, yêu cầu gần như là nhiều đường cong học tập là kiểu cũ phía máy chủ dev.

Gửi bình luận ở đây hoặc qua tại Big Apple SharePoint Nếu bạn muốn thảo luận (Quả táo lớn sẽ có khả năng thêm một cuộc thảo luận tốt).

</kết thúc>

Quay SharePoint bộ đếm thời gian công việc từ cấu hình bộ sưu tập trang web

Đồng nghiệp của tôi, Ashish Patel, đã viết một bài đăng blog Mô tả một kiến trúc công việc linh hoạt giờ đó dành cho một số linh hoạt tốt đẹp để hỗ trợ dài chạy nhiệm vụ và/hoặc báo cáo.  Nói cách của mình:

1. Phân tích kiểm tra ra tập tin và gửi lời nhắc cho các cá nhân nếu số ngày (kể từ khi các tập tin đã được kiểm tra) vượt quá giới hạn ngưỡng nhất định

2. Loại bỏ liên kết từ các nội dung khác khi một nội dung cụ thể loại bỏ hoặc lưu trữ từ hệ thống

3. Người dùng muốn xem tất cả các cảnh báo ông đăng ký trong tất cả các website trong bộ sưu tập trang web

4. Gửi một lời nhắc nhở cho các tác giả xem lại nội dung khi một thời gian xem xét được chỉ ra trong nội dung và ngày tiếp cận

Vâng, danh sách đi về...

– Xem chi tiết tại: http://www.bigapplesharepoint.com/ trang/xem-An-Insight.aspx?BlogID=40#sthash.7cKuiwly.dpuf

Có những lần trong quá khứ của tôi khi có một cái gì đó như thế này sẽ có rất hữu ích.

</kết thúc>

Cách: Cấu hình thử nghiệm đơn vị và phạm vi bảo hiểm thử nghiệm với QUnit.js và Blanket.js cho một văn phòng 365 Ứng dụng SharePoint

Giới thiệu

Tôi đã khám phá đơn vị thử nghiệm và kiểm tra phạm vi bảo hiểm cho JavaScript như tôi làm việc trên một ứng dụng SharePoint mới cho SharePoint trực tuyến trong văn phòng 365 mật.  Đường dẫn rõ ràng nghiên cứu đã dẫn tôi để Qunit.js và ngay sau đó, để Blanket.js.

QUnit Hãy để tôi thiết lập đơn vị xét nghiệm và nhóm chúng thành mô-đun.  Một mô-đun là chỉ là một cách đơn giản để tổ chức liên quan đến các xét nghiệm. (Tôi không chắc chắn tôi đang sử dụng nó như dự định, nhưng nó làm việc cho tôi cho đến nay với các thiết lập nhỏ của tôi vậy, đến nay đã xác định các bài kiểm tra).

Blanket.js tích hợp với Qunit và nó sẽ chỉ cho tôi dòng JavaScript thực tế đã-và quan trọng hơn-đã không thực sự được thực hiện trong quá trình chạy các bài kiểm tra.  Đây là "bảo hiểm"-dòng mà thực hiện được bao phủ bởi các thử nghiệm trong khi những người khác không phải.

Giữa thiết lập tốt trường hợp kiểm tra và xem phạm vi bảo hiểm, chúng tôi có thể làm giảm nguy cơ rằng mã của chúng tôi đã che Khuyết tật.  Thời gian tốt đẹp.

Qunit

Giả sử bạn có Visual Studio của bạn dự án thiết lập, bắt đầu bằng cách tải về các gói dung JavaScript từ http://qunitjs.com.  Thêm JavaScript và CSS tương ứng để giải pháp của bạn.  Mỏ trông như thế này:

image

Con số 1

Như bạn có thể nhìn thấy, Tôi đã sử dụng 1.13.0 lúc đó tôi đã viết bài đăng blog. Đừng quên để tải về và thêm tập tin CSS.

Mà ra khỏi đường, bước tiếp theo là để tạo ra một số loại thử nghiệm khai thác và tham khảo các bit Qunit.  Tôi đang thử nghiệm một loạt các chức năng trong một tập tin kịch bản được gọi là "QuizUtil.js" do đó tôi tạo ra một trang HTML được gọi là "QuizUtil_test.html" như thể hiện:

image Con số 2

Đây là mã:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<đầu>
    <tiêu đề>QuizUtil thử nghiệm với Qunit</tiêu đề>
    <liên kết rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <kịch bản loại= text/javascript"" SRC="QuizUtil.js" dữ liệu-bao gồm></kịch bản>
    <kịch bản loại ="text/javascript" SRC ="qunit-1.13.0.js"></kịch bản>
    <kịch bản loại ="text/javascript" SRC ="blanket.min.js"></kịch bản>

    <kịch bản>
        Mô-đun("getIDFromLookup");
        kiểm tra("QuizUtil getIDFromLookupField", chức năng () {
            var goodValue = "1;#Paul Galvin";

            bình đẳng(getIDFromLookupField(goodValue) + 1, 2), "ID của [" + goodValue + "] + 1 nên là 2";
            bình đẳng(getIDFromLookupField(undefined), undefined, "Không xác định đối số đầu vào sẽ trả về kết quả không xác định.");
            bình đẳng(getIDFromLookupField(""), undefined, "Đối số đầu vào sản phẩm nào nên trở về một giá trị không xác định.");
            bình đẳng(getIDFromLookupField("gobbledigood3-thq;DKVN ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;vn"), undefined,"Nên luôn luôn trở về một kết quả chuyển đổi một số nguyên");
            bình đẳng(getIDFromLookupField("2;#một số người khác"), "2", "Kiểm tra [2;#một số người khác].");
            bình đẳng(getIDFromLookupField("9834524;#giá trị dài"), "9834524", "Giá trị lớn thử nghiệm.");
            notEqual(getIDFromLookupField("5;#bất cứ ai", 6), 6, "Thử nghiệm một notEqual (5 không phải là tương đương với 6 Đối với các mẫu này: [5;#bất cứ ai]");

        });

        Mô-đun("htmlEscape");
        kiểm tra("QuizUtil htmlEscape()", chức năng () {
            bình đẳng(htmlEscape("<"), "&LT;", "Thoát một ít hơn nhà điều hành ('<')");
            bình đẳng(htmlEscape("<div lớp =  "someclass">Một số văn bản</div>"), "&LT;div lớp =&quot;SomeClass&quot;&gt;Một số văn bản&LT;/div&gt;", "Phức tạp hơn kiểm tra chuỗi.");
        });

        Mô-đun("getDateAsCaml");
        kiểm tra("QuizUtil getDateAsCaml()", chức năng () {
            bình đẳng(getDateAsCaml(mới Ngày("12/31/2013")), "NĂM 2013-12-31T:00:00:00", "Thử nghiệm cứng mã hoá ngày: [12/31/2013]");
            bình đẳng(getDateAsCaml(mới Ngày("01/05/2014")), "2014-01-05T:00:00:00", "Thử nghiệm cứng mã hoá ngày: [01/05/2014]");
            bình đẳng(getDateAsCaml(mới Ngày("01/31/2014")), "2014-01-31T:00:00:00", "Thử nghiệm cứng mã hoá ngày: [01/31/2014]");
            bình đẳng(getTodayAsCaml(), getDateAsCaml(mới Ngày()), "getTodayAsCaml() nên bằng getDateAsCaml(Ngày mới())");
            bình đẳng(getDateAsCaml("giá trị vô nghĩa"), undefined, "Cố gắng để có được ngày một giá trị vô nghĩa.");
            bình đẳng(getDateAsCaml(undefined), undefined, "Cố gắng để có được ngày của các [undefined] ngày.");
        });

        Mô-đun("getParameterByName");
        kiểm tra("QuizUtil getParameterByName (từ chuỗi truy vấn)", chức năng () {
            bình đẳng(getParameterByName(undefined), undefined, "Cố gắng để có được không xác định tham số nên trở về không xác định.");
            bình đẳng(getParameterByName("không tồn tại"), undefined, "Cố gắng để có được giá trị tham số khi chúng tôi biết các tham số không tồn tại.");

        });

        Mô-đun("Cookie");
        kiểm tra("QuizUtil chức năng cookie khác nhau.", chức năng () {
            bình đẳng(setCookie("kiểm tra", "1", -1), getCookieValue("kiểm tra"), "Nhận được một cookie tôi thiết lập nên làm việc.");
            bình đẳng(setCookie("anycookie", "1", -1), sự thật, "Thiết lập một nấu ăn hợp lệ nên trở về 'đúng'.");
            bình đẳng(setCookie("tên điên cookie !@#$%"%\^&*(()?/><.,", "1", -1), sự thật, "Thiết lập một tên xấu cookie nên trở về 'giả'.");
            bình đẳng(setCookie(undefined, "1", -1), undefined, "Đi qua không xác định tên cookie.");
            bình đẳng(getCookieValue("không tồn tại"), "", "Cookie không có thử nghiệm.");
        });

    </kịch bản>
</đầu>
<cơ thể>
    <div ID= "qunit"></div>
    <div ID= "qunit-nhân vật"></div>

</cơ thể>
</HTML>

Có rất nhiều điều xảy ra ở đây:

  1. Tham khảo mã của tôi (QuizUtil.js)
  2. Tham khảo Qunity.js
  3. Xác định một số mô-đun (getIDFromLookup, Cookie, và những người khác)
  4. Đặt một <div> ID mà là "qunit".

Sau đó, Tôi chỉ kéo lên trang này và bạn nhận được một cái gì đó như thế này:

image

Con số 3

Nếu bạn nhìn trên đầu trang, bạn có một vài lựa chọn, hai trong số đó là thú vị:

  • Ẩn thông qua các bài kiểm tra: Khá rõ ràng.  Có thể giúp mắt của bạn chỉ nhìn thấy các khu vực vấn đề và không phải là nhiều lộn xộn.
  • Mô-đun: (thả): Điều này sẽ lọc các bài kiểm tra xuống chỉ những nhóm thử nghiệm bạn muốn.

Đối với các bài kiểm tra chính mình-một vài ý kiến:

  • Nó đi mà không nói rằng bạn cần phải viết mã của bạn như vậy mà nó là testable tại địa điểm đầu tiên.  Sử dụng công cụ có thể giúp thi hành mà kỷ luật. Ví dụ, Tôi đã có một chức năng gọi là "getTodayAsCaml()”.  Đây không phải là rất testable kể từ khi nó mất không có đối số đầu vào và để kiểm tra nó cho sự bình đẳng, chúng tôi sẽ cần phải liên tục cập nhật mã kiểm tra để phản ánh ngày hiện tại.  Tôi refactored nó bằng cách thêm một tham số đầu vào dữ liệu, sau đó đi qua ngày hiện tại khi tôi muốn ngày hôm nay trong định dạng CAML.
  • Tài liệu khuôn khổ Qunit thử nghiệm riêng của mình và có vẻ như khá mạnh mẽ.  Nó có thể làm những việc đơn giản như thử nghiệm cho sự bình đẳng và cũng đã hỗ trợ cho các cuộc gọi ajax phong cách (cả "thực" hay chế giễu bằng cách sử dụng mocker yêu thích của bạn).
  • Đi qua quá trình này cũng buộc bạn phải suy nghĩ thông qua cạnh trường hợp-những gì sẽ xảy ra với "không xác định" hoặc null được thông qua vào một chức năng.  Nó làm cho nó chết đơn giản để kiểm tra các kịch bản trong.  Công cụ tốt.

Bảo hiểm với Blanket.js

Blanket.js bổ sung cho Qunit bằng cách theo dõi các dòng mã thực tế thực hiện trong quá trình chạy thử nghiệm của bạn.  Nó tích hợp bên phải vào Qunit vì vậy, mặc dù nó là một ứng dụng hoàn toàn riêng biệt, nó chơi độc đáo-nó thực sự trông giống như nó là một ứng dụng liền mạch.

Đây là blanket.js trong hành động:

image Con số 4

image

Con số 5

(Bạn thực sự cần phải nhấp vào hộp kiểm "Bật bảo hiểm" ở phía trên [Xem hình 3] để cho phép điều này.)

Các dòng được đánh dấu trong hình 5 đã không được thực hiện bởi bất kỳ xét nghiệm của tôi, Vì vậy tôi cần phải đưa ra một thử nghiệm mà làm cho chúng để thực hiện nếu tôi muốn bảo hiểm đầy đủ.

Có được blanket.js làm việc bằng cách làm theo các bước sau:

  1. Tải xuống từ http://blanketjs.org/.
  2. Thêm nó vào dự án của bạn
  3. Cập nhật trang thử nghiệm khai thác (QuizUtil_test.html trong trường hợp của tôi) như sau:
    1. Tài liệu tham khảo mã
    2. Trang trí của bạn <kịch bản> tham khảo như thế này:
    <kịch bản loại= text/javascript"" SRC="QuizUtil.js" dữ liệu-bao gồm></kịch bản>

Blanket.js chọn lên các thuộc tính "dữ liệu-bao gồm" và không kỳ diệu của nó.  Nó móc vào Qunit, Cập Nhật giao diện người dùng để thêm tùy chọn "Bật bảo hiểm" và thì đấy!

Tóm tắt (TL; TIẾN SĨ)

Sử dụng Qunit để viết trường hợp thử nghiệm của bạn.

  • Tải về nó
  • Thêm nó vào dự án của bạn
  • Viết một trang kiểm tra khai thác
  • Tạo thử nghiệm của bạn
    • Refactor một số mã của bạn để được testable
    • Hãy sáng tạo!  Hãy suy nghĩ của điên, không thể kịch bản và thử nghiệm chúng anyway.

Sử dụng blanket.js để đảm bảo vùng phủ sóng

  • Đảm bảo rằng Qunit làm việc
  • Tải về blanket.js và thêm nó vào dự án của bạn
  • Thêm nó vào khai thác trang thử nghiệm:
    • Thêm một tham chiếu đến blanket.js
    • Thêm một thuộc tính "dữ liệu-bao gồm" của bạn <kịch bản> từ khóa
  • Chạy thử nghiệm Qunit của bạn.

Tôi không bao giờ đã làm bất kỳ những điều này trước khi và có một số công cụ thô sơ làm việc trong một vài giờ. 

Thử nghiệm hạnh phúc!

</kết thúc>

undefinedĐăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin

Lists.asmx, GetList và "giá trị không thể được null”

Tôi phát hiện ra ngày hôm nay rằng GetList() phương pháp trong lists.asmx Dịch vụ web đã được gọi là rất cẩn thận hoặc nó là dễ bị ném một bí ẩn "Giá trị hiện tại không thể được null" ngoại lệ (và đó giả sử bạn có thể vượt qua các thông báo lỗi chung tồi tệ hơn nữa, "Ngoại lệ của loại ' Microsoft.SharePoint.SoapServer.SoapServerException’ bị văng ra.")  Đặc biệt, Tôi thấy rằng bạn không thể cung cấp cho bất kỳ hình thức nào của tiền tố về phương pháp GetList.  Đoạn jQuery sau minh họa điểm:

image

Nếu bạn làm điều đó, Dịch vụ web đáp ứng với "Giá trị không thể được null" theo điều này Fiddler-cung cấp bảng điểm HTTP:

<?Phiên bản XML = "1.0" mã hóa = "utf-8"?>
  <xà phòng:Phong bì
     xmlns:xà phòng ="
http://schemas.xmlsoap.org/Soap/Envelope/"    
     xmlns:XSi = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns:xsd ="
http://www.w3.org/ 2001/XMLSchema">

  <xà phòng:Cơ thể>
    <xà phòng:Lỗi>
      <faultcode>xà phòng:Máy chủ</faultcode>
      <faultstring>
        Các ngoại lệ của loại ' Microsoft.SharePoint.SoapServer.SoapServerException’ ném.
      </faultstring>
      <chi tiết>
        <errorstring xmlns ="
http://schemas.Microsoft.com/SharePoint/Soap/">
Giá trị không thể được null.
        </errorstring>
      </chi tiết>
    </xà phòng:Lỗi>
  </xà phòng:Cơ thể>
</xà phòng:Phong bì>

Tất nhiên, bạn có lẽ sẽ không thêm tiền tố "s0" đó ngày của riêng bạn, nhưng một số công cụ có xu hướng để làm điều đó (như Eclipse).

Điều này là khó hiểu tất cả chi tiết / bực bội vì các phương pháp khác chịu đựng tiền tố.  Ví dụ, các GetListCollection phương pháp không quan tâm nếu nó được mục, ngay cả với vô nghĩa tiền tố như "xyzzy":

image

Điều này "giá trị hiện tại không thể được null" có vẻ khá phổ biến với lists.asmx để hy vọng điều này sẽ giúp đỡ người ra trong tương lai.

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin

Vô tận làm tổ <div> Tags và jQuery

Điều này có vẻ như một chủ đề oddball, I 'm not sure it's thực sự giá trị viết blog về, nhưng đó đã không bao giờ ngừng lại tôi trước khi, Vì vậy ở đây chúng tôi đi Nụ cười

Tôi đang làm việc một dự án mà tôi kéo một số dữ liệu từ một tìm kiếm, đóng gói nó vào thư XML và sau đó là XML mà cuối cùng được chuyển đổi thành HTML thông qua XSLT.  Đó là rất nhiều của jQuery tham gia, một chút trong đó thực hiện một số chức năng tabbing.  Khi bạn bấm vào một tab (Thực sự, một <div>), jQuery invokes .hide() và .show() trên các divs (tải ban đầu trang tải tất cả nội dung, do đó, có không có postbacks trong trường hợp này).

Một loạt các giờ trước đây, tab chuyển mạch logic bắt đầu cư xử erratically và nó sẽ không hiển thị một trong các tab của tôi.  Theo tôi cuối cùng dõi nó xuống đến một thực tế rằng internet explorer (tối thiểu) nghĩ rằng các <div> Tags lồng nhau đến nay, sâu xa hơn nhằm mục đích.Thanh công cụ phát triển sẽ hiển thị:

-<DIV id = "Tab1Content">
  -<div>
    -<div>
      -<DIV id = "Tab2Content">
        -<div>
           …………………………
                   </div>  <-cuối cùng Hiển thị nó đã được đóng cửa tất cả các cách xuống ở đây!

Vì vậy, Nếu tôi đã làm một $("#Tab1Content").ẩn(), Tôi cũng sẽ ẩn Tab2 và tôi không bao giờ có thể hiển thị Tab2 nếu tôi cũng không cho Tab1.  Tôi sao chép và dán mã vào visual studio và nó cho thấy tất cả các div lót lên độc đáo, cũng giống như họ đã nghĩa vụ phải thực hiện, Tìm kiếm như thế này:

-<DIV id = "Tab1Content">
  +<div>
  +<div>
-<DIV id = "Tab2Content">
  +<div>
  +<div>

Tôi đánh đập đầu của tôi vào tường cho một thời gian và nhận thấy rằng trong thực tế HTML mã tạo ra rất nhiều sản phẩm nào <div> Download, giống như:

<cơ thể>

  <DIV id = "Tab1Content">

    <DIV id = "row1" />
    <DIV id = "row2" />

  </div>

  <DIV id = "Tab2Content">

    <DIV id = "row1" />
    <DIV id = "row2" />

  </div>

</cơ thể>

(Ở trên là waaaaaaaaaaaay đơn giản.  Các thẻ div có sản phẩm nào là hoàn toàn hợp lệ. Một số của tôi <div> Tags được đầy đủ các nội dung, nhưng nhiều hơn nữa không.  Tôi đến việc thực hiện đó của tôi <XSL:cho mỗi> chỉ thị phát ra các hình thức ngắn div tags khi xsl:cho mỗi không ' tìm thấy bất kỳ dữ liệu.  Tôi buộc phải bình luận một HTML đầu ra, như được hiển thị:

image

 

Sau khi tôi đã làm điều đó, Tất cả div xếp độc đáo và chuyển đổi thẻ của tôi bắt đầu làm việc.

Như mọi khi, Tôi hy vọng điều này sẽ giúp một người nào đó trong một pinch.

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin

Một trong những nguyên nhân cho "tác giả của lỗi này không nêu rõ lý do.”

Tôi đã làm rất nhiều công việc với SharePoint tìm kiếm gần đây và đặc biệt là các lớp học KeywordQuery, tài sản và phương pháp.

Nếu bạn muốn kết quả thiết lập để trở lại kết quả ở trên và vượt the usual suspects (xem ở đây), bạn thêm nó vào bộ sưu tập SelectedProperties, như trong:

myKeywordQuery.SelectProperties.Add("xyzzy");

Cảm ơn rất nhiều và một tip của mũ để Corey Rothbài đăng này rất hữu ích blog (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

Trong trường hợp của tôi, "xyzzy" không phải là thực sự là một bất động sản được quản lý.  Khi tôi thêm nó vào SelectedProperties dù sao, SharePoint đã ném một trong những yêu thích của tôi bao giờ thời gian chạy ngoại lệ:

"Tác giả của lỗi này không nêu rõ lý do một."

Tôi đặc biệt thích vốn "R" trong lý do.  Điều này có vẻ với tôi tương đương .net"Tôi đã không có miệng, và tôi phải scream.”

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin

Tham khảo thuận tiện: Mặc định kết quả từ tìm kiếm KeywordQuery

Khi bạn gọi thi công() phương pháp trên một KeywordQuery, bạn có thể tạo ra một ResultTable dựa trên ResultType.RelevantResults.  Đoạn mã này minh họa những gì tôi có nghĩa là:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

Bảng kết quả sẽ có các cột sau thông tin: 

WorkId
Đánh giá
Tiêu đề
Tác giả
Kích thước
Đường dẫn
Mô tả
Viết
SiteName
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

Tôi xuất phát từ danh sách này từ một SharePoint 2010 môi trường, Phiên bản doanh nghiệp.  Hy vọng rằng nó sẽ được thuận tiện cho một ai đó trong tương lai.

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin

Một lý do cho: "Không thể giải nén các tệp cab trong dung dịch”

Trong khi làm việc trên một visual studio web phần dự án ngày hôm nay, Tôi đã làm một tái-org nhỏ của một số tập tin phải được đưa vào thư mục _layouts như là một phần của quá trình triển khai. Đặc biệt, Tôi đổi tên một tập tin .js từ "TypeAhead.js" để "TypeAhead(cũ).js"  Tôi định để loại bỏ nó ngay sau khi kế nhiệm của nó "TypeAhead.js" chứng minh chính xác.  Nó trông như thế này:

image

Điều này ngay lập tức gây ra một vấn đề với visual studio, khi tôi đã cố gắng để triển khai các dự án:

Lỗi xuất hiện trong triển khai bước 'Thêm giải pháp': Không thể giải nén các tệp cab trong dung dịch.

Nó chỉ ra rằng bạn không nên đặt một ngoặc đơn trong tên tập tin.  Tôi gỡ bỏ các parens và mà giải quyết được vấn đề.

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin