Slik angir du folk som et søkeomfang / Innholdskilde SharePoint 2013 REST API

Jeg hadde grunn til å arbeide med SharePoint 2013 Søke-API via resten for første gang. Jeg ønsket å søke etter personer, ikke dokumenter. Nøkkelen læring her er at angir du innholdskilder via sin GUID (eller minst i dette tilfellet). Følgende jQuery kodebiten viser hvordan:

    loadExpertsAsync: funksjonen() {

        jQuery.support.cors = sann;

        $.Ajax({
            URL-adresse: Dette.CreateFullApiUrl() +
                "?querytext = "portaler"&sourceid = "b09a7990-05ea-4af9-81ef-edfab16c4e31"" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Ferdigheter,AboutMe,Interesser,JobTitle,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&ROWLIMIT = 99",
            metoden: "FÅ",
            overskrifter: { "Godta": "programmet/json; OData = detaljert" },
            cache: USANN,
            suksess: funksjonen (resultatet) {

I mitt tilfelle, Jeg kjører API mot SharePoint online. Få guiden, Jeg fulgte fremgangsmåten:

  1. Tilgang til Administrasjonssenter for SharePoint
  2. Velg "Søk" fra venstre side
  3. Velg «Behandle resultatet kilder»
  4. Velg "Lokalbefolkningen resultater"
  5. Se på nettadressen.

Webadressen min sett noe som:

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

Parameteren sourceid er hva arbeidet for meg.

(Jeg forstår at kilde-IDen kan faktisk være en slags permanent ting med SP, but I’ll always check anyway 🙂 ).

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

Eksempel SharePoint resten samtaler

Her er et sett eksempel resten anrop som fungerer for meg og kan hjelpe deg også. Som av 02/2014, there are two examples 🙂

  1. Referere til en kolonne med mellomrom i navn
  2. Referere til en multi-velger kolonne
  3. Utføre et personsøk via resten

 

Jeg vil legge til dette som tiden går.

Her er noen nyttige blekkfarger jeg har funnet også:

Referere til en kolonne med mellomrom i navn

Jeg opprette en egendefinert liste med en kolonne kalt "Blogg forfatter" (mellomrom mellom bloggen og forfatter).

$select referanse kolonnen er:

image

Bare erstatte plassen med "_x0020_". Vi ser _x0020_ i mange eksempler på internets og resten er ikke annerledes.

Hvis du ikke gjør det, du er ansvarlig for å få en feilmelding som dette:

Uttrykket “Bloggforfatteren” er ikke gyldig.

Lett nok.

Referere til en multi-velger oppslagskolonne

Definere:

  1. Opprette en egendefinert liste navnet kategorier.
  2. Legg til noen kategorier. Jeg lagt kategorier thusly:image
  3. Opprette en egendefinert liste kalt MockBlog og legge til kategorier som en flervalgsliste kolonne (eller områdekolonne hvis det er hvordan du ruller).

Legge til noen elementer i listen Mockblog og du er klar.

En Ajax stil anrop ved hjelp jQuery vil se omtrent slik ut:

serverUrl  = (likhetstegn) "/_api/web/lister/GetByTitle('MockBlog')/elementer" +
             "?$Velg = tittel,Kategorier/tittel,Blog_x0020_Author/tittel" + 
             "&$utvide = Blog_x0020_Author,Kategorier";

Vi forteller SharePoint "gi meg tittelen for alle kategorier (Kategorier/tittel). Få de faktiske verdiene for Tittel ved $utvideing kategorilisten." (Min avslappende parafraser er trolig ganske løs, men dette hvordan jeg tolke det).

Hvis du gjør dette via JavaScript og bruker Fiddler for å se på utdataene, du får noe som dette tilbake:

 

image

(Ovenfor er en JSON objekt)

Utføre et personsøk via resten

Jeg blogged om dette separat. Nøkkelen er å angi en sourceid parameter som er guiden for lokalbefolkningen innholdskilden. (Innholdskilder som kalles omfang og det er min-oh-min så hardt å ikke kalle alt et område for meg!).

Les mer om det her: http://www.mstechblogs.com/paul/?p=10385

 

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

Rask og enkel: Opprette et SharePoint-område ved hjelp av REST

Det er mange ressurser rundt som viser hvordan du gjør dette, men jeg kunne ikke finne en omfattende gå-til-kobling, så her er vi.

Du kan opprette et SharePoint-område ved hjelp av REST-API.  Her er et fullt bakt eksempel:

<!--
    SiteRequestForm.html: Samle informasjon og lage et nettsted for brukeren.
-->

<Center>
<tabell>
    <tr>
        <TD>Områdenavn:</TD>
        <TD><inngang type= "tekst" navn= "Områdenavn" ID= "Områdenavn" /></TD>
    </tr>
    <tr>
        <TD ColSpan= "2">
            <inngang type= "Send" ID= "CreateSiteButton" verdi= "Opprette webområdet" />
        </TD>
    </tr>
</tabell>
</Center>

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

<skriptet>
var CreateSiteLogicContainer = {

    createSiteData: {
            "parametere": {
                __metadata: { "type": "SP.WebInfoCreationInformation" },
                URL-adresse: "Paultest1",
                Tittel: "Paultest1",
                Beskrivelse: "resten opprettet web Paul!",
                Språk: 1033,
                WebTemplate: "m",
                UseUniquePermissions: USANN
            }
    },

    createSite: funksjonen () {

        jQuery.support.cors = sann;

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

            overskrifter: {
                "Godta": "program/json; OData = detaljert",
                "content-type": "program/json;OData = detaljert",
                «X-RequestDigest": $("#__REQUESTDIGEST").Val()
            },

            data: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            suksess: funksjonen () { varsel("suksess"); },
            feil: funksjonen () { varsel("feil"); }

        });
    },

    wireUpForm: funksjonen () {
        $("#CreateSiteButton").Klikk(funksjonen () {
            varsel("Om å prøve og opprette området.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</skriptet>

Når vellykket, du får en JSON pakke svar som dette:

image

Min nøkkel tanker og erfaringene fra dette inkluderer:

  • Denne fremgangsmåten bruker jQuery.  I mitt tilfelle, biblioteket jQuery ligger i ".../ plugins. "  Vil du endre å din favoritt JQ plasseringen.
  • Du kan kopiere og lime inn at hele kodebiten i en webdel for innholdsredigering på en side og det skal fungere helt fint.  Du vil endre endepunktet for API-kallet og sørge for at du refererer JQ riktig.
  • URL-adressen er knyttet til din API endepunkt.  I mitt tilfelle, det skaper sekundære områder under https://bigapplesharepoint.com
  • Du trenger ikke å gi en content-Lenght. Noen blogginnlegg og MSDN dokumentet innebærer at du gjør, men skjedde for meg automatisk, som jeg antar er håndteres av $.ajax samtalen selv.
  • Denne linjen er nødvendig for å unngå en "forbudt" svar: «X-RequestDigest": $("#__REQUESTDIGEST").Val().  Det finnes andre måter å gjøre det., men dette er ganske fin.  Jeg har mistet koblingen til bloggen som denne snarveien.  H/T deg, mystisk blogger!

Lykke til og håper dette hjelper noen.

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

Overvinne irriterende Problem med Relative URL-adresser i Hurtigstart på SharePoint

Jeg ønsket å legge en link til hurtigstartlinjen navigasjon forleden og SharePoint fortalte:

image

Ren tekst-versjon som er:

Kontroller at URL-adressen er gyldig og begynner med enten et gyldig tegn (et nummertegn (#) eller skråstrek (/)) eller en gyldig støttet protokoll (for eksempel, ' http://’, ' https://’, ' fil://’, ' ftp://’, ' mailto:’, ' nyheter:’).

"Blech og pox!"Jeg sa.

En løsning på dette er å bruke JavaScript til å finne en kjent kobling i Hurtigstart og overstyre virkemåten.

Å teste dette, legge til en ny kobling til webområdet test thusly:

image

Jeg brukte jQuery. Du kan løse det., få noen JavaScript og jQuery på siden ved å bruke ditt favorittmetoden og med en linje med kode som dette:

 

$(dokumentet).klar( funksjonen () {

    $("en:inneholder("Test URL erstatning")").Klikk(funksjonen () { varsel("endrede Klikk virkemåte!"); avkastning USANN;});

});

Og Bob er din onkel.

JQuery velgeren finner alle <en> kode som har "Test URL erstatning" i navnet. Du kan finne-låt som avhengig av koblingen og slike.

Klikk(funksjonen() overstyrer hva SharePoint ville ha gjort når brukeren klikker. Sikre du "return false" eller ellers det vil gjøre ting og deretter prøve på href ting også, som er nesten helt sikkert ikke målet ditt.

Dette ble gjort og test i en SharePoint online-miljøet, men skal fungere godt i 2010 og tidligere for.

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

Rask og enkel: SharePoint resten kaller bare returnerer 100 Poster

Jeg har jobbet på et offentlig mot webområde for min SharePoint praksis her i New York og den bruker mye JavaScript og resten kaller for å vise innhold.

Under hovedlinjen utvikling, Jeg lage en liten datasett med bare 10 eller så rader i en liste og min resten oppfordrer alle dro derfra.  Når jeg bumped opp listen har noen få hundre rader for å teste for forventet vekst, Jeg fant at jeg får nøyaktig 100 rader som returneres tilbake på mine resten samtaler.

Dette er en veldig enkel ting til adressen.  I mitt tilfelle (og jeg tror i de fleste tilfeller), standard resten samtaler til SharePoint (og muligens en industristandard?) avkastning 100 rader.  Å returnere mer enn standard, Bruk parameteren $top på ringer, som i:

FÅ /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/elementer?$Velg ID,Tittel,Kategorier/tittel,Blog_x0020_Author/tittel,DatePublished,BlogSummary&$utvide = Blog_x0020_Author,Kategorier&$filteret =&$topp = 9999

Jeg plukket 9999 i dette tilfellet siden jeg vet at growth-wise, det vil ikke være mer enn 200 eller så rader lagt til denne listen i ett år.  Hvis det blir ungainly, Vi kan implementere noen paginerer nedover veien.

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

Rask og enkel: Løse "Ugyldig URL-Parameter” problemet med UpdateListItems i lists.asmx

Når du arbeider med UpdateListItems via lists.asmx, Det er lett å generere feilen:

Ugyldig URL-Parameter.

URL-adressen inneholder en ugyldig kommando eller verdi. Kontroller URL-adressen på nytt.

Du kan få denne feilmeldingen når du glemmer å inkludere ID i den listen skal oppdateres.  Dette, som mange av disse SP webtjenester, er litt counterintuitive siden du trenger å inkludere ID i ID-attributtet for den <Metoden> elementet.  Og du ikke oppdatert ID og trolig aldri vil i første omgang.

Denne SOAP-konvolutten fungerer:

<soapenv:Konvolutt xmlns:soapenv =' http://schemas.xmlsoap.org/SOAP/ENVELOPE/'>
  <soapenv:Kroppen>                      
    <UpdateListItems xmlns =' http://schemas.Microsoft.com/SharePoint/SOAP/'>                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <oppdateringer>                     
         <Batch OnError ="Fortsett">
          <Metoden ID ="1" CMD ="Oppdatering">
            <Navnet på feltet ="CooperativeLock">låst!</Feltet>
            <Navnet på feltet ="ID">1</Feltet>
          </Metoden>
        </Satsvis>                     
        </oppdateringer>                
      </UpdateListItems>             
  </soapenv:Kroppen>         
</soapenv:Konvolutt>

Hvis du fjerner ut ID feltreferansen så får du det sjenerende "Ugyldige webadresseparameter" beskjed.

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

 

Fattig mann er hurtigbufring i JavaScript

[TL;DR versjon: Bruk informasjonskapsler til å lagre resultatene av asynkrone samtaler; gjengi resultatet av siste asynkrone samtaler umiddelbart og deretter validere dem etter sideinnlastingen.]

Jeg har jobbet på SharePoint intranettområde for en klient som har, blant annet, en stilisert sekundær navigasjon som menyalternativer administreres via en vanlig gamle egendefinert liste.  Tanken er at klienten får Kontrollmenyen "sine" området uten å påvirke eller blir påvirket av global navigasjon satt ut av det.

(Det er noe utrolig samfunnsnedbrytende om å legge til en CEWP som peker til en HTML-fil som laster noen CSS og JS fundamentalt endre nesten alt om nettstedets oppførsel... men det er for en annen post)

Koden for denne pen enkel:

Sår spot her er at hver gang noen treff en av områdets sider, brukerens web-leser er nå for å få elementer fra listen.  Når dev er fullført og testing har vist ting å være stabil og fullføre, Denne samtalen er unødvendig mer enn 99% tiden siden menyen sjelden endres.  Det har også en merkelig UI innvirkning som er vanlig i denne brave new world av hyper-ajaxy nettsteder-siden gjør og deretter gjengir menyen.  Det er nervøs og forstyrrende i min mening.  Og nervøs. Så, hurtigbufring. 

Jeg endret logikken thusly:

  • Se etter en informasjonskapsel i nettleseren som inneholder menyen som jeg sist leste det
    • Hvis funnet, gjøre det umiddelbart.  Ikke vent til siden å slutten lessing.  (Du må kontrollere at HTML er strategisk plassert her, men det er ikke vanskelig å gjøre).
  • Vent til siden å slutten lessing og lage en asynkron behøve laste opp elementer fra en liste med resten eller lists.asmx eller hva
  • Sammenligne hva jeg fikk mot cookie
    • Samsvarer med, stopp
    • Ellers, hjelp jQuery, dynamisk fylle en haug hvis <Li>er i en <UL>
  • Bruk CSS til all formatering
  • Fortjeneste!

Noen av dere skal si, "Hei! Det er ingen reell skjulested vei her siden du leser menyen allikevel hver eneste gang.”  Og du har rett-jeg gi ikke serveren alle slags pause.  Men fordi samtalen er asynkrone og skjer etter siden første HTML nyttelast gjengir fullt, det føles"" mer mottagelig for brukeren.  Menyen gjør ganske mye som siden trekker.  Hvis menyen skjer endringen, brukeren er utsatt for en nervøs re-trekning av menyen, men den ene gangen.

Det er noen måter å gjøre dette hurtigbufring mer effektiv og hjelpe til serveren samtidig:

  • Innlegge en regel at "cookie cache" er gyldig i minst 24 timer eller noen andre tidsramme. Så lenge det er ingen opphøre koke, Bruk informasjonskapselen menyen bilde og aldri truffet serveren.

Vel... det er alt som kommer til hjernen akkurat nå :). 

Hvis noen har noen smarte ideer her ville jeg elske å kjenne dem..

Og til slutt-denne teknikken kan brukes til andre ting.  Denne klienten siden har en rekke data-drevet ting på forskjellige sider, mange av dem endre relativt sjelden (som en gang i uken eller en gang i måneden).  Hvis du målrette bestemte områder av funksjonalitet, Du kan gi en mer responsiv UI ved å trekke innhold fra lokale cookie store og gjengivelse umiddelbart.  Det føles raskere til brukeren selv om du ikke lagrer serveren noen sykluser.  Du kan Lagre server sykluser med å beslutter på noen betingelser og utløsere å oppheve denne lokale cookie cache.  Det er alle situasjonsforståelse og fancy ting og virkelig det morsomste :). 

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

hvordan: Konfigurere Enhetstest og testen dekning med QUnit.js og Blanket.js For et kontor 365 SharePoint App

Intro

Jeg har vært å utforske enhetstesting og teste dekning for JavaScript som jeg jobber på en ny SharePoint-app for SharePoint online i Office 365 Suite.  Banene som selvskreven forskning ledet meg til å Qunit.js og etter at, til Blanket.js.

QUnit la meg definere enhet tester og gruppere dem i moduler.  En modul er bare en enkel måte å organisere relaterte tester. (Jeg er ikke sikker jeg bruker det som den skal, men det fungerer for meg så langt med de små tester jeg hittil har definert).

Blanket.js integreres med Qunit og det viser meg de faktiske linjene med JavaScript som var- og enda viktigere-var ikke faktisk utført i løpet av tester.  Dette er "dekning"-linjer som kjøres som er dekket av testen, mens andre ikke.

Mellom definere god test sakene og vise dekning, Vi kan redusere risikoen for at våre koden har gjemt defekter.  Gode tider.

Qunit

Antar du har Visual Studio prosjekt satt, Start ved å laste ned JavaScript pakken fra http://qunitjs.com.  Legg til JavaScript og tilsvarende CSS i løsningen.  Min ser slik ut:

image

Figur 1

Som du kan se, Jeg brukte 1.13.0 på tiden skrev jeg dette blogginnlegget. Ikke glem å laste ned og legge CSS-filen.

Det ut av veien, neste skritt er å lage en slags test seletøy og referanse Qunit biter.  Jeg tester en haug av funksjoner i en skriptfil kalt "QuizUtil.js" så jeg laget en HTML-side som kalles "QuizUtil_test.html" som vist:

image Figur 2

Her er koden:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<hodet>
    <tittel>QuizUtil test med Qunit</tittel>
    <kobling rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <skriptet type= text/javascript"" src="QuizUtil.js" data-cover></skriptet>
    <script type ="text/javascript" src ="qunit-1.13.0.js"></skriptet>
    <script type ="text/javascript" src ="blanket.min.js"></skriptet>

    <skriptet>
        modul("getIDFromLookup");
        test("QuizUtil getIDFromLookupField", funksjonen () {
            var goodValue = "1;#Paul Galvin";

            lik(getIDFromLookupField(goodValue) + 1, 2), "ID av [" + goodValue + "] + 1 bør være 2";
            lik(getIDFromLookupField(Udefinert), Udefinert, "Udefinert inndataargumentet skal returnere udefinert resultatet.");
            lik(getIDFromLookupField(""), Udefinert, "Tom inndataargumentet skal returnere en udefinert verdi.");
            lik(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;vn"), Udefinert,"Bør alltid returnere en kabriolet resultatet til et heltall");
            lik(getIDFromLookupField("2;#en annen person"), "2", "Kontrollere [2;#en annen person].");
            lik(getIDFromLookupField("9834524;#lang verdi"), "9834524", "Stor verdi test.");
            notEqual(getIDFromLookupField("5;#noen", 6), 6, "Testing en notEqual (5 er ikke lik 6 for dette eksemplet: [5;#noen]");

        });

        modul("htmlEscape");
        test("QuizUtil htmlEscape()", funksjonen () {
            lik(htmlEscape("<"), "&lt;", «Escaping et mindre enn-operator ('<')");
            lik(htmlEscape("<div class =  "someclass">Tekst</div>"), "&lt;div class =&quot;SomeClass&quot;&gt;Tekst&lt;/div&gt;", "Mer komplekse teststrengen.");
        });

        modul("getDateAsCaml");
        test("QuizUtil getDateAsCaml()", funksjonen () {
            lik(getDateAsCaml(nye Dato("12/31/2013")), "2013-12-31T:00:00:00", "Testing hardkodet dato: [12/31/2013]");
            lik(getDateAsCaml(nye Dato("01/05/2014")), "2014-01-05T:00:00:00", "Testing hardkodet dato: [01/05/2014]");
            lik(getDateAsCaml(nye Dato("01/31/2014")), "2014-01-31T:00:00:00", "Testing hardkodet dato: [01/31/2014]");
            lik(getTodayAsCaml(), getDateAsCaml(nye Dato()), "getTodayAsCaml() bør tilsvare getDateAsCaml(ny dato())");
            lik(getDateAsCaml("tull verdi"), Udefinert, "Prøv å få datoen for en tull verdi.");
            lik(getDateAsCaml(Udefinert), Udefinert, "Prøv å få datoen for den [Udefinert] datoen.");
        });

        modul("getParameterByName");
        test("QuizUtil getParameterByName (fra søkestrengen)", funksjonen () {
            lik(getParameterByName(Udefinert), Udefinert, "Prøv å få udefinert parameter skal returnere udefinert.");
            lik(getParameterByName("finnes ikke"), Udefinert, "Prøv å få parameterverdi når vi vet parameteren ikke finnes.");

        });

        modul("Cookies");
        test("QuizUtil ulike cookie funksjoner.", funksjonen () {
            lik(setCookie("test", "1", -1), getCookieValue("test"), "Få en informasjonskapsel jeg skal fungere.");
            lik(setCookie("anycookie", "1", -1), sann, "Angi en gyldig matlaging skal returnere 'true'.");
            lik(setCookie("crazy informasjonskapselnavn !@#$%"%\^&*(()?/><.,", "1", -1), sann, "Angi en dårlig informasjonskapselnavn skal returnere false'.");
            lik(setCookie(Udefinert, "1", -1), Udefinert, "Passerer udefinert som informasjonskapselen.");
            lik(getCookieValue("finnes ikke"), "", "Cookien ikke finnes test.");
        });

    </skriptet>
</hodet>
<kroppen>
    <div ID= "qunit"></div>
    <div ID= "qunit-lampen"></div>

</kroppen>
</HTML>

Det er flere ting skjer her:

  1. Referanse kode (QuizUtil.js)
  2. Henviser Qunity.js
  3. Definere noen moduler (getIDFromLookup, Informasjonskapsler, og andre)
  4. Plassere en <div> Hvis ID er "qunit".

Deretter, Jeg trekke bare opp denne siden og du får noe som dette:

image

Figur 3

Hvis du ser øverst, har du noen alternativer, to av dem er interessant:

  • Skjul bestått tester: Ganske åpenbart.  Kan hjelpe deg bare se problemområder og ikke en masse rot.
  • Modul: (rullegardinmenyen): Dette vil filtrere testene til bare de gruppene av tester du vil.

Som for prøver selv-noen kommentarer:

  • Det går uten å si at du trenger å skrive koden slik at det er testbare i første omgang.  Ved hjelp av verktøyet kan bidra til å håndheve den disiplinen. For eksempel, Jeg hadde en funksjon kalt "getTodayAsCaml()”.  Dette er ikke etterprøvbar siden det tar ingen inndataargumentet og teste det for likestilling, Vi må kontinuerlig oppdatere test koden for å gjenspeile gjeldende dato.  Jeg refactored det ved å legge til en data-inndataparameteren deretter passerer gjeldende dato når jeg vil dagens dato i CAML-format.
  • Qunit rammen dokumenter sine egne tester og det synes ganske robust.  Det kan gjøre enkle ting som tester for likestilling og har også støtte for ajax-stil samtaler (både "ekte" eller spottet benytter din favoritt spotter).
  • Gå gjennom prosessen tvinger deg til å tenke gjennom kanten-hva skjer med "udefinert" eller null er sendt til en funksjon.  Det gjør det døde enkelt å teste disse scenariene ut.  Gode ting.

Dekning med Blanket.js

Blanket.js utfyller Qunit ved å spore faktiske kodelinjene som utføres i løpet av din tester.  Det integreres rett i Qunit så selv om det er en helt egen app, Det spiller pent-det egentlig ser ut som det er en sømløs app.

Dette er blanket.js i aksjon:

image Figur 4

image

Figur 5

(Faktisk må du klikke på avkrysningsruten «Aktiver dekning» øverst [se figur 3] aktivere dette.)

De uthevede linjene i figur 5 ikke er utført av noen av mine tester, så jeg trenger å tenke ut en test som forårsaker dem til å kjøre hvis jeg vil full dekning.

Få blanket.js fungerer på følgende måte:

  1. Laste det ned fra http://blanketjs.org/.
  2. Legge det til i prosjektet
  3. Oppdatere testsiden sele (QuizUtil_test.html i mitt tilfelle) slik:
    1. Referanse koden
    2. Dekorere din <skriptet> referanse som dette:
    <skriptet type= text/javascript"" src="QuizUtil.js" data-cover></skriptet>

Blanket.js plukker opp attributtet "data-cover" og gjør sin magi.  Det kroker i Qunit, oppdaterer Grensesnittet for å legge til alternativet "Aktiver dekning" og voila!

Sammendrag (TL; DR)

Bruk Qunit til å skrive din test tilfeller.

  • Dataoverføre den
  • Legge det til i prosjektet
  • Skrive en test seletøy for
  • Opprette tester
    • Refactor noen av din koden skal være testbare
    • Vær kreativ!  Tenk på gal, umulig scenarier og teste dem allikevel.

Bruk blanket.js å sikre dekning

  • Kontroller at Qunit fungerer
  • Last ned blanket.js og legger den til prosjektet
  • Legge det til sele testsiden:
    • Legg til en referanse blanket.js
    • Legge til en "data-cover" attributt til din <skriptet> Tag
  • Kjøre Qunit tester.

Jeg har aldri gjorde noe av dette før og hadde noen enkle ting i en håndfull timer. 

Happy testing!

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

Siste passer du noen gang vil ha?

[Quick merke-dette er en ganske lang innlegg på en jobb åpning for min gruppe her i New York, og du trenger å leve i tri-state-området hvis du er interessert.]

Jeg sluttet slalåm Consulting over 18 måneder siden og som gjør denne jobben min lengste varende siden 2007. Jeg hadde ikke tenkt det på den måten. Før en rekke jobb hopper som startet med min spranget inn i SharePoint-verden, Jeg var på ett sted i elleve år. Jeg har endelig funnet en ny, varig sted å arbeide i lang tid her på Slalom.

Dette stedet er økende, og jeg trenger litt hjelp til å kontrollere at. Hva slags hjelp jeg trenger er vanligvis kalt en "SharePoint løsninger arkitekten" selv om jeg har funnet ordet arkitekten over og/eller feil brukes i SharePoint-plass for helt en stund nå. Jeg har slitt på hvordan å blogge om dette. Jeg ønsker ikke å bare vise ut en haug av punkter i terninger/Monster stil. Mine utmerket rekruttere jevnaldrende har gjort det allerede :). Så, Jeg bestemte meg å ta en "day in the life" tilnærming. Lese det over og vurdere:

1) Hvis det appellerer og

2) Om du vet i bein at du kan gjøre det.

Hvis ja, kontakt meg (Paul.Galvin@slalom.com) og la oss snakke.

Dette er hva du kan forvente å gjøre i typisk uke/måned som en løsninger arkitekten på laget mitt:

  • Kjøre prosjekter, ofte mer enn en om gangen. Noen prosjekter er store og så ville du eier at ett prosjekt. "Running" er et prosjekt betyr at du har tilsyn og ansvar for den generelle kvaliteten på levering. I nesten alle tilfeller vil du ha en PM og et veldig sterkt lag devs, BAs, UX folk, osv., å støtte deg. Men du vil være det viktigste ansiktet klienten ser, klareringer, osv.. Det er ingen gjemmer seg i skyggene i denne rollen :). Du vil fakturere denne gangen, og målet er å holde deg opptatt nok til å gjøre dette 80 prosent av tiden.
  • Hjelpe til med papirarbeid-sår, Anbudsforespørsler, dekk-alt det gode ting. Jeg tror vi har våre sår prosessen ned ganske tett og solid så det er ganske formalistisk. Hvis du er vant til å skrive sår i dag, vår prosess kommer ikke til å være en utfordring for deg. Anbudsforespørsler-dette er litt hardere. De pleier å være skreddersydd i naturen til å begynne med og anbudsforespørsler vanligvis trekker i flere forskjellige forfattere. Det er både gode og dårlige, men hovedsakelig gode. Dette kan få scrambly når vi trenger å sjonglere behovet for utmerket kundeservice mens også prøver å vinne nye arbeid. Du sannsynligvis vil ikke eier en RFP, men du vil bli bedt om å bidra inndelinger.
  • Salg samtaler, men ikke en nærmere. I løpet av en måned, Du kan forvente å gå på et par salg samtaler med vårt salgsteam. Du vil være SME i rommet, ta notater og bidra til å forme løsningen. Men, du vil ikke bli spurt eller forventet å håndtere salgssyklusen fra start til slutt. Du trenger ikke å "selge,"du trenger bare å være rolige stemmen til faglige grunner i rommet. Dette bygger tillit og det er derfor du er der. selvfølgelig, Hvis du liker å selge, så er det plass til å vokse her også.
  • Hjelpe med å rekruttere. Vi har noen form for Henvisningsprogram, så hvis du vet virkelig sterke folk i samfunnet som du tror bør være en del av slalåm, Du kan dra nytte av den måten. Vi har dedikert rekrutterere (Hvem er utmerket) å gjøre løven andel av denne typen arbeid. Reell hjelp er intervjue kandidater-er de passe godt kulturelt? Vet de sine ting? Kan de lage * min * livet enklere? 🙂 This comes in spurts, et par ganger i måneden, Selv om i noen måneder ikke vil du gjøre det hele tatt.
  • Bidra til å definere anbefalte fremgangsmåter, bygge opp våre IP og gjøre oss mer konkurransedyktig i markedet. Du er en erfaren fyr/gal. Du har vært rundt blokken-ikke bare i SharePoint, men du har erfaring med andre teknologier og levd gjennom gode og dårlige (selv forferdelig) prosjekter over hele. Som et resultat, du vet hva som fungerer og hva ikke. Vi ønsker du å aksje det erfaringen med oss på en dag til dag basis i en taktisk forstand (dvs.. kjøre prosjekter veldig bra) men også strategisk. "Beste praksis" er litt mye som et begrep og jeg nøle med å bruke den. Den grunnleggende ideen er at du kommer som en erfaren person med dyp erfaring, og vi ønsker å integrere best av din erfaringene i hvordan vi engasjerer med kunder på en dag til dag basis.
  • ha det gøy -Vi er en gjeng svært integrert. Jeg ønsker å unngå enda en selvfølgelighet, men det er egentlig apt i dette tilfellet-jobber vi hardt (slags) og vi spiller enda vanskeligere :). Det er en Aaron Sorkin slags småerte her, rommet er alltid full av flinke folk, Vi liker våre drink og vi organisere en god del moro hendelser-filmkveld, baseball-turer (Selv om de er fryktelig, praktisk talt onde lag).

Hvis jeg kunne oppsummere det alle i ett ord, Jeg ville bruke ordet "lederskap". Lede prosjekter, ta en ledende rolle i å bygge ut praksis (IP, bygge opp laget), osv..

Men vent! Det er mer! Hvorfor ellers jobbe i slalåm?

  • Bemerkelsesverdig enhet av hensikt-alle ønsker å vokse dette ting ut. «Denne saken» er New York-kontoret. Alle er ombord med dette.
  • Vind i seilene-søster kontorer, søster praksis – slalåm er en "full service" consulting organisasjon. Jeg leder opp SharePoint-praksis (en "praksis området føre" i slalåm lingo). Jeg har søster praksis på 11 andre slalåm-kontorer. Så selv om jeg er kongen så langt som er SharePoint opptatt her på slalåm New York, Jeg har peer praksis i Chicago, Seattle, Dallas, Atlanta, Boston, osv.. hvorfra jeg kan trekke på støtte. Det er virkelig best fra begge verdener-betydelig autonomi her i New York, men tilgang til tonnevis med talent på tvers av organisasjonen.
  • Vind i salg (2) – Vi gjøre mer enn SharePoint-mye mer. Vi gjør BI, CRM, UX, forretningsrådgivning, Mobile, tilpasset utvikling og andre. Vi er gode på tvers selger blant oss selv og vi er gode på maling- og enda viktigere, levere på-en "full service" bilde for våre kunder. Dette er særlig appellerer til meg. Jeg har vært på mange mindre orgs jobber med SharePoint-konserter og frustrert om og om igjen, fordi vi var duen holed som "SharePoint folk." Som ikke skjer med slalåm og vi får gjøre mer interessant arbeid som et resultat.
  • Lokal modell-ingen reiser.
  • Langsiktig vekst – slalåm har pågått gangbusters. Massevis av vekst og stabilitet. Vekst betyr også at vi trenger å ansette ledere i dag til å lede nye lag som vi legger til flere klienter og personalet for å støtte de klientene.

Jeg kunne gå på, men jeg har sannsynligvis allerede gått lenge. Jeg tror jeg har fanget essensen her. Hvis du tenker på ser skiftende arbeidsplasser, og dette bra ut til du, La oss snakke.

Hvis du er glad i din nåværende jobb-la oss snakke allikevel :). Jeg har vært i mange steder, og var veldig "glad" på tiden. Slalåm er forskjellig, og jeg ønsker velkommen en sjanse til å overbevise deg om at.

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

Rask og enkel: Angi størrelsen på en elementer i en liste i en Windows-Store App

I en Windows Store App oppretter jeg, Jeg ønsker å vise brukeren ulike informasjonsmeldinger.  Jeg plukket en liste som verktøy for å vise det slik at de kan bla gjennom dem og alt det gode ting. 

Meldingene er informasjonsformål bare, så det er ikke nødvendig å gi all den ekstra mellomrom rundt dem siden brukeren aldri kan velge dem for noe.  Standardvirkemåte for liste gir en betydelig mengde polstring og jeg ønsket å bli kvitt den.  Vel.... Du kan ikke gjøre den slags ting på listen direkte.  MEN, Du kan gjøre det for elementer du legger til:

        privat ugyldige AddGameStateLogMessage(streng theMessage)
        {
            Lærebok t = nye Tekstboks();
            t.Text = GameStateCounter    + ": " + theMessage;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            Tykkelse thisPadding = nye Tykkelsen(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ListBoxItem li = nye ListBoxItem();
            Li.Innhold = t;
            Li.MaxHeight = 25;
            thisPadding = nye Tykkelsen(5, 0, 5, 0);
            Li.Utfylling = thisPadding;

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

i ovennevnte, Jeg opprette en tekstboks og angi skrifttype, dens utfylling, osv..

Neste, Jeg opprette en ListBoxItem og sette innholdet til formatert tekstboksen.

Endelig, Jeg inn i ListBoxItem i listen.  (Jeg vil vise de siste meldingene kommer øverst i listen, Derfor sette(0,Li) i stedet for et enkelt legge til() anrop.).

Jeg vil bli tweaking dette litt før jeg er veldig fornøyd med ListBox virkemåten men mønsteret ovenfor har vært svært fruktbart.  Forhåpentligvis finner noen andre det nyttig.

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin