Com especificar la gent com un àmbit de cerca / Origen de contingut utilitzant SharePoint 2013 RESTA API

Jo tenia raons per treballar amb el SharePoint 2013 L'API de cerca mitjançant resta per primera vegada. Volia Cercar persones, documents de no. La clau aquí és que l'aprenentatge que especifiqueu els orígens de contingut mitjançant la seva GUID (o almenys en aquest cas). El jQuery següent fragment Mostra com:

    loadExpertsAsync: funció() {

        jQuery.support.cors = True;

        $.Ajax({
            URL: això.CreateFullApiUrl() +
                "?querytext = "portals"&SourceId = 'b09a7990-05ea-4af9-81ef-edfab16c4e31'" +
                "&selectproperties = "LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Habilitats,AboutMe,Interessos,JobTitle,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&RowLimit = 99",
            mètode: "ACONSEGUIR",
            capçaleres: { "Acceptar": "aplicació/json; OData = depuraci ≤" },
            memòria cau: fals,
            èxit: funció (resultat) {

En el meu cas, Estic corrent l'API contra SharePoint en línia. Per obtenir el GUID, He seguit aquests passos:

  1. Accés al centre d'administració del SharePoint
  2. Seleccioneu "Cerca" de la mà esquerra navegació
  3. Seleccioneu "Administra resultat fonts"
  4. Seleccioneu "Gent Local resultats"
  5. Mira l'URL.

El meu URL semblava una cosa així com:

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

El paràmetre sourceid és què funcionava per mi.

(Entenc que sourceid en realitat pot ser una mena de cosa permanent amb SP, però sempre comprovaré igualment 🙂 ).

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Exemple del SharePoint resta trucades

Aquí és un conjunt de convocatòries de resta Mostra que funciona per mi i pot ajudar-lo, així. Com de 02/2014, hi ha dos exemples 🙂

  1. Referència a una columna amb espais en el seu nom
  2. Referència a una columna selecció múltiple
  3. Realitzar una recerca de persones mitjançant la resta

 

Vaig a afegir a aquesta mesura que passa el temps.

Aquí hi ha algunes tintes útils que he trobat, així:

Referència a una columna amb espais en el seu nom

Puc crear una llista personalitzada amb una columna anomenada "Autor del Blog" (espai entre bloc i autor).

És el $select per fer referència a la columna:

image

Simplement reemplaci l'espai amb "_x0020_". Veiem el _x0020_ en molts exemples a través de l'internets i resta és diferent.

Si no fa que, vostè està obligat a aconseguir un missatge d'error com aquest:

L'expressió “Autor del blog” no és vàlid.

Prou fàcil.

Referència a una columna de cerca selecció múltiple

Configurar:

  1. Crear una llista personalitzada anomenat Categories.
  2. Afegir algunes categories. He afegit categories així:image
  3. Crear un altre costum llista anomenada MockBlog i afegir Categories com una columna de llista de selecció múltiple (o columna del lloc si allò és com vostè rotllo).

Afegir alguns elements a la llista de Mockblog i ja està llest.

Una crida d'estil Ajax mitjançant jQuery mirarà alguna cosa com això:

  = URLServidor "/_api/web/llistes/GetByTitle('MockBlog')/elements" +
             "?$Seleccioneu = títol,Categories/títol,Blog_x0020_Author/títol" + 
             "&$ampliar = Blog_x0020_Author,Categories";

Li estem dient SharePoint "dóna'm el títol de totes les Categories (Categories/títol). Obtenir els valors reals per a Títol per $ampliarció la llista de Categories." (El meu descans parafrasejant és probablement bastant fluixa, però això com estic interpretant-).

Si vostè està fent això mitjançant JavaScript i utilitzant el violinista per mirar la sortida, vostè aconseguir alguna cosa com això a canvi:

 

image

(L'anterior és un objecte JSON)

Realitzar una recerca de persones mitjançant la resta

He blogged sobre això per separat. La clau és especificar un paràmetre sourceid el valor és el GUID de l'origen de contingut gent Local. (Els orígens de contingut solia anomenar àmbits i és meva-Ah-meu tan difícil no cridar tot un àmbit per a mi!).

Llegiu més sobre això aquí: http://www.mstechblogs.com/paul/?p=10385

 

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Ràpid i fàcil: Crear un lloc del SharePoint utilitzant la resta

Hi ha un munt de recursos al voltant d'aquest espectacle com fer això, però no podria trobar un enllaç complet anar a, Així que aquí estem.

Vostè pot crear un lloc del SharePoint utilitzant l'API de resta.  Heus aquí un exemple plenament al forn:

<!--
    SiteRequestForm.html: Recollir informació i crear un lloc per a l'usuari.
-->

<Centre>
<taula>
    <tr>
        <TD>Nom del lloc:</TD>
        <TD><entrada tipus= "text" nom= "SiteName" ID= "SiteName" /></TD>
    </tr>
    <tr>
        <TD colspan= 2">
            <entrada tipus= "enviar" ID= «CreateSiteButton" valor= "Crear un portal" />
        </TD>
    </tr>
</taula>
</Centre>

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

<script>
var CreateSiteLogicContainer = {

    createSiteData: {
            "paràmetres": {
                __metadata: { tipus"": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Títol: "Paultest1",
                Descripció: "resta creació web per Paul!",
                Llengua: 1033,
                WebTemplate: "sts",
                UseUniquePermissions: fals
            }
    },

    createSite: funció () {

        jQuery.support.cors = True;

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

            capçaleres: {
                "accepta": "application/json; OData = depuraci ≤",
                "content-type": "application/json;OData = depuraci ≤",
                "X-RequestDigest": $("#__REQUESTDIGEST").val()
            },

            dades: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            èxit: funció () { alerta("l'èxit"); },
            error: funció () { alerta("error"); }

        });
    },

    wireUpForm: funció () {
        $("#CreateSiteButton").feu clic a(funció () {
            alerta("Punt de provar i crear el lloc.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</script>

Quan l'èxit, s'obté un paquet JSON en resposta com aquesta:

image

Meves idees claus i aprenentatges d'aquest inclouen:

  • Aquest enfocament utilitza jQuery.  En el meu cas, la meva llibreria jQuery està situat a ".../ plugins. "  Voldrà canviar això perquè apunti a la seva localització favorita JQ.
  • Podeu copiar i enganxar aquest fragment tot a Editor continguts Part Web en una pàgina i hauria de funcionar just bé.  Voldrà canviar el punt final de la crida d'API i assegureu-vos que referència JQ correctament.
  • La URL és relativa a l'extrem del seu API.  En el meu cas, està creant subllocs sota https://bigapplesharepoint.com
  • No cal que facilitis una llargada de contingut. Alguns correus de blog i MSDN document implica que fas, però va passar per a mi automàticament, que assumeixo està sent manejada per la crida de .ajax $ propi.
  • Aquesta línia és necessària per evitar una resposta "prohibida": "X-RequestDigest": $("#__REQUESTDIGEST").val().  Hi ha altres maneres de fer-ho, però això és força bonic.  He perdut l'enllaç al bloc que proporciona aquesta drecera.  / H T li, blogger misteriós!

Bona sort i espero que això ajudi a algú.

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Superar el problema molest amb la URL relativa en llanxa ràpida del SharePoint

Volia afegir un enllaç a la llanxa ràpida navegació l'altre dia i em va dir SharePoint:

image

Versió només text pur d'això és:

Garantir que l'URL és vàlida i comença amb qualsevol un caràcter vàlid (un símbol de nombre (#) o barra inclinada (/)) o un protocol vàlid admesos (per exemple, ' http://’, ' https://’, "arxiu://’, ' ftp://’, "mailto:’, ' Notícies:’).

"Blech i pox de!"Jo vaig dir.

Un workaround per això és utilitzar JavaScript per trobar un enllaç conegut a la llanxa ràpida i substituir el seu comportament.

Per provar això, afegir un nou enllaç al seu lloc de prova així:

image

He fet servir jQuery. Per solucionar-lo, obtenir alguns JavaScript i jQuery a la pàgina utilitzant el seu favorit tècnica i amb una línia de codi com aquest:

 

$(document).preparat( funció () {

    $("un:conté('Prova substitució URL')").feu clic a(funció () { alerta("clic canviat de comportament!"); retorn fals;});

});

I el teu oncle Bob.

El selector de jQuery es troba cada <un> l'etiqueta que ha "Substitució de la prova d'URL" en el seu nom. Pot voler trobar sintonia que depenent del seu enllaç i tal.

El feu clic(funció() Substitueix el SharePoint hauria fet quan fa clic a l'usuari. Assegureu-vos que vostè "return false" o bé es fer les teves coses i llavors tractar la cosa href massa, que és gairebé naturalment no el teu objectiu.

Això va ser fet i prova en un entorn en línia SharePoint sinó que funcionen bé a 2010 i abans també.

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Ràpid i senzill: RESTA del SharePoint crida únics devolucions 100 Registres

He estat treballant en una web pública davant de la meva pràctica de SharePoint aquí en Nova York i que utilitza una gran quantitat de trucades JavaScript i resta per mostrar contingut.

Durant el desenvolupament i, Puc crear un petit conjunt de dades amb només 10 o tan estirats files en una llista personalitzada i meves trucades resta totes des d'allà.  Un cop em vaig trobar amb la llista de tenir uns cent files de dades a prova per al creixement esperat, Em va semblar que estava aconseguint exactament 100 files tornar enrere damunt les meves trucades resta.

Això és una cosa molt simple d'adreça.  En el meu cas (i crec que en la majoria dels casos), l'omissió resta trucades a SharePoint (i possiblement com un estàndard de la indústria?) retorn 100 files.  Per tornar més que l'omissió, Utilitzeu el paràmetre $top la seva trucada, com a:

OBTENIR /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/elements?$Seleccioneu = ID,Títol,Categories/títol,Blog_x0020_Author/títol,DatePublished,BlogSummary&$ampliar = Blog_x0020_Author,Categories&$filtre =&$part superior = 9999

Triava 9999 en aquest cas ja que sé que growth-wise, no hi haurà més de 200 o tan files afegides a aquesta llista en un any.  Si es converteix en endintre, podem implementar alguna paginació en el camí.

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Ràpid i senzill: Resoldre "URL invàlid paràmetre” problema amb UpdateListItems en lists.asmx

Quan es treballa amb UpdateListItems mitjançant lists.asmx, és fàcil generar l'error:

Paràmetre URL invàlid.

L'adreça URL proporcionada conté una ordre o un valor no vàlid. Si us plau aturi l'URL nou.

Pot aconseguir aquest error quan us oblideu incloure ID en el la llista dels camps d'actualitzar.  Això, com molts d'aquests SP serveis web, és una mica contradictori ja que necessita d'incloure l'ID de l'atribut d'ID de la <Mètode> element.  I no esteu actualitzat ID i probablement mai volia en primer lloc.

Aquest sabó sobres obres:

<soapenv:Sobres xmlns:soapenv =' http://schemas.xmlsoap.org/SOAP/envelope/'>
  <soapenv:Cos>                      
    <UpdateListItems xmlns =' http://schemas.Microsoft.com/SharePoint/SOAP/'>                     
      <NOMBRELISTA>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</NOMBRELISTA>                     
        <actualitzacions>                     
         <Lot OnError ="Continuï">
          <Mètode ID ="1" Cmd ="Actualització">
            <Nom del camp ="CooperativeLock">tancat!</Camp>
            <Nom del camp ="ID">1</Camp>
          </Mètode>
        </Lot>                     
        </actualitzacions>                
      </UpdateListItems>             
  </soapenv:Cos>         
</soapenv:Sobres>

Si vostè es despulla fora la referència de camp ID llavors aconseguirà el missatge molest "Paràmetre URL invàlid".

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

 

Home pobre de memòria cau en JavaScript

[TL;DR versió: utilitza cookies per emmagatzemar els resultats de les trucades asíncrona; representar els resultats dels darrers asíncrona trucades immediatament i validar-los llavors després de càrrega de pàgina.]

He estat treballant en lloc d'intranet del SharePoint per a un client que inclou, entre altres coses, una estilitzada Navegació secundària les opcions del menú són gestionats mitjançant una llista personalitzada vell regular.  La idea és que el client obté controlar el menú del "seu" lloc sense afectar o estar afectat per la navegació per.

(hi ha alguna cosa increïblement subversiu sobre com afegir un CEWP que apunta a un fitxer HTML que carrega alguns CSS i JS per alterar fonamentalment gairebé tot sobre el comportament d'un lloc... però això és per a un altre lloc)

El codi per a aquesta força simples:

L'adolorit lloc aquí és que cada vegada que algú colpeja una de les pàgines del lloc, navegador web de l'usuari és arribar a tenir elements de la llista.  Un cop dev és completa i proves ha demostrat coses de ser estable i complet, Aquesta convocatòria és innecessari més de 99% de l'època ja que poques vegades la carta canvia.  També disposa d'un estrany efecte UI que és comú en aquest món nou i valent de llocs web hiper-ajaxy-rendeix la pàgina i llavors només fa rendir el menú.  És nerviós i distracció en la meva opinió.  I nerviós. Així, memòria cau. 

He modificat la lògica així:

  • Buscar una galeta al navegador que conté el menú com darrera llegir-lo
    • Si hem trobat, representar-lo immediatament.  No esperi per a acabar de carregar la pàgina.  (Vostè necessita assegurar-se que el seu HTML estratègicament situat aquí, però no és difícil de fer).
  • Espereu que la pàgina d'acabar de carregar i fer un asíncrona truqueu per carregar els elements de menú d'una llista, utilitzant la resta o lists.asmx o el que sigui
  • Comparar què aconseguia contra la galeta
    • Si coincideix amb el, PARADA
    • En cas contrari, utilitzant jQuery, poblar dinàmicament un grapat de si <li>és en una <ul>
  • Utilitzar CSS per fer tot el format
  • Benefici!

Alguns de vostès estan anant a dir, "Escolta! no hi ha cap veritable memòria cau passant aquí ja que vostè està llegint la carta de totes maneres cada vegada.”  I tens raó-no estic donant el servidor cap mena de descans.  Però perquè la crida és asíncrona i passa després la pàgina inicial càrrega HTML totalment rendeix, "se sent" més sensible a l'usuari.  El menú rendeix força tant com dibuixa la pàgina.  Si el menú passa al canvi, l'usuari se sotmet a un nerviós repetir el sorteig del menú, però només que una vegada.

Hi ha algunes maneres de fer aquesta memòria cau més eficaç i ajudar el servidor al mateix temps:

  • Posar en una regla que el "amagatall de galetes" és vàlida per un mínim de 24 hores o algun timeframe altre. Mentre no hi ha galetes expirats, utilitzar instantània de la galeta menú i mai va colpejar el servidor.

Bé... això és tot el que vénen a la ment ara mateix :). 

Si algú té alguna idea intel ligent aquí jo estimaria saber-los.

I finalment – aquesta tècnica pot ser utilitzat per altres coses.  Pàgina del aquest client té una sèrie de coses basades en dades sobre diferents pàgines, molts d'ells canviar relativament poques vegades (com un cop per setmana o un cop al mes).  Si la destinació de les àrees específiques de funcionalitat, es pot donar un UI més sensible per tirant contingut des de la botiga local de galeta i rendició immediatament.  Que se sent més ràpid a l'usuari fins i tot si vostè no els està salvant el servidor qualsevol cicles.  Vostè pot salvar els cicles de servidor per decidir sobre algunes condicions i factors desencadenants que invalida aquest amagatall de galetes local.  Això és tot situacional i artístic matèria i realment el més divertit :). 

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Com a: Configurar la prova de unitat i prova de cobertura amb QUnit.js i Blanket.js per a una oficina 365 App de SharePoint

Introducció

Jo he estat explorant proves unitàries i cobertura de prova per JavaScript com treballo en un app nou SharePoint SharePoint en línia a l'oficina 365 Suite.  Els camins evident recerca em va portar a QUnit.js i just després que, per Blanket.js.

QUnit permetin establir proves d'unitat i agrupar-los en mòduls.  Un mòdul és només una manera simple d'organitzar proves relacionades. (No estic segur que estic utilitzant-lo segons el previst, però està treballant per a mi fins ara amb el petit conjunt de proves que fins ara han definit).

Blanket.js s'integra amb Qunit i em mostrarà les línies actuals de JavaScript que eren – i més importantment-no eren realment executada en el curs d'execució de les proves.  Això és "cobertura"-línies que executava són coberts per la prova, mentre que altres no són.

Entre establint bons casos de prova i veure cobertura, podem reduir el risc que el nostre codi ha amagat defectes.  Bons moments.

QUnit

Suposant que té el seu estudi Visual projecte va establir, Comenci descarregant el paquet JavaScript des http://qunitjs.com.  Afegir el JavaScript i CSS corresponent a la seva solució.  Mina els aspectes com això:

image

Figura 1

Com es pot veure, Estava utilitzant 1.13.0 en el moment que vaig escriure aquesta entrada de blog. No oblidi descarregar i afegir l'arxiu CSS.

Que fora de la manera, següent pas és crear algun tipus de prova arnès i els bits Qunit de referència.  Estic provant un munt de funcions en un arxiu d'escriptura anomenat "QuizUtil.js", així que he creat una pàgina HTML anomenat "QuizUtil_test.html" tal com es Mostra:

image Figura 2

Aquí és el codi:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<responsable>
    <títol>Prova QuizUtil amb Qunit</títol>
    <enllaç rel= "full d'estil" href="../CSS/QUnit-1.13.0.CSS" />
    <script tipus= text/javascript"" src="QuizUtil.js" dades-portada></script>
    <tipus d'escriptura ="text/javascript" src ="qunit-1.13.0.js"></script>
    <tipus d'escriptura ="text/javascript" src ="blanket.min.js"></script>

    <script>
        mòdul("getIDFromLookup");
        prova("QuizUtil getIDFromLookupField", funció () {
            var goodValue = "1;#Paul Galvin";

            igual(getIDFromLookupField(goodValue) + 1, 2), "ID de [" + goodValue + "] + 1 hauria de ser 2";
            igual(getIDFromLookupField(indefinit), indefinit, "Argument d'entrada indefinit nar resultat indefinit.");
            igual(getIDFromLookupField(""), indefinit, "Argument d'entrada buit hauria de retornar un valor indefinit.");
            igual(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;vn"), indefinit,"Sempre nar un convertible resultat un enter");
            igual(getIDFromLookupField("2;#una altra persona"), "2", «Comprovació [2;#una altra persona].");
            igual(getIDFromLookupField("9834524;#valor llarg"), "9834524", "Prova de gran valor.");
            notEqual(getIDFromLookupField("5;#ningú", 6), 6, "Provant un notEqual (5 no és igual a 6 d'aquesta Mostra: [5;#ningú]");

        });

        mòdul("htmlEscape");
        prova("QuizUtil htmlEscape()", funció () {
            igual(htmlEscape("<"), "&lt;", "Escapar a menys que l'operador ('<')");
            igual(htmlEscape("<classe div =  "someclass">Un text</Div>"), "&lt;classe div =&quot;someclass&quot;&gt;Un text&lt;/Div&gt;", "Cadena de prova més complex.");
        });

        mòdul("getDateAsCaml");
        prova("QuizUtil getDateAsCaml()", funció () {
            igual(getDateAsCaml(nou Data("12/31/2013")), "2013-12-31T:00:00:00", "Provant durament codificat data: [12/31/2013]");
            igual(getDateAsCaml(nou Data("01/05/2014")), "2014-01-05T:00:00:00", "Provant durament codificat data: [01/05/2014]");
            igual(getDateAsCaml(nou Data("01/31/2014")), "2014-01-31T:00:00:00", "Provant durament codificat data: [01/31/2014]");
            igual(getTodayAsCaml(), getDateAsCaml(nou Data()), "getTodayAsCaml() ha la igualtat getDateAsCaml(nova data())");
            igual(getDateAsCaml("valor tonteries"), indefinit, "Intenta aconseguir la cita d'un valor de tonteries.");
            igual(getDateAsCaml(indefinit), indefinit, «Tractar d'aconseguir la data de la [indefinit] data.");
        });

        mòdul("getParameterByName");
        prova("QuizUtil getParameterByName (de la cadena de consulta)", funció () {
            igual(getParameterByName(indefinit), indefinit, "Intenta aconseguir paràmetre indefinit nar indefinit.");
            igual(getParameterByName("no existeix"), indefinit, "Intenta aconseguir el valor del paràmetre quan sabem que el paràmetre no existeix.");

        });

        mòdul(Galetes"");
        prova("QuizUtil diverses funcions de galeta.", funció () {
            igual(setCookie(«prova", "1", -1), getCookieValue(«prova"), "Get una galeta I posar funcionarà.");
            igual(setCookie("anycookie", "1", -1), True, "Creació d'una cuina vàlid hauria de retornar 'veritable'.");
            igual(setCookie("nom de cookie boig !@#$%"%\^&*(()?/><.,", "1", -1), True, "Creació d'un nom de cookie mal hauria de retornar"fals".");
            igual(setCookie(indefinit, "1", -1), indefinit, "Passant indefinit com a nom de galeta.");
            igual(getCookieValue("no existeix"), "", "Galeta no existeixen proves.");
        });

    </script>
</responsable>
<cos>
    <Div ID= «qunit"></Div>
    <Div ID= "qunit-fixació"></Div>

</cos>
</HTML>

Hi ha diverses coses passant aquí:

  1. El meu codi de referència (QuizUtil.js)
  2. Referència Qunity.js
  3. Definició d'alguns mòduls (getIDFromLookup, Galetes, i altres)
  4. Posant una <Div> ID del qual és "qunit".

Llavors, Només aixecar aquesta pàgina i aconsegueix alguna cosa com això:

image

Figura 3

Si ens fixem a la part superior, té unes quantes opcions, dues de les quals són interessants:

  • Amaga passar proves: Força obvi.  Pot ajudar el seu ull només veure les àrees problemàtiques i no molt de desendreçar.
  • Mòdul: (desplegable): Això filtrarà les proves fins a només aquells grups de proves de que vol.

Pel que fa a les proves si mateixos-uns quants comentaris:

  • Cal dir que cal escriure el seu codi tal que això sigui provable en primer lloc.  Utilitzant l'eina pot ajudar a fer complir aquesta disciplina. Per exemple, Tenia una funció anomenada "getTodayAsCaml()”.  Això no és molt comprovables ja que pren cap argument d'entrada i per analitzar-lo per a la igualtat, hauríem d'actualitzar constantment el codi de prova per reflectir la data actual.  Jo ho traslladades afegint un paràmetre d'entrada de dades a continuació, passar la data actual quan vull cita avui en CAML format.
  • El marc Qunit documenta seves pròpies proves i sembla bastant robust.  Es poden fer coses simples com testatge d'igualtat i també té suport per a les trucades de estil ajax (tant "real" o burlat utilitzant el teu mocker favorit).
  • Travessant el procés també t'obliga a pensar a través de casos vora-què passa amb "indefinit" o nul és superat en una funció.  Es fa totalment simple provar aquests escenaris fora.  Coses bones.

Cobertura amb Blanket.js

Blanket.js complementa Qunit mitjançant el seguiment de les actuals línies de codi que executar durant el transcurs de l'execució de les proves.  Integra dret en Qunit així tot i que és un conjunt de seperate app, sona molt bé-realment sembla com si fos un app sense costura.

Això és blanket.js en acció:

image Figura 4

image

Figura 5

(Realment has de fer clic a la casella de selecció "Enable cobertura" a la part superior [veure figura 3] per permetre això.)

Les línies ressaltats en la figura 5 no han estat executades per qualsevol de les meves proves, Així que necessito per dissenyar una prova que els provoquen executar si vull cobertura completa.

Obtenir blanket.js treballant seguint aquests passos:

  1. Descarregar-lo des de http://blanketjs.org/.
  2. Afegir-lo al seu projecte
  3. Actualitzar la seva pàgina de prova arnès (QuizUtil_test.html en el meu cas) les següents:
    1. El codi de referència
    2. Decorar el seu <script> referència com aquest:
    <script tipus= text/javascript"" src="QuizUtil.js" dades-portada></script>

Blanket.js recull l'atribut "cobrir dades" i té la seva màgia.  Es pot enganxar-se Qunit, la interfície d'usuari per afegir l'opció "Habilita cobertura" d'actualitzacions i voila!

Resum (TL; DR.)

Ús Qunit per escriure el seu casos de prova.

  • Descarregar-lo
  • Afegir-lo al seu projecte
  • Escriure una pàgina de prova de Arnés
  • Crear les proves
    • Reestructurar alguns del vostre codi de ser comprovables
    • Ser creatiu!  Crec que de boig, escenaris impossibles i provar-los de totes maneres.

Ús blanket.js per garantir la cobertura

  • Assegureu-vos que Qunit està treballant
  • Descarregar blanket.js i afegir-lo al seu projecte
  • Afegir-lo a la seva pàgina de prova arnès:
    • Afegir una referència a blanket.js
    • Afegeix un atribut de "dades cobrir" pel seu <script> etiqueta
  • Executar les proves Qunit.

Mai va fer res d'això abans i tenia algunes coses rudimentària treballant en un grapat d'hores. 

Proves feliç!

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

El darrer vestit que mai et porten?

[Ràpida nota-aquest és un lloc molt llarg en un anunci per a meu grup d'aquí a Nova York i que necessites per viure en l'àrea tri-estatal, si t'interessa.]

Em vaig unir a eslàlom consultoria sobre 18 fa mesos i que això fa que la meva feina de més llarga durada des 2007. Jo no pla d'aquesta manera. Abans d'una cadena de salts de feina que va començar amb el meu salt en el món del SharePoint, Jo estava en un lloc durant onze anys. Finalment he trobat un nou, suportant el lloc de treball per al llarg termini aquí al eslàlom.

Aquest lloc està creixent i necessito ajuda per controlar que. El tipus d'ajuda que necessito normalment és anomenat un "arquitecte de solucions del SharePoint" tot i que he trobat la paraula de l'arquitecte més i/o incorrectament utilitzarà en l'espai del SharePoint per bastant una estona ara. He estat lluitant com a blog sobre això. No vol simplement enumerar un munt de punts de la bala a l'estil de daus/monstre. Meus companys reclutament excel·lent estat fent que ja :). Així, He decidit adoptar un enfocament de "dia de la vida". Llegir-lo a i tenir en compte:

1) Si fa una crida i

2) Si vostè sap en els seus ossos que vostè pot fer-ho.

En cas afirmatiu, contactar amb mi (Paul.Galvin@Slalom.com) i Parlem-ne.

Aquestes són el que vostè pot esperar d'oci a la setmana/mes típiques com un arquitecte de solucions en el meu equip:

  • Executar projectes, sovint més d'un en un moment. Alguns projectes són grans i tan vols que un projecte propi. Un projecte de "running" significa que vostè té supervisió i responsabilitat per a la qualitat global del lliurament. En gairebé tots els casos, vostè tindrà un PM i un equip molt fort de devs, BAs, Gent d'UX, etc., per donar-li suport. Però serà la cara principal que del client veu, fideïcomisos, etc. No hi ha cap amagat en les ombres en aquest paper :). A projecte de llei de aquest temps i l'objectiu és mantenir-lo ocupat per fer-ho 80 per cent de l'època.
  • Ajuda amb la paperassa-les truges, RFPs., pisos-tota aquella bona matèria. Crec que tenim el nostre procés de truja avall força estreta i sòlida pel que és bastant fórmules. Si estàs acostumat a escriure les truges avui, el nostre procés no ha de ser un repte per a vostè. RFPs.-Aquestes són una mica més difícil. Que tendeixen a ser a mida en la naturalesa per començar amb i RFPs solen tirar a diversos autors de diferents. És bo i dolent, però sobretot és bo. Això pot aconseguir scrambly quan hem de fer jocs malabars la necessitat d'una excel·lent atenció mentre també tracten de guanyar nou treball. Probablement no té una RFP però se'l demanarà a contribuir de les seccions.
  • Trucades de vendes, però no un més a prop. En el transcurs d'un mes, vostè pot esperar d'anar a un parell de trucades de vendes amb el nostre equip de vendes. Es la PIME a la sala, prendre notes i ajudar a donar forma a la solució. No obstant això, vostè no va demanar o s'espera per gestionar el cicle de vendes de principi a fi. No cal "vendre,"vostè només han de ser la veu tranquil de raó expert a l'habitació. Això es basa la confiança i la confiança i és per això que hi ets. Clar, Si t'agrada la venda, llavors hi ha espai per a que creixi aquí massa.
  • Ajuda amb la contractació de. Tenim algun tipus de programa de referència, Així que si vostè sap realment gent forta en la comunitat que creu que haurien de formar part d'eslàlom, poden beneficiar-se d'aquesta manera. Ens hem dedicat a reclutadors (que són excel lents) per fer la part del Lleó d'aquest tipus de treball. L'ajuda real és fer entrevistes de candidats – són un bon ajust cultural? Saben seves coses? Pot fer * meva * vida més fàcil? 🙂 This comes in spurts, un parell de vegades al mes, encara que en uns mesos vols no ho fa en tots els.
  • Ajudar a definir les millors pràctiques, construir la nostra IP i fer-nos més competitius en el mercat. Vostè és un experimentat home/gal. Vostè ha estat al voltant del bloc-no només en SharePoint, però vostè té experiència en altres tecnologies i va viure a través de bons i dolents (fins i tot terrible) projectes arreu. Com a resultat, sabeu què funciona i què no. Us volem compartir aquesta experiència amb nosaltres en el dia a dia en un sentit tàctic (i. e. executar els seus projectes molt bé) però també estratègicament. "Millors pràctiques" és una mica utilitzat en excés com a terme i jo dubteu a usar-lo. La idea bàsica és que vénen com una persona amb experiència amb l'experiència profunda i rellevant i que volem integrar el millor dels seus aprenentatges com ens involucrem amb els clients en el dia a dia.
  • Diverteix-te -Som una colla molt integrat. Vull evitar una altra bajanada, però en aquest cas és realment apt-treballem dur (tipus de) i podem jugar fins i tot més difícil :). Hi ha un tipus d'Aaron Sorkin de broma aquí, l'habitació sempre és ple de gent intel ligent, ens agrada la nostra beguda i organitzem un nombre just de diversió esdeveniments-nit de cinema, viatges de beisbol (fins i tot si són horrible, equips pràcticament mals).

Si jo podria resumir-ho tot en una paraula, Jo faria servir la paraula "lideratge". Liderar projectes, prendre un paper de lideratge en l'edifici de la pràctica (IP, construcció de l'equip), etc.

Però esperi! Hi ha més! Per què més treballar a l'eslàlom?

  • Notable unitat d'intencions – tothom vol créixer aquesta cosa fora. "Això" és l'oficina de Nova York. Tothom està a bord amb aquest.
  • Del vent a les teves veles-germana oficines, germana practica-eslàlom és un "servei integral" consultoria d'organització. Vaig portar cap amunt de la pràctica del SharePoint (una "pràctica zona liderar" en l'argot de eslàlom). Tinc germana en pràctiques a 11 altres oficines d'eslàlom. Així que tot i que sóc rei mesura SharePoint es refereix aquí a Nova York de eslàlom, Tinc les pràctiques entre iguals a Chicago, Seattle, Dallas, Atlanta, Boston, etc. des d'on em poden apel·lar suport. És realment el millor d'ambdós mons-autonomia significativa aquí a Nova York, però l'accés a tones de talent a través de l'organització.
  • El vent en les seves vendes (2) -Ens fan més SharePoint – molt més. Fem BI, CRM, UX, Consultoria de negocis, Mòbil, desenvolupament personalitzat i d'altres. Som bons en creu venent entre nosaltres i estem bons a la pintura – i el més important, lliurament d'a-una imatge de "ple servei" per als nostres clients. Això és especialment atractiu per a mi. He estat a molts orgs més petites treballant en concerts de SharePoint i frustrat una i altra vegada perquè estàvem Colom amagats com la "gent del SharePoint". Que no passa amb el Slalom i arribem a fer feina més interessant com a resultat.
  • Model local – no viatjar.
  • Creixement a llarg termini-eslàlom ha estat succeint frenètica. Munt d'estabilitat i creixement. Creixement també vol dir que hem de contractar líders avui per cap fins a nous equips com s'afegeix més clients i personal per donar suport a aquells clients.

Podria seguir, però segurament ja he passat massa temps. Vaig pensar que he captat l'essència. Si estàs pensant en canvi de llocs de treball i això sembla bo per a vostè, Parlem-ne.

Si és feliç en el seu treball actual – anem a parlar de totes maneres :). He estat en molts llocs i era molt "feliç" en el moment. Eslàlom és diferent i li agrairia l'oportunitat de convèncer-lo d'allò.

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Ràpid i fàcil: Posar la mida d'un elements en una caixa de llista en un App de botiga de Windows

En un Windows Botiga App estic creant, Vull mostrar l'usuari diversos missatges informatius.  Triava un ListBox com a eina per mostrar-lo per tal que es pot moure a través d'ells i tota aquella bona matèria. 

Els missatges són informatius només, Així que no hi ha necessitat de donar tot el que addicional espai en blanc al seu voltant ja que l'usuari mai no pot seleccionar-los per qualsevol cosa.  El comportament d'omissió de la ListBox proporciona una quantitat substancial de farciment i volia desfer-se d'ella.  Bé.... es pot fer aquest tipus de coses en el quadre de llista directament.  NO OBSTANT AIXÒ, vostè pot fer-ho amb els elements que afegiu:

        privat buit AddGameStateLogMessage(corda theMessage)
        {
            Quadre de text t = nou Quadre de text();
            t.Text = GameStateCounter     + ": " + theMessage;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            Gruix thisPadding = nou Gruix(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ListBoxItem li = nou ListBoxItem();
            li.Contingut = t;
            li.MaxHeight = 25;
            thisPadding = nou Gruix(5, 0, 5, 0);
            li.Embuatat = thisPadding;

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

en l'anterior, Estic creant un quadre de text i establir el tipus de lletra, seu farciment, etc.

Següent, Vaig crear un ListBoxItem i posi el seu contingut al quadre de text amb format.

Finalment, Introdueixo el ListBoxItem en el quadre de llista.  (Vull mostrar missatges més recents a la part superior de la llista, per tant, la inserció(0,li) en comptes d'un simple afegir() invocació.).

Jo es estar retocant això una mica abans que estic molt content amb el comportament ListBox però el patró mostrat a dalt ha estat molt fructífera.  Esperem que algú altre li resulta útil.

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin