วิธีการระบุคนเป็นขอบเขตการค้นหา / แหล่งเนื้อหาโดยใช้ SharePoint 2013 เหลือ API

มีเหตุผลทำงานร่วมกับ SharePoint 2013 ค้นหา API ผ่านเหลือเป็นครั้งแรก. อยากจะหาคน, เอกสารไม่. คีย์ที่เรียนที่นี่เป็นที่ที่คุณระบุแหล่งเนื้อหาผ่าน GUID ของ (หรืออย่างน้อยในกรณีนี้). ส่วนย่อยของโค้ดต่อไปนี้ jQuery แสดงวิธี:

    loadExpertsAsync: ฟังก์ชัน() {

        jQuery.support.cors = จริง;

        $.อาแจ็กซ์({
            url: นี้.CreateFullApiUrl() +
                "?querytext = 'พอร์ทัล'&รหัสแหล่งข้อมูล = 'b09a7990-05ea-4af9-81ef-edfab16c4e31'" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,ทักษะ,AboutMe,สนใจ,JobTitle,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&rowlimit = 99",
            วิธีการ: "รับ",
            หัวข้อ: { "ยอมรับ": "แอพลิเคชัน/เจซัน; odata = verbose" },
            แคช: เท็จ,
            ประสบความสำเร็จ: ฟังก์ชัน (ผล) {

ในกรณีของฉัน, ฉันทำงาน API กับ SharePoint ออนไลน์. รับ GUID, ผมตามขั้นตอนเหล่านี้:

  1. เข้าศูนย์ผู้ดูแล SharePoint
  2. เลือก "ค้นหา" จากการนำทางซ้ายมือ
  3. เลือก "จัดการแหล่งผล"
  4. เลือก "ประชาชนผลลัพธ์"
  5. ดูที่ URL.

URL ของฉันดูเหมือน:

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

พารามิเตอร์รหัสแหล่งข้อมูลเป็นที่ทำงานให้ฉัน.

(ผมเข้าใจว่า รหัสแหล่งข้อมูลจริงอาจจะเรียงลำดับของสิ่งถาวรกับ SP, but I’ll always check anyway 🙂 ).

</สิ้นสุด>

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

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

เรียกเหลือ SharePoint ตัวอย่าง

นี่คือชุดของเรียกเหลืออย่างที่ฉันทำงาน และอาจช่วยให้คุณออกด้วย. เป็นของ 02/2014, there are two examples 🙂

  1. การอ้างอิงคอลัมน์ ด้วยช่องว่างในชื่อ
  2. อ้างอิงที่เลือกหลายคอลัมน์
  3. ทำการค้นหาคนผ่านเหลือ

 

ฉันจะเพิ่มไปเมื่อเวลาผ่าน.

ที่นี่มีหมึกบางประโยชน์ได้พบเช่น:

การอ้างอิงคอลัมน์ ด้วยช่องว่างในชื่อ

ฉันสร้างรายการกำหนดเอง มีคอลัมน์ชื่อ "ผู้เขียนบล็อก" (ช่องว่างระหว่างบล็อกและผู้เขียน).

$select การอ้างอิงคอลัมน์ได้:

image

เพียงแทนช่องว่าง ด้วย "_x0020_". เราเห็น _x0020_ ในตัวอย่างมากมายระหว่าง internets และส่วนที่เหลือจะไม่แตกต่าง.

ถ้าคุณไม่ทำ, คุณต้องได้รับข้อผิดพลาดนี้:

นิพจน์ “ผู้เขียนบล็อก” ไม่ถูกต้อง.

ง่ายพอ.

อ้างอิงค้นหาเลือกหลายคอลัมน์

ตั้งค่า:

  1. สร้างรายการแบบกำหนดเองที่ชื่อประเภท.
  2. เพิ่มบางประเภท. เพิ่มประเภท thusly:image
  3. สร้างรายการกำหนดเองอื่นที่เรียกว่า MockBlog และเพิ่มประเภทเป็นรายการเลือกหลายคอลัมน์ (หรือไซต์คอลัมน์ถ้าเป็นวิธีหมุน).

เพิ่มสินค้าบางรายการของคุณ Mockblog และคุณ.

การใช้ jQuery เรียกสไตล์อาแจ็กซ์จะมีลักษณะเหมือนกับ:

serverUrl  = "/_api/เว็บ/รายการ/GetByTitle('MockBlog')/รายการ" +
             "?$เลือก =ชื่อเรื่อง,ประเภท/ชื่อเรื่อง,Blog_x0020_Author/ชื่อ เรื่อง" + 
             "&$ขยาย = Blog_x0020_Author,ประเภท";

เรากำลังบอก SharePoint "ให้ฉันชื่อเรื่องสำหรับทุกประเภท (ประเภท/ชื่อเรื่อง). รับค่าของจริง ชื่อเรื่อง โดย $ขยายing รายการประเภทนี้" (ฉันถอดความนิยมจะหลวมคงสวย, แต่นี้ว่าฉันกำลังตีความมัน).

ถ้าคุณกำลังทำนี้ผ่าน JavaScript และใช้พู้ทำเล่นเพื่อดูผลลัพธ์, คุณได้รับสิ่งนี้กลับ:

 

image

(ด้านบนเป็นวัตถุเจซัน)

ทำการค้นหาคนผ่านเหลือ

ฉัน blogged เรื่องนี้ต่างหาก. สำคัญคือการ ระบุพารามิเตอร์รหัสแหล่งข้อมูลที่มีค่าเป็น GUID ของคนในท้องถิ่นแหล่งเนื้อหา. (แหล่งเนื้อหาใช้เรียกขอบเขต และจะไม่ยากดังนั้นฉันโอ้ ของฉันเรียกขอบเขตสำหรับฉันทุกอย่าง!).

อ่านเพิ่มเติมเกี่ยวกับการได้ที่นี่: http://www.mstechblogs.com/paul/?p=10385

 

</สิ้นสุด>

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

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

ง่าย และรวดเร็ว: สร้างไซต์ SharePoint โดยใช้ส่วนที่เหลือ

มีมากมายของทรัพยากรสถานที่แสดงวิธีการทำเช่นนี้, แต่รอยเชื่อมโยงครอบคลุมไปที่, ดังนั้นที่นี่เรามี.

คุณสามารถสร้างไซต์ SharePoint โดยใช้ API เหลือ  นี่เป็นตัวอย่างที่อบทั้งหมด:

<!--
    SiteRequestForm.html: รวบรวมข้อมูล และสร้างไซต์สำหรับผู้ใช้.
-->

<ศูนย์>
<ตาราง>
    <tr>
        <td>ชื่อเว็บไซต์:</td>
        <td><ป้อนข้อมูล ชนิด= "ข้อความ" ชื่อ"SiteName =" รหัส"SiteName =" /></td>
    </tr>
    <tr>
        <td colspan= "2">
            <ป้อนข้อมูล ชนิด= "ส่ง" รหัส= "CreateSiteButton" ค่า= "สร้างเว็บไซต์" />
        </td>
    </tr>
</ตาราง>
</ศูนย์>

<สคริปต์ src="../Plugins/jquery-1.11.0.min.js"></สคริปต์>

<สคริปต์>
var CreateSiteLogicContainer = {

    createSiteData: {
            "พารามิเตอร์": {
                __metadata: { "ชนิด": "SP.WebInfoCreationInformation" },
                Url: "Paultest1",
                ชื่อเรื่อง: "Paultest1",
                คำอธิบาย: "ส่วนที่เหลือสร้างเว็บ โดยพอล!",
                ภาษา: 1033,
                WebTemplate: "sts",
                UseUniquePermissions: เท็จ
            }
    },

    createSite: ฟังก์ชัน () {

        jQuery.support.cors = จริง;

        CreateSiteLogicContainer.createSiteData.parameters.Url = $("#SiteName").val();
        
        $.อาแจ็กซ์({
            url: "https://bigapplesharepoint.sharepoint.com/NBAIADev/_api/web/webinfos/add",
            วิธีการ: "ลงรายการบัญชี",

            หัวข้อ: {
                "ยอมรับ": "แอพลิเคชันเจซัน; odata = verbose",
                "ชนิดเนื้อหา": "แอพลิเคชันเจซัน;odata = verbose",
                "X-RequestDigest": $("#__REQUESTDIGEST").val()
            },

            ข้อมูล: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            ประสบความสำเร็จ: ฟังก์ชัน () { การแจ้งเตือน("ความสำเร็จ""); },
            ข้อผิดพลาด: ฟังก์ชัน () { การแจ้งเตือน("ข้อผิดพลาด"); }

        });
    },

    wireUpForm: ฟังก์ชัน () {
        $("#CreateSiteButton").คลิก(ฟังก์ชัน () {
            การแจ้งเตือน("จะลอง และสร้างเว็บไซต์");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</สคริปต์>

เมื่อประสบความสำเร็จ, คุณได้รับแพคเก็ตเจซันตอบเช่นนี้:

image

หลักความคิดของฉันและ learnings จากนี้รวม:

  • วิธีการนี้ใช้ jQuery  ในกรณีของฉัน, ไลบรารี jQuery อยู่ ".../ ปลั๊กอิน "  คุณต้องการเปลี่ยนแปลงที่ชี้ไปยังตำแหน่งของ JQ โปรด.
  • คุณสามารถคัดลอก และวางที่ส่วนย่อยของโค้ดทั้งหมดใน Web Part ตัวแก้ไขเนื้อหาบนหน้ากระดาษ และควรทำเพียงปรับ  คุณจะต้องเปลี่ยนแปลงจุดสิ้นสุดของการเรียก API และแน่ใจว่าคุณอ้างอิง JQ อย่างถูกต้อง.
  • URL เป็นปลายทางของ API  ในกรณีของฉัน, มันเป็นการสร้างไซต์ย่อยภายใต้ https://bigapplesharepoint.com
  • คุณไม่จำเป็นเพื่อให้เนื้อหามีความยาว. บางบทความบล็อกและ MSDN เอกสารหมายถึงการที่คุณทำ, แต่เกิดให้ฉันโดยอัตโนมัติ, ซึ่งผมถือว่าการจัดการ โดยการเรียก.ajax $เอง.
  • บรรทัดนี้เป็นสิ่งจำเป็นเพื่อหลีกเลี่ยงการตอบสนองที่ "ต้องห้าม": "X-RequestDigest": $("#__REQUESTDIGEST").val().  มีวิธีอื่นที่, แต่นี่คือสวยดี  ฉันได้สูญเสียการเชื่อมโยงกับบล็อกที่ให้ทางลัดนี้  H/T คุณ, blogger ลึกลับ!

โชคดีและความหวังนี้ช่วยให้คนออก.

</สิ้นสุด>

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

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

เอาชนะปัญหาน่ารำคาญ ด้วย Url แบบย่อในเปิด SharePoint อย่างรวดเร็ว

อยากจะเพิ่มการเชื่อมโยงการนำเปิดใช้งานด่วนในวันอื่น ๆ และ SharePoint บอกฉัน:

image

รุ่นข้อความล้วนที่เป็น:

ให้แน่ใจว่า URL ถูกต้อง และเริ่มต้น ด้วยทั้งอักขระที่ถูกต้อง (เครื่องหมายเลข (#) หรือเครื่องหมายทับไปข้างหน้า (/)) หรือโพรโทคอลที่สนับสนุนถูกต้อง (ตัวอย่างเช่น, ' http://’, ' https://’, ' ไฟล์://’, ' ftp://’, ' mailto:’, ' ข่าว:’).

"Blech และ pox!"ผมพูด.

วิธีแก้ปัญหานี้คือการ ใช้ JavaScript เพื่อค้นหาการเชื่อมโยงรู้จักในการเปิดใช้งานด่วน และแทนลักษณะการทำงานของ.

การทดสอบนี้, เพิ่มการเชื่อมโยงใหม่ไซต์ทดสอบ thusly:

image

ใช้ jQuery. เมื่อต้องการแก้มัน, บาง JavaScript และ jQuery ไปหน้าโดยใช้เทคนิคของคุณชื่นชอบ และ มีบรรทัดของรหัสนี้:

 

$(เอกสาร).พร้อม( ฟังก์ชัน () {

    $("การ:ประกอบด้วย('ทดสอบ URL แทน')").คลิก(ฟังก์ชัน () { การแจ้งเตือน("คลิกเปลี่ยนลักษณะการทำงาน!"); เที่ยวกลับ เท็จ;});

});

และ คุณลุงบ๊อบ.

ค้นหาตัว jQuery ทุก <การ> แท็กที่มีชื่อ "ทดสอบ URL แทน". คุณอาจต้องการค้นหาเพลงที่เชื่อมโยงของคุณและเช่น.

.Click(ฟังก์ชัน() เพียง SharePoint จะทำเมื่อผู้ใช้คลิกแทน. ให้แน่ใจว่า คุณ "ส่งคืนเท็จ" หรือ อื่น ๆ จะทำสิ่งของ และลองสิ่ง href เกินไป, ที่ไม่ได้เกือบแน่นอนเป้าหมายของคุณ.

นี้เสร็จ และทดสอบใน SharePoint ออนไลน์แต่ควรทำงานที่ดีใน 2010 และเร็วเกินไป.

</สิ้นสุด>

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

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

ง่าย และรวดเร็ว: SharePoint เหลือโทรคืนเท่านั้น 100 เรกคอร์ด

ฉันได้ทำงานบนเว็บไซต์หันสาธารณะสำหรับการปฏิบัติของฉัน SharePoint ที่นี่ใน นิวยอร์ก และใช้มากเรียก JavaScript และอื่น ๆ เพื่อแสดงเนื้อหา.

ในระหว่างการพัฒนา mainline, ฉันสร้างชุดข้อมูลขนาดเล็กมีเพียง 10 หรือดึงให้ แถวในรายการที่กำหนดเองและเรียกส่วนที่เหลือของฉันทั้งหมดจาก  เมื่อฉันชนอัพรายชื่อให้ข้อมูลการทดสอบคาดว่าจะเติบโตกี่ร้อยแถว, พบว่า ก็คือการตรง 100 แถวที่ส่งกลับจึงเรียกส่วนที่เหลือของฉัน.

นี้เป็นสิ่งง่ายมากให้อยู่  ในกรณีของฉัน (และผมเชื่อว่าส่วนใหญ่), เริ่มต้นเหลือเรียกการ SharePoint (และอาจ เป็นมาตรฐานอุตสาหกรรม?) เที่ยวกลับ 100 แถว  กลับเริ่มต้นมากกว่า, ใช้พารามิเตอร์ $top บนโทรศัพท์ของคุณ, เช่นใน:

รับ /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/รายการ?$เลือก = ID,ชื่อเรื่อง,ประเภท/ชื่อเรื่อง,Blog_x0020_Author/ชื่อ เรื่อง,DatePublished,BlogSummary&$ขยาย = Blog_x0020_Author,ประเภท&$กรอง =&$ด้านบน = 9999

ฉันเลือก 9999 ในกรณีนี้ ตั้งแต่ผมรู้ว่า growth-wise, ไม่มีมากกว่า 200 หรือเพื่อ เพิ่มแถวลงในรายการนี้ในปี  ถ้ามัน ungainly, เราสามารถนำบางเพลงถนน.

</สิ้นสุด>

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

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

ง่าย และรวดเร็ว: แก้ "พารามิเตอร์ URL ไม่ถูกต้อง” ปัญหากับ UpdateListItems lists.asmx

เมื่อทำงานกับ UpdateListItems ผ่าน lists.asmx, ง่ายต่อการสร้างข้อผิดพลาด:

พารามิเตอร์ URL ไม่ถูกต้อง.

ผู้ให้บริการประกอบด้วยคำสั่งหรือค่าไม่ถูกต้อง. กรุณาตรวจสอบ URL อีกครั้ง.

คุณจะได้รับข้อผิดพลาดนี้เมื่อคุณลืมที่จะรวมรหัสในการรายการของฟิลด์การปรับปรุงได้  นี้, ชอบมากของ SP เว็บบริการเหล่านี้, เป็นบิต counterintuitive เนื่องจากจะต้องใส่ ID ในแอตทริบิวต์ ID ของ <วิธีการ> องค์ประกอบการ  และคุณไม่ปรับปรุง ID และไม่ต้องการแรก.

งานนี้ซองสบู่:

<soapenv:Xmlns ซองจดหมาย:soapenv =' http://schemas.xmlsoap.org/soap/envelope/'>
  <soapenv:เนื้อความ>                      
    <UpdateListItems xmlns =' http://schemas.microsoft.com/sharepoint/soap/'>                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <การปรับปรุง>                     
         <ชุด OnError ="ต่อไป">
          <รหัสวิธี ="1" คำสั่ง ="ปรับปรุง">
            <ฟิลด์ชื่อ ="CooperativeLock">ล็อก!</ฟิลด์>
            <ฟิลด์ชื่อ ="ID">1</ฟิลด์>
          </วิธีการ>
        </ชุด>                     
        </การปรับปรุง>                
      </UpdateListItems>             
  </soapenv:เนื้อความ>         
</soapenv:ซองจดหมาย>

ถ้าคุณถอดเสื้อผ้าออกอ้างอิงฟิลด์รหัส แล้วคุณจะได้รับข้อความ "พารามิเตอร์ URL ไม่ถูกต้อง" น่ารำคาญ.

</สิ้นสุด>

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

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

 

คนดีของแคใน JavaScript

[TL;รุ่น DR: ใช้คุกกี้เพื่อเก็บผลลัพธ์ของการเรียกต่างเวลา; แสดงผลผ่านมาต่างเวลาเรียกทันที และตรวจสอบได้หลังจากโหลดหน้า]

ฉันได้ทำงานบนไซต์ SharePoint ของอินทราเน็ตสำหรับไคลเอนต์ซึ่ง, ในสิ่งอื่น ๆ, เป็นสุกใสรองนำตัวเลือกที่เมนูจัดการผ่านรายการที่กำหนดเองเก่าปกติ  ความคิดเป็นว่า ไคลเอนต์ได้รับการควบคุมเมนูของเว็บไซต์ "ของ" โดยไม่กระทบหรือรับผลกระทบจากการนำโลกดับโดย.

(มีทุกสิ่งอย่างเหลือเชื่อ subversive เกี่ยวกับการเพิ่ม CEWP ที่ชี้ไปยังแฟ้ม HTML ที่โหลด CSS และ JS บางพื้นฐานเปลี่ยนเกือบทุกอย่างเกี่ยวกับการทำงานของเว็บไซต์... แต่ที่ใช้สำหรับการลงรายการบัญชีอื่น)

รหัสสำหรับนี้ง่ายสวย:

  • รอหน้าเสร็จสิ้นการโหลด และทำต่างเวลาการเรียกโหลดรายการเมนูจากรายการโดยใช้ส่วนที่เหลือ หรือ lists.asmx หรืออะไรก็ตาม
  • ใช้ jQuery, ใส่พวงแบบไดนามิกหาก <li>ของภายในเป็นหลัก <ul> (ดูคริสเตียน Pinder บทที่นี่สำหรับคำอธิบายพี่ tecnnique นี้)
  • ใช้ CSS ในการทำทั้งหมดการจัดรูปแบบ
  • กำไร!

ที่นี่จุดเจ็บคือทุกครั้งที่คนฮิตหนึ่งหน้าของเว็บไซต์, เบราว์เซอร์ของผู้ใช้ได้ถึงจะได้รับสินค้าจากรายการ  เมื่อเดฟสมบูรณ์ และทดสอบ ได้พิสูจน์สิ่งที่มั่นคง และสมบูรณ์, สายนี้มีความจำเป็นมากกว่า 99% เวลาตั้งแต่เมนูไม่ค่อยเปลี่ยนแปลง  มีผล UI แปลกซึ่งมีทั่วไปในโลกใหม่นี้กล้าไฮเปอร์ ajaxy เว็บไซต์ – ทำหน้า และหลังจากนั้น ไม่เมนูแสดง  ภาพกระตุก และรบกวนในมุมมองของฉันได้  และภาพกระตุก. ดังนั้น, แค 

ฉันปรับเปลี่ยนแบบตรรกะ thusly:

  • หาคุกกี้ในเบราว์เซอร์ที่ประกอบด้วยเมนูล่าสุดอ่านว่า
    • ถ้าพบ, แสดงทันที  ไม่รอหน้าเสร็จสิ้นการโหลด  (คุณต้องแน่ใจว่าวาง HTML ของคุณเชิญที่นี่, แต่ไม่ยาก).
  • รอหน้าเสร็จสิ้นการโหลด และทำต่างเวลาการเรียกโหลดรายการเมนูจากรายการโดยใช้ส่วนที่เหลือ หรือ lists.asmx หรืออะไรก็ตาม
  • เปรียบเทียบสิ่งที่ผมมีกับใคร
    • ถ้ามันตรงกับ, หยุด
    • มิฉะนั้น, ใช้ jQuery, ใส่พวงแบบไดนามิกหาก <li>ของในตัว <ul>
  • ใช้ CSS ในการทำทั้งหมดการจัดรูปแบบ
  • กำไร!

บางท่านจะบอกว่า, "เฮ้! ไม่มีจะจริงแคที่นี่เนื่องจากคุณกำลังอ่านเมนูต่อไป ทีเดียว.”  และคุณขวา – ฉันกำลังไม่นำเซิร์ฟเวอร์ใด ๆ ที่ทำลาย  แต่เนื่องจากการโทรอยู่ต่างเวลา และเกิดขึ้นหลังจากหน้าของเริ่มต้น ส่วนของข้อมูลของ HTML เต็มสภาพ, "รู้สึก" มากกว่าตอบสนองต่อผู้ใช้  เมนูทำสวยมากวาดหน้า  ถ้าเมนูเกิดขึ้นกับการเปลี่ยนแปลง, ผู้ใช้จะต้องมีภาพกระตุกใหม่วาดของเมนู, แต่เท่าที่เวลาหนึ่ง.

มีบางวิธีจะทำให้การแคนี้มีประสิทธิภาพ และช่วยออกเซิร์ฟเวอร์ในเวลาเดียวกัน:

  • ใส่ในกฎที่ว่า "แคชคุกกี้" ถูกต้องอย่างน้อย 24 ชั่วโมงหรือเวลาอื่น ๆ. ตราบใดที่มีคุกกี้ไม่หมดอายุ, ใช้ snapshot ของเมนูของคุกกี้ และไม่เคยตีเซิร์ฟเวอร์.

ดี...ที่ทั้งหมดที่มาถึงใจขณะนี้ :). 

ถ้าใครมีความคิดฉลาดใด ๆ ที่นี่ ฉันจะรักรู้ว่าพวกเขา.

และสุดท้าย – สามารถใช้เทคนิคนี้สำหรับสิ่งอื่น ๆ  ไคลเอนต์นี้แล้วจำนวนข้อมูลขับเคลื่อนกิจกรรมต่าง ๆ หน้า, หลายของพวกเขาเปลี่ยนแปลงค่อนข้างบ่อย (เช่นสัปดาห์ละหนึ่งครั้งหรือเดือนละครั้ง).  ถ้าคุณกำหนดเป้าหมายพื้นที่เฉพาะของฟังก์ชัน, คุณสามารถให้ UI ที่ตอบสนองมากขึ้น โดยดึงเนื้อหาจากเก็บคุกกี้ในเครื่อง และแสดงผลทันที  มันรู้สึกเร็วต่อผู้ใช้แม้ว่าคุณกำลังไม่บันทึกเซิร์ฟเวอร์ใด ๆ รอบ  คุณ สามารถ บันทึกวงจรเซิร์ฟเวอร์ โดยการตัดสินใจในบางเงื่อนไขและทริกเกอร์จะทำให้แคภายในคุกกี้  นั่นคือในสถานการณ์ทั้งหมด และสิ่งที่แสนยาวนานและสนุกมากที่สุด :). 

</สิ้นสุด>

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

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

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

บทนำ

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

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

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

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

Qunit

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

image

รูป 1

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

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

image รูป 2

นี่คือรหัส:

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

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

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

        });

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

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

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

        });

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

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

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

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

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

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

image

รูป 3

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

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

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

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

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

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

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

image รูป 4

image

รูป 5

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

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

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

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

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

สรุป (TL; DR)

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

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

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

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

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

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

</สิ้นสุด>

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

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

ชุดสุดท้ายที่คุณเคยจะสวมใส่?

[ด่วน ทราบ – นี่เป็นโพสต์ยาวสวยในงานเปิดสำหรับกลุ่มของฉันที่นี่ในนิวยอร์กต้องอาศัยอยู่ในบริเวณรัฐตรีถ้าคุณสนใจ]

ฉันเข้าร่วมให้คำปรึกษาสลาลอมผ่าน 18 เดือนที่ผ่านมา ที่ทำงานถาวรที่ยาวที่สุดของฉันตั้งแต่นี้ 2007. ฉันไม่ได้วางแผนเรื่องวิธี. ก่อนที่จะสายงานต่างๆ ที่เริ่มต้น ด้วยของฉันกระโดดเข้าสู่โลกของ SharePoint, ได้ที่หนึ่งปีสิบเอ็ด. ฉันก็พบใหม่, สถานที่ทำงานลากยาวนี่ที่สลาลอมยืนยง.

สถานที่แห่งนี้มีการเติบโต และต้องการความช่วยเหลือบางส่วนเพื่อควบคุมที่. ชนิดของวิธีการใช้ต้องมักเรียกเป็น "SharePoint โซลูชั่นสถาปนิก" แม้ว่าจะได้พบคำว่าสถาปนิกกว่า / ไม่ถูกต้องใช้ในพื้นที่ SharePoint มากในขณะนี้. ฉันได้รับการดิ้นรนการบล็อกเกี่ยวกับเรื่องนี้. ฉันไม่ต้องการเพียงแค่รายการออกพวงของจุดแสดงหัวข้อย่อยแบบลูกเต๋า/มอนสเตอร์. เพื่อนการสรรหาบุคลากรของฉันดีมีการทำแล้ว :). ดังนั้น, ฉันตัดสินใจที่จะใช้วิธีการแบบ "วันในชีวิต". อ่านไป และพิจารณา:

1) ถ้าอุทธรณ์ และ

2) ว่าคุณรู้ในกระดูกของคุณว่า คุณสามารถทำได้.

ถ้าใช่, ติดต่อฉัน (paul.galvin@slalom.com) และพูดคุย.

นี่คือสิ่งที่คุณสามารถคาดว่าจะทำในสัปดาห์ปกติเดือนเป็นสถาปนิกโซลูชั่นในทีมของฉัน:

  • เรียกใช้โครงการ, มักจะมากกว่าหนึ่งครั้ง. บางโครงการมีขนาดใหญ่ และดังนั้น คุณจะเป็นเจ้าของโครงการที่หนึ่ง. "ทำงาน" โครงการหมายความ ว่า คุณมีการกำกับดูแลและรับผิดชอบต่อคุณภาพโดยรวมของการจัดส่ง. ในเกือบทุกกรณี คุณจะมีการ PM devs ทีมแข็งแกร่งจริง ๆ, BAs, UX คน, ฯลฯ, ให้สนับสนุนคุณ. แต่คุณจะเห็นลูกค้าหน้าหลัก, ความน่าเชื่อถือ, ฯลฯ. มีไม่หลบซ่อนเงาในบทบาทนี้ :). คุณจะเรียกเก็บเงินครั้งนี้ และมีเป้าหมายที่จะ ทำให้คุณไม่ว่างพอที่จะทำเช่นนี้ 80 เปอร์เซ็นต์ของเวลา.
  • ช่วย ด้วยเอกสาร – SOWs, RFPs, สำรับ – สิ่งที่ดี. ผมคิดว่า เรามีกระบวนการของเราเสาสวยแน่น และแข็งดังนั้นจึงค่อนข้าง formulaic. ถ้าคุณกำลังใช้เพื่อเขียน SOWs วันนี้, กระบวนการของเราจะไม่ไปเป็นเรื่องท้าทายสำหรับคุณ. RFPs – เหล่านี้เป็นบิตยาก. พวกเขามักจะเป็น bespoke ในธรรมชาติจะเริ่มต้นด้วย และ RFPs ปกติดึงในสภาพต่าง ๆ. มันมีทั้งดี และไม่ดี, แต่ส่วนใหญ่ดี. นี้จะได้รับ scrambly เมื่อเราต้องโยนต้องการบริการลูกค้าในขณะที่ยัง พยายามลุ้นงานใหม่. คุณคงจะไม่มีการ RFP แต่คุณจะถูกขอให้ช่วยส่วน.
  • ขายโทรศัพท์, แต่ไม่ใกล้. ในหลักสูตรของเดือน, คุณสามารถคาดหวังไปสองโทรขายมีทีมงานขาย. คุณจะมีบริการในห้องพัก, จดบันทึก และช่วยแก้ปัญหารูปร่าง. อย่างไรก็ตาม, คุณจะไม่ถาม หรือคาดว่าจะจัดการวงจรการขายตั้งแต่ต้นจนจบ. คุณไม่จำเป็นต้อง "ขาย,"คุณก็ต้องมีเสียงที่เงียบสงบของใช้ในห้อง. สร้างความเชื่อมั่นและไว้วางใจ และที่ว่าทำไมคุณมี. แน่นอน, ถ้าคุณต้องการขาย, แล้ว มีห้องพักให้คุณเติบโตที่นี่เกินไป.
  • ช่วยให้ มีการสรรหา. เรามีโปรแกรมแนะนำบางประการ, ดังนั้น ถ้าคุณทราบจริงๆ เข้มแข็งคนในชุมชนที่คุณคิดว่า ควรเป็นส่วนหนึ่งของสลาลอม, คุณได้รับประโยชน์ด้วยวิธี. เราได้ทุ่มเทเกิดขึ้นในประเทศ (เป็นใครดี) ต้องใช้ร่วมกันของสิงโตชนิดนี้ทำงาน. วิธีใช้จริงเป็นสัมภาษณ์ข้อมูลส่วนตัวผู้สมัคร – มีพวกเขาพอดีวัฒนธรรม? พวกเขารู้สิ่ง? พวกเขาสามารถทำให้ * ของฉัน * ชีวิตที่ง่ายขึ้น? 🙂 This comes in spurts, เวลาสองเดือน, แม้ว่าบางเดือน คุณจะไม่ทำเลย.
  • ช่วยกำหนดแนวทางปฏิบัติ, สร้างค่า IP ของเรา และทำให้เราแข่งขันในตลาด. คุณ ผู้ชาย/gal มีประสบการณ์. คุณได้รับ รอบ ๆ บล็อค– ไม่ใช่แค่ ใน SharePoint, แต่คุณมีประสบการณ์ในเทคโนโลยีอื่น ๆ และอาศัยดีและไม่ดี (แม้น่ากลัว) โครงการทุกคน. เป็นผล, สิ่งที่ทำงานและอะไรไม่ได้. เราจะต้องการแชร์ประสบการณ์ที่เราตามวันในแง่ยุทธวิธี (อาทิ. เรียกใช้โครงการของคุณดีจริง ๆ) แต่ยังเชิญ. "ปฏิบัติ" เป็น overused บิตเป็นวาระ และผมลังเลที่จะใช้. ความคิดพื้นฐานคือ คุณจะมาเป็นบุคคลที่ชำนาญมีประสบการณ์ลึก และที่เกี่ยวข้อง และเราต้องการรวมส่วนของคุณ learnings เป็นวิธีการที่เราต่อสู้กับลูกค้าตามวัน.
  • ขอให้สนุก – เรามีพวงรวมมาก. อยากหลีกเลี่ยงอีก platitude, แต่มันฉลาดจริง ๆ ในกรณีนี้ – เราทำงานหนัก (การเรียงลำดับของ) และเราเล่นมากยิ่งขึ้น :). มีชนิด Aaron Sorkin มุขตลกที่นี่, ห้องพักจะเต็มไปด้วยคนฉลาด, เราชอบดื่มของเรา และเราจัดเลขดีสนุกกิจกรรม – คืนภาพยนตร์, เดินทางเบสบอล (แม้ว่าจะ น่ากลัว, กลุ่มคนร้ายจริง).

ถ้าฉันสามารถรวมเป็นหนึ่งคำทั้งหมด, ฉันจะใช้คำว่า "ผู้นำ" นำโครงการ, ใช้นำอาคารออกแบบฝึกหัด (IP, สร้างทีมงาน), ฯลฯ.

แต่รอ! มีเพิ่มเติม! เหตุอื่นที่ทำงานที่สลาลอม?

  • ความโดดเด่นของเจตนา – ทุกคนอยากเติบโตสิ่งนี้ออก. "สิ่งนี้" เป็นสำนักงานนิวยอร์ก. ทุกคนอยู่บนเรือนี้.
  • ลมในเซลส์ของคุณ – น้องสาวสำนักงาน, น้องสาวปฏิบัติ – สลาลอมเป็นการ "บริการ" ให้คำปรึกษาองค์กร. ผมนำค่าฝึก SharePoint (นำการ "ฝึกตั้งหน้า" สลาลอม lingo). มีน้องสาวปฏิบัติที่ 11 สำนักงานสลาลอมอื่น ๆ. ดังนั้น แม้ว่าฉันเป็นกษัตริย์เท่า SharePoint เป็นห่วงนี่ที่นิวยอร์กสลาลอม, มีวิธีเพียร์ในชิคาโก, ซีแอตเทิล, ดัลลัส, แอตแลนต้า, บอสตัน, ฯลฯ. ที่ฉันสามารถวาดตามสนับสนุน. มีส่วนทั้งโลก – อิสระที่สำคัญที่นี่ในนิวยอร์กแต่ถึงตันพรสวรรค์ทั้งองค์กรจริง ๆ.
  • ลมในการขาย (2) -เราทำ SharePoint – มากกว่ามาก. เราทำ BI, CRM, UX, ที่ปรึกษาทางธุรกิจ, มือถือ, พัฒนาเองและผู้อื่น. เรามีดีที่ข้ามขายหมู่ตนเอง และเรากำลังดี จิตรกรรม – และที่สำคัญ, ส่งมอบตาม – รูปภาพ "บริการเต็มรูปแบบ" สำหรับลูกค้าของเรา. นี้เป็นที่น่าสนใจโดยเฉพาะกับฉัน. เคยที่ orgs ขนาดเล็กมากที่ทำ งาน บน SharePoint เม็กกะผิดหวังบ่อย ๆ เนื่องจากเรามีนกพิราบกิจเป็น "SharePoint คน ที่ไม่เกิดขึ้นกับสลาลอม และเราไปทำงานที่น่าสนใจมากขึ้นดังนั้น.
  • แบบจำลองท้องถิ่น – เดินทางไม่.
  • เจริญเติบโตระยะยาว – สลาลอมได้รับไป gangbusters. เจริญเติบโตและเสถียรภาพ. เจริญเติบโตยังหมายถึง ว่า เราจำเป็นต้องจ้างผู้นำวันนี้ไปหัวค่าทีมใหม่เมื่อเราเพิ่มมากขึ้นลูกค้าและพนักงานเพื่อสนับสนุนลูกค้าเหล่านั้น.

ฉันสามารถไปบน, แต่ฉันได้คงไปบนยาวเกินไป. ฉันคิดว่า ฉันได้จับสาระสำคัญที่นี่. ถ้าคุณกำลังคิดเกี่ยวกับ การเปลี่ยนงานและนี้ดีสำหรับคุณ, พูดคุย.

ถ้าคุณพอใจในงานของคุณ – คุยต่อ :). ฉันได้รับจำนวนมากสถาน และมีเวลามาก "ความสุข". สลาลอมจะแตกต่างกัน และฉันจะยินดีที่มีโอกาสที่จะโน้มน้าวให้คุณว่า.

</สิ้นสุด>

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

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

ง่าย และรวดเร็ว: กำหนดขนาดของสินค้า a ในกล่องรายการในเก็บ Windows App

ในการ Windows เก็บ App ที่ผมกำลังสร้าง, ต้องการแสดงผู้ใช้ข้อต่าง ๆ  เลือกกล่องรายการเป็นเครื่องมือในการแสดงเพื่อให้พวกเขาสามารถเลื่อนผ่านสิ่งที่ดี และพวกเขา 

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

        ส่วนตัว โมฆะ AddGameStateLogMessage(สายอักขระ theMessage)
        {
            กล่องข้อความ t = ใหม่ กล่องข้อความ();
            t.Text = GameStateCounter    + ": " + theMessage;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            ความหนา thisPadding = ใหม่ ความหนา(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ลิ ListBoxItem = ใหม่ ListBoxItem();
            liเนื้อหา = t;
            liMaxHeight = 25;
            thisPadding = ใหม่ ความหนา(5, 0, 5, 0);
            liเซลล์ = thisPadding;

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

ในข้างต้น, ฉันสร้างกล่องข้อความ และตั้งค่าแบบอักษร, ระยะห่างของ, ฯลฯ.

ถัดไป, ผมสร้าง ListBoxItem การ และกำหนดเนื้อหาของกล่องข้อความจัดรูปแบบ.

ขั้นตอนสุดท้าย, ผมใส่ ListBoxItem ลงในกล่อง  (ต้องการแสดงข้อความล่าสุดที่ด้านบนของรายการ, ดังนั้นการแทรก(0,li) แทนที่จะเพิ่มเรื่อง() เรียก).

ฉันจะสามารถ tweaking นี้บิตก่อนฉันมีความสุขจริง ๆ กับการทำงานของกล่อง แต่รูปที่แสดงข้างบนถูกมากประสบการ  หวังว่าใครบางคนพบว่าเป็นประโยชน์.

</สิ้นสุด>

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

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