Cara menentukan orang sebagai lingkup Cari / Sumber konten menggunakan SharePoint 2013 REST API

Aku punya alasan untuk bekerja dengan SharePoint 2013 Search API melalui sisanya untuk pertama kalinya. Aku ingin Cari orang, bukan dokumen. Kunci belajar di sini adalah bahwa Anda menentukan sumber konten melalui GUID yang (atau setidaknya dalam kasus ini). Berikut jQuery potongan menunjukkan 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,Keterampilan,AboutMe,Kepentingan,JobTitle,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&rowlimit = 99",
            metode: "MENDAPATKAN",
            header: { "Menerima": "aplikasi json; oData = verbose" },
            cache: palsu,
            sukses: fungsi (hasil) {

Dalam kasus saya, Saya menjalankan API terhadap SharePoint online. Untuk mendapatkan GUID, Aku mengikuti langkah-langkah:

  1. Mengakses SharePoint admin center
  2. Pilih "Cari" dari navigasi di sebelah kiri
  3. Pilih "Atur hasil sumber"
  4. Pilih "Masyarakat setempat hasil"
  5. Melihat URL.

URL saya melihat sesuatu seperti:

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 memahami bahwa sourceid benar-benar mungkin semacam hal yang permanen dengan SP, but I’ll always check anyway 🙂 ).

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Contoh SharePoint sisanya panggilan

Di sini adalah sekumpulan panggilan sisa sampel yang bekerja untuk saya dan dapat membantu Anda serta. Sebagai 02/2014, ada dua contoh 🙂

  1. Referensi kolom dengan ruang dalam namanya
  2. Referensi kolom multi-pilih
  3. Melakukan pencarian orang melalui sisa

 

Saya akan menambahkan ini sebagai berjalannya waktu.

Berikut adalah beberapa tinta berguna yang saya telah menemukan juga:

Referensi kolom dengan ruang dalam namanya

Saya membuat daftar kustom dengan sebuah kolom yang bernama "Penulis Blog" (Ruang antara Blog dan penulis).

$select untuk referensi kolom adalah:

image

Hanya mengganti ruang dengan "_x0020_". Kita melihat _x0020_ dalam banyak contoh di seluruh internets dan sisanya tidak berbeda.

Jika Anda tidak melakukan yang, Anda bertanggung jawab untuk mendapatkan pesan kesalahan seperti ini:

Ekspresi “Penulis blog” ini tidak valid.

Cukup mudah.

Referensi kolom multi-pilih Lookup

Mengatur:

  1. Membuat daftar kustom yang bernama Kategori.
  2. Tambahkan beberapa kategori. Saya menambahkan kategori thusly:image
  3. Membuat daftar kustom yang lain yang disebut MockBlog dan menambahkan kategori sebagai kolom multi-pilih daftar (atau kolom situs jika itu adalah bagaimana Anda roll).

Menambahkan beberapa item ke daftar Mockblog dan Anda siap.

Panggilan gaya Ajax menggunakan jQuery akan terlihat seperti ini:

  = serverUrl "/_api/web/daftar/GetByTitle('MockBlog')/item" +
             "?$Pilih = judul,Kategori/judul,Blog_x0020_Author/judul" + 
             "&$memperluas = Blog_x0020_Author,Kategori";

Kami memberitahu SharePoint "memberi saya judul untuk semua kategori (Kategori/judul). Mendapatkan nilai yang sebenarnya untuk Judul oleh $memperluasing daftar kategori." (Saya parafrase tenang mungkin cukup longgar, Tapi ini bagaimana aku menafsirkan itu).

Jika Anda melakukan ini melalui JavaScript dan menggunakan Fiddler untuk melihat output, Anda mendapatkan sesuatu seperti ini sebagai balasannya:

 

image

(Di atas adalah sebuah objek JSON)

Melakukan pencarian orang melalui sisa

Aku blogged tentang hal ini secara terpisah. Kuncinya adalah untuk menentukan parameter sourceid yang nilainya adalah GUID sumber konten masyarakat setempat. (Sumber konten dulu disebut cakupan dan itu adalah my-oh-saya tidak begitu sulit untuk memanggil segala lingkup bagi saya!).

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

 

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Cepat dan mudah: Buat situs SharePoint menggunakan sisa

Ada banyak sumber daya di yang menunjukkan bagaimana melakukan ini, tapi aku tidak bisa menemukan link masuk ke komprehensif, Jadi di sini kita berada.

Anda dapat membuat situs SharePoint menggunakan REST API.  Berikut adalah contoh sepenuhnya panggang:

<!--
    SiteRequestForm.html: Mengumpulkan informasi dan membuat situs untuk pengguna.
-->

<Pusat>
<Meja>
    <TR>
        <TD>Nama situs:</TD>
        <TD><masukan jenis= "teks" Nama= "SiteName" id= "SiteName" /></TD>
    </TR>
    <TR>
        <TD colspan= "2">
            <masukan jenis= "Kirim" id= "CreateSiteButton" nilai= "Buat situs" />
        </TD>
    </TR>
</Meja>
</Pusat>

<script src="../Plugins/jQuery-1.11.0.min.js"></script>

<script>
var CreateSiteLogicContainer = {

    createSiteData: {
            "parameter": {
                __metadata: { "jenis": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Judul: "Paultest1",
                Deskripsi: sisanya-dibuat "web oleh Paulus!",
                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",
            metode: "POST",

            header: {
                "menerima": "aplikasi/json; oData = verbose",
                "content-type": "aplikasi/json;oData = verbose",
                "X-RequestDigest": $("#__REQUESTDIGEST").Val()
            },

            data: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            sukses: fungsi () { peringatan("sukses"); },
            kesalahan: fungsi () { peringatan("kesalahan"); }

        });
    },

    wireUpForm: fungsi () {
        $("#CreateSiteButton").Klik(fungsi () {
            peringatan("Untuk mencoba dan membuat situs.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</script>

Ketika sukses, Anda mendapatkan paket JSON dalam respon seperti ini:

image

Kunci pikiran dan pembelajaran dari ini meliputi:

  • Pendekatan ini menggunakan jQuery.  Dalam kasus saya, Perpustakaan jQuery saya berada di "../ plugin. "  Anda akan ingin untuk mengubahnya untuk menunjuk ke lokasi JQ favorit Anda.
  • Anda dapat menyalin dan menyisipkan potongan yang seluruh ke bagian Web Content Editor pada halaman dan itu harus bekerja dengan baik.  Anda akan ingin mengubah titik akhir dari API panggilan dan pastikan Anda referensi JQ dengan benar.
  • URL adalah relatif terhadap endpoint Anda API.  Dalam kasus saya, menciptakan sub situs di bawah https://bigapplesharepoint.com
  • Anda tidak perlu untuk memberikan konten-panjang. Beberapa posting blog dan MSDN dokumen menyiratkan bahwa Anda melakukan, tetapi terjadi bagi saya secara otomatis, yang saya asumsikan sedang ditangani oleh $AJAX panggilan itu sendiri.
  • Baris ini diperlukan untuk menghindari Tanggapan "dilarang": "X-RequestDigest": $("#__REQUESTDIGEST").Val().  Ada cara lain untuk melakukannya, Tapi ini cukup bagus.  Saya telah kehilangan link ke blog yang disediakan jalan pintas ini.  H/T ke Anda, misterius blogger!

Good luck dan berharap ini membantu seseorang.

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Mengatasi masalah yang mengganggu dengan URL relatif dalam peluncuran cepat SharePoint

Saya ingin menambahkan link ke navigasi peluncuran cepat hari yang lain dan SharePoint mengatakan:

image

Versi teks murni yang:

Memastikan bahwa URL yang valid dan dimulai dengan baik karakter yang valid (tanda nomor (#) atau miring (/)) atau yang valid didukung protokol (misalnya, ' http://’, ' https://’, ' file://’, ' ftp://’, ' mailto:’, ' Berita:’).

"Blech dan cacar!"Aku berkata.

Solusi ini adalah dengan menggunakan JavaScript untuk menemukan link dikenal dalam peluncuran cepat dan mengesampingkan perilaku.

Untuk menguji ini, menambahkan link baru ke situs tes thusly:

image

Saya menggunakan jQuery. Mengatasinya, mendapatkan beberapa JavaScript dan jQuery ke halaman menggunakan teknik favorit Anda dan dengan baris kode seperti ini:

 

$(dokumen).siap( fungsi () {

    $("a:berisi('Test penggantian URL')").Klik(fungsi () { peringatan("Klik mengubah perilaku!"); kembali palsu;});

});

Dan Bob paman Anda.

Pemilih jQuery menemukan setiap <a> Tag yang memiliki "URL pengujian penggantian" dalam namanya. Anda mungkin ingin menemukan-tune yang tergantung pada link dan seperti.

.Click(fungsi() mengabaikan apa pun SharePoint akan dilakukan ketika pengguna mengklik. Pastikan Anda "return false" atau yang lain itu akan melakukan barang-barang Anda dan kemudian mencoba untuk hal href yang terlalu, yang merupakan hampir pasti tidak tujuan Anda.

Ini dilakukan dan tes di lingkungan online SharePoint tetapi harus bekerja baik di 2010 dan sebelumnya terlalu.

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Cepat dan sederhana: SharePoint sisanya panggilan hanya kembali 100 Catatan

Saya telah bekerja pada sebuah situs web menghadapi yang umum untuk praktek SharePoint saya di sini di New York dan itu menggunakan banyak JavaScript dan sisanya panggilan untuk menampilkan konten.

Selama pengembangan utama, Cara membuat dataset kecil dengan hanya 10 atau jadi baris dalam daftar kustom dan panggilan ISTIRAHAT saya semua diambil dari sana.  Sekali aku bumped up daftar yang memiliki beberapa ratus baris data untuk menguji untuk pertumbuhan diantisipasi, Saya menemukan bahwa saya mendapatkan persis 100 baris yang dikembalikan kembali pada panggilan ISTIRAHAT saya.

Ini adalah hal yang sangat sederhana ke alamat.  Dalam kasus saya (dan saya percaya dalam kebanyakan kasus), default sisanya panggilan untuk SharePoint (dan mungkin sebagai standar industri?) kembali 100 baris.  Kembali lebih dari default, Gunakan $top parameter pada panggilan Anda, seperti dalam:

Dapatkan /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/item?$Pilih = ID,Judul,Kategori/judul,Blog_x0020_Author/judul,DatePublished,BlogSummary&$memperluas = Blog_x0020_Author,Kategori&$Filter =&$Top = 9999

Aku mengambil 9999 dalam kasus ini karena saya tahu bahwa growth-wise, tidak akan ada lebih dari 200 atau jadi baris ditambahkan ke daftar ini dalam setahun.  Jika ia menjadi canggung, kita dapat menerapkan beberapa paging di jalan.

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Cepat dan sederhana: Memecahkan "Parameter URL tidak valid” masalah dengan UpdateListItems di lists.asmx

Ketika bekerja dengan UpdateListItems melalui lists.asmx, sangat mudah untuk menghasilkan kesalahan:

Parameter URL tidak valid.

URL yang diberikan berisi perintah tidak sah atau nilai. Silakan periksa URL lagi.

Anda dapat mendapatkan error ini ketika Anda lupa untuk menyertakan ID di daftar bidang untuk memperbarui.  Ini, seperti banyak layanan web ini SP, ini agak berlawanan karena Anda perlu menyertakan ID di atribut ID <Metode> elemen.  Dan Anda tidak diperbarui ID dan mungkin tidak pernah ingin di tempat pertama.

Ini sabun amplop bekerja:

<soapenv:Amplop xmlns:soapenv =' http://schemas.xmlsoap.org/Soap/Envelope/'>
  <soapenv:Tubuh>                      
    <UpdateListItems xmlns =' http://schemas.Microsoft.com/SharePoint/Soap/'>                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <Update>                     
         <Batch OnError ="Lanjutkan">
          <Metode ID ="1" CMD ="Update">
            <Bidang nama ="CooperativeLock">terkunci!</Bidang>
            <Bidang nama ="ID">1</Bidang>
          </Metode>
        </Batch>                     
        </Update>                
      </UpdateListItems>             
  </soapenv:Tubuh>         
</soapenv:Amplop>

Jika Anda menghapus bidang ID referensi maka Anda akan mendapatkan pesan "Invalid URL parameter" mengganggu.

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

 

Orang miskin di Caching di JavaScript

[TL;DR versi: menggunakan cookies untuk menyimpan hasil async panggilan; membuat hasil masa lalu async panggilan segera dan kemudian memvalidasi mereka setelah beban halaman.]

Saya telah bekerja pada situs SharePoint intranet untuk klien yang fitur, di antara hal lain, navigasi sekunder yang bergaya pilihan menu yang dikelola melalui daftar kustom tua biasa.  Idenya adalah bahwa klien mendapatkan untuk mengontrol menu situs "mereka" tanpa mempengaruhi atau sedang dipengaruhi oleh navigasi global yang dikeluarkan oleh itu.

(ada sesuatu yang sangat subversif tentang menambahkan CEWP yang menunjuk ke sebuah file HTML yang memuat beberapa CSS dan JS untuk secara fundamental mengubah hampir segala sesuatu tentang perilaku situs... tapi itu untuk pos lain)

Kode untuk ini cukup sederhana:

Sini tempat sakit adalah bahwa setiap kali ada hits salah satu halaman situs, browser web pengguna yang menjangkau untuk mendapatkan item dari daftar.  Setelah dev lengkap dan pengujian telah membuktikan hal-hal yang stabil dan lengkap, panggilan ini tidak perlu lebih dari 99% waktu sejak menu jarang berubah.  Ini juga memiliki mempengaruhi UI aneh yang umum dalam ini dunia baru yang berani situs web hiper-ajaxy-halaman menulisnya dan hanya kemudian membuat menu.  Sangat gelisah dan mengganggu dalam pandangan saya.  Dan gelisah. Jadi, caching. 

Aku diubah logika thusly:

  • Mencari cookie di browser yang berisi menu aku terakhir membacanya
    • Jika ditemukan, membuat itu segera.  Jangan menunggu untuk halaman untuk selesai loading.  (Anda perlu memastikan bahwa HTML Anda ditempatkan secara strategis di sini, Tapi itu tidak sulit untuk dilakukan).
  • Menunggu halaman selesai loading dan membuat async panggilan untuk memuat menu item dari daftar menggunakan sisa atau lists.asmx atau apa pun
  • Membandingkan apa yang saya Dapatkan terhadap cookie
    • Jika cocok, Stop
    • Jika tidak, menggunakan jQuery, dinamis mengisi setumpuk jika <Li>di dalam <UL>
  • Gunakan CSS untuk melakukan semua format
  • Keuntungan!

Beberapa dari Anda akan mengatakan, "Hei! ada tidak ada nyata caching terjadi di sini karena Anda sedang membaca menu tetap setiap kali.”  Dan kau benar-aku tidak memberikan server jenis istirahat.  Namun karena panggilan async dan terjadi setelah halaman awal muatan HTML sepenuhnya menuliskan, ia "merasa" lebih responsif terhadap pengguna.  Menu menuliskan cukup banyak seperti halaman yang menarik.  Jika menu terjadi perubahan, pengguna terkena gelisah menggambar ulang menu, tetapi hanya satu kali.

Ada beberapa cara untuk membuat ini caching lebih efektif dan membantu keluar server pada saat yang sama:

  • Dimasukkan ke dalam aturan "cookie cache" itu berlaku untuk minimal 24 jam atau beberapa jangka waktu lain. Selama ada kuki tidak kedaluwarsa, menggunakan cookie menu snapshot dan tidak pernah memukul server.

Yah... itu semua yang datang ke pikiran sekarang :). 

Jika seseorang memiliki ide-ide cerdas di sini saya ingin tahu mereka.

Dan terakhir-teknik ini dapat digunakan untuk hal-hal lain.  Halaman ini klien memiliki sejumlah hal data-driven pada berbagai halaman, banyak dari mereka mengubah relatif jarang (seperti satu minggu sekali atau sebulan sekali).  Jika Anda menargetkan daerah tertentu dari fungsi, Anda dapat memberikan UI lebih responsif dengan konten menarik dari toko lokal cookie dan rendering segera.  Rasanya lebih cepat kepada pengguna bahkan jika Anda tidak menyelamatkan server setiap siklus.  Anda dapat Simpan siklus server oleh memutuskan pada beberapa kondisi dan memicu untuk membatalkan cache lokal cookie ini.  Itulah semua situasional dan barang-barang berseni dan benar-benar yang paling menyenangkan :). 

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Bagaimana caranya: Mengkonfigurasi Unit pengujian dan cakupan uji dengan QUnit.js dan Blanket.js untuk kantor 365 Aplikasi SharePoint

Intro

Aku sudah menjelajahi pengujian unit dan menguji cakupan untuk JavaScript ketika bekerja pada sebuah aplikasi SharePoint baru untuk SharePoint online di kantor 365 Suite.  Jalur penelitian jelas mendorong saya untuk Qunit.js dan kanan setelah itu, untuk Blanket.js.

Kebun buah-buahan biarkan aku membuat unit test dan mengelompokkan mereka ke dalam modul.  Module adalah cara yang mudah untuk mengatur tes terkait. (Saya tidak yakin saya menggunakan sebagaimana dimaksud, Tapi itu bekerja bagi saya begitu jauh dengan set kecil tes saya sejauh ini telah didefinisikan).

Blanket.js terintegrasi dengan kebun buah-buahan dan ia akan menampilkan jalur sebenarnya JavaScript yang itu- dan lebih penting-tidak benar-benar dilaksanakan dalam menjalankan tes.  Ini adalah "cakupan"-baris yang dieksekusi dilindungi oleh tes sementara yang lain tidak.

Antara pengaturan kasus uji yang baik dan melihat cakupan, kita dapat mengurangi risiko bahwa kode kita telah tersembunyi Cacat.  Baik kali.

Kebun buah-buahan

Dengan asumsi Anda memiliki Visual Studio proyek mengatur, Mulailah dengan men-download paket JavaScript dari http://qunitjs.com.  Menambahkan JavaScript dan CSS yang sesuai untuk solusi Anda.  Tambang terlihat seperti ini:

image

Gambar 1

Seperti Anda dapat melihat, Saya menggunakan 1.13.0 pada saat saya menulis posting blog ini. Jangan lupa untuk men-download dan menambahkan CSS file.

Yang keluar dari jalan, langkah berikutnya adalah untuk menciptakan semacam harness tes dan referensi bit kebun buah-buahan.  Saya menguji banyak fungsi dalam file skrip bernama "QuizUtil.js" Jadi saya membuat halaman HTML yang disebut "QuizUtil_test.html" seperti yang ditunjukkan:

image Gambar 2

Berikut adalah kode:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<kepala>
    <judul>QuizUtil tes dengan kebun buah-buahan</judul>
    <link rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <script jenis= text/javascript"" src="QuizUtil.js" data-cover></script>
    <script type ="text/javascript" src ="kebun buah-buahan-1.13.0.js"></script>
    <script type ="text/javascript" src ="blanket.min.js"></script>

    <script>
        modul("getIDFromLookup");
        tes("QuizUtil getIDFromLookupField", fungsi () {
            var goodValue = "1;#Paul Galvin";

            sama(getIDFromLookupField(goodValue) + 1, 2), "ID [" + goodValue + "] + 1 harus menjadi 2";
            sama(getIDFromLookupField(terdefinisi), terdefinisi, "Undefined masukan argumen harus kembali undefined hasil.");
            sama(getIDFromLookupField(""), terdefinisi, "Kosong masukan argumen harus mengembalikan nilai undefined.");
            sama(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), terdefinisi,"Harus selalu kembali hasil konversi ke Integer");
            sama(getIDFromLookupField("2;#beberapa orang lain"), "2", "Memeriksa [2;#beberapa orang lain].");
            sama(getIDFromLookupField("9834524;#nilai panjang"), "9834524", "Nilai besar ujian.");
            notEqual(getIDFromLookupField("5;#siapa pun", 6), 6, "Pengujian notEqual (5 tidak sama dengan 6 untuk contoh ini: [5;#siapa pun]");

        });

        modul("htmlEscape");
        tes("QuizUtil htmlEscape()", fungsi () {
            sama(htmlEscape("<"), "&lt;", "Escaping kurang dari operator ('<')");
            sama(htmlEscape("<div kelas =  "someclass">Beberapa teks</div>"), "&lt;div kelas =&quot;someclass&quot;&gt;Beberapa teks&lt;/div&gt;", "Lebih kompleks tes string.");
        });

        modul("getDateAsCaml");
        tes("QuizUtil getDateAsCaml()", fungsi () {
            sama(getDateAsCaml(baru Tanggal("12/31/2013")), "2013-12-31T:00:00:00", "Pengujian kode keras tanggal: [12/31/2013]");
            sama(getDateAsCaml(baru Tanggal("01/05/2014")), "2014-01-05T:00:00:00", "Pengujian kode keras tanggal: [01/05/2014]");
            sama(getDateAsCaml(baru Tanggal("01/31/2014")), "2014-01-31T:00:00:00", "Pengujian kode keras tanggal: [01/31/2014]");
            sama(getTodayAsCaml(), getDateAsCaml(baru Tanggal()), "getTodayAsCaml() harus sama dengan getDateAsCaml(Tanggal baru())");
            sama(getDateAsCaml("nilai omong kosong"), terdefinisi, "Mencoba untuk mendapatkan tanggal nilai omong kosong.");
            sama(getDateAsCaml(terdefinisi), terdefinisi, "Mencoba untuk mendapatkan tanggal [terdefinisi] tanggal.");
        });

        modul("getParameterByName");
        tes("QuizUtil getParameterByName (dari string kueri)", fungsi () {
            sama(getParameterByName(terdefinisi), terdefinisi, "Mencoba untuk mendapatkan parameter terdefinisi harus kembali undefined.");
            sama(getParameterByName("tidak ada"), terdefinisi, "Cobalah untuk mendapatkan nilai parameter ketika kita tahu parameter yang tidak ada.");

        });

        modul("Cookies");
        tes("QuizUtil berbagai fungsi kuki.", fungsi () {
            sama(setCookie("ujian", "1", -1), getCookieValue("ujian"), "Dapatkan saya menetapkan cookie harus bekerja.");
            sama(setCookie("anycookie", "1", -1), benar, "Pengaturan memasak sah harus kembali 'benar'.");
            sama(setCookie("nama cookie gila !@#$%"%\^&*(()?/><.,", "1", -1), benar, "Menetapkan nama buruk cookie harus kembali 'palsu'.");
            sama(setCookie(terdefinisi, "1", -1), terdefinisi, "Lewat undefined sebagai nama cookie.");
            sama(getCookieValue("tidak ada"), "", "Cookie tidak ada tes.");
        });

    </script>
</kepala>
<bodyHTMLan >><  kuat >  pesan yang kuat.</strong>  </body>  </html> ">
    <div id= "kebun buah-buahan"></div>
    <div id= "kebun buah-buahan-fixture"></div>

</bodyHTMLan >><  kuat >  pesan yang kuat.</strong>  </body>  </html> ">
</HTML>

Ada beberapa hal yang terjadi di sini:

  1. Kode saya referensi (QuizUtil.js)
  2. Referensi Qunity.js
  3. Mendefinisikan beberapa modul (getIDFromLookup, Cookie, dan lain-lain)
  4. Menempatkan <div> ID Apakah "kebun buah-buahan".

Kemudian, Aku hanya menarik Halaman ini dan Anda mendapatkan sesuatu seperti ini:

image

Gambar 3

Jika Anda melihat di atas, Anda memiliki beberapa pilihan, dua di antaranya menarik:

  • Sembunyikan lulus tes: Cukup jelas.  Dapat membantu mata Anda hanya melihat area masalah dan tidak banyak kekacauan.
  • Modul: (drop-down): Ini akan menyaring tes ke kelompok-kelompok tersebut hanya tes yang Anda inginkan.

Untuk tes sendiri – beberapa komentar:

  • Tak usah dikatakan bahwa Anda perlu untuk menulis kode Anda sedemikian rupa sehingga hal ini dapat diuji di tempat pertama.  Menggunakan alat dapat membantu menegakkan disiplin. Misalnya, Aku punya fungsi yang disebut "getTodayAsCaml()”.  Ini bukan sangat diuji karena ini membutuhkan tidak ada argumen masukan dan mengujinya untuk kesetaraan, kita perlu terus-menerus memperbarui kode tes untuk mencerminkan tanggal saat ini.  Saya direfractor dengan menambahkan data input parameter kemudian melewati tanggal saat ini ketika aku ingin tanggal dalam CAML format.
  • Dokumen-dokumen kerangka kerja kebun buah-buahan tes sendiri, dan tampaknya cukup kuat.  Ini dapat melakukan hal-hal sederhana seperti pengujian untuk kesetaraan dan juga memiliki dukungan untuk panggilan gaya ajax ("nyata" atau diejek menggunakan mocker favorit Anda).
  • Melalui proses juga memaksa Anda untuk memikirkan edge kasus-apa yang terjadi dengan "undefined" atau null dilewatkan ke dalam fungsi.  Itu membuatnya mati sederhana untuk menguji skenario ini keluar.  Bagus.

Cakupan dengan Blanket.js

Blanket.js melengkapi kebun buah-buahan pelacakan sebenarnya baris kode yang mengeksekusi selama menjalankan tes Anda.  Ini mengintegrasikan kanan ke kebun buah-buahan jadi meskipun itu adalah sebuah aplikasi seluruh terpisah, It memutar baik-itu benar-benar tampak seperti satu app mulus.

Ini adalah blanket.js dalam aksi:

image Gambar 4

image

Gambar 5

(Anda benar-benar harus klik pada kotak centang "Aktifkan cakupan" di bagian atas [Lihat gambar 3] untuk mengaktifkan ini.)

Baris yang disorot dalam gambar 5 belum dilaksanakan oleh salah satu tes, Jadi saya perlu menyusun tes yang menyebabkan mereka untuk melaksanakan jika saya ingin cakupan penuh.

Dapatkan blanket.js bekerja dengan mengikuti langkah-langkah:

  1. Men-download dari http://blanketjs.org/.
  2. Tambahkan ke proyek Anda
  3. Memperbarui halaman percobaan Anda memanfaatkan (QuizUtil_test.html dalam kasus saya) sebagai berikut:
    1. Referensi kode
    2. Menghias Anda <script> referensi seperti ini:
    <script jenis= text/javascript"" src="QuizUtil.js" data-cover></script>

Blanket.js mengambil atribut "data-penutup" dan melakukan keajaiban.  Kait ke kebun buah-buahan, Update UI untuk menambahkan opsi "Aktifkan cakupan" dan voila!

Ringkasan (TL; DR)

Menggunakan kebun buah-buahan untuk menulis Anda uji kasus.

  • Men-download
  • Tambahkan ke proyek Anda
  • Menulis sebuah halaman harness tes
  • Membuat tes Anda
    • Refactor beberapa kode Anda harus diuji
    • Menjadi kreatif!  Pikirkan gila, mungkin skenario dan menguji mereka tetap.

Gunakan blanket.js untuk memastikan cakupan

  • Memastikan kebun buah-buahan bekerja
  • Download blanket.js dan menambahkannya ke proyek Anda
  • Tambahkan ke halaman Anda baju zirah tes:
    • Menambahkan referensi ke blanket.js
    • Menambahkan atribut "data-penutup" untuk Anda <script> Tag
  • Menjalankan tes kebun buah-buahan Anda.

Saya tidak pernah melakukan hal ini sebelum dan memiliki beberapa hal dasar yang bekerja dalam beberapa jam. 

Pengujian bahagia!

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Setelan terakhir Anda akan pernah memakai?

[Cepat Catatan-ini adalah posting yang cukup panjang di lowongan pekerjaan untuk kelompok saya di sini di New York dan Anda perlu untuk tinggal di kawasan tri-state jika Anda tertarik.]

Saya bergabung Slalom konsultasi selama 18 bulan yang lalu dan yang membuat ini pekerjaan terpanjang abadi sejak 2007. Aku tidak merencanakan hal seperti itu. Sebelum serangkaian pekerjaan melompat yang dimulai dengan saya melompat ke dunia SharePoint, Aku berada di satu tempat selama sebelas tahun. Akhirnya saya menemukan baru, abadi tempat untuk bekerja untuk waktu yang lama di sini di Slalom.

Tempat ini tumbuh dan aku butuh bantuan untuk mengontrol yang. Jenis help I need ini biasanya disebut "arsitek Solusi SharePoint" meskipun saya telah menemukan kata arsitek lebih dari dan/atau salah digunakan di ruang SharePoint untuk beberapa waktu sekarang. Aku sudah berjuang bagaimana blog tentang ini. Aku tidak ingin hanya daftar out a bunch dari poin-poin dalam dadu rakasa gaya. Rekan-rekan merekrut yang sangat baik saya telah melakukan yang sudah :). Jadi, Saya memutuskan untuk mengambil pendekatan "hari dalam kehidupan". Read it over dan mempertimbangkan:

1) Jika menarik dan

2) Apakah Anda tahu di tulang Anda bahwa Anda bisa melakukannya.

Jika ya, Hubungi saya (Paul.Galvin@slalom.com) dan mari kita bicara.

Ini adalah apa yang dapat Anda harapkan dalam minggu/bulan khas sebagai seorang arsitek solusi di tim saya:

  • Menjalankan proyek-proyek, seringkali lebih dari satu per satu waktu. Beberapa proyek-proyek besar dan begitu Anda akan memiliki itu satu proyek. "Menjalankan" proyek berarti bahwa Anda memiliki pengawasan dan tanggung jawab untuk kualitas keseluruhan pengiriman. Dalam hampir setiap kasus, Anda akan memiliki PM dan tim benar-benar kuat devs, BAs, Orang-orang UX, dll., untuk mendukung Anda. Tetapi Anda akan lebih utama wajah klien melihat, Trust, dll. Ada tidak bersembunyi dalam bayang-bayang dalam peran ini :). Anda akan menagih saat ini dan tujuannya adalah untuk membuat Anda cukup sibuk untuk melakukan hal ini 80 persen dari waktu.
  • Bantuan dengan dokumen-dokumen – menabur, RFPs, geladak-semua yang bagus. Saya pikir kita memiliki proses MENABUR kami turun cukup ketat dan padat sehingga cukup baku. Jika Anda terbiasa menulis menabur hari ini, proses kami tidak akan menjadi tantangan bagi Anda. RFPs-ini sedikit lebih keras. Mereka cenderung bespoke di alam untuk memulainya dan RFPs biasanya menarik beberapa penulis yang berbeda. Ini baik dan buruk, tapi terutama baik. Ini bisa scrambly ketika kita perlu untuk menyeimbangkan kebutuhan untuk Layanan Pelanggan yang sangat baik sementara juga mencoba untuk memenangkan pekerjaan baru. Anda mungkin tidak akan memiliki RFP tetapi Anda akan diminta untuk memberikan kontribusi bagian.
  • Penjualan panggilan, tapi tidak lebih dekat. Dalam satu bulan, Anda dapat mengharapkan untuk pergi pada beberapa penjualan panggilan dengan tim penjualan kami. Anda akan UKM dalam kamar, mencatat dan membantu membentuk solusi. Namun, Anda tidak akan diminta atau diharapkan untuk menangani siklus penjualan dari awal sampai akhir. Anda tidak perlu untuk "menjual,"Anda hanya perlu menjadi suara tenang ahli alasan dalam kamar. Membangun kepercayaan dan keyakinan dan itulah mengapa kau ada di sana. Tentu saja, Jika Anda ingin menjual, kemudian ada ruang bagi Anda untuk tumbuh di sini terlalu.
  • Membantu dengan merekrut. Kami memiliki beberapa jenis program referal, Jadi jika Anda tahu benar-benar orang-orang yang kuat dalam masyarakat yang menurut Anda harus menjadi bagian dari Slalom, Anda bisa mendapatkan keuntungan dengan cara itu. Kami telah mendedikasikan perekrut (yang sangat baik) untuk melakukan porsi pekerjaan semacam ini. Bantuan nyata adalah mewawancarai kandidat – Apakah mereka cocok budaya? Mereka tahu barang-barang mereka? Mereka dapat * saya * hidup lebih mudah? 🙂 This comes in spurts, beberapa kali dalam sebulan, Meskipun dalam beberapa bulan Anda tidak akan melakukannya sama sekali.
  • Membantu menentukan praktik terbaik, membangun IP kita dan membuat kita lebih kompetitif di pasar. Kau berpengalaman pria/gal. Anda telah di sekitar blok-bukan hanya dalam SharePoint, Tapi Anda memiliki pengalaman dalam teknologi lainnya dan hidup melalui baik dan buruk (bahkan mengerikan) Proyek seluruh. Akibatnya, Anda tahu apa yang berhasil dan yang tidak. Kita akan ingin Anda untuk berbagi pengalaman dengan kami pada hari ke hari taktis dalam arti (yaitu. menjalankan proyek-proyek Anda benar-benar baik) tetapi juga strategis. "Praktek terbaik" sedikit berlebihan sebagai istilah dan saya ragu-ragu untuk menggunakannya. Ide dasarnya adalah bahwa Anda datang sebagai orang yang berpengalaman dengan pengalaman mendalam dan relevan dan kami ingin mengintegrasikan yang terbaik dari pembelajaran Anda ke dalam bagaimana kita terlibat dengan pelanggan pada hari ke hari.
  • Selamat bersenang-senang -Kami adalah sekelompok sangat terpadu. Saya ingin menghindari kata-kata lain basi, Tapi itu benar-benar tepat dalam hal ini-kami bekerja keras (semacam) dan kami bermain lebih keras :). Ada Aaron Sorkin olok-olok di sini, Kamar ini selalu penuh dengan orang-orang pintar, kita seperti minuman kami dan kami mengatur sejumlah yang lumayan menyenangkan peristiwa-film malam, perjalanan bisbol (bahkan jika mereka mengerikan, Tim praktis jahat).

Jika saya bisa jumlah itu semua ke dalam satu kata, Saya akan menggunakan kata "kepemimpinan." Memimpin proyek, mengambil peran utama dalam membangun praktek (IP, membangun tim), dll.

Tapi tunggu! Ada lebih! Mengapa lain bekerja di Slalom?

  • Luar biasa kesatuan intent-semua orang ingin tumbuh hal ini keluar. "Hal ini" adalah kantor New York. Semua orang adalah on board dengan ini.
  • Angin di layar Anda – adik kantor, Suster praktek-Slalom adalah "layanan penuh" konsultasi organisasi. Saya memimpin praktek SharePoint ("praktek daerah menyebabkan" di Slalom lingo). Aku punya Suster praktek di 11 kantor-kantor Slalom lain. Jadi meskipun aku raja sejauh SharePoint yang bersangkutan di sini di Slalom New York, Aku punya praktek-praktek rekan di Chicago, Seattle, Dallas, Atlanta, Boston, dll. dari mana saya dapat menarik atas dukungan. Itu adalah benar-benar yang terbaik dari dua dunia-signifikan otonomi di sini di New York tapi akses ke ton dari bakat di seluruh organisasi.
  • Angin di penjualan Anda (2) – Kami melakukan lebih dari SharePoint-lebih. Kami melakukan BI, CRM, UX, konsultasi bisnis, Mobile, pembangunan kustom dan lain-lain. Kita baik di salib menjual antara diri kita sendiri dan kita sedang baik di lukisan- dan lebih penting lagi, memberikan atas-gambar "layanan penuh" untuk klien kami. Hal ini terutama menarik untuk saya. Aku sudah di banyak lebih kecil orgs bekerja pada SharePoint pertunjukan dan frustrasi berulang-ulang karena kami pigeon holed sebagai "orang SharePoint." Itu tidak terjadi dengan Slalom dan kita bisa melakukan pekerjaan yang lebih menarik sebagai akibatnya.
  • Model lokal – tidak perjalanan.
  • Pertumbuhan jangka panjang-Slalom telah terjadi gangbusters. Banyak pertumbuhan dan stabilitas. Pertumbuhan juga berarti bahwa kita perlu untuk menyewa pemimpin hari untuk kepala tim baru seperti yang kita menambahkan lebih banyak klien dan staf untuk mendukung klien mereka.

Aku bisa terus, tapi aku mungkin sudah pergi terlalu lama. Saya pikir saya telah menangkap inti di sini. Jika Anda berpikir tentang mengubah pekerjaan dan ini terlihat baik untuk Anda, Mari kita bicara.

Jika Anda senang pada pekerjaan Anda saat ini-Mari kita bicara lagi pula :). Saya sudah berada di banyak tempat dan sangat "senang" pada waktu yang. Slalom berbeda dan aku akan menyambut kesempatan untuk meyakinkan Anda bahwa.

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Cepat dan mudah: Mengatur ukuran item dalam daftar kotak di App Windows Store

Di jendela toko App saya menciptakan, Saya ingin menunjukkan pengguna berbagai informasi pesan.  Aku mengambil suatu ListBox sebagai alat untuk menunjukkan itu sehingga mereka dapat menggulir melalui mereka dan semua yang baik stuff. 

Pesan informasi hanya, Jadi tidak perlu untuk memberikan semua yang ekstra spasi di sekitar mereka karena pengguna dapat tidak pernah memilih mereka untuk apa pun.  Perilaku default ListBox menyediakan sejumlah besar padding dan aku ingin menyingkirkan itu.  Yah.... Anda tidak dapat melakukan hal seperti itu pada ListBox langsung.  NAMUN, dapat Anda lakukan untuk item yang Anda tambahkan:

        swasta Batal AddGameStateLogMessage(string 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 li = baru ListBoxItem();
            Li.Konten = t;
            Li.MaxHeight = 25;
            thisPadding = baru Ketebalan(5, 0, 5, 0);
            Li.Padding = thisPadding;

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

di atas, Saya menciptakan TextBox dan pengaturan font yang, padding yang, dll.

Berikutnya, Membuat ListBoxItem dan mengatur konten ke TextBox diformat.

Akhirnya, Saya masukkan ListBoxItem ke ListBox.  (Saya ingin menunjukkan pesan-pesan terbaru di bagian atas daftar, maka Insert(0,Li) bukan Add sederhana() doa.).

Saya akan tweaker ini sedikit sebelum aku benar-benar senang dengan perilaku ListBox tetapi dengan pola yang ditampilkan di atas telah sangat bermanfaat.  Mudah-mudahan orang lain menemukan itu berguna.

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin