כיצד לציין אנשים כמו טווח חיפוש / מקור תוכן באמצעות SharePoint 2013 השאר API

הייתה לי סיבה לעבוד עם ה-SharePoint 2013 Api של חיפוש דרך כל השאר בפעם הראשונה. . רציתי לחפש אנשים, לא מסמכים. המפתח לומד כאן זה תציין מקורות תוכן באמצעות GUID שלה (או לפחות במקרה הזה). גזיר jQuery הבאה מציגה כיצד:

    loadExpertsAsync: פונקציה() {

        jQuery.support.cors = נכון;

        $.אייאקס({
            כתובת url: זה.CreateFullApiUrl() +
                "?querytext = "פורטלים"&sourceid = 'b09a7990-05ea-4af9-81ef-edfab16c4e31'" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,מייל העבודה,מיומנויות,AboutMe,תחומי עניין,JobTitle,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&rowlimit = 99",
            שיטה: "לקבל",
            כותרות: { "קבל": "יישום/json; odata = מפורט" },
            מטמון: שווא,
            הצלחה: פונקציה (תוצאה) {

במקרה שלי, . אני רץ ה-API נגד SharePoint online. כדי לקבל את ה-GUID, עקבתי אחרי השלבים:

  1. גישה מרכז הניהוליים של SharePoint
  2. בחר "לחפש" של הניווט יד שמאל
  3. בחר "ניהול מקורות התוצאה"
  4. בחר "אנשים מקומיים תוצאות"
  5. תראה את כתובת ה-URL.

כתובת האתר שלי נראה. בערך:

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

הפרמטר sourceid הוא מה עבד בשבילי.

(אני מבין sourceid בפועל עשוי להיות משהו קבוע עם SP, but I’ll always check anyway 🙂 ).

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin

דוגמה SharePoint השאר שיחות

הנה קבוצת מדגם השאר שיחות לעבוד בשבילי, עשוי לעזור לך גם כן. כמו של 02/2014, there are two examples 🙂

  1. הפניה עמודה עם רווחים בשם שלו
  2. הפניה עמודת בחירה מרובה
  3. לבצע חיפוש אנשים באמצעות מנוחה

 

אני אוסיף את זה ככל שחולף הזמן.

להלן כמה דיו שימושי שמצאתי גם כן:

הפניה עמודה עם רווחים בשם שלו

ליצור רשימה מותאמת אישית עם עמודה בשם "בלוג מחבר" (רווח בין בלוג מחבר).

$select כדי להפנות לעמודה זו היא:

image

פשוט החלף את החלל "_x0020_". אנו רואים את _x0020_ בדוגמאות רבות ברחבי האינטרנט במלואו השאר זה לא שונה.

אם לא תעשה את זה, אתה עלול לקבל הודעת שגיאה כמו זה:

הביטוי “מחבר הבלוג” אינה חוקית.

קל מספיק.

הפניה עמודת בדיקת מידע בחירה מרובה

להגדיר:

  1. יצירת רשימה מותאמת אישית בשם קטגוריות.
  2. להוסיף כמה קטגוריות. הוספתי קטגוריות נוהג כך:image
  3. ליצור רשימה מותאמת אישית נוספת הנקראת MockBlog ולהוסיף קטגוריות כעמודה רשימת בחירה מרובה (או עמודת אתר אם זה הקטע שלך. בשד).

הוספת פריטים מסוימים לרשימת Mockblog. ואתה מוכן.

שיחה סגנון Ajax בעזרת jQuery ייראה בערך כך:

serverUrl   = "/_api/אינטרנט/רשימות/GetByTitle('MockBlog')/פריטים" +
             "?$בחר = כותרת,קטגוריות/כותרת,Blog_x0020_Author/כותרת" + 
             "&$הרחב = Blog_x0020_Author,קטגוריות";

אנחנו מספרים SharePoint. תן לי את הכותרת עבור כל הקטגוריות (קטגוריות/כותרת). לקבל את הערכים בפועל עבור כותרת על-ידי $הרחבing קטגוריות." (בפרפרזה נינוחה שלי הוא כנראה די רופף, אבל איך אני לפרש את זה).

אם אתה עושה את זה באמצעות JavaScript ושימוש כנר להסתכל על הפלט, אתה מקבל משהו כזה בתמורה:

 

image

(האמור לעיל הוא אובייקט JSON)

לבצע חיפוש אנשים באמצעות מנוחה

אני בבלוג על זה בנפרד. המפתח הוא כדי לציין פרמטר sourceid שערכו הוא ה-GUID של מקור התוכן המקומיים. (מקורות התוכן היה אמור להיקרא טווחי וזה הו-שלי כל כך חזק לא לקרוא הכל טווח בשבילי!).

קרא עוד על זה כאן: http://www.mstechblogs.com/paul/?p=10385

 

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב 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>
</טבלה>
</מרכז>

<קובץ script src="../Plugins/jquery-1.11.0.min.js"></קובץ script>

<קובץ script>
var CreateSiteLogicContainer = {

    createSiteData: {
            "פרמטרים": {
                __metadata: { "סוג": ". SP.WebInfoCreationInformation" },
                כתובת Url: "Paultest1",
                כותרת: "Paultest1",
                תיאור: "שנוצרו על-ידי מנוחה אינטרנט על-ידי פול!",
                שפה: 1033,
                WebTemplate: "sts",
                UseUniquePermissions: שווא
            }
    },

    createSite: פונקציה () {

        jQuery.support.cors = נכון;

        CreateSiteLogicContainer.createSiteData.parameters.Url = $("#SiteName").ול();
        
        $.אייאקס({
            כתובת url: "https://bigapplesharepoint.sharepoint.com/NBAIADev/_api/web/webinfos/add",
            שיטה: "פוסט",

            כותרות: {
                "מקבל": "יישום/json; odata = מפורט",
                "סוג תוכן": "יישום/json;odata = מפורט",
                "X-RequestDigest": $("#__REQUESTDIGEST").ול()
            },

            נתונים: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            הצלחה: פונקציה () { התראה("הצלחה"); },
            שגיאה: פונקציה () { התראה("שגיאה"); }

        });
    },

    wireUpForm: פונקציה () {
        $("#CreateSiteButton").לחץ(פונקציה () {
            התראה("עומד לנסות וליצור את האתר.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</קובץ script>

כאשר הוא מוצלח, אתה מקבל מנה JSON בתגובה ככה:

image

שלמדנו מן הזה כלול ומחשבות המפתח שלי:

  • גישה זו משתמש jQuery.  במקרה שלי, הספרייה jQuery שלי ממוקם "./ תוספים. "  אתה רוצה לשנות את זה כדי להצביע על מיקום JQ האהוב שלך.
  • באפשרותך להעתיק ולהדביק את אותו מקטע שלם אל Web Part של עורך התוכן בדף, זה אמור לעבוד טוב.  אתה רוצה לשנות את נקודת הקצה של השיחה API, ודא שאתה מציין JQ כראוי.
  • כתובת ה-URL הוא יחסי נקודת הקצה של ה-API שלך.  במקרה שלי, יוצר אתרי המשנה מתחת https://bigapplesharepoint.com
  • אתה לא צריך לספק תוכן-אורך. כמה פוסטים ו MSDN המסמך מרמז שאתה עושה, אבל קרה לי באופן אוטומטי, ואני משער מטופל בידי השיחה .ajax $ עצמה.
  • שורה זו נדרשת כדי למנוע תגובה "אסורים": "X-RequestDigest": $("#__REQUESTDIGEST").ול().  יש דרכים אחרות לעשות את זה, . אבל זה די נחמד...  איבדתי את הקישור לבלוג סיפק קיצור דרך זה.  H/T לך, בלוגר מסתורי!

מזל טוב, מקווה שזה יעזור למישהו.

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin

להתגבר על בעיה מעצבנת עם כתובות Url יחסיות ב- SharePoint מהיר השיגור

רציתי להוסיף קישור הניווט ' הפעלה מהירה ' ביום ההוא ולא SharePoint סיפר לי:

image

טקסט טהור גרסה של זה:

להבטיח כי כתובת ה-URL חוקית וכי מתחיל גם תו חוקי (סימן מספר (#) או נטוי (/)) או פרוטוקול נתמכת בתוקף (לדוגמה, ' http://’, ' https://’, "קובץ://’, ' ה-ftp://’, "mailto:’, ' חדשות:’).

"בלך, אבעבועות!"אמרתי.

זה פתרון אפשרי הוא להשתמש ב- JavaScript כדי למצוא קישור הידוע בהשקה מהירה, לעקוף את אופן הפעולה שלו.

כדי לבדוק את זה, להוסיף קישור חדש לאתר שלך במבחן נוהג כך:

image

השתמשתי jQuery. כדי לפתור את זה, לקבל קצת JavaScript jQuery אל הדף בטכניקה האהוב שלך, עם שורת קוד כזה:

 

$(המסמך).מוכן( פונקציה () {

    $("של:מכיל('בדיקה החלפת כתובת URL')").לחץ(פונקציה () { התראה("לחץ על שינוי התנהגות!"); החזרה שווא;});

});

בוב הוא הדוד שלך.

בורר jQuery מוצא כל <של> תג יש "Test URL חלופי" בשם שלה. ייתכן שתרצה למצוא-מנגינה זה בהתאם את הקישור וכאלה.

.Click(פונקציה() דורסת מה של SharePoint הייתי עושה כאשר המשתמש לוחץ. ודא כי אתה "יש להחזיר false" או אחר היא לעשות את הדברים שלך, ואז לנסות הדבר href מדי, . וזה קרוב לוודאי לא המטרה שלך.

זה נעשה, מבחן בסביבת SharePoint online אבל אמור לעבוד טוב 2010 מוקדם מדי.

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin

מהיר ופשוט: SharePoint השאר קוראים רק החזרה 100 רשומות

אני עובד באתר אינטרנט ציבורי מול המרפאה שלי SharePoint כאן ב- ניו-יורק הוא משתמש הרבה שיחות JavaScript ומנוחה כדי להציג תוכן.

במהלך הפיתוח mainline, ליצור dataset קטן עם רק 10 או אז שורות רשימה מותאמת אישית וכל השיחות שלי לנוח הוציא משם.  פעם אחת אני מקפיץ את הרשימה יש כמה מאות שורות של נתונים כדי לבדוק את הצמיחה הצפויה, מצאתי כי היה מקבל בדיוק 100 השורות המוחזרות על השיחות שלי לנוח.

. זה דבר פשוט מאוד לכתובת  במקרה שלי (ואני מאמין ברוב המקרים), ברירת המחדל מנוחה קורא SharePoint (אולי כמו תקן תעשייתי?) החזרה 100 שורות.  כדי להחזיר יותר מאשר ברירת המחדל, השתמש בפרמטר $top לטלפון שלך, כמו ב-:

להשיג /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/פריטים?$בחר = מזהה,כותרת,קטגוריות/כותרת,Blog_x0020_Author/כותרת,DatePublished,BlogSummary&$הרחב = Blog_x0020_Author,קטגוריות&$מסנן =&$העליון = 9999

. בחרתי 9999 במקרה זה מאז ידעתי את זה growth-wise, . לא יהיו יותר 200 או אז ששורות שנוספו לרשימה זו בשנה.  אם זה הופך ובאדישות, נוכל ליישם שמידה מסוימת של החלפה במורד הכביש.

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin

מהיר ופשוט: לפתור את פרמטר URL לא חוקי"” בעיה עם UpdateListItems lists.asmx

בעת עבודה עם UpdateListItems ויה lists.asmx, קל ליצור את השגיאה:

פרמטר URL לא חוקי.

כתובת ה-URL שסופקו מכילה פקודה או ערך לא חוקי. נא בדוק את כתובת ה-URL שוב.

אתה יכול לקבל שגיאה זו כאשר אתה תישכח מזהה ב רשימת השדות כדי לעדכן.  זה, כמו הרבה לשירותי אינטרנט אלה SP, הוא קצת שלא נראית מציאותית מאז עליך לכלול את המזהה של תכונת 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" Cmd ="עדכון">
            <שדה שם ="CooperativeLock">נעול!</שדה>
            <שדה שם ="מזהה">1</שדה>
          </שיטה>
        </אצווה>                     
        </עדכונים>                
      </UpdateListItems>             
  </soapenv:הגוף>         
</soapenv:מעטפה>

אם אותך להתפשט החוצה הפניית שדה מזהה ואז תקבל את ההודעה "פרמטר URL לא חוקי" מעצבן.

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin

 

האיש המסכן של אחסון במטמון בג'אווה סקריפט

[TL;ד ר גירסה: שימוש בקבצי cookie כדי לאחסן את תוצאות הקריאות אסינכרונית; לעיבוד תוצאות הקריאות האחרונות האסינכרונית מיד, לאחר מכן לאמת אותם לאחר טעינת העמוד.]

אני עובד באתר האינטרא-נט של SharePoint עבור לקוח כי תכונות, בין היתר, ניווט משני מסוגנן אפשרויות תפריט אשר מנוהלים באמצעות רשימה מותאמת אישית זקן רגיל.  הרעיון הוא שהלקוח מקבל לשלוט התפריט של האתר "שלהם" מבלי להשפיע או להיות מושפעים הניווט העולמי ע י זה.

(יש משהו מאוד חתרנית אודות הוספת CEWP שמצביע על קובץ HTML זה טוען כמה CSS, JS אורחותיו כמעט הכל על ההתנהגות של אתר. אבל זה בשביל עוד פוסט)

הקוד עבור זה פשוט יפה:

הנקודה כאוב זה, בכל פעם שמישהו פוגע באחד העמודים באתר, דפדפן האינטרנט של המשתמש הוא מושיט יד כדי לקבל פריטים מהרשימה  לאחר dev השלמת הבדיקות הוכח שהדברים יהיו יציבים ולהשלים, קריאה זו אינה נחוצה יותר 99% מהזמן מאז התפריט משתנה לעיתים רחוקות.  יש לו גם השפעה UI מוזר אשר נפוץ בהעולם של אתרי אינטרנט היפר-ajaxy – מלבדך, רק אז התפריט רינדור.  זה מרצד מסיח את הדעת לדעתי.  ולחוץ.. כל כך, אחסון במטמון. 

התאמתי את הלוגיקה נוהג כך:

  • לחפש קובץ cookie בדפדפן המכיל את התפריט כפי בפעם האחרונה קראתי את זה
    • אם נמצאו, לדקלם את זה מיד.  לא רוצה להמתין הטעינה.  (אתה צריך לוודא כי ה-HTML שלך נמצא במיקום אסטרטגי כאן, אבל זה לא קשה לעשות).
  • להמתין לסיים את הטעינה אסינכרונית להתקשר כדי לטעון את פריטי התפריט מתוך רשימה באמצעות מנוחה או lists.asmx או מה שלא יהיה
  • להשוות בין מה יש לי נגד העוגיה
    • אם זה מתאים, . תפסיק
    • אחרת, בעזרת jQuery, באופן דינמי לאכלס חבורה אם <li>ב <ul>
  • שימוש ב- CSS כדי לעשות את כל העיצוב
  • רווח!

חלק מכם עומדים לומר, "היי! אין ממש מטמון דרך כאן מאז שאתה קורא את התפריט בכל מקרה בכל פעם.”  אתה צודק-אני לא נותן השרת כל סוג של הפסקה.  אבל כי השיחה האסינכרונית ולא קורה אחרי הדף הוא ראשוני תוכן HTML מלא רינדור, "אני מרגיש" קשובים יותר למשתמש.  התפריט מעבד די כמה מצייר הדף.  אם התפריט יקרה השינוי, המשתמש הוא נתון מרצד חידשו של התפריט, אבל רק פעם אחת.

ישנן מספר דרכים להפוך את האחסון במטמון ליעילה יותר ולעזור השרת באותו הזמן:

  • להכניס כלל "המטמון העוגיות" בתוקף למשך תקופה מינימלית של 24 שעות או איזה פרק זמן אחר. כל עוד יש אין עוגיה שפג תוקפם, . מעולם לא הכיתי את השרת ולהשתמש בזק תפריט של העוגייה.

טוב, זה כל מה שעולות לי לראש כרגע :). 

אם למישהו יש רעיונות חכם פה אני אשמח להכיר אותם.

אחרון – טכניקה זו יכולה לשמש לדברים אחרים.  דף של הלקוח יש מספר דברים מונחי-נתונים על עמודים שונים, רבים מהם שינוי יחסית נדירות (כמו פעם בשבוע או פעם בחודש).  אם ייעדת בתחומים ספציפיים של פונקציונליות, אתה יכול לתת ממשק משתמש קשובים יותר על ידי משיכת תוכן מהחנות קוקי המקומי ובעיבוד מיד.  זה מרגיש מהר יותר למשתמש גם אם אתה לא מציל את השרת בכל מחזורי.  אתה יכול שמור את מחזורי שרת על ידי החלטה כמה תנאים וגורמים לפסול את המטמון העוגיות המקומי הזה.  . זה הכל המצבית אמנותי דברים ואני באמת הכי הכיף :). 

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin

איך: קביעת תצורה של יחידת מבחן, מבחן כיסוי עם QUnit.js ו- Blanket.js עבור משרד 365 יישום SharePoint

מבוא

אני בודק אפשרות בדיקות יחידה ולבדוק כיסוי של JavaScript כמוך יישום SharePoint חדש עבור SharePoint online במשרד 365 סוויטה.  בין שבילי מחקר ברור רוקני Qunit.js מיד אחרי זה, כדי Blanket.js.

QUnit תן לי להגדיר בדיקות יחידה לקבץ אותן מודולים.  מודול הוא רק דרך פשוטה לארגון בדיקות הקשורות. (אני לא בטוח, אני משתמש בו כמתוכנן, . אבל זה עובד בשבילי עד כה עם סט קטן של בדיקות שהגדרתי עד כה).

Blanket.js משתלב עם Qunit, זה יראה לי את השורות בפועל של JavaScript היו –, ויותר מכך-לא באמת בוצעו במהלך מריצים את. הבדיקה.  זהו "כיסוי"-קווי לבצע מכוסים על ידי הבדיקה בעוד שאחרות אינן.

בין הגדרת מקרי מבחן טוב להצגת כיסוי, אנחנו יכולים להפחית את הסיכון כי הקוד שלנו יש מוסתרים פגמים.  . זמנים טובים.

Qunit

בהנחה שיש לך את Visual Studio פרוייקט הגדרת, התחל על-ידי הורדת את חבילת JavaScript של http://qunitjs.com.  הוסף את JavaScript ו- CSS המתאים הפתרון שלך.  . שלי נראה ככה:

image

איור 1

כפי שניתן לראות, אני משתמש 1.13.0 בזמנו כתבתי בבלוג זה. לא לשכוח להוריד ולהוסיף לקובץ ה-CSS.

את זה מהדרך, השלב הבא הוא ליצור סוג של מבחן לרתום להפנות את הקטעים Qunit.  אני בודק כל מיני פונקציות בקובץ script ששמו "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" />
    <קובץ script סוג= טקסט/javascript"" src="QuizUtil.js" נתונים-cover></קובץ script>
    <סקריפט סוג ="טקסט/javascript" src ="qunit-1.13.0.js"></קובץ script>
    <סקריפט סוג ="טקסט/javascript" src ="blanket.min.js"></קובץ script>

    <קובץ script>
        מודול("getIDFromLookup");
        מבחן("QuizUtil getIDFromLookupField", פונקציה () {
            var goodValue = "1;#פול Galvin";

            שווה(getIDFromLookupField(goodValue) + 1, 2), "מזהה של [" + goodValue + "] + 1 צריכים להיות 2";
            שווה(getIDFromLookupField(לא מוגדרת), לא מוגדרת, "לא מוגדר ארגומנט הקלט אמורה להחזיר תוצאה לא מוגדר.");
            שווה(getIDFromLookupField(""), לא מוגדרת, "ריק ארגומנט הקלט אמורה להחזיר ערך לא מוגדר.");
            שווה(getIDFromLookupField("gobbledigood3-thq;עדה dkvn;skfja sdjfbvubvqrubqer0873407t534piutheqw;vn"), לא מוגדרת,"צריך תמיד להחזיר מכונית התוצאה למספר שלם");
            שווה(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), נכון, "הגדרת חוקי הבישול צריכה להחזיר 'true'.");
            שווה(setCookie("עוגיות מטורף שם !@#$%"%\^&*(()?/><.,", "1", -1), נכון, "קביעת שם רע קוקי להחזיר 'false'.");
            שווה(setCookie(לא מוגדרת, "1", -1), לא מוגדרת, "עובר לא מוגדר כשם קובץ cookie.");
            שווה(getCookieValue("לא קיים"), "", "קוקי לא קיים מבחן.");
        });

    </קובץ script>
</הראש>
<הגוף>
    <div מזהה= "qunit"></div>
    <div מזהה= "qunit-אביזר"></div>

</הגוף>
</html>

ישנם מספר דברים קורים כאן:

  1. המפנה את הקוד שלי (QuizUtil.js)
  2. הפניה Qunity.js
  3. הגדרת מספר מודולים (getIDFromLookup, עוגיות, ואחרים)
  4. הצבת <div> שהמזהה שלה הוא "qunit".

לאחר מכן, אני פשוט תמשוך למעלה בדף זה ותקבל משהו כזה:

image

איור 3

אם תסתכל לרוחב החלק העליון, יש לך כמה אפשרויות, שניים מהם הם מעניינים:

  • הסתר עברו מבחנים: . זה דיי ברור  יכול לעזור העין שלך לראות את האזורים הבעייתיים, לא הרבה בלאגן.
  • מודול: (ברשימה הנפתחת): זה לסנן את הבדיקות עד קבוצות רק אלה של הבדיקות שהרצויות.

לגבי המבחנים עצמם – כמה הערות:

  • למותר לציין כי אתה צריך לכתוב את הקוד שלך כזה כי זה ברת מלכתחילה.  באמצעות הכלי יכול לעזור לאכוף משמעת הזה. למשל, היה לי פונקציה שנקראת "getTodayAsCaml()”.  זה לא מאוד ברת מאז לוקח אין ארגומנט הקלט כדי לבחון אותה לשוויון, היינו צריכים כל הזמן לעדכן את הקוד המבחן כך שישקף את התאריך הנוכחי.  אני refactored את זה על ידי הוספת פרמטר קלט נתונים ואז עובר את התאריך הנוכחי כשיבוא הנוכחי היום בתבנית CAML.
  • המסגרת Qunit מסמכי בדיקות משלה ונראה די חזקים.  הוא יכול לעשות דברים פשוטים כמו בדיקות לשוויון, יש גם תמיכה עבור שיחות בסגנון ajax (שניהם "אמיתי" או mocked באמצעות להתחשבנות האהוב שלך).
  • גם עובר התהליך מכריח אותך לחשוב דרך מקרים קצה – מה קורה עם "undefined" או null מועבר בתוך פונקציה.  זה מקל מאוד לבדוק תרחישים אלה..  . חומר טוב.

כיסוי עם Blanket.js

Blanket.js משלים Qunit על-ידי מעקב אחר הקווים בפועל של קוד לבצע במהלך בדיקות שלך.  זה משתלב נכון Qunit אז למרות שזה יישום נפרדת לגמרי, זה משחק יפה – נראה ממש כאילו זה app חלקה אחת.

. זה blanket.js בפעולה:

image איור 4

image

איור 5

(למעשה יש ללחוץ על תיבת הסימון "אפשר כיסוי" בחלק העליון [ראה איור 3] כדי לאפשר את זה.)

השורות המודגשות באיור 5 לא הוצאו להורג על ידי אחת הבדיקות שלי, אז אני צריך לתכנן ניסוי לגרום להם. להוציא להורג, אם אני רוצה כיסוי מלא.

להשיג blanket.js עבודה על-ידי ביצוע השלבים הבאים:

  1. להוריד אותו מ http://blanketjs.org/.
  2. להוסיף את הפרוייקט שלך
  3. עדכון דף הרתמה שלך במבחן (QuizUtil_test.html במקרה שלי) כדלקמן:
    1. להפנות את הקוד
    2. לקשט שלך <קובץ script> הפניה כזו:
    <קובץ script סוג= טקסט/javascript"" src="QuizUtil.js" נתונים-cover></קובץ script>

Blanket.js מרים את התכונה "נתונים-cover" ועושה את הקסם שלו.  זה הוקס לתוך Qunit, מעדכן את ממשק המשתמש כדי להוסיף את האפשרות "אפשר כיסוי" וזהו!

סיכום (TL; ד ר)

השתמש Qunit כדי לכתוב מקרי מבחן שלך.

  • להוריד את זה
  • להוסיף את הפרוייקט שלך
  • לכתוב עמוד לרתום ניסיון
  • ליצור את המבחנים שלך
    • והרץ חלק בקוד כדי להיות ברת
    • להיות יצירתי!  חושב של מטורף, תרחישים בלתי אפשרי, לבדוק אותם בכל מקרה.

השתמש blanket.js כדי להבטיח כיסוי

  • ודא ש-qunit פועל
  • הורדה blanket.js ולהוסיף אותו לפרוייקט שלך
  • להוסיף אותו לדף הרתמה שלך במבחן:
    • להוסיף הפניה blanket.js
    • להוסיף תכונה "מכסה נתונים" כדי שלך <קובץ script> תג
  • את הבדיקות Qunit.

אף פעם לא עשה את כל זה בעבר והיו כמה דברים בסיסיים בעבודה קומץ של שעות. 

בדיקה מאושר!

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin

התביעה האחרון שאי פעם ללבוש?

[לב מהיר – זהו פוסט ארוך למדי על משימת פתיחה עבור הקבוצה שלי, כאן בניו יורק, אתה צריך לחיות באזור tri-state אם אתה מעוניין.]

הצטרפתי סלאלום ייעוץ מעל 18 לפני חודשים ואת זה עושה את זה העבודה שלי לאורך זמן הארוך ביותר מאז 2007. אני לא מתכנן את זה ככה. לפני מחרוזת של עבודה מקפץ שיסודו הקפיצה שלי לתוך העולם SharePoint, הייתי במקום אחד במשך אחת עשרה שנים. סוף סוף מצאתי חדש, ומתמשך למקום עבודה להרבה זמן כאן בסלאלום.

המקום הזה הוא גדל, אני צריך קצת עזרה כדי לשלוט כי. הסוג של עזרה שאני צריך נקרא בדרך כלל "ארכיטקט פתרונות SharePoint" למרות מצאתי המילה אדריכל מעל או שגוי לשמש חלל SharePoint די הרבה זמן עכשיו. יש כבר נאבק על איך הבלוג על זה. לא רוצה הרשימה פשוט חבורה של נקודות תבליט בסגנון הקוביות/מפלצת. המחזור גיוס מעולה שלי יש כבר עושה את זה כבר :). כל כך, החלטתי לנקוט בגישה של "יום בחיי". קרא אותו ורואים:

1) אם הוא פונה,

2) אם ידוע לך בעצמות שלך אתה יכול לעשות את זה.

אם כן, צרו איתי קשר (paul.galvin@slalom.com) בואו לדבר.

אלה הם מה אתה יכול לצפות לעשות שבוע/חודש טיפוסי כאדריכל פתרונות על הקבוצה שלי:

  • הפעלת פרויקטים, לעיתים קרובות יותר מפעם אחת בכל פעם. כמה פרוייקטים גדולים, אז אתה לבד כי פרויקט אחד. "לפעול" פרוייקט אומר שיש לך פיקוח ואחריות האיכות הכוללת של המשלוח. כמעט בכל המקרים תצטרכו PM ואת צוות חזק באמת devs, רכב, אפיון אנשים, וכו '., כדי לתמוך בך. אבל אתה תהיה הפנים הראשי שהלקוח רואה, נאמנויות, ועוד. ישנה ללא מסתור בין הצללים בתפקיד זה :). ביל הפעם, המטרה היא לשמור אותך עסוק מספיק כדי לעשות את זה 80 אחוז מהזמן.
  • עזרה עם ניירת – חזירות, RFPs, חפיסות – חומר כל כך טוב. אני חושב שיש לנו תהליך החזירה שלנו למטה די חזק, מוצק ולכן הוא נוסחאתי למדי. אם אתה רגיל לכתוב היום חזירות, התהליך שלנו לא הולך להיות אתגר בשבילך. RFPs – אלה הם קצת יותר קשה. הם נוטים להיות העידו בטבע כדי להתחיל עם, RFPs בדרך כלל למשוך עורכים שונים מרובים. הוא גם טוב וגם רע, אבל בעיקר טוב. זה יכול לקבל scrambly כאשר אנו זקוקים ללהטט את הצורך שירות מעולה ללקוח תוך גם מנסה לזכות עבודה חדשה. אתה כנראה לא הבעלים של RFP אך תתבקשו לתרום מקטעים.
  • שיחות מכירה, אבל לא קרוב. במהלך חודש, אתה יכול לצפות לעבור על כמה שיחות המכירה עם צוות המכירות שלנו. אתה תהיה סיוע ליצואנים קטנים בחדר, רישום הערות ולעזור לעצב את הפתרון. עם זאת, אתה לא ביקש או צפוי להתמודד עם מחזור המכירות מתחילתו ועד סופו. אתה לא צריך "למכור,"אתה רק צריך להיות קול רגוע סיבה מומחה בחדר. זה בונה אמון, כלומר מדוע אתה שם. בטח, אם אתה אוהב למכור, אז יש מקום בשבילך לגדול כאן מדי.
  • עזרה עם גיוס. יש לנו איזו תוכנית ההפניות, אז אם אתה יודע באמת אנשים חזקים בקהילה שלדעתך צריך להיות חלק סלאלום, אתם יכולים ליהנות ככה. הקדשנו מגייסים (מי הם מצוינים) לעשות חלק הארי של סוג זה של עבודה. עזרה אמיתית מראיין מועמדים – הם התאמה טובה מבחינה תרבותית? הם יודעים דברים שלהם? הם יכולים לגרום * שלי * החיים לקלים? 🙂 This comes in spurts, כמה פעמים בחודש, למרות כמה חודשים שלא היית עושה אותו בכלל.
  • לעזור להגדיר מומלצות, לבנות את ה-IP שלנו ולעשות לנו יותר תחרותי בשוק. אתה מנוסים של גיא/גל. היית סביב הבניין – לא רק ב- SharePoint, אבל לך יש ניסיון בטכנולוגיות נוספות וחי דרך טוב ורע (אפילו נורא) פרוייקטים בכל רחבי. כתוצאה מכך, אתה יודע מה עובד ומה לא. אנחנו רוצים לחלוק את החוויה הזאת עם אותנו על בסיס ליום במובן טקטי (כלומר. להפעיל את הפרוייקטים שלך ממש טוב) אבל גם אסטרטגית. "מומלצות" הוא קצת שימוש מופרז כמו מונח, מהסס להשתמש בו. הרעיון הבסיסי הוא כי אתם באים כאדם מנוסה עם ניסיון עמוק ובלתי רלוונטיים, אנחנו רוצים לשלב את הטוב ביותר של שלמדנו שלך איך אנחנו עוסקים עם הלקוחות על בסיס יום יום.
  • תהנה – אנחנו חבורה מאוד משולב. אני רוצה להימנע platitude עוד, אבל זה באמת מתאים במקרה זה – אנחנו עובדים קשה (מעין) אנו לשחק אפילו קשה יותר :). קיים סוג אהרון סורקין להתלוצץ כאן, החדר הוא תמיד מלא אנשים חכמים, אנחנו אוהבים לשתות שלנו, אנו מארגנים מספר לא מבוטל של כיף אירועים – סרט לילה, טיולים בייסבול (גם אם הם נורא, צוותי כמעט הרשע).

אם אני יכול לסכם את זה הכל לתוך מילה אחת, הייתי משתמש במילה "מנהיגות". להוביל פרויקטים, לקחת תפקיד מוביל בבניין החוצה התרגול (IP, בניית הצוות), ועוד.

אבל חכה! יש עוד! אחרת מדוע לעבוד בסלאלום?

  • אחדות מן הכלל של הכוונה – כולם רוצים לגדול הדבר הזה החוצה. "הדבר הזה" הוא המשרד בניו יורק. כולם על הסיפון עם זה.
  • הרוח שלך מפרשים – אחות משרדים, האחות שיטות – סלאלום הוא "שירות מלא" ייעוץ ארגוני. אני מוביל את שיטת התרגול של SharePoint ("תרגול אזור הפניה" בלינגו סלאלום). יש לי אחות שיטות ב 11 משרדים אחרים סלאלום. אז למרות שאני מלך ככל SharePoint הוא מודאג כאן בסלאלום ניו יורק, יש לי שיטות עמית בשיקגו, סיאטל, דאלאס, אטלנטה, בוסטון, ועוד. שממנו אני יכול לצייר על תמיכה. היא באמת הטוב משני העולמות – אוטונומיה משמעותית כאן בניו יורק, אבל גישה טונות של כשרון ברחבי הארגון.
  • הרוח המכירות שלך (2) – אנחנו עושים יותר מ- SharePoint – הרבה יותר. אנחנו עושים BI, CRM, UX, ייעוץ עסקי, טלפון נייד, התפתחות אישית ואחרים. אנחנו טובים לחצות למכור בין עצמנו ואנחנו טובים בציור – וחשוב יותר, אספקת יחלישו תמונה "שירות מלא" עבור לקוחותינו. זהו במיוחד מושך לי. אני כבר בביסקסואלים הטרנסג'נדר קטנים רבים העובדים על SharePoint הופעות מתוסכל שוב ושוב כי היינו יונה מסתתר כמו "אנשים SharePoint". זה לא קורה עם סלאלום, ואנחנו מקבלים לעבודה מעניינת יותר כתוצאה מכך.
  • דגם מקומי – אין נסיעות.
  • צמיחה לטווח ארוך – סלאלום לעירית בכמויות. המון צמיחה ויציבות. צמיחה גם אומר כי אנו צריכים להעסיק מנהיגים היום בראש צוותי חדש כאשר נוסיף יותר לקוחות וצוות כדי לתמוך בלקוחות אלה.

ויכולתי עוד להמשיך, . אבל בטח כבר עברתי יותר מדי זמן. אני חושב שכבשו את העיקר כאן. אם אתם חושבים על שינוי עבודות וזה נראה טוב לך, בואו נדבר.

אם אתה שמח בעבודה הנוכחית שלך – בואו נדבר בכל מקרה :). כבר בהמון מקומות ואני שמח מאוד "" בזמן. סלאלום שונה, בברכה את ההזדמנות כדי לשכנע אותך כי.

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin

מהיר וקל: הגדר את גודל הפריטים בתיבת רשימה ב- App Windows Store

ב- App Store Windows אני יוצר, אני רוצה להראות המשתמש הודעות אינפורמטיביות שונות.  אספתי רשימה של הכלי להראות את זה. כך הם יכולים לגלול דברים אותם ואת כל כך טובה. 

ההודעות הן אינפורמטיביות בלבד, כך שאין צורך לספק רווח לבן נוספת סביבם מאז המשתמש יכול לבחור לא אותם לכל דבר.  התנהגות ברירת המחדל של תיבת הרשימה מספק כמות משמעותית של ריפוד, רציתי להיפטר ממנו.  ובכן.... אתה לא יכול לעשות דברים כאלה על תיבת הרשימה ישירות.  עם זאת, תעשה את זה על הפריטים שתוסיף:

        פרטי void AddGameStateLogMessage(מחרוזת הודעה משפיעות)
        {
            תיבת טקסט t = חדש תיבת טקסט();
            t.Text = GameStateCounter     + ": " + הודעה משפיעות;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            עובי thisPadding = חדש עובי(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ListBoxItem li = חדש ListBoxItem();
            li.תוכן = t;
            li.MaxHeight = 25;
            thisPadding = חדש עובי(5, 0, 5, 0);
            li.ריפוד = thisPadding;

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

בקוד המוצג למעלה, אני יוצר תיבת טקסט, הגדרת הגופן שלו, ריפוד שלה, ועוד.

הבא, אני ליצור ListBoxItem ולהגדיר את התוכן שלה תיבת הטקסט מעוצב.

לבסוף, אני מכניס את ListBoxItem תיבת הרשימה.  (אני רוצה להראות את ההודעות העדכניות ביותר בחלק העליון של הרשימה, ומכאן תותב(0,li) במקום הוספה פשוטה() להפעלה.).

אני להיות מגרסאות זה קצת לפני אני ממש שמחה עם התנהגות תיבת רשימה אבל התבנית המוצגת לעיל היה פורה מאוד.  אני מקווה שמישהו אחר ימצא את זה מועיל.

</קצה>

undefinedמנוי על הבלוג שלי.

עקוב אחרי הטוויטר ב http://www.twitter.com/pagalvin