Hur du anger människor som en sökomfattning / Använda SharePoint-innehållskälla 2013 REST API

Jag hade anledning att arbeta med SharePoint 2013 Sök-API via resten för första gången. Jag ville söka efter personer, inte dokument. Nyckeln för att lära sig här är att anger du innehåll källor via dess GUID (eller åtminstone i detta fall). Följande jQuery utdrag visar hur:

    loadExpertsAsync: funktionen() {

        jQuery.support.cors = sant;

        $.Ajax({
            URL: Detta.CreateFullApiUrl() +
                "?querytext = "portaler"&SourceId = "b09a7990-05ea-4af9-81ef-edfab16c4e31"" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Färdigheter,AboutMe,Intressen,Yrkestitel,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl "" +
                "&ROWLIMIT = 99",
            metoden: "FÅ",
            headers: { "Acceptera": "Application/json; OData = verbose" },
            cache: falskt,
            framgång: funktionen (resultat) {

I mitt fall, Jag kör API mot SharePoint online. Att få GUID, Jag följde stegen:

  1. Komma åt SharePoint admin center
  2. Välj "Sök" från den vänstra navigeringen
  3. Välj hantera"resultatet källor"
  4. Välj "Lokalbefolkningen resultat"
  5. Titta på Webbadressen.

Min URL såg något liknande:

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

Parametern sourceid är vad arbetat för jag.

(Jag förstår att målentiteten kan faktiskt vara ett slags permanent sak med SP, men jag ska alltid kontrollera ändå 🙂 ).

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Exempel SharePoint resten samtal

Här är en uppsättning prov resten samtal som fungerar för mig och kan hjälpa dig också. Som av 02/2014, there are two examples 🙂

  1. Referera till en kolumn med blanksteg i namnet
  2. Referens en Multi-Välj kolumn
  3. Människor söka via resten

 

Jag lägger till detta som tiden går.

Här är några användbara bläck som jag har hittat samt:

Referera till en kolumn med blanksteg i namnet

Jag skapa en anpassad lista med en kolumn som heter "Blog författare" (utrymmet mellan blogg och författare).

$select att referera till kolumnen är:

image

Helt enkelt ersätta utrymmet med "_x0020_". Vi ser _x0020_ i många exempel över internets och resten är inte annorlunda.

Om du inte gör som, Du kan få ett felmeddelande liknande detta:

Uttrycket “Blogg författare” är inte giltig.

Lätt nog.

Referens en Multi-Välj uppslagskolumn

Ställ in:

  1. Skapa en anpassad lista som heter kategorier.
  2. Lägga till vissa kategorier. Jag la kategorier thusly:image
  3. Skapa en anpassad lista som kallas MockBlog och lägga till kategorier som en Multi-Välj lista kolumn (eller webbplatskolumn om det är hur du slår).

Lägga till vissa objekt i listan Mockblog och du är redo.

En Ajax stil samtal med hjälp av jQuery kommer att se ut så här:

serverUrl  = "/_api/web/listor/GetByTitle("MockBlog")/objekt" +
             "?$Välj = Title,Kategorier/titel,Blog_x0020_Author/titel" + 
             "&$Expandera = Blog_x0020_Author,Kategorier";

Vi säger SharePoint "ge mig titeln för alla kategorier (Kategorier/titel). Få de faktiska värdena för Avdelning genom $Expanderaning listan Kategorier." (Min vilsam omskriva är nog ganska lös, men detta hur jag tolkar det).

Om du gör detta via JavaScript och använder spelman titta på utdata, du får något sådant i gengäld:

 

image

(Ovanstående är en JSON objekt)

Människor söka via resten

Jag bloggade om detta separat. Viktiga är att ange en sourceid parameter vars värde är GUID för lokalbefolkningen innehållskällan. (Innehållskällor brukade kallas omfattningar och det är min-oh-my så hårt att inte kalla allt ett scope för mig!).

Läs mer om det här: http://www.mstechblogs.com/paul/?p=10385

 

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: Skapa en SharePoint-webbplats med resten

Det finns en hel del resurser runt som visar hur man gör detta, men jag kunde inte hitta en omfattande gå till länk, så här är vi.

Du kan skapa en SharePoint-webbplats med hjälp av vila API.  Här är en fullt bakade exempel:

<!--
    SiteRequestForm.html: Samla in information och skapa en webbplats för användaren.
-->

<Center>
<tabell>
    <TR>
        <TD>Webbplatsens namn:</TD>
        <TD><input typ= "text" Namn= "Platsnamn" ID= "Platsnamn" /></TD>
    </TR>
    <TR>
        <TD ColSpan= "2">
            <input typ= "Skicka" ID= "CreateSiteButton" värde= "Skapa webbplatsen" />
        </TD>
    </TR>
</tabell>
</Center>

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

<skript>
var CreateSiteLogicContainer = {

    createSiteData: {
            "parametrar": {
                __metadata: { "typ": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Avdelning: "Paultest1",
                Beskrivning: "Vila-skapad webb av Paul!",
                Språk: 1033,
                Webbmallen: "sts",
                UseUniquePermissions: falskt
            }
    },

    createSite: funktionen () {

        jQuery.support.cors = sant;

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

            headers: {
                "Acceptera": "application/json; OData = verbose",
                "content-type": "application/json;OData = verbose",
                "X-RequestDigest": $(#__REQUESTDIGEST"").val()
            },

            data: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            framgång: funktionen () { Alert("framgång"); },
            fel: funktionen () { Alert("fel"); }

        });
    },

    wireUpForm: funktionen () {
        $("#CreateSiteButton").Klicka på(funktionen () {
            Alert("Om att försöka skapa webbplatsen.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</skript>

När framgångsrika, du får ett JSON paket som svar så här:

image

Mina viktiga tankar och lärdomar från detta:

  • Denna strategi använder jQuery.  I mitt fall, min jQuery biblioteket ligger i ".../ plugins. "  Vill du ändra som att peka till din favorite JQ-läge.
  • Du kan kopiera och klistra in det hela utdraget i en Innehållsredigeraren på en sida och det bör fungera alldeles utmärkt.  Du vill ändra slutpunkten för API-anrop och se till att du referera JQ korrekt.
  • Webbadressen är i förhållande till din API slutpunkt.  I mitt fall, Det skapar underwebbplatser under https://bigapplesharepoint.com
  • Du behöver inte ge ett innehåll-längd. Några blogginlägg och MSDN dokument innebär att du gör, men hände mig automatiskt, som jag antar sköts av $.ajax appellen sig själv.
  • Denna linje är krävs för att undvika en "förbjuden" svar: "X-RequestDigest": $(#__REQUESTDIGEST"").val().  Det finns andra sätt att göra det, men det är ganska trevligt.  Jag har tappat länken till blogg som denna genväg.  H/T till dig, mystiska blogger!

Lycka till och hoppas att detta hjälper någon.

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Övervinna irriterande Problem med relativa URL-adresser i SharePoint Quick Launch

Jag ville lägga till en länk till Snabbstart navigeringen häromdagen och SharePoint berättade:

image

Ren textversion av som är:

Kontrollera att Webbadressen är giltig och börjar med antingen ett giltigt tecken (ett nummertecken (#) eller snedstreck (/)) eller ett giltigt protokoll som stöds (till exempel, "http://’, ' https://’, "filen://’, "ftp://’, "mailto:’, "nyheter:’).

"Blech och pox!"Jag sa.

En lösning på detta är att använda JavaScript för att hitta en känd länk i den snabb sjösätta och åsidosätta sitt beteende.

Att testa detta, lägga till en ny länk på webbplatsen test thusly:

image

Jag använde jQuery. Att lösa det, få lite JavaScript och jQuery till sidan med hjälp av din favorit teknik och med en kodrad som denna:

 

$(dokument).redo( funktionen () {

    $("en:innehåller("Test URL ersättning")").Klicka på(funktionen () { Alert("ändrade klicka beteende!"); återvändande falskt;});

});

Och Bob är din farbror.

JQuery väljaren finner varje <en> -tagg som har "Test URL ersättning" i namnet. Du kanske vill hitta-tune som beroende på din länk och sådant.

.click(funktionen() åsidosätter vad SharePoint skulle ha gjort när användaren klickar på. Se till att du "return false" annars det kommer att göra dina grejer och sedan försöka href saken alltför, vilket är nästan säkert inte ditt mål.

Detta gjordes och test i en SharePoint online-miljö men bör fungera bra i 2010 och tidigare alltför.

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: SharePoint resten kallar endast returnerar 100 Poster

Jag har jobbat på en offentlig inför webbplats för min SharePoint praktik här i New York och en massa JavaScript och resten samtal för att visa innehåll.

Under stambanan utveckling, Jag skapa en liten datamängd med bara 10 eller så rader i en anpassad lista och min resten uppmanar alla drog därifrån.  En gång jag stötte upp listan att ha några hundra rader med data för att testa för förväntad tillväxt, Jag tyckte att jag var får exakt 100 rader som returneras tillbaka på mina övriga samtal.

Detta är en mycket enkel sak att adress.  I mitt fall (och jag tror i de flesta fall), standard resten samtal till SharePoint (och eventuellt som en branschstandard?) återvändande 100 rader.  Tillbaka mer än standard, Använd parametern $top på ditt samtal, som i:

FÅ /Insights Dev/_api/web/lists/GetByTitle("MockBlog")/objekt?$Välj = ID,Avdelning,Kategorier/titel,Blog_x0020_Author/titel,DatePublished,BlogSummary&$Expandera = Blog_x0020_Author,Kategorier&$filter =&$toppen = 9999

Jag plockade 9999 i detta fall eftersom jag vet att growth-wise, Det kommer inte finnas mer än 200 eller så rader läggs till i listan under ett år.  Om det blir otymplig, Vi kan genomföra några kalla på vägen.

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: Lösa "Ogiltig URL-Parameter” problemet med UpdateListItems i lists.asmx

När du arbetar med UpdateListItems via lists.asmx, Det är lätt att generera fel:

Ogiltigt URL-Parameter.

Den URL försynt innehåller ett ogiltigt kommando eller värde. Kontrollera URL: igen.

Du kan få detta fel när du glömmer att ta ID i den listan över fält att uppdatera.  Detta, som många av dessa SP webbtjänster, är lite bakvända eftersom du behöver inkludera ID i attributet ID för den <Metoden> element.  Och du inte uppdateras ID och förmodligen aldrig vill i första hand.

Denna SOAP-kuvertet fungerar:

<soapenv:Kuvert xmlns:soapenv ="http://schemas.xmlsoap.org/SOAP/Envelope/ ">
  <soapenv:Organ>                      
    <UpdateListItems xmlns ="http://schemas.microsoft.com/SharePoint/SOAP/ ">                     
      <Listnamn>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</Listnamn>                     
        <uppdateringar>                     
         <Batch VidFel ="Fortsätt">
          <Metod-ID ="1" CMD ="Update">
            <Fältet Namn ="CooperativeLock">låst!</Fältet>
            <Fältet Namn ="ID">1</Fältet>
          </Metoden>
        </Batch>                     
        </uppdateringar>                
      </UpdateListItems>             
  </soapenv:Organ>         
</soapenv:Kuvert>

Om du tar bort ID-fältreferens så får du den irriterer "Ogiltiga URL-parametern"-meddelandet.

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

 

Stackars mannen cachelagring i JavaScript

[TL;DR version: Använd cookies för att lagra resultaten av async samtal; göra resultaten av tidigare async samtal omedelbart och sedan validera dem efter sidan.]

Jag har jobbat på SharePoint intranät-webbplats för en klient som har, bland annat, en stiliserad sekundär navigering vars menyalternativ hanteras via en vanlig gammal anpassad lista.  Tanken är att klienten får styra "sina" webbplats-menyn utan att påverka eller påverkas av den globala navigeringen som tas ut av det.

(finns det något otroligt omstörtande om att lägga till en CEWP som pekar på en HTML-fil som laddar lite CSS- och JS att i grunden förändra nästan allt om en webbplats beteende... men det är för en annan tjänst)

Koden för denna ganska enkla:

Öm plats här är att varje gång någon träffar en av webbplatsens sidor, användarens webbläsare är att nå ut till få poster i listan.  När dev är komplett och tester har visat att vara stabil och komplett, denna uppmaning är onödigt mer än 99% av tiden eftersom menyn sällan ändras.  Det har också en konstig UI påverka som är vanligt i denna sköna nya värld av hyper-ajaxy webbplatser – sidan återger och först då gör menyn.  Det är skakis och störande i min mening.  Och skakis. Så, cachelagring. 

Jag ändrade logiken thusly:

  • Leta efter cookies i webbläsaren som innehåller menyn när jag senast läste det
    • Om hittade, göra det omedelbart.  Vänta inte på att sidan laddas.  (Du måste se till att din HTML är strategiskt placerad här, men det är inte svårt att göra).
  • Vänta på att sidan laddas och göra en asynkrona anrop till ladda upp menyn objekt från en lista med resten eller lists.asmx eller vad
  • Jämför vad jag fick mot cookie
    • Om det matchar, Stanna
    • Annars, med hjälp av jQuery, dynamiskt fylla ett gäng om <Li>är i en <UL>
  • Använd CSS för att göra all formatering
  • Vinst!

Några av er kommer att säga, "hey! Det finns ingen riktig caching pågår här eftersom du läser menyn ändå varenda gång.”  Och du har rätt – jag tänker inte ge servern någon form av paus.  Men eftersom samtalet är asynkrona och händer efter sidan inledande HTML-nyttolast gör helt, Det känns"" mer lyhörd för användaren.  Menyn gör ganska mycket som sidan drar.  Om menyn händer till förändring, användaren utsätts för en skakis åter dra på menyn, men bara att en gång.

Det finns några sätt att göra detta caching effektivare och hjälpa till servern samtidigt:

  • Sätta i en regel att den "cookie cachen" är giltigt i minst 24 timmar eller några andra tidsram. Så länge det finns ingen utgångna cookie, Använd Kakans menyn ögonblicksbild och aldrig träffa servern.

Tja... det är allt som kommer att tänka på just nu :). 

Om någon har några smarta idéer här skulle jag älska att veta dem.

Och slutligen – denna teknik kan användas för andra saker.  Denna klient sidan har ett antal datadrivna saker på olika sidor, många av dem ändra förhållandevis sällan (som en gång i veckan eller en gång i månaden).  Om du riktar särskilda områden av funktioner, Du kan ge en mer lyhörd UI genom att dra innehåll från lokala cookie butik och rendering omedelbart.  Det känns snabbare att användaren även om du inte sparar servern alla cykler.  Du kan Spara server cykler genom beslut på vissa villkor och utlösare att ogiltigförklara denna lokala cookie cache.  Det är alla situationsanpassat och konstnärliga saker och verkligen den roligaste :). 

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Hur: Konfigurera enhetstest och testa täckning med QUnit.js och Blanket.js för kontor 365 SharePoint App

Intro

Jag har utforskat enhetstestning och testa täckning för JavaScript som jag arbetar på en ny SharePoint-app för SharePoint online i Office 365 svit.  De uppenbara forskning vägar ledde mig till Qunit.js och direkt efter att, till Blanket.js.

QUnit Låt mig ställa in enhetstester och gruppera dem i moduler.  En modul är bara ett enkelt sätt att organisera relaterade tester. (Jag vet inte om jag använder det som avsett, men det fungerar för mig hittills med liten uppsättning tester som jag hittills har definierat).

Blanket.js integreras med Qunit och det kommer Visa mig de faktiska rader JavaScript som var – och ännu viktigare-inte faktiskt avrättades under kör testerna.  Detta är "täckning"-rader som avrättades omfattas av testet medan andra inte är.

Mellan att ställa in bra testfall och Visa täckning, Vi kan minska risken att vår kod har dolda defekter.  Goda tider.

Qunit

Förutsatt att du har din Visual Studio projektet skapa, börja med att ladda ner JavaScript paketet från http://qunitjs.com.  Lägga till JavaScript och motsvarande CSS i din lösning.  Mine ser ut såhär:

image

Figur 1

Som ni kan se, Jag var med 1.13.0 på tiden skrev jag detta blogginlägg. Glöm inte att hämta och lägga till CSS-filen.

Som ur vägen, Nästa steg är att skapa något slags test sele och referera de Qunit bitarna.  Jag testar en massa funktioner i en skriptfil som kallas "QuizUtil.js" så jag skapade en HTML-sida som kallas "QuizUtil_test.html" som visas:

image Figur 2

Här är koden:

<!DOCTYPE HTML>
<HTML xmlns= "http-://www.w3.org/ 1999/xhtml">
<huvud>
    <titel>QuizUtil test med Qunit</titel>
    <länk rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <skript typ= text/javascript"" src="QuizUtil.js" data-cover></skript>
    <script typ ="text/javascript" src ="qunit-1.13.0.js"></skript>
    <script typ ="text/javascript" src ="blanket.min.js"></skript>

    <skript>
        modul("getIDFromLookup");
        Testa("QuizUtil getIDFromLookupField", funktionen () {
            var goodValue = "1;#Paul Galvin";

            lika(getIDFromLookupField(goodValue) + 1, 2), "ID för [" + goodValue + "] + 1 bör vara 2";
            lika(getIDFromLookupField(undefined), undefined, "Odefinierad indataargumentet bör återvända odefinierat resultatet.");
            lika(getIDFromLookupField(""), undefined, "Tom indataargumentet ska returnera ett odefinierat värde.");
            lika(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;vn"), undefined,"Ska alltid returnera ett resultat Cabriolet till ett heltal");
            lika(getIDFromLookupField("2;#någon annan person"), "2", "Kontrollera [2;#någon annan person].");
            lika(getIDFromLookupField("9834524;#lång värde"), "9834524", "Stort värde test.");
            notEqual(getIDFromLookupField("5;#någon", 6), 6, "Testa en notEqual (5 är inte lika med 6 för detta prov: [5;#någon]");

        });

        modul("htmlEscape");
        Testa("QuizUtil htmlEscape()", funktionen () {
            lika(htmlEscape("<"), "&LT;", "Fly en mindre än-operator ('<')");
            lika(htmlEscape("<div class =  "someclass">Lite text</div>"), "&LT;div class =&quot;someclass&quot;&gt;Lite text&LT;/div&gt;", "Mer komplex test sträng.");
        });

        modul("getDateAsCaml");
        Testa("QuizUtil getDateAsCaml()", funktionen () {
            lika(getDateAsCaml(nya Datum("12/31/2013")), "2013-12-31T:00:00:00", "Testa hårdkodade datum: [12/31/2013]");
            lika(getDateAsCaml(nya Datum("01/05/2014")), "2014-01-05T:00:00:00", "Testa hårdkodade datum: [01/05/2014]");
            lika(getDateAsCaml(nya Datum("01/31/2014")), "2014-01-31T:00:00:00", "Testa hårdkodade datum: [01/31/2014]");
            lika(getTodayAsCaml(), getDateAsCaml(nya Datum()), "getTodayAsCaml() ska vara lika getDateAsCaml(nytt datum())");
            lika(getDateAsCaml("nonsens värde"), undefined, "Försöka få datum för ett nonsens värde.");
            lika(getDateAsCaml(undefined), undefined, "Försöka få datum för den [undefined] datum.");
        });

        modul("getParameterByName");
        Testa("QuizUtil getParameterByName (från frågesträngen)", funktionen () {
            lika(getParameterByName(undefined), undefined, "Försöka få odefinierad parameter bör återvända odefinierat.");
            lika(getParameterByName("finns inte"), undefined, "Försöka få parametervärde när vi vet att parametern inte finns.");

        });

        modul("Cookies");
        Testa("QuizUtil olika cookie funktioner.", funktionen () {
            lika(setCookie("test", "1", -1), getCookieValue("test"), "Få en cookie som jag ska fungera.");
            lika(setCookie("anycookie", "1", -1), sant, "Ange en giltig matlagning ska returnera 'true'.");
            lika(setCookie("crazy cookie-namn !@#$%"%\^&*(()?/><.,", "1", -1), sant, "Ställa in en dålig cookie-namn ska returnera"falska".");
            lika(setCookie(undefined, "1", -1), undefined, "Passerar odefinierat som namnet på cookie.");
            lika(getCookieValue("finns inte"), "", "Cookie finns inte testet.");
        });

    </skript>
</huvud>
<organ>
    <div ID= "qunit"></div>
    <div ID= "qunit-fixtur"></div>

</organ>
</HTML>

Det finns flera saker som händer här:

  1. Referera till min kod (QuizUtil.js)
  2. Referenser Qunity.js
  3. Definiera några moduler (getIDFromLookup, Cookies, och andra)
  4. Att placera en <div> vars ID är "qunit".

Sedan, Jag dra bara upp denna sida och du får något sådant:

image

Figur 3

Om du tittar överst, har du några alternativ, varav två är intressant:

  • Dölj klarat tester: Ganska uppenbart.  Kan hjälpa ögat bara se problemområden och inte en massa skräp.
  • Modul: (släpp ner): Detta kommer att filtrera testerna till just dessa grupper av tester som du vill.

När det gäller testerna själva-några kommentarer:

  • Det säger sig självt att du måste skriva din kod så att det är testbara i första hand.  Med hjälp av verktyget kan hjälpa till att upprätthålla den disciplinen. Till exempel, Jag hade en funktion som kallas "getTodayAsCaml()”.  Detta är inte mycket testbara eftersom det tar ingen indataargumentet och testa det för jämställdhet, Vi skulle behöva ständigt uppdatera Provningsmetod för att återspegla det aktuella datumet.  Jag refactored det genom att lägga till en indataparameter för data sedan passerar det aktuella datumet när jag vill ha dagens datum i CAML-format.
  • Ramen Qunit dokumenterar sina egna tester och det verkar ganska robust.  Det kan göra enkla saker som att testa för jämställdhet och har även stöd för ajax stil samtal (både "riktiga" eller hånade med din favorit knäcka).
  • Gå igenom processen också tvingar dig att tänka igenom kant fall – vad händer med "odefinierade" eller null överförs till en funktion.  Det gör att det är död enkel att testa dessa scenarier ut.  Bra grejer.

Täckning med Blanket.js

Blanket.js kompletterar Qunit genom att spåra de faktiska kodrader som kör under köra dina tester.  Det integrerar rätt in i Qunit så även om det är en helt separat app, Det leker fint-det ser verkligen ut som det är en smidig app.

Detta är blanket.js i aktion:

image Figur 4

image

Figur 5

(Du måste faktiskt Klicka på kryssrutan "Aktivera täckning" överst [se figur 3] att möjliggöra detta.)

Markerade rader i figur 5 har inte utförts av någon av mina tester, så jag behöver att utforma ett test som orsakar dem att köra om jag vill ha full täckning.

Få blanket.js fungerar på följande sätt:

  1. Ladda ner från http://blanketjs.org/.
  2. Lägg till det i projektet
  3. Uppdatera din sele testsida (QuizUtil_test.html i mitt fall) enligt följande:
    1. Referens koden
    2. Dekorera din <skript> referens gillar detta:
    <skript typ= text/javascript"" src="QuizUtil.js" data-cover></skript>

Blanket.js plockar upp attributet "data-cover" och gör sin magi.  Det krokar i Qunit, uppdateringar av UI för att lägga till alternativet "Aktivera täckning" och voila!

Sammanfattning (TL; DR)

Använda Qunit för att skriva din testfall.

  • Ladda ner den
  • Lägg till det i projektet
  • Skriva en testsida sele
  • Skapa dina tester
    • Refactor några av din kod vara testbara
    • Vara kreativ!  Tror galen, omöjligt scenarier och testa dem ändå.

Använd blanket.js för att säkerställa täckning

  • Kontrollera att Qunit fungerar
  • Hämta blanket.js och lägga till ditt projekt
  • Lägga till din sele testsida:
    • Lägg till en hänvisning till blanket.js
    • Lägga till en "data-cover" attribut till din <skript> tag
  • Köra din Qunit tester.

Jag aldrig gjorde något av detta innan och hade några elementära saker som arbetar i en handfull timmar. 

Glad testning!

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Senaste dräkten du någonsin ska bära?

[Quick notera – detta är ett ganska långt inlägg på ett jobb öppning för min grupp här i New York och du behöver leva i tri-state område om du är intresserad.]

Jag gick med Slalom Consulting över 18 månader sedan och det gör detta mitt längsta varaktiga jobb sedan 2007. Jag har inte planerar det så. Innan en sträng av jobb hopping som startade med min språng in i SharePoint-världen, Jag var på ett ställe i elva år. Jag har äntligen hittat en ny, varaktig plats att arbeta för lång tid här på Slalom.

Denna plats växer och jag behöver lite hjälp att kontrollera att. Typ av hjälp jag behöver kallas brukar en "SharePoint lösningar arkitekt" även om jag har hittat arkitekt ordet över och/eller felaktigt användas i SharePoint utrymme för ett bra tag nu. Jag har kämpat på att blogga om detta. Jag vill inte bara lista ut en massa punktlista i tärning/Monster stil. Min utmärkta rekrytera kamrater har gjort det redan :). Så, Jag beslutade att ta en "dag i livet"-strategi. Läsa den över och överväga:

1) Om det tilltalar och

2) Om du vet i ditt ben som du kan göra det.

Om ja, Kontakta mig (Paul.GALVIN@slalom.com) och låt oss tala.

Detta är vad du kan förvänta dig att göra i typisk vecka/månad som lösningar arkitekt i mitt lag:

  • Driva projekt, ofta mer än en i taget. Vissa projekt är stort och så du skulle äga att ett projekt. "Kör" ett projekt innebär att du har tillsyn och ansvar för den övergripande kvaliteten på leverans. I nästan samtliga fall du har ett PM och en riktigt stark team av devs, BAs, UX människor, osv., att stödja dig. Men du kommer vara den viktigaste ansikte klienten ser, förtroenden, m.m.. Det finns ingen gömmer sig i skuggorna i denna roll :). Du ska fakturera denna gång och målet är att hålla dig upptagen nog att göra detta 80 procent av tiden.
  • Hjälp med pappersarbete – suggor, RFP, däck – så bra grejer. Jag tror att vi har vår SUGGA process ner ganska tätt och fast så det är ganska standardiserade. Om du är van att skriva suggor idag, vår process kommer inte att bli en utmaning för dig. RFP-dessa är lite svårare. De tenderar att vara skräddarsydda i naturen till att börja med och RFP vanligtvis dra in flera olika författare. Det är både bra och dåliga, men främst bra. Detta kan få scrambly när vi behöver bolla behovet av utmärkt kundservice samtidigt också försöka vinna nya arbete. Du förmodligen inte kommer att äga en RFP men du blir ombedd att bidra sektioner.
  • Säljsamtal, men inte en närmare. Under en månad, Du kan förvänta dig att gå på ett par säljsamtal med vårt säljteam. Du kommer att vara de små och medelstora företagen i rummet, ta anteckningar och hjälpa till att forma lösningen. Men, du kommer inte att vara frågade eller förväntas hantera försäljningscykeln från början till slut. Du behöver inte "sälja,"du behöver bara vara en lugn röst för sakkunnig resonerar i rummet. Detta bygger förtroende och det är därför du är där. Självklart, Om du vill sälja, sedan finns det utrymme för dig att växa här också.
  • Hjälp med att rekrytera. Vi har någon slags hänvisningsprogram, så om du vet verkligen stark folk i gemenskapen som du tycker bör vara del av Slalom, Du kan dra av på så sätt. Vi har engagerade rekryterare (Vem är utmärkt) att göra lejonparten av denna typ av arbete. Verklig hjälp intervjua kandidater – är de en bra passform kulturellt? Vet de deras grejer? Kan de göra * min * livet lättare? 🙂 Det här kommer i skurar, ett par gånger i månaden, men i några månader du inte skulle göra det alls.
  • Hjälpa till att definiera bästa praxis, bygga upp vår IP och göra oss mer konkurrenskraftiga på marknaden. Du är en erfaren kille/tjej. Du har varit runt kvarteret – inte bara i SharePoint, men du har erfarenhet av andra tekniker och upplevt goda och dåliga (även fruktansvärda) projekt över. Som en följd, du vet vad som fungerar och vad som inte. Vi vill du dela den upplevelsen med oss på en daglig basis i en taktisk känsla (dvs. köra dina projekt riktigt bra) men också strategiskt. "Bästa praxis" är lite överutnyttjas som en term och jag tveka att använda den. Den grundläggande idén är att du kommer som en erfaren person med djup och relevant erfarenhet och vi vill integrera bäst av dina lärdomar i hur vi samarbeta med kunder på en daglig basis.
  • Ha det så kul – Vi är en mycket integrerad gäng. Jag vill undvika ännu en plattityd, men det är verkligen träffande i det här fallet – vi jobbar hårt (typ av) och vi spelar ännu hårdare :). Det finns en Aaron Sorkin slags skämt här, rummet är alltid full av smarta människor, Vi gillar våra drink och organiserar vi en hel del roliga händelser-filmkväll, baseball resor (även om de är hemsk, praktiskt taget onda lag).

Om jag skulle sammanfatta det allt i ett ord, Jag skulle använda ordet "ledarskap." Leda projekt, ta en ledande roll i bygga ut praxis (IP, bygga upp laget), m.m..

Men vänta! Det finns mer! Varför annars fungerar på Slalom?

  • Anmärkningsvärd enighet avsikt – alla vill växa här sak ut. "Det här" är kontoret. Alla är ombord med detta.
  • Vind i dina segel – syster kontor, syster praxis – Slalom är en "full service" consulting organisation. Jag leder upp SharePoint praxis (en "praxis området leda" i Slalom jargong). Jag har syster praxis på 11 andra Slalom kontor. Så även om jag är king så långt handlar SharePoint här i Slalom New York, Jag har peer praxis i Chicago, Seattle, Dallas, Atlanta, Boston, m.m.. som jag kan dra med stöd. Det är verkligen bäst av två världar – betydande autonomi här i New York men tillgång till massor av talang i organisationen.
  • Vind i din försäljning (2) – Vi gör mer än SharePoint – mycket mer. Vi gör BI, CRM, UX, Business consulting, Mobile, anpassad utveckling och andra. Vi är bra på korsförsäljning bland oss själva och vi är bra på målning – och ännu viktigare, leverera på – en "full service" bild för våra kunder. Detta är särskilt lockande för mig. Jag har varit på många mindre orgs arbetar på SharePoint spelningar och frustrerad om och om igen eftersom vi var duva hålad som "SharePoint folket." Det inte sker med Slalom och vi får göra mer intressant arbete som ett resultat.
  • Lokala modell – inga resor.
  • Långsiktig tillväxt – Slalom har gått gangbusters. Massor av tillväxt och stabilitet. Tillväxt innebär också att vi måste anlita ledare idag att huvudet upp nya lag som vi lägger till fler kunder och personal för att stödja dessa klienter.

Jag kunde gå på, men jag har nog redan gått länge. Jag tror jag har fångat kärnan här. Om du funderar på ser byta jobb och det bra ut för dig, Låt oss tala.

Om du är nöjd på ditt Nuvarande jobb – låt oss tala ändå :). Jag har varit i en massa ställen och var mycket "glad" på gång. Slalom är olika och jag skulle välkomna en chans att övertyga dig om att.

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: Ange storleken på ett objekt i en listruta i ett Windows Store App

I en Windows Store App skapar jag, Jag vill visa användaren olika informationsmeddelanden.  Jag plockade en listruta som verktyget att visa det så att de kan bläddra igenom dem och allt det bra grejer. 

Meddelanden är endast informativt, så det finns ingen anledning att ge allt det extra mellanslag runt dem eftersom användaren kan aldrig välja dem för något.  Standardbeteendet för ListBox ger en betydande mängd stoppning och jag ville bli av med den.  Tja.... Du kan inte göra sånt på listrutan direkt.  EMELLERTID, Du kan göra det till de poster som du lägger till:

        privat void AddGameStateLogMessage(sträng theMessage)
        {
            Textrutan t = nya Lärobok();
            t.Text = GameStateCounter    + ": " + theMessage;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            Tjocklek thisPadding = nya Tjocklek(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ListBoxItem li = nya ListBoxItem();
            Li.Content = t;
            Li.MaxHeight = 25;
            thisPadding = nya Tjocklek(5, 0, 5, 0);
            Li.Padding = thisPadding;

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

i ovanstående, Jag är att skapa en textruta och ställa in teckensnitt, dess stoppning, m.m..

Nästa, Jag skapa en ListBoxItem och sätta dess innehåll till textrutan formaterad.

Slutligen, Jag sätter på ListBoxItem i listrutan.  (Jag vill visa senaste meddelanden överst på listan, därav skäret(0,Li) i stället för en enkel Lägg till() åkallan.).

Jag kommer att pyssla här lite innan jag är riktigt nöjd med ListBox beteendet men mönstret ovan har varit mycket givande.  Förhoppningsvis finner någon annan det användbart.

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin