Làm thế nào để chỉ định người làm một phạm vi tìm kiếm / Nội dung nguồn bằng cách sử dụng SharePoint 2013 CÒN LẠI API

Tôi có lý do để làm việc với SharePoint 2013 Tìm kiếm API thông qua phần còn lại cho lần đầu tiên. Tôi muốn tìm kiếm cho người, không tài liệu. Các khóa học ở đây là bạn chỉ định nội dung nguồn thông qua GUID (hoặc ít trong trường hợp này). Hiện đoạn sau jQuery làm thế nào:

    loadExpertsAsync: chức năng() {

        jQuery.support.cors = sự thật;

        $.Ajax({
            URL: Điều này.CreateFullApiUrl() +
                "?querytext = 'cổng'&sourceid = 'b09a7990-05ea-4af9-81ef-edfab16c4e31'" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Kỹ năng,TiếngViệt,Lợi ích,JobTitle,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&rowlimit = 99",
            phương pháp: "NHẬN ĐƯỢC",
            tiêu đề: { "Chấp nhận": "ứng dụng/json; oData = tiết" },
            bộ nhớ cache: sai,
            thành công: chức năng (kết quả) {

Trong trường hợp của tôi, Tôi đang chạy API với SharePoint trực tuyến. Để có được GUID, Tôi theo các bước sau:

  1. Truy cập Trung tâm quản trị SharePoint
  2. Chọn "tìm kiếm" từ menu bên trái
  3. Chọn "quản lý kết quả nguồn"
  4. Chọn "Người dân địa phương kết quả"
  5. Nhìn vào URL.

URL của tôi nhìn một cái gì đó như:

https://xyzzy-admin.sharepoint.com/_layouts/15/searchadmin/EditResultSource.aspx?level=tenant&sourceid=b09a7990%2D05ea%2D4af9%2D81ef%2Dedfab16c4e31&view=1

Tham số sourceid là những gì làm việc cho tôi.

(Tôi hiểu rằng sourceid có thể thực sự là một loại điều vĩnh viễn với SP, nhưng tôi sẽ luôn kiểm tra 🙂 ).

</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

Ví dụ SharePoint còn lại cuộc gọi

Đây là một tập hợp các mẫu còn lại cuộc gọi mà làm việc cho tôi và có thể giúp bạn ra ngoài là tốt. Như là 02/2014, có hai ví dụ 🙂

  1. Tham khảo một cột với không gian tên
  2. Tài liệu tham khảo một đa chọn cột
  3. Thực hiện một người tìm kiếm thông qua phần còn lại

 

Tôi sẽ thêm vào này là vượt qua thời gian.

Dưới đây là một số loại mực hữu ích tôi đã tìm thấy là tốt:

Tham khảo một cột với không gian tên

Tôi tạo ra một danh sách tùy chỉnh với một cột tên là "Tác giả Blog" (không gian giữa Blog và tác giả).

$select để tham khảo các cột là:

image

Đơn giản chỉ cần thay thế không gian với "_x0020_". Chúng ta thấy _x0020_ trong nhiều ví dụ trên internets và phần còn lại cũng không khác nhau.

Nếu bạn không làm điều đó, bạn đang chịu trách nhiệm để có được một thông báo lỗi như thế này:

Biểu thức “Tác giả blog” là không hợp lệ.

Dễ dàng đủ.

Tài liệu tham khảo một tra cứu đa chọn cột

Thiết lập:

  1. Tạo một danh sách tùy chỉnh tên thể loại.
  2. Thêm một số loại. Tôi thêm vào thể loại thusly:image
  3. Tạo một danh sách tùy chỉnh được gọi là MockBlog và thêm thể loại như là một danh sách chọn-nhiều cột (hoặc trang web cột nếu đó là làm thế nào bạn cuộn).

Thêm một số mục vào danh sách Mockblog của bạn và bạn đã sẵn sàng.

Một cuộc gọi Ajax phong cách bằng cách sử dụng jQuery sẽ trông như thế này:

serverUrl = "/_api/web/danh sách/GetByTitle('MockBlog')/khoản mục" +
             "?$chọn = tiêu đề,Thể loại/tiêu đề,Blog_x0020_Author/tiêu đề" + 
             "&$mở rộng = Blog_x0020_Author,Thể loại";

Chúng tôi đang nói với SharePoint "cho tôi tiêu đề cho tất cả các loại (Thể loại/tiêu đề). Nhận được các giá trị thực tế cho Tiêu đề bởi $mở rộnging trong danh sách thể loại." (Paraphrasing yên tĩnh của tôi là có lẽ khá lỏng lẻo, nhưng điều này như thế nào tôi là thông dịch nó).

Nếu bạn đang làm điều này thông qua JavaScript và sử dụng Fiddler để nhìn vào đầu ra, bạn nhận được một cái gì đó như thế này trong trở lại:

 

image

(Trên đây là một đối tượng JSON)

Thực hiện một người tìm kiếm thông qua phần còn lại

Tôi viết blog về việc này một cách riêng biệt. Điều quan trọng là để chỉ định một tham số sourceid có giá trị là GUID của người dân địa phương nội dung nguồn. (Nội dung nguồn được sử dụng để được gọi là phạm vi và nó là của tôi-oh-của tôi khó khăn như vậy không phải gọi tất cả mọi thứ một phạm vi đối với tôi!).

Tìm hiểu thêm về nó ở đây: http://www.mstechblogs.com/paul/?p=10385

 

</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

Nhanh chóng và dễ dàng: Tạo một trang web SharePoint sử dụng còn lại

Có rất nhiều tài nguyên xung quanh thành phố cho thấy làm thế nào để làm điều này, nhưng tôi không thể tìm thấy một liên kết đi đến toàn diện, Vì vậy ở đây chúng tôi là.

Bạn có thể tạo ra một trang web SharePoint sử dụng API còn lại.  Đây là một ví dụ đầy đủ nướng:

<!--
    SiteRequestForm.html: Thu thập thông tin và tạo ra một trang web cho người dùng.
-->

<Trung tâm>
<Bàn>
    <tr>
        <TD>Tên trang web:</TD>
        <TD><đầu vào loại= "văn bản" Tên= "SiteName" ID= "SiteName" /></TD>
    </tr>
    <tr>
        <TD colSpan= "2">
            <đầu vào loại= "gửi" ID= "CreateSiteButton" giá trị= "Tạo các trang web" />
        </TD>
    </tr>
</Bàn>
</Trung tâm>

<kịch bản SRC="../Plugins/jQuery-1.11.0.min.js"></kịch bản>

<kịch bản>
var CreateSiteLogicContainer = {

    createSiteData: {
            "tham số": {
                __metadata: { "loại": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Tiêu đề: "Paultest1",
                Mô tả: "còn lại tạo ra web bởi Paul!",
                Ngôn ngữ: 1033,
                WebTemplate: "sts",
                UseUniquePermissions: sai
            }
    },

    createSite: chức năng () {

        jQuery.support.cors = sự thật;

        CreateSiteLogicContainer.createSiteData.parameters.Url = $("#SiteName").Val();
        
        $.Ajax({
            URL: "https://bigapplesharepoint.sharepoint.com/NBAIADev/_api/web/webinfos/add",
            phương pháp: "BÀI VIẾT",

            tiêu đề: {
                "Chấp nhận": "ứng dụng/json; oData = tiết",
                "content-type": "ứng dụng/json;oData = tiết",
                "X-RequestDigest": $("#__REQUESTDIGEST").Val()
            },

            dữ liệu: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            thành công: chức năng () { cảnh báo("thành công"); },
            lỗi: chức năng () { cảnh báo("lỗi"); }

        });
    },

    wireUpForm: chức năng () {
        $("#CreateSiteButton").Nhấp vào(chức năng () {
            cảnh báo("Về để thử và tạo ra các trang web.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</kịch bản>

Khi thành công, bạn nhận được một gói dữ liệu JSON trong phản ứng như thế này:

image

Chính những suy nghĩ của tôi và bài học từ này bao gồm:

  • Cách tiếp cận này sử dụng jQuery.  Trong trường hợp của tôi, thư viện jQuery của tôi nằm trong ".../ plugins. "  Bạn sẽ muốn thay đổi điều đó để trỏ đến vị trí JQ yêu thích của bạn.
  • Bạn có thể sao chép và dán đó toàn bộ đoạn thành một phần biên tập nội dung Web trên một trang và nó sẽ làm việc chỉ tốt.  Bạn sẽ muốn thay đổi điểm kết thúc của cuộc gọi API và đảm bảo rằng bạn tham khảo JQ một cách chính xác.
  • URL có liên quan điểm cuối của API của bạn.  Trong trường hợp của tôi, nó việc tạo ra các trang web phụ bên dưới https://bigapplesharepoint.com
  • Bạn không cần phải cung cấp nội dung dài. Một số bài đăng trên blog và MSDN tài liệu ngụ ý rằng bạn làm, nhưng đã xảy ra cho tôi tự động, mà tôi giả định đang được xử lý bởi các cuộc gọi .ajax $ chính nó.
  • Dòng này là cần thiết để tránh một phản ứng "Cấm": "X-RequestDigest": $("#__REQUESTDIGEST").Val().  Có những cách khác để làm điều đó, nhưng điều này là khá tốt đẹp.  Tôi đã mất liên kết vào blog đó cung cấp lối tắt này.  H/T để bạn, bí ẩn blogger!

Chúc may mắn và hy vọng điều này sẽ giúp người nào đó.

</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

Khắc phục các vấn đề khó chịu với URL tương đối trong SharePoint Quick Launch

Tôi muốn thêm một liên kết để chuyển hướng nhanh chóng khởi chạy ngày khác và SharePoint nói với tôi:

image

Phiên bản thuần văn bản đó là:

Đảm bảo rằng URL hợp lệ và bắt đầu với một nhân vật hợp lệ (một dấu hiệu số (#) hoặc dấu gạch chéo phía trước (/)) hoặc một giao thức được hỗ trợ hợp lệ (Ví dụ, ' http://’, ' https://’, ' tập tin://’, ' ftp://’, ' mailto:’, ' tin tức:’).

"Blech và thủy!"Tôi đã nói.

Giải pháp này là sử dụng JavaScript để tìm thấy một liên kết được biết đến trong khởi động nhanh chóng và thay thế chế độ của nó.

Để thử nghiệm này, Thêm một liên kết mới vào trang web thử nghiệm của bạn thusly:

image

Tôi đã sử dụng jQuery. Để giải quyết nó, nhận được một số JavaScript và jQuery lên trang bằng cách sử dụng kỹ thuật ưa thích của bạn và với một dòng mã như thế này:

 

$(tài liệu).sẵn sàng( chức năng () {

    $("một:chứa('Kiểm tra URL thay thế')").Nhấp vào(chức năng () { cảnh báo("nhấp vào thay đổi hành vi!"); trở lại sai;});

});

Và Bob của chú.

Bộ chọn jQuery tìm thấy mỗi <một> từ khóa có "Kiểm tra URL thay thế" trong tên của nó. Bạn có thể muốn tìm-giai điệu mà tùy thuộc vào liên kết của bạn và như vậy.

.click(chức năng() ghi đè lên bất cứ điều gì SharePoint đã có thể thực hiện khi người dùng nhấp vào. Đảm bảo rằng bạn trở lại"sai" hoặc người nào khác nó sẽ làm công cụ của bạn và sau đó cố gắng điều href quá, đó là gần như chắc chắn không phải là mục tiêu của bạn.

Điều này được thực hiện và thử nghiệm trong một môi trường trực tuyến SharePoint nhưng nên làm việc tốt trong 2010 và trước đó quá.

</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

Nhanh chóng và đơn giản: SharePoint còn lại gọi chỉ trả về 100 Hồ sơ

Tôi đã làm việc trên một trang web công cộng phải đối mặt với thực tế SharePoint của tôi ở đây trong New York và nó sử dụng rất nhiều cuộc gọi JavaScript và còn lại để hiển thị nội dung.

Trong những phát triển, Tôi tạo ra một tập dữ liệu nhỏ với chỉ 10 hoặc vì vậy hàng trong một danh sách tùy chỉnh và các cuộc gọi phần còn lại của tôi tất cả Lấy từ đó.  Một lần tôi bumped lên danh sách để có một số hàng trăm của dữ liệu để kiểm tra dự đoán tăng trưởng, Tôi thấy rằng tôi đã nhận được chính xác 100 hàng quay trở lại trên cuộc gọi phần còn lại của tôi.

Đây là một điều rất đơn giản để địa chỉ.  Trong trường hợp của tôi (và tôi tin rằng trong nhiều trường hợp), mặc định còn lại gọi cho SharePoint (và có thể là một ngành công nghiệp tiêu chuẩn?) trở lại 100 hàng.  Để trở lại nhiều hơn mặc định, sử dụng tham số $top trên cuộc gọi của bạn, như trong:

Nhận được /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/khoản mục?$chọn = ID,Tiêu đề,Thể loại/tiêu đề,Blog_x0020_Author/tiêu đề,DatePublished,BlogSummary&$mở rộng = Blog_x0020_Author,Thể loại&$bộ lọc =&$đầu = 9999

Tôi đã chọn 9999 trong trường hợp này kể từ khi tôi biết rằng growth-wise, sẽ không có nhiều hơn 200 hoặc vì vậy hàng thêm vào danh sách này trong một năm.  Nếu nó sẽ trở thành ungainly, chúng tôi có thể thực hiện một số phân trang xuống đường.

</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

Nhanh chóng và đơn giản: Giải quyết "tham số URL không hợp lệ” vấn đề với UpdateListItems trong lists.asmx

Khi làm việc với UpdateListItems qua lists.asmx, nó rất dễ dàng để tạo ra lỗi:

Tham số URL không hợp lệ.

URL được cung cấp có chứa một lệnh không hợp lệ hoặc giá trị. Xin vui lòng kiểm tra lại URL.

Bạn có thể nhận được lỗi này khi bạn quên bao gồm ID trong các danh sách các lĩnh vực để cập nhật.  Điều này, giống như rất nhiều các SP dịch vụ web, là một chút counterintuitive kể từ khi bạn cần bao gồm ID trong các thuộc tính ID của các <Phương pháp> nguyên tố.  Và Anh không Cập Nhật ID và có lẽ không bao giờ muốn để ở nơi đầu tiên.

Phong bì xà phòng này làm việc:

<soapenv:Phong bì xmlns:soapenv =' http://schemas.xmlsoap.org/Soap/Envelope/'>
  <soapenv:Cơ thể>                      
    <UpdateListItems xmlns =' http://schemas.Microsoft.com/SharePoint/SOAP/'>                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <bản Cập Nhật>                     
         <Hàng loạt các OnError ="Tiếp tục">
          <Phương pháp ID ="1" CMD ="Cập Nhật">
            <Lĩnh vực tên ="CooperativeLock">bị khóa!</Lĩnh vực>
            <Lĩnh vực tên ="ID">1</Lĩnh vực>
          </Phương pháp>
        </Lô>                     
        </bản Cập Nhật>                
      </UpdateListItems>             
  </soapenv:Cơ thể>         
</soapenv:Phong bì>

Nếu bạn loại bỏ tài liệu tham khảo trường ID sau đó bạn sẽ nhận được thông báo "URL không hợp lệ tham số" gây phiền nhiễu.

</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

 

Người nghèo của bộ nhớ đệm trong JavaScript

[TL;Phiên bản DR: sử dụng cookie để lưu trữ các kết quả của cuộc gọi async; Hiển thị các kết quả của quá khứ async cuộc gọi ngay lập tức và sau đó xác nhận họ sau khi tải trang.]

Tôi đã làm việc trên SharePoint intranet site cho một khách hàng tính năng đó, trong số những thứ khác, một hướng trung học cách điệu mà tùy chọn trình đơn được quản lý thông qua một danh sách tùy chỉnh cũ thường xuyên.  Ý tưởng là rằng khách hàng được để kiểm soát trình đơn "của họ" trang web mà không ảnh hưởng đến hoặc bị ảnh hưởng bởi việc chuyển hướng toàn cầu đặt của nó.

(đó là một cái gì đó vô cùng lật đổ về việc thêm một CEWP điểm vào một tập tin HTML mà tải một số CSS và JS để về cơ bản làm thay đổi gần như tất cả mọi thứ về hành vi của một trang web... nhưng đó là cho đăng bài khác)

Mã này khá đơn giản:

Ở đây tại chỗ đau là mà mỗi khi bất cứ ai chạm một trong các trang của trang web, trình duyệt web của người dùng đó đến để có được khoản mục khỏi danh sách.  Một khi dev được hoàn tất và thử nghiệm đã chứng minh những điều cần được ổn định và đầy đủ, cuộc gọi này là không cần thiết hơn 99% thời gian từ trình đơn hiếm khi thay đổi.  Nó cũng có một ảnh hưởng đến giao diện người dùng lạ mà là phổ biến trong thế giới mới dũng cảm này của các trang web siêu ajaxy-Hiển thị hình ảnh trang và trình đơn đưa ra chỉ sau đó.  Nó là hốt hoảng kinh hai và mất tập trung trong quan điểm của tôi.  Và hốt hoảng kinh hai. Vì vậy, bộ nhớ đệm. 

Tôi đổi logic thusly:

  • Tìm kiếm một cookie trong trình duyệt có chứa trình đơn như tôi cuối đọc nó
    • Nếu tìm thấy, khiến nó ngay lập tức.  Đừng chờ đợi cho trang để hoàn tất tải.  (Bạn cần phải đảm bảo rằng HTML của bạn chiến lược được đặt ở đây, nhưng nó không phải là khó khăn để làm).
  • Chờ đợi cho trang để hoàn tất tải và làm cho một async gọi để tải lên mục trình đơn từ một danh sách bằng cách sử dụng phần còn lại hoặc lists.asmx hoặc bất cứ điều gì
  • So sánh những gì tôi nhận chống lại cookie
    • Nếu nó phù hợp với, Dừng
    • Nếu không, bằng cách sử dụng jQuery, tự động điền một bó nếu <Li>của trong một <ul>
  • Sử dụng CSS để làm tất cả các định dạng
  • Lợi nhuận!

Một số bạn sẽ nói, "hey! có là không có xảy ra bộ nhớ đệm thực sự ở đây kể từ khi bạn đang đọc menu dù sao mỗi lần duy nhất.”  Và bạn nói đúng-tôi không cho các máy chủ bất kỳ hình thức nào của phá vỡ.  Nhưng vì cuộc gọi async và sẽ xảy ra sau khi trang đầu tiên tải trọng chiến đấu HTML đầy đủ ám, "thật" đáp ứng tốt hơn cho người dùng.  Menu ám khá nhiều càng tốt trang thu hút.  Nếu trình đơn sẽ xảy ra với sự thay đổi, người sử dụng phải chịu sự một hốt hoảng kinh hai tái vẽ của menu, nhưng chỉ một lần.

Có một số cách để làm cho bộ nhớ đệm này hiệu quả hơn và giúp đỡ các máy chủ cùng một lúc:

  • Đặt trong một quy tắc rằng bộ nhớ cache cookie"" có hiệu lực tối thiểu 24 giờ hoặc một số khung thời gian khác. Miễn là có không có cookie hết hạn, sử dụng các cookie của menu ảnh chụp và không bao giờ trúng các máy chủ.

Vâng... đó là tất cả những gì tôi suy nghĩ ngay bây giờ :). 

Nếu bất cứ ai có bất cứ ý tưởng thông minh ở đây tôi rất muốn biết họ.

Và cuối cùng-kỹ thuật này có thể được sử dụng cho các công cụ khác.  Điều này khách hàng trang có một số điều hướng dữ liệu trên nhiều trang, nhiều người trong số họ thay đổi tương đối hiếm khi (giống như một lần một tuần hoặc mỗi tháng một lần).  Nếu bạn nhắm mục tiêu các khu vực cụ thể của chức năng, bạn có thể cho một giao diện người dùng phản ứng nhanh hơn bằng cách kéo nội dung từ các cửa hàng địa phương cookie và rendering ngay lập tức.  Nó cảm thấy nhanh hơn để người sử dụng ngay cả khi bạn đang không cứu máy chủ bất kỳ chu kỳ.  Bạn có thể tiết kiệm các chu kỳ máy chủ bằng cách quyết định một số điều kiện và gây nên để làm mất hiệu lực bộ nhớ cache cookie địa phương này.  Đó là tất cả tình huống và artsy stuff và thực sự phần lớn vui :). 

</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

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

Phù hợp với cuối bạn sẽ bao giờ mặc?

[Nhanh chóng lưu ý-đây là một bài khá dài trên một công việc mở cho nhóm của tôi ở đây tại New York và bạn cần phải sống trong khu vực nhà nước tri nếu bạn quan tâm.]

Tôi đã tham gia tư vấn vượt chướng ngại vật trên 18 vài tháng trước đây và làm cho điều này công việc lâu dài dài nhất của tôi từ 2007. Tôi đã không kế hoạch nó như vậy. Trước khi một chuỗi của công việc nhảy mà bắt đầu với bước nhảy vọt của tôi vào thế giới SharePoint, Tôi đã ở một nơi cho mười một tuổi. Tôi cuối cùng đã tìm thấy một mới, chịu đựng nơi để làm việc cho haul dài ở đây tại vượt chướng ngại vật.

Nơi này là phát triển và tôi cần một số giúp đỡ để kiểm soát mà. Các loại trợ giúp tôi cần thường được gọi là một kiến trúc"giải pháp SharePoint" mặc dù tôi đã tìm thấy từ kiến trúc sư được và/hơn hoặc không chính xác dùng trong không gian SharePoint cho thời gian khá bây giờ. Tôi đã đấu tranh trên làm thế nào để blog về việc này. Tôi không muốn chỉ đơn giản là có thể liệt kê ra một bó bullet điểm phong cách Dice/quái vật. Đồng nghiệp tuyển dụng tuyệt vời của tôi đã thực hiện mà đã :). Vì vậy, Tôi quyết định đi một cách tiếp cận "day in the life". Đọc nó qua và xem xét:

1) Nếu nó kháng cáo và

2) Cho dù bạn biết trong xương của bạn rằng bạn có thể làm điều đó.

Nếu có, liên hệ với tôi (Paul.Galvin@Slalom.com) và chúng ta hãy nói chuyện.

Đây là những gì bạn có thể mong đợi để làm trong tuần/tháng điển hình như là một kiến trúc sư giải pháp vào đội của tôi:

  • Chạy các dự án, thường xuyên hơn một lúc một thời gian. Một số dự án lớn và như vậy bạn sẽ sở hữu một dự án. "Chạy" một dự án có nghĩa là bạn có giám sát và chịu trách nhiệm về chất lượng tổng thể của việc phân phối. Trong gần như mọi trường hợp, bạn sẽ có một chiều và một đội ngũ thực sự mạnh mẽ của nhà phát triển, BAs, UX người, vv., để hỗ trợ bạn. Nhưng bạn sẽ có mặt chính cho thấy khách hàng, tín thác, vv. Có là không có ẩn trong bóng tối trong vai trò này :). Bạn sẽ lập hoá đơn này thời gian và mục đích là để giữ cho bạn bận rộn, đủ để làm điều này 80 phần trăm thời gian.
  • Giúp với thủ tục giấy tờ-con lợn nái, RFPs, sàn-công cụ tất cả những gì tốt. Tôi nghĩ rằng chúng tôi có quy trình SOW xuống khá chặt chẽ và rắn do đó, nó là khá công thức. Nếu bạn đang sử dụng để viết con lợn nái ngày hôm nay, quá trình của chúng tôi sẽ không là một thách thức cho bạn. RFPs-đây là một chút khó khăn hơn. Họ có xu hướng được bespoke trong tự nhiên để bắt đầu với và RFPs thường kéo theo nhiều tác giả khác nhau. Nó là cả tốt và xấu, nhưng chủ yếu là tốt. Điều này có thể nhận được scrambly khi chúng ta cần phải sắp xếp cần thiết cho dịch vụ khách hàng tuyệt vời trong khi cũng cố gắng để giành chiến thắng mới làm việc. Bạn có lẽ sẽ không sở hữu một RFP nhưng bạn sẽ được yêu cầu đóng góp phần.
  • Bán hàng các cuộc gọi, nhưng không phải là một địa điểm gần nhất. Trong quá trình một tháng, bạn có thể mong đợi để đi vào một số các cuộc gọi bán hàng với nhóm bán hàng của chúng tôi. Bạn sẽ là DNN & v trong phòng, ghi chú và giúp hình thành các giải pháp. Tuy nhiên, bạn sẽ không được yêu cầu hoặc dự kiến sẽ xử lý chu kỳ bán hàng từ đầu đến cuối. Bạn không cần phải "bán,"bạn chỉ cần phải là nói bình tĩnh của các lý do chuyên môn tại Phòng. Điều này xây dựng lòng tin và sự tự tin và đó là lý do tại sao bạn đang có. Tất nhiên, Nếu bạn thích bán, sau đó có phòng để bạn có thể phát triển ở đây quá.
  • Giúp với việc tuyển dụng. Chúng tôi có một số loại chương trình giới thiệu, Vì vậy nếu bạn biết thực sự mạnh mẽ folks trong cộng đồng mà bạn nghĩ rằng nên là một phần của vượt chướng ngại vật, bạn có thể hưởng lợi như vậy. Chúng tôi đã dành riêng cho nhà tuyển dụng (Ai là tuyệt vời) để chia sẻ của sư tử của loại công việc. Sự giúp đỡ thực tế phỏng vấn ứng viên-họ đang thích hợp về văn hóa? Họ biết công cụ của họ? Họ có thể làm cho * tôi * cuộc sống dễ dàng hơn? 🙂 This comes in spurts, một vài lần một tháng, mặc dù trong một vài tháng bạn sẽ không làm điều đó ở tất cả.
  • Giúp xác định các thực tiễn tốt nhất, xây dựng IP của chúng tôi và làm cho chúng tôi cạnh tranh hơn trên thị trường. Bạn là một kinh nghiệm guy/gal. Bạn đã xung quanh các khối-không chỉ trong SharePoint, nhưng bạn có kinh nghiệm trong công nghệ khác và sống thông qua tốt và xấu (thậm chí còn khủng khiếp) Các dự án trên tất cả. Kết quả là, bạn biết những gì làm việc và những gì không. Chúng tôi sẽ muốn bạn để chia sẻ kinh nghiệm với chúng tôi trên một ngày để cơ sở ngày trong một cảm giác chiến thuật (tức là. chạy các dự án của bạn thực sự tốt) nhưng cũng chiến lược. "Thực hành tốt nhất" là một chút overused như là một thuật ngữ và tôi ngần ngại để sử dụng nó. Ý tưởng cơ bản là bạn đang đến như là một người có kinh nghiệm với kinh nghiệm sâu sắc và có liên quan và chúng tôi muốn tích hợp tốt nhất của bài học của bạn vào làm thế nào chúng tôi tham gia với các khách hàng trên cơ sở ngày này sang ngày.
  • Chúc vui vẻ -chúng tôi có một bó rất tích hợp. Tôi muốn tránh được một platitude, nhưng đó là thực sự apt trong trường hợp này-chúng tôi làm việc chăm chỉ (phân loại các) và chúng tôi chơi thậm chí khó khăn hơn :). Đó là một loại Aaron Sorkin banter ở đây, Phòng là luôn luôn đầy đủ của những người thông minh, chúng tôi thích uống của chúng tôi và chúng tôi tổ chức một số công bằng của thú vị sự kiện-phim đêm, chuyến đi bóng chày (ngay cả khi họ khủng khiếp, thực tế ác đội).

Nếu tôi có thể tóm tắt tất cả vào một từ, Tôi sẽ sử dụng từ "lãnh đạo." Dự án chì, có một vai trò dẫn đầu trong việc xây dựng ra các thực hành (IP, xây dựng đội), vv.

Nhưng chờ đợi! Có thêm! Tại sao khác làm việc tại vượt chướng ngại vật?

  • Đáng chú ý sự thống nhất của ý định-tất cả mọi người muốn phát triển điều này ra. "Điều này" là văn phòng New York. Tất cả mọi người là trên tàu với điều này.
  • Gió trong cột buồm của bạn-chị văn phòng, chị em thực hành-vượt chướng ngại vật là một "Dịch vụ đầy đủ" tư vấn tổ chức. Tôi dẫn thực hành SharePoint (một "thực hành khu vực chì" trong lingo vượt chướng ngại vật). Tôi có em gái thực hành tại 11 Các văn phòng vượt chướng ngại vật. Vì vậy ngay cả khi tôi là vua như xa như SharePoint là có liên quan ở đây tại Slalom New York, Tôi đã thực hành ngang ở Chicago, Seattle, Dallas, Atlanta, Boston, vv. từ đó tôi có thể rút ra sau khi hỗ trợ. Nó thực sự là tốt nhất của cả hai thế giới-quyền tự trị đáng kể ở đây ở New York nhưng truy cập vào tấn tài năng qua việc tổ chức.
  • Gió trong bán hàng của bạn (2) -Chúng tôi làm nhiều hơn SharePoint-nhiều hơn nữa. Chúng tôi làm BI, CRM, UX, tư vấn doanh nghiệp, Điện thoại di động, phát triển tùy chỉnh và những người khác. Chúng tôi đang tốt tại qua bán giữa chúng ta và chúng tôi đang tốt tại vẽ tranh- và quan trọng hơn, cung cấp theo-một hình ảnh "đầy đủ dịch vụ" cho khách hàng của chúng tôi. Đây là đặc biệt hấp dẫn với tôi. Tôi đã nhiều orgs nhỏ hơn, làm việc trên SharePoint biểu diễn và thất vọng hơn và hơn nữa bởi vì chúng tôi đã là các chim bồ câu đục lỗ như "SharePoint người." Điều đó không xảy ra với vượt chướng ngại vật và chúng tôi có thể làm công việc thú vị hơn như là một kết quả.
  • Mô hình địa phương-không có đi du lịch.
  • Sự tăng trưởng dài hạn-vượt chướng ngại vật đã đi gangbusters. Nhiều tăng trưởng và sự ổn định. Tốc độ tăng trưởng cũng có nghĩa là chúng tôi cần thuê các nhà lãnh đạo vào ngày hôm nay để đầu lên đội bóng mới như chúng tôi thêm nhiều khách hàng và nhân viên hỗ trợ với những khách hàng.

Tôi có thể đi vào, nhưng tôi đã có thể đã đi vào quá dài. Tôi nghĩ rằng tôi đã chiếm được tinh hoa ở đây. Nếu bạn đang suy nghĩ về việc thay đổi công việc và điều này sẽ tốt cho bạn, chúng ta hãy nói.

Nếu bạn đang hạnh phúc ở công việc hiện tại của bạn-hãy nói chuyện dù sao :). Tôi đã ở rất nhiều nơi và là rất "hạnh phúc". Vượt chướng ngại vật khác nhau và tôi sẽ chào đón một cơ hội để thuyết phục bạn về điều đó.

</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

Nhanh chóng và dễ dàng: Thiết lập kích thước của một mục trong một hộp danh sách trong một ứng dụng Windows cửa hàng

Trong một cửa sổ cửa hàng App tôi là tạo ra, Tôi muốn hiển thị cho người dùng các thông tin thư.  Tôi chọn một ListBox là công cụ để hiển thị nó như vậy rằng họ có thể di chuyển qua chúng và tất cả những gì tốt công cụ. 

Các tin nhắn được thông tin chỉ, do đó, không cần phải cung cấp tất cả những gì thêm khoảng trắng xung quanh kể từ khi người dùng có thể không bao giờ chọn chúng cho bất cứ điều gì.  Chế độ mặc định của ListBox cung cấp một số lượng đáng kể của padding và tôi muốn được thoát khỏi nó.  Vâng.... bạn không thể làm điều đó loại điều trên ListBox trực tiếp.  TUY NHIÊN, bạn có thể làm điều đó cho các mục bạn thêm:

        tư nhân void AddGameStateLogMessage(chuỗi theMessage)
        {
            TextBox t = mới Hộp văn bản();
            t.Text = GameStateCounter    + ": " + theMessage;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            Độ dày thisPadding = mới Độ dày(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ListBoxItem li = mới ListBoxItem();
            con số khôngNội dung = t;
            con số khôngMaxHeight = 25;
            thisPadding = mới Độ dày(5, 0, 5, 0);
            con số khôngĐệm = thisPadding;

            GameStateLog.Items.Insert(0,Li);
        }

trong các bên trên, Tôi tạo ra một hộp văn bản và thiết lập font, của nó padding, vv.

Tiếp theo, Tôi tạo ra một ListBoxItem và đặt nội dung của nó vào hộp văn bản định dạng.

Cuối cùng, Tôi chèn ListBoxItem thành ListBox.  (Tôi muốn hiển thị các thông điệp gần đây đặt ở đầu danh sách, do đó chèn(0,Li) thay vì một thêm đơn giản() invocation.).

Tôi sẽ tinh chỉnh này một chút trước khi tôi thực sự hài lòng với hành vi ListBox nhưng mô hình hiển thị ở trên đã rất hiệu quả.  Hy vọng rằng ai đó khác tìm thấy nó hữu ích.

</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