Bagaimana Untuk Tentukan Rakyat sebagai Skop Carian / Kandungan Sumber Menggunakan SharePoint 2013 REST API

Saya punya alasan untuk bekerja dengan SharePoint dalam 2013 Search API melalui rehat buat pertama kalinya. Saya ingin mencari orang-orang, dokumen tidak. Kekunci yang belajar di sini adalah bahawa anda tentukan kandungan sumber melalui GUID dalam (atau sekurang-kurangnya dalam kes ini). Menunjukkan cebisan jQuery berikut bagaimana:

    loadExpertsAsync: fungsi() {

        jQuery.support.cors = benar;

        $.Ajax({
            url: ini.CreateFullApiUrl() +
                "?querytext = 'Portal'&sourceid = 'b09a7990-05ea-4af9-81ef-edfab16c4e31'" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Kemahiran,AboutMe,Kepentingan,JobTitle,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&rowlimit = 99",
            kaedah: "MENDAPATKAN",
            header: { "Menerima": "Permohonan/json; odata = banyak cakap" },
            cache: palsu,
            kejayaan: fungsi (keputusan) {

Dalam kes saya,, Aku berlari API terhadap SharePoint dalam talian. Untuk mendapatkan GUID, Saya mengikuti langkah-langkah ini:

  1. Mencapai Pusat Tadbir SharePoint
  2. Pilih "carian" dari navigasi sebelah kiri
  3. Pilih "Urus sumber-sumber hasil"
  4. Pilih "Hasil penduduk tempatan"
  5. Lihatlah URL.

URL saya kelihatan seakan-akan:

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

Sourceid parameter adalah apa yang bekerja untuk saya.

(Saya faham bahawa sourceid yang benar-benar boleh menjadi sejenis benda yang kekal dengan SP, but I’ll always check anyway 🙂 ).

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

Panggilan Contoh SharePoint REST

Di sini adalah sekumpulan sampel lain panggilan yang bekerja untuk saya dan mungkin membantu anda serta. Sehingga 02/2014, there are two examples 🙂

  1. Rujukan medan dengan kawasan atas namanya
  2. Rujukan lajur pelbagai Pilih
  3. Melakukan carian orang melalui rehat

 

Saya akan menambah ini sebagai Pas masa.

Berikut adalah beberapa dakwat berguna yang saya dapati juga:

Rujukan medan dengan kawasan atas namanya

Saya mencipta senarai tersuai dengan satu kolum yang dinamakan "Penulis Blog" (Ruang di antara Blog dan penulis).

$select untuk rujukan medan yang merupakan:

image

Hanya menggantikan tempat dengan "_x0020_". Kita lihat _x0020_ dalam banyak contoh di seluruh Internet ini dan SELEBIHNYA adalah tidak berbeza.

Jika anda tidak berbuat demikian, anda bertanggungjawab untuk mendapatkan mesej ralat seperti ini:

Ungkapan “Penulis blog” adalah tidak sah.

Cukup mudah.

Rujukan lajur pelbagai Pilih Lookup

Sediakan:

  1. Mencipta senarai tersuai dinamakan kategori.
  2. Tambah beberapa kategori. Saya menambah kategori Ehwal:image
  3. Cipta senarai tersuai lain yang dipanggil MockBlog dan Tambah Kategori sebagai lajur pelbagai Pilih senarai (atau tapak tiang jika Itulah bagaimana anda menggulung).

Menambah beberapa item ke senarai Mockblog dan anda sudah bersedia.

Panggilan Ajax gaya yang menggunakan jQuery akan terlihat seperti ini:

serverUrl  = "/_api/web/senarai/GetByTitle('MockBlog')/barang-barang" +
             "?$Pilih Tajuk =,Kategori/tajuk,Blog_x0020_Author/tajuk" + 
             "&$mengembangkan = Blog_x0020_Author,Kategori";

Kami sudah memberitahu SharePoint "memberikan tajuk untuk semua kategori (Kategori/tajuk). Mendapatkan nilai sebenar bagi Title oleh $memperluaskanING dalam senarai kategori." (Saya tenang paraphrasing yang mungkin agak longgar, tetapi ini Bagaimana saya saya mentafsirkan).

Jika anda melakukan ini melalui JavaScript dan menggunakan Fiddler untuk melihat output, anda mendapat sesuatu seperti ini sebagai balasan:

 

image

(Di atas adalah objek JSON)

Melakukan carian orang melalui rehat

Saya blogged tentang perkara ini secara berasingan. Utama adalah untuk menentukan parameter sourceid nilai yang merupakan GUID sumber kandungan penduduk tempatan. (Kandungan sumber digunakan untuk dihubungi skop dan memang saya-oh-saya tidak begitu sukar untuk memanggil semua skop bagi saya!).

Baca lebih lanjut mengenai di sini: http://www.mstechblogs.com/paul/?p=10385

 

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

Pantas dan Mudah: Cipta Laman REST SharePoint Menggunakan

Terdapat banyak sumber sekitar menunjukkan bahawa cara untuk melakukan ini, tetapi saya tidak dapat mencari pautan go ke komprehensif, Jadi di sini kita akan.

Anda boleh mencipta tapak SharePoint menggunakan API lain.  Berikut adalah satu contoh yang dimasak sepenuhnya:

<!--
    SiteRequestForm.html: Mengumpul maklumat dan mencipta Laman web untuk pengguna.
-->

<pusat>
<jadual>
    <tr>
        <td>Nama tapak:</td>
        <td><input Jenis= "teks" Nama= "SiteName" id= "SiteName" /></td>
    </tr>
    <tr>
        <td colspan= "2">
            <input Jenis= "serah" id= "CreateSiteButton" nilai= "Mewujudkan laman web ini" />
        </td>
    </tr>
</jadual>
</pusat>

<skrip JPP=".. /Plugins/jQuery-1.11.0.min.js"></skrip>

<skrip>
VAR CreateSiteLogicContainer = {

    createSiteData: {
            "parameter": {
                __metadata: { "jenis": "SP. WebInfoCreationInformation" },
                URL: "Paultest1",
                Title: "Paultest1",
                Penerangan: "rehat-dicipta web oleh Paul!",
                Bahasa: 1033,
                WebTemplate: "sts",
                UseUniquePermissions: palsu
            }
    },

    createSite: fungsi () {

        jQuery.support.cors = benar;

        CreateSiteLogicContainer.createSiteData.parameters.Url = $("#SiteName").val();
        
        $.Ajax({
            url: "https://bigapplesharepoint.sharepoint.com/NBAIADev/_api/web/webinfos/add",
            kaedah: "POST",

            header: {
                "Menerima": "permohonan/json; odata = banyak cakap",
                "content-type": "permohonan/json;odata = banyak cakap",
                "X-RequestDigest": $("#__REQUESTDIGEST").val()
            },

            data: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            kejayaan: fungsi () { berjaga-jaga("kejayaan"); },
            kesilapan: fungsi () { berjaga-jaga("Ralat"); }

        });
    },

    wireUpForm: fungsi () {
        $("#CreateSiteButton").klik(fungsi () {
            berjaga-jaga("Kira-kira untuk mencuba dan mewujudkan laman web ini.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</skrip>

Apabila berjaya, anda akan mendapat satu paket JSON dalam jawapan seperti ini:

image

Utama pemikiran dan learnings daripada ini termasuk saya:

  • Pendekatan ini menggunakan jQuery.  Dalam kes saya,, Pustaka jQuery terletak di "... / plugin. "  Anda akan mahu ubah hakikat itu untuk menghala ke lokasi JQ kegemaran anda.
  • Anda boleh menyalin dan menampal cebisan itu turun ke bahagian Web Editor kandungan di halaman dan ia harus bekerja saja.  Anda akan mahu untuk mengubah titik tamat panggilan API dan pastikan anda rujukan JQ dengan betul.
  • URL adalah berbanding dengan titik tamat API anda.  Dalam kes saya,, Ia mewujudkan sub tapak di bawahnya https://bigapplesharepoint.com
  • Anda tidak perlu menyediakan kandungan-panjang. Beberapa posting blog dan MSDN dokumen membayangkan yang anda lakukan, tetapi berlaku untuk saya secara automatik, yang saya anggap sebagai dikendalikan oleh panggilan .ajax $ sendiri.
  • Talian ini diperlukan untuk mengelakkan jawapan "haram": "X-RequestDigest": $("#__REQUESTDIGEST").val().  Terdapat pelbagai cara untuk melakukannya, tetapi ini adalah cukup bagus.  Saya telah kehilangan link ke blog yang diberikan pintasan ini.  H/T kepada anda, blogger misteri!

Nasib baik dan harap ini membantu seseorang.

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

Mengatasi Masalah Annoying dengan Url relatif dalam SharePoint Pelancaran Pantas

Saya ingin menambah link ke pelancaran quick navigasi haritu dan SharePoint memberitahu saya:

image

Versi teks murni itu:

Memastikan bahawa URL adalah sah dan bermula dengan sama ada bersifat sah (tanda nombor (#) atau garis condong hadapan (/)) atau sah disokong protokol (contohnya, ' http://', ' https://', ' fail://', ' ftp://', ' mailto:', ' berita:').

"Blech dan pox!"Saya berkata.

Workaround ini adalah dengan menggunakan JavaScript untuk mencari pautan dikenali pelancaran quick dan menulis ganti kelakuan yang.

Untuk ujian ini, Tambah pautan baru ke laman web anda ujian Ehwal:

image

Saya menggunakan jQuery. Untuk menyelesaikannya, mendapatkan beberapa JavaScript dan jQuery ke halaman menggunakan teknik kegemaran anda dan dengan baris kod seperti ini:

 

$(dokumen).bersedia( fungsi () {

    $("1:mengandungi('Ujian penggantian URL')").klik(fungsi () { berjaga-jaga("tingkah laku berubah klik!"); kembali palsu;});

});

Dan Bob bapa saudara anda.

PEMILIH jQuery mendapati setiap <1> tag yang mempunyai "URL ujian penggantian" pada namanya. Anda mungkin mahu mencari-tune yang bergantung kepada anda link dan apa-apa.

.Click dalam(fungsi() menindih apa SharePoint akan peroleh apabila pengguna klik. Pastikan anda "kembali palsu" atau kalau ia akan melakukan hal anda dan kemudian cuba untuk perkara href yang terlalu, yang sudah hampir pasti bukan matlamat anda.

Ini telah dilakukan dan ujian dalam persekitaran SharePoint dalam talian tetapi sekiranya kerja baik di 2010 dan lebih awal terlalu.

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

Cepat mudah dan: SharePoint REST Call Pulangan Hanya 100 Rekod

Saya telah bekerja pada laman web awam menghadapi untuk SharePoint amalan saya di sini dalam New York dan ia menggunakan banyak panggilan JavaScript dan SELEBIHNYA untuk menunjukkan kandungan.

Semasa pembangunan tali tambahan gelung kekili, Saya mencipta dataset kecil dengan hanya 10 atau jadi baris dalam senarai tersuai dan panggilan rehat saya semua ditarik dari situ.  Pernah saya terserempak sehingga senarai untuk mempunyai beberapa ratus baris data untuk menguji jangkaan pertumbuhan, Saya mendapati bahawa saya mendapat betul-betul 100 baris yang kembali semula pada panggilan rehat saya.

Ini adalah satu perkara yang sangat mudah untuk alamat.  Dalam kes saya, (dan saya percaya dalam kebanyakan kes), panggilan lain lalai untuk SharePoint (dan mungkin sebagai satu standard industri?) kembali 100 baris.  Untuk kembali lebih daripada lalai, Gunakan $top parameter pada panggilan anda, seperti dalam:

MENDAPAT /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/barang-barang?$pilih = ID,Title,Kategori/tajuk,Blog_x0020_Author/tajuk,DatePublished,BlogSummary&$mengembangkan = Blog_x0020_Author,Kategori&$penapis =&$atas = 9999

Saya memilih 9999 dalam kes ini kerana saya tahu bahawa growth-wise, tidak akan lebih daripada 200 atau jadi baris ditambah ke senarai ini dalam setahun.  Jika ia menjadi ungainly, kita boleh melaksanakan penghalaman beberapa hujung jalan.

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

Cepat mudah dan: Menyelesaikan "Parameter URL tidak sah” masalah dengan UpdateListItems dalam lists.asmx

Apabila bekerja dengan UpdateListItems melalui lists.asmx, sangat mudah untuk menjana Ralatnya:

Parameter URL tidak sah.

URL yang diberikan mengandungi perintah yang tidak sah atau nilai. Sila semak URL lagi.

Anda boleh mendapat ralat ini apabila anda terlupa untuk memasukkan ID dalam dalam senarai bidang-bidang untuk mengemaskini.  Ini, seperti banyak perkhidmatan web-SP, adalah agak berlawanan kerana anda perlu memasukkan ID dalam atribut ID daripada pihak <Kaedah> elemen.  Dan anda tidak dikemaskini ID dan mungkin tidak mahu di tempat pertama.

Kerja-kerja sampul surat SABUN ini:

<soapenv:Xmlns sampul surat:soapenv =' http://schemas.xmlsoap.org/SOAP/envelope/'>
  <soapenv:Badan>                      
    <UpdateListItems xmlns =' http://schemas.Microsoft.com/SharePoint/SOAP/'>                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <Kemas kini>                     
         <Kumpulan OnError ="Teruskan">
          <Kaedah ID ="1" Cmd ="Kemas kini">
            <Medan nama ="CooperativeLock">dikunci!</Bidang>
            <Medan nama ="ID">1</Bidang>
          </Kaedah>
        </Kelompok>                     
        </Kemas kini>                
      </UpdateListItems>             
  </soapenv:Badan>         
</soapenv:Sampul surat>

Jika anda jalur Keluar ID bidang rujukan maka anda akan mendapat mesej "URL tidak sah parameter" menyakitkan hati.

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

 

Caching Man Poor dalam JavaScript

[TL;DR versi: menggunakan cookies untuk menyimpan keputusan panggilan async; menyebabkan keputusan lepas async panggilan dengan serta-merta dan kemudian mengesahkan mereka selepas Laman-load.]

Saya telah bekerja pada tapak SharePoint intranet untuk pelanggan yang mempunyai, antara lain, pelayaran sekunder stylized opsyen menu yang diuruskan melalui senarai tersuai lama tetap.  Ideanya adalah bahawa pelanggan mendapat untuk mengawal menu Laman "mereka" tanpa mempengaruhi atau dipengaruhi oleh navigation global yang menghulurkan olehnya.

(ada sesuatu yang sangat subversif tentang menambah CEWP yang menghala ke fail HTML yang memuatkan beberapa CSS dan JS pada asasnya mengubah hampir segala-galanya mengenai kelakuan tapak... tapi itu untuk jawatan lain)

Kod ini sederhana cantik:

Di sini tempat yang sakit adalah bahawa setiap kali sesiapa terkena salah satu muka surat Laman web ini, pelayar web pengguna itu mendekati untuk mendapatkan item dari senarai.  Sebaik sahaja dev adalah lengkap dan ujian telah terbukti semuanya menjadi stabil dan lengkap, panggilan ini adalah tidak perlu lebih daripada 99% masa kerana menu yang jarang berubah.  Ia juga telah mempengaruhi UI pelik yang biasa dalam dunia baru berani ini laman web hyper-ajaxy – membuat halaman dan barulah tidak menu menyebabkan.  Ia adalah jittery dan mengganggu dalam pandangan saya.  Dan jittery. Jadi, cache. 

Saya kali logik Ehwal:

  • Mencari kuki dalam penyemak imbas yang mengandungi menu seperti aku terakhir membaca ia
    • Jika didapati, menyebabkan ia dengan serta-merta.  Jangan tunggu untuk laman untuk memuatkan selesai.  (Anda perlu pastikan anda HTML strategik diletakkan di sini, tetapi ia tidak sukar untuk dilakukan).
  • Tunggu sehingga halaman selesai loading dan membuat async untuk hubungi untuk memuatkan semua item menu daripada senarai menggunakan rehat atau lists.asmx atau apa-apa
  • Bandingkan apa yang saya dapat menentang cookie
    • Jika ia sepadan, BERHENTI
    • Jika tidak, menggunakan jQuery, dinamik penduduk sekumpulan jika <li>di dalam sebuah <st>
  • Menggunakan CSS untuk melakukan semua format
  • Keuntungan!

Ada di antara kamu akan berkata, "Hei! Terdapat tiada nyata caching berlaku di sini kerana anda sedang membaca menu juga setiap kali."  Dan kau betul-betul-aku tidak memberikan pelayan mana-mana jenis cuti.  Tetapi kerana panggilan async dan berlaku selepas halaman yang awal HTML muatan penuh membuat, "rasanya" lebih responsif kepada pengguna.  Menu membuat agak banyak yang menarik di laman.  Jika menu yang berlaku kepada perubahan, pengguna adalah tertakluk kepada yang jittery semula menarik Menu, tetapi hanya itu satu-satu masa.

Terdapat beberapa cara untuk membuat cache ini lebih berkesan dan membantu pelayan pada masa yang sama:

  • Dimasukkan ke dalam peraturan bahawa "cookie cache" adalah sah untuk sekurang-kurangnya 24 jam atau beberapa tempoh lain. Selagi terdapat tidak ada cookie yang tamat tempoh, menggunakan cookie's menu petikan dan Jangan sekali-kali memukul pelayan.

Well... itu semua yang datang ke fikiran sekarang :). 

Jika sesiapa yang mempunyai sebarang idea yang bijak di sini saya ingin tahu mereka.

Dan akhir sekali – teknik ini boleh digunakan untuk hal-hal lain.  Laman pelanggan ini mempunyai beberapa perkara dipacu data pelbagai halaman, ramai di antara mereka menukar agak jarang (seperti seminggu sekali atau sebulan sekali).  Jika anda menyasarkan bidang-bidang tertentu fungsi, anda boleh memberi UI yang lebih responsif dengan menarik kandungan dari kedai kuih tempatan dan memberi serta-merta.  Rasanya lebih cepat kepada pengguna walaupun anda bukan sedang menyelamatkan pelayan kitaran mana-mana.  Anda boleh Simpan kitaran pelayan dengan memutuskan mengenai beberapa syarat dan pencetus untuk mentaksahkan cache tempatan kuih ini.  Itulah semua situasional dan barangan artsy dan benar-benar yang paling menyeronokkan :). 

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

Bagaimana: Konfigurasi Unit Ujian dan Liputan Ujian dengan QUnit.js dan Blanket.js Untuk Office 365 SharePoint App

Intro

Saya telah telah meneroka percubaan unit dan menguji liputan JavaScript kerana saya bekerja pada aplikasi SharePoint baru untuk SharePoint dalam talian di Pejabat 365 Suite.  Jalan-jalan penyelidikan jelas membawa saya untuk Qunit.js dan sejurus selepas itu, kepada Blanket.js.

QUnit Biar saya menubuhkan unit test dan Kumpulan mereka ke dalam modul.  Modul ini hanya cara mudah untuk menguruskan ujian berkaitan. (Saya tidak pasti saya menggunakannya seperti yang dimaksudkan, tetapi ia bekerja bagi saya setakat ini dengan sedikit set ujian saya setakat ditakrifkan).

Blanket.js mengintegrasikan dengan Qunit dan ia akan menunjukkan kepada saya sebenar baris JavaScript yang telah – dan apa yang lebih penting – tidak benar-benar dihukum semasa menjalankan ujian.  Inilah "perlindungan" – garisan yang dilaksanakan akan diliputi oleh ujian manakala yang lain adalah tidak.

Antara menyediakan kes-kes ujian yang baik dan melihat liputan, kita boleh mengurangkan risiko bahawa Kod kita telah tersembunyi kecacatan.  Baik times.

Qunit

Andaikan anda mempunyai Visual Studio anda projek menyediakan, Mulakan dengan memuat turun pakej JavaScript daripada http://qunitjs.com.  Tambah JavaScript dan CSS sepadan ke penyelesaian anda.  Lombong kelihatan seperti ini:

image

Rajah 1

Seperti yang anda lihat, Saya telah menggunakan 1.13.0 pada masa saya menulis ini blog post. Jangan lupa untuk men-download dan menambah fail CSS.

Yang keluar dari cara, langkah seterusnya adalah untuk mencipta beberapa jenis ujian memanfaatkan dan rujukan bit Qunit.  Saya ujian sekumpulan fungsi dalam fail skrip yang dipanggil "QuizUtil.js" supaya saya mencipta halaman HTML yang dipanggil "QuizUtil_test.html" seperti yang ditunjukkan:

image Rajah 2

Berikut adalah kod:

<!PADA DOCTYPE html>
<html xmlns= "http://www.W3.org/1999/XHTML">
<Ketua>
    <tajuk>Ujian QuizUtil dengan Qunit</tajuk>
    <pautan rel= "stylesheet" href=".. /CSS/qunit-1.13.0.CSS" />
    <skrip Jenis= text/javascript"" JPP="QuizUtil.js" Perlindungan data></skrip>
    <skrip jenis ="text/javascript" src ="qunit-1.13.0.js"></skrip>
    <skrip jenis ="text/javascript" src ="blanket.min.js"></skrip>

    <skrip>
        Modul("getIDFromLookup");
        ujian("QuizUtil getIDFromLookupField", fungsi () {
            VAR goodValue = "1;#Paul Galvin";

            sama(getIDFromLookupField(goodValue) + 1, 2), "ID [" + goodValue + "] + 1 sepatutnya 2";
            sama(getIDFromLookupField(undefined), undefined, "Hujah input undefined perlu kembali keputusan undefined.");
            sama(getIDFromLookupField(""), undefined, "Hujah kosong input perlu kembali untuk nilai undefined.");
            sama(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;pada tahun"), undefined,"Harus sentiasa kembalikan sebuah keputusan boleh Tukar ke Integer");
            sama(getIDFromLookupField("2;#orang lain"), "2", "Semakan [2;#orang lain].");
            sama(getIDFromLookupField("9834524;#nilai panjang"), "9834524", "Ujian nilai besar.");
            notEqual(getIDFromLookupField("5;#sesiapa sahaja", 6), 6, "Ujian notEqual yang (5 adalah tidak sama dengan 6 bagi sampel: [5;#sesiapa sahaja]");

        });

        Modul("htmlEscape");
        ujian("QuizUtil htmlEscape()", fungsi () {
            sama(htmlEscape("<"), "&lt;", "Kurang dari pengendali melarikan diri ('<')");
            sama(htmlEscape("<Bhg. kelas =  "someclass">Sesetengah teks</div>"), "&lt;kelas Bhg. =&quot;someclass&quot;&gt;Sesetengah teks&lt;/div&gt;", "Rentetan ujian lebih kompleks.");
        });

        Modul("getDateAsCaml");
        ujian("QuizUtil getDateAsCaml()", fungsi () {
            sama(getDateAsCaml(baru Tarikh("12/31/2013")), "2013-12-31T:00:00:00", "Ujian tarikh keras dikodkan: [12/31/2013]");
            sama(getDateAsCaml(baru Tarikh("01/05/2014")), "2014-01-05T:00:00:00", "Ujian tarikh keras dikodkan: [01/05/2014]");
            sama(getDateAsCaml(baru Tarikh("01/31/2014")), "2014-01-31T:00:00:00", "Ujian tarikh keras dikodkan: [01/31/2014]");
            sama(getTodayAsCaml(), getDateAsCaml(baru Tarikh()), "getTodayAsCaml() hendaklah sama dengan getDateAsCaml(Tarikh baru())");
            sama(getDateAsCaml("nilai karut"), undefined, "Cuba untuk mendapatkan tarikh nilai karut.");
            sama(getDateAsCaml(undefined), undefined, "Cuba untuk mendapatkan tarikh yang [undefined] Tarikh.");
        });

        Modul("getParameterByName");
        ujian("QuizUtil getParameterByName (dari rentetan pertanyaan)", fungsi () {
            sama(getParameterByName(undefined), undefined, "Cuba untuk mendapatkan undefined parameter perlu kembali undefined.");
            sama(getParameterByName("tidak wujud"), undefined, "Cuba untuk mendapatkan nilai parameter apabila kita tahu parameter tidak wujud.");

        });

        Modul("Cookies");
        ujian("QuizUtil pelbagai fungsi cookie.", fungsi () {
            sama(setCookie("ujian", "1", -1), getCookieValue("ujian"), "Dapatkan cookie saya menetapkan perlu bekerja.");
            sama(setCookie("anycookie", "1", -1), benar, "Tatacara memasak sah perlu kembali 'benar'.");
            sama(setCookie("kuih gila nama !@#$%"%\^&*(()?/><.,", "1", -1), benar, "Menetapkan nama kuih yang buruk perlu kembali 'palsu'.");
            sama(setCookie(undefined, "1", -1), undefined, "Lulus undefined dengan nama kuih.");
            sama(getCookieValue("tidak wujud"), "", "Cookie tidak wujud ujian.");
        });

    </skrip>
</Ketua>
<badan>
    <div id= "qunit"></div>
    <div id= "qunit-perlawanan"></div>

</badan>
</html>

Terdapat beberapa perkara yang berlaku di sini:

  1. Rujukan kod (QuizUtil.js)
  2. Rujukan Qunity.js
  3. Menentukan beberapa modul (getIDFromLookup, Biskut, dan lain-lain)
  4. Meletakkan satu <div> ID yang merupakan "qunit".

Kemudian, Saya hanya tarik ke Laman ini dan anda mendapat sesuatu seperti ini:

image

Rajah 3

Jika anda melihat di bahagian atas, anda mempunyai beberapa pilihan, dua di antaranya yang menarik:

  • Sembunyi lulus ujian: Cukup jelas.  Boleh membantu mata anda hanya melihat bidang masalah dan tidak banyak kekacauan.
  • Modul: (jatuh bawah): Ini akan menapis ujian ke ujian yang hendak sekumpulan hanya orang-orang.

Bagi ujian diri – beberapa komen:

  • Ia pergi tanpa mengatakan bahawa anda perlu untuk menulis kod anda supaya ia adalah testable di tempat pertama.  Menggunakan alat yang boleh membantu menguatkuasakan disiplin itu. Sebagai contoh, Saya mempunyai satu majlis yang dipanggil "getTodayAsCaml()".  Ini bukan sangat testable kerana membawa hujah tiada input dan untuk menguji untuk kesaksamaan, kita perlu sentiasa Kemaskini Terakhir kod ujian untuk menunjukkan tarikh semasa.  Saya refactored dengan menambah data input parameter lulus tarikh semasa apabila saya mahu tarikh hari ini dalam CAML format.
  • Rangka Qunit dokumen ujian sendiri dan nampaknya cukup mantap.  Ia boleh melakukan perkara-perkara yang mudah seperti ujian untuk kesaksamaan dan juga mempunyai sokongan untuk panggilan ajax gaya (kedua-dua "real" atau mengejek menggunakan mocker kegemaran anda).
  • Juga akan melalui proses yang memaksa anda berfikir melalui kes-kes canggih – apa yang berlaku dengan "undefined" atau kosong dihantar ke satu fungsi.  Ia menjadikan ia mati mudah untuk menguji senario ini keluar.  Bagus.

Perlindungan dengan Blanket.js

Blanket.js melengkapi Qunit dengan tracking sebenar baris kod yang melaksanakan semasa menjalankan ujian.  Ia mengintegrasikan hak ke Qunit begitu walaupun ia adalah sebuah aplikasi yang keseluruhannya berasingan, Ia memainkan baik – ia benar-benar kelihatan seperti itu adalah satu aplikasi yang lancar.

Inilah blanket.js dalam tindakan:

image Rajah 4

image

Rajah 5

(Anda sebenarnya perlu klik pada checkbox "Dayakan perlindungan" di bahagian atas [lihat Rajah 3] bagi membolehkan ini.)

Garisan yang diserlahkan dalam Rajah 5 telah dilaksanakan oleh mana-mana ujian saya, oleh itu, saya perlu memikirkan ujian yang menyebabkan mereka untuk melaksanakan jika saya ingin perlindungan penuh.

Mendapat blanket.js dengan langkah-langkah berikut:

  1. Muat turun daripada http://blanketjs.org/.
  2. Menambah kepada projek anda
  3. Kemaskini Terakhir Laman abah-abah ujian anda (QuizUtil_test.html dalam kes saya) seperti berikut:
    1. Rujukan kod
    2. Menghias anda <skrip> rujukan seperti ini:
    <skrip Jenis= text/javascript"" JPP="QuizUtil.js" Perlindungan data></skrip>

Blanket.js menjemput atribut "data-cover" dan melakukan sihir dengan.  Ia cangkuk ke Qunit, mengemaskini UI untuk menambah opsyen "Dayakan perlindungan" dan voila!

Ringkasan (TL; DR)

Gunakan Qunit untuk menulis kes-kes ujian anda.

  • Muat turun
  • Menambah kepada projek anda
  • Menulis halaman ujian abah-abah
  • Mencipta ujian
    • ReFactor di antara kod anda akan testable
    • Menjadi kreatif!  Fikirkan gila, mustahil senario dan menguji mereka juga.

Menggunakan blanket.js untuk memastikan perlindungan

  • Pastikan Qunit bekerja
  • Muat turun blanket.js dan menambahnya ke dalam projek
  • Tambah ke Laman abah-abah ujian anda:
    • Menambah rujukan kepada blanket.js
    • Tambah satu atribut "data-cover" untuk anda <skrip> Tag
  • Menjalankan ujian Qunit.

Saya tidak pernah melakukan apa-apa sebelum ini dan mempunyai beberapa barangan rudimentary bekerja dalam beberapa jam. 

Ujian senang!

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

The Saman Terakhir Anda Pernah akan Pakai?

[Nota ringkas - ini adalah post yang agak panjang pada pembukaan kerja bagi kumpulan saya di sini di New York dan anda perlu tinggal di kawasan tiga negeri jika anda berminat.]

Saya menyertai Consulting Slalom lebih 18 bulan yang lalu dan yang menjadikan ini kerja lama tahan saya sejak 2007. Saya tidak merancang cara yang. Sebelum rentetan kerja melompat yang bermula dengan lompatan saya ke dalam dunia SharePoint, Saya berada di satu tempat selama sebelas tahun. Saya akhirnya menemui yang baru, tempat yang kekal untuk bekerja untuk jangka panjang di sini pada Slalom.

Tempat ini semakin meningkat dan saya memerlukan bantuan untuk mengawal bahawa. Jenis bantuan yang perlu saya biasanya dipanggil "SharePoint Penyelesaian Arkitek" walaupun saya dapati perkataan arkitek menjadi lebih dan / atau salah digunakan dalam ruang SharePoint untuk beberapa lama kini. Saya telah bergelut tentang bagaimana untuk menulis blog tentang perkara ini. Saya tidak mahu untuk hanya menyenaraikan sekumpulan mata peluru di Dice / style Monster. Rakan-rakan yang sangat baik merekrut saya telah melakukan yang sudah :). Jadi, Saya memutuskan untuk mengambil "hari dalam kehidupan" pendekatan. Baca ia lebih dan mempertimbangkan:

1) Jika rayuan dan

2) Sama ada anda tahu dalam tulang anda bahawa anda boleh melakukannya.

Jika ya, hubungi saya (paul.galvin @ slalom.com) dan mari kita bercakap.

Ini adalah apa yang anda boleh mengharapkan untuk melakukan dalam masa seminggu / sebulan sebagai arkitek penyelesaian pada pasukan saya:

  • Menjalankan projek, sering lebih daripada satu pada satu masa. Beberapa projek yang besar dan jadi anda akan mempunyai satu projek. "Running" Projek bermakna bahawa anda mempunyai pengawasan dan tanggungjawab untuk kualiti keseluruhan penyampaian. Dalam hampir setiap kes anda akan mempunyai PM dan pasukan benar-benar kuat Devs, BA, Orang UX, dan lain-lain, untuk menyokong anda. Tetapi anda akan menjadi wajah utama pelanggan melihat, amanah, dan sebagainya.. Tiada bersembunyi di bayang-bayang dalam peranan ini :). Anda akan bil masa ini dan matlamatnya adalah untuk membuat anda sibuk cukup untuk melakukan ini 80 peratus daripada masa.
  • Bantuan dengan kertas kerja - menuai, RFP, dek - semua barangan yang baik. Saya fikir kita mempunyai proses Sow kita turun cukup ketat dan kukuh supaya ia agak formula. Jika anda digunakan untuk menuai bertulis hari ini, proses kita tidak akan menjadi satu cabaran untuk anda. RFP - ini adalah agak sukar. Mereka cenderung untuk menjadi yg pesan lebih dahulu dalam alam semula jadi untuk memulakan dengan dan RFP biasanya menarik dalam pelbagai pengarang yang berbeza. Ia adalah kedua-dua yang baik dan buruk, tetapi terutamanya baik. Ini boleh mendapatkan scrambly apabila kita perlu mengimbangi keperluan untuk perkhidmatan pelanggan yang cemerlang di samping cuba untuk memenangi kerja baru. Anda mungkin tidak akan memiliki RFP tetapi anda akan diminta untuk menyumbang bahagian.
  • Panggilan jualan, tetapi tidak lebih dekat. Dalam perjalanan sebulan, anda boleh mengharapkan untuk pergi pada beberapa jualan panggilan dengan pasukan jualan kami. Anda akan PKS di dalam bilik, mengambil nota dan membantu membentuk penyelesaian. Walau bagaimanapun, anda tidak akan diminta atau dijangka untuk menangani kitaran jualan dari awal hingga akhir. Anda tidak perlu untuk "menjual,"Anda hanya perlu menjadi suara yang tenang sebab pakar di dalam bilik. Ini membina kepercayaan dan keyakinan dan sebab itulah anda berada di sana. Kursus, jika anda ingin menjual, maka ada ruang untuk anda untuk berkembang di sini juga.
  • Bantuan dengan merekrut. Kami mempunyai beberapa jenis program rujukan, jadi jika anda tahu orang benar-benar kuat dalam komuniti yang anda fikir harus menjadi sebahagian daripada Slalom, anda boleh mendapat manfaat dengan cara yang. Kami telah berdedikasi perekrut (yang cemerlang) untuk berkongsi besar daripada jenis ini kerja. Bantuan sebenar menemuduga calon - yang mereka patut baik budaya? Adakah mereka tahu barangan mereka? Bolehkah mereka membuat * saya * hidup lebih mudah? 🙂 This comes in spurts, satu dua kali sebulan, walaupun dalam beberapa bulan anda tidak akan melakukannya pada semua.
  • Membantu menentukan amalan terbaik, membina IP kita dan menjadikan kita lebih berdaya saing dalam pasaran. Anda seorang lelaki yang berpengalaman / gal. Anda telah sekitar blok - bukan sahaja di SharePoint, tetapi anda mempunyai pengalaman dalam teknologi lain dan hidup dalam baik dan buruk (walaupun dahsyat) projek-projek di seluruh. Hasilnya, anda tahu apa yang bekerja dan apa yang tidak. Kami akan mahu anda untuk berkongsi pengalaman dengan kami pada hari ke hari asas dalam erti taktikal (Dgn kata lain. menjalankan projek-projek anda benar-benar baik) tetapi juga strategik. "Amalan Terbaik" agak berlebihan sebagai istilah dan saya teragak-agak untuk menggunakannya. Idea asas adalah bahawa anda datang sebagai seorang yang berpengalaman dengan pengalaman yang mendalam dan relevan dan kami mahu mengintegrasikan terbaik pembelajaran anda ke dalam bagaimana kita melibatkan diri dengan pelanggan pada hari ke hari asas.
  • Bersenang-senang - Kita adalah sekumpulan sangat bersepadu. Saya mahu untuk mengelakkan lagi kata-kata basi lagi, tetapi ia adalah benar-benar tepat dalam kes ini - kita bekerja keras (jenis) dan kami bermain lebih keras :). Ada satu jenis Aaron Sorkin of olok-olok di sini, bilik yang sentiasa penuh dengan orang pandai, kita suka minuman kami dan kami menganjurkan beberapa saksama acara menyeronokkan - malam filem, perjalanan besbol (walaupun mereka dahsyat, pasukan dikatakan jahat).

Jika saya boleh jumlah semuanya ke dalam satu perkataan, Saya akan menggunakan perkataan "kepimpinan." Projek-projek Utama, mengambil peranan utama dalam membina daripada amalan (IP, membina pasukan), dan sebagainya..

Tetapi tunggu! Terdapat lebih! Mengapa lagi bekerja di Slalom?

  • Perpaduan yang luar biasa niat - semua orang mahu berkembang perkara ini daripada. "Perkara ini" adalah pejabat New York. Semua orang di atas kapal dengan ini.
  • Angin di layar anda - pejabat kakak, amalan kakak - Slalom adalah "penuh perkhidmatan" perundingan organisasi. Saya membawa sehingga amalan SharePoint (a "Amalan Kawasan Lead" dalam lingo Slalom). Saya mempunyai amalan kakak di 11 pejabat Slalom lain. Jadi, walaupun saya raja sejauh SharePoint adalah berkenaan di sini pada Slalom New York, Saya mempunyai amalan rakan sebaya di Chicago, Seattle, Dallas, Atlanta, Boston, dan sebagainya.. dari mana saya boleh menarik kepada sokongan. Ia benar-benar yang terbaik daripada kedua-dua dunia - autonomi yang penting di sini di New York tetapi akses kepada tan bakat di seluruh organisasi.
  • Angin dalam jualan anda (2) - Kami melakukan lebih daripada SharePoint - lebih. We do BI, CRM, UX, perundingan perniagaan, Bergerak, pembangunan adat dan lain-lain. Kami adalah baik pada jualan silang antara diri kita dan kita baik pada lukisan - dan yang lebih penting, menyampaikan kepada - satu "perkhidmatan penuh" gambar untuk pelanggan kami. Ini terutamanya merayu kepada saya. Saya telah di banyak orgs kecil bekerja di gig SharePoint dan kecewa berulang-ulang kali kerana kami merpati berlubang sebagai "orang SharePoint." Itu tidak berlaku dengan Slalom dan kita dapat melakukan kerja-kerja yang lebih menarik hasilnya.
  • Model tempatan - tidak perjalanan.
  • Pertumbuhan jangka panjang - Slalom telah berlaku gangbusters. Banyak pertumbuhan dan kestabilan. Pertumbuhan juga bermakna bahawa kita perlu mengupah pemimpin hari ini untuk mengetuai pasukan baru seperti yang kita menambah lebih banyak pelanggan dan kakitangan untuk menyokong mereka pelanggan.

Saya boleh pergi pada, tetapi saya telah pergi mungkin sudah terlalu lama. Saya rasa saya telah ditangkap intipati di sini. Jika anda berfikir tentang perubahan pekerjaan dan ini kelihatan baik kepada anda, mari kita bercakap.

Jika anda berpuas hati di tempat kerja semasa anda - mari kita bercakap anyway :). Saya telah berada di banyak tempat dan amat "gembira" pada masa yang. Slalom adalah berbeza dan saya mengalu-alukan peluang untuk meyakinkan anda itu.

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin

Pantas dan Mudah: Tetapkan Saiz a Item dalam Box Senarai dalam Windows App Store

Dalam Windows App Store Saya mewujudkan, Saya ingin menunjukkan pelbagai pengguna mesej maklumat.  Saya mengambil ListBox sebagai alat untuk menunjukkan ia supaya mereka boleh menatal melalui mereka dan semua barangan yang baik. 

Mesej adalah maklumat sahaja, jadi tidak ada keperluan untuk menyediakan semua bahawa ruang putih tambahan di sekitar mereka kerana pengguna tidak boleh memilih mereka untuk apa-apa.  Kelakuan lalai ListBox menyediakan sejumlah besar padding dan saya mahu menyingkirkan ia.  Nah .... anda tidak boleh melakukan perkara seperti di ListBox secara langsung.  Bagaimanapun, anda boleh melakukannya dengan perkara-perkara yang anda tambah:

        swasta membatalkan AddGameStateLogMessage(rentetan theMessage)
        {
            Textbox t = baru Textbox();
            t.Text = GameStateCounter     + ": " + theMessage;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            Ketebalan thisPadding = baru Ketebalan(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ListBoxItem yang = baru ListBoxItem();
            li.Content = t;
            li.MaxHeight = 25;
            thisPadding = baru Ketebalan(5, 0, 5, 0);
            li.Padding = thisPadding;

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

di atas, Saya mewujudkan textbox dan menetapkan tulisan yang, padding yang, dan sebagainya..

Seterusnya, Saya mencipta ListBoxItem dan menetapkan kandungan untuk ruangan yang diformat.

Akhirnya, Saya memasukkan ListBoxItem ke ListBox itu.  (Saya ingin menunjukkan mesej yang paling baru-baru ini di bahagian atas senarai, itu Sisip(0,li) bukannya Add mudah() doa.).

Saya akan Tweaker ini sedikit sebelum saya benar-benar berpuas hati dengan tingkah laku ListBox tetapi corak yang ditunjukkan di atas telah sangat berhasil.  Mudah-mudahan orang lain mendapati ia membantu.

</akhir>

undefinedLanggan ke blog saya.

Mengikuti aku di Twitter http://www.twitter.com/pagalvin