Kategooria Arhiiv: SharePointi areng

HTTP 406 Viga kasutamisel nurgeliste $http.get vastu SharePointi ülejäänud lõpp-punktid

Värskendus: Marc AD ndersson märkis see suur tükk info: http://blogs.Office.com/2014/08/13/JSON-Light-Support-REST-SharePoint-API-released/. Mis seletab palju :).

See võib olla halvim pealkiri blogi postitus kunagi! Anyhoo.

Ma tavaliselt kõik minu prototüüpimiseks vastu O365 eksemplar. Mul on minu isiklik eksemplar, nii et ma ei peaks olema mures mõjutavate keegi teine. Nagu kõrvale-mäletad kui me nimetame ümber virtuaalarvutid läbi meie sülearvutid MOSS-SQL Server, IIS, Otsustades Hyper-V vs. VMWare? Anyhoo...

Mul oli arenenud app kasutades nurga selles keskkonnas, mis ei, muu hulgas, See:

$http.Get(serverUrl)
.edu(funktsioon(andmed, olek, päised, config) {

var getLinksResponse = andmed;

getLinksResponse.value.forEach(funktsioon(theResult) {

// ja nii edasi ja nii vaht

See töötas suurepäraselt kahest erinevaid SharePoint online keskkondades. Aga, Kuna kolleeg portinud see Cloudshare eksemplar, ta oli saada ka HTTP 406 tõrge (mis oli esimene kord, ma kunagi sain et üks, nii... Jee, Arvan). Me tegime natuke uurida ja märganud, "Nõustu" päise oli välja. SharePoint online oli täiesti rahul:

Aktsepteeri: taotlus/json

Kuid cloudshare eksemplari (mis on SP prem, virtual server võõrustas) tahtis klassikaline "odata = verbose" lisada ka:

Aktsepteeri: taotlus/json;odata = verbose

Kinnitada, et, lisasime päise sellisena:

var config = {päised: {
"Kinnita": "rakendus/json;odata = verbose'
}
};

$http.Get(serverUrl,config)
.edu(funktsioon(andmed, olek, päised, config) {

var getLinksResponse = andmed;

getLinksResponse.value.forEach(funktsioon(theResult) {

// ja nii edasi ja nii vaht

Mis lahti on 406, kuid seda muuta ka format vastamise. See oli rohkem... verbose. (haha!) Rohkem muudatusi oli vaja ja siin on lõpptulemus:

var config = {päised: {
"Kinnita": "rakendus/json;odata = verbose'
}
};

$http.Get(serverUrl,config)
.edu(funktsioon(andmed, olek, päised, config) {

var getLinksResponse = andmed;

getLinksResponse.d.Results.forEach(funktsioon(theResult) {

// ja nii edasi ja nii vaht

See ainult muutus on 30 hetke probleemi meile, nii me lucked. Loodetavasti keegi leiab see kasulik.

</lõpp>

Kasvav teadlikkus / JavaScript raamistikke vastuvõtmine

Minu kolleeg, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), kirjutasin lühikese kokkuvõtte ajaveebipostituse raamistike ta meeldib või vähemalt on kasutanud koos SharePointiga: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery näib olevat olnud victor põllul, niiöelda, juba aastaid, aga teised on rohkem uusi ja destillaatorid omamoodi võitleb ta, nagu nurga. (SPServices, Muidugi, on elu saver aasta ja on jätkuvalt minu arust).

Mida inimesed kasutavad? Nad keskenduvad rohkem Microsofti instrumentaarium (CSOM / JSOM) või liigub edasi suunas nurga, Knockout, Hõõguvas söe, jne?

Mul on kasvav diagonaal suunas need Microsofti raamistikud. Ma arvan, et MSFT kraami on raskem ja raskem töötada, peaaegu sama palju kui traditsioonilist serveripoolne dev õppimiskõver nõudes.

Kommenteerida siin või üle kell Big Apple SharePointi Kui soovite, et arutada (Big Apple on rohkem tõenäoline hea arutelu).

</lõpp>

Spinning SharePointi ajastiteenuse töö saidi kogu konfiguratsiooni

Minu kolleeg, Ashish Patel, kirjutasin blogi postitus kirjeldades paindlik Ajasti töö ülesehitus mis annab kena kitsendav toetada kaua kestnud ülesandeid ja/või aruanded.  Tema sõnades:

1. Analüüsides märgitud tähelepanu faile ja saata meeldetuletusi üksikisikute kui number päeva (Kuna selle väljamöllimise) ületab teatud künnise piirangud

2. Lülide eemaldamine muu sisu konkreetse sisu eemaldada või arhiveeritud süsteemist

3. Kasutaja soovib, et ta tellinud Kõik veebid saidikogumi teatised

4. Kui meeldetuletuste saatmine autoritele sisuline läbivaatus, kui läbivaatamise ajal määrati sisu ja et kuupäev läheneb

Hästi, nimekiri läheb edasi...

– Vaata lähemalt: http://www.bigapplesharepoint.com/ lehed/View-An-Insight.aspx?BlogID=40#sthash.7cKuiwly.dpuf

On aegu minu minevikus kui võttes midagi sellist oleks väga kasulik.

</lõpp>

Kuidas: Konfigureerida üksuse testi ja Test laovarude QUnit.js ja Blanket.js büroo 365 SharePoint App

Intro

Uurinud üksus katsetamine ja testi katvus JavaScript nagu ma tööd uue SharePoint app for Office SharePoint online 365 sviit.  Ilmne teadusuuringute teed sundis mind Qunit.js ja pärast seda, et Blanket.js.

QUnit Tahaksin luua unit teste ja rühmitage need moodulid.  Moodul on lihtsalt lihtne viis korraldada vastavad katsetused. (Ma ei tea, ma olen seda kasutada eesmärgipäraselt, Aga see ei tööta minu jaoks siiani väike kogum on seni määratletud).

Blanket.js sulandub Qunit ja see näitab mulle tegelik read JavaScript, mis olid – ja mis veelgi olulisem – tegelikult ei hukati käigus katsetuste korraldamine.  See on "hõlmatus"-read, mida reguleeritakse katse samas ei.

Seadistamine hea katse juhtudel ja tulemeid katvus, saame vähendada riski, et meie kood on peidetud vead.  Headel aegadel.

Qunit

Eeldades, et olete oma Visual Studio projekti seadistamine, alustada allalaadimisega JavaScript pakett: http://qunitjs.com.  JavaScript ja vastava CSS lisamiseks lahendusse.  Mine näeb välja selline:

image

Joonis 1

Nagu näete, Olin kasutades 1.13.0 hetkel ma kirjutasin seda blogi postitus. Ära unusta alla laadida ja lisada CSS faili.

Et teelt, Järgmine samm on luua mingi test rakmete ja Qunit bitti.  Testin kimp funktsioone skripti fail nimega "QuizUtil.js" nii et ma loodud HTML lehe nimega "QuizUtil_test.html" nagu näidatud:

image Joonis 2

Siin on kood:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<juht>
    <pealkiri>QuizUtil test Qunit</pealkiri>
    <link rel= "stiil" href="../CSS/qunit-1.13.0.CSS" />
    <skripti tüüp= tekst/javascript"" src="QuizUtil.js" andmete kaitse></skripti>
    <script tüüp ="teksti/javascript" src ="qunit-1.13.0.js"></skripti>
    <script tüüp ="teksti/javascript" src ="blanket.min.js"></skripti>

    <skripti>
        moodul("getIDFromLookup");
        test("QuizUtil getIDFromLookupField", funktsioon () {
            var goodValue = "1;#Paul Galvin";

            võrdse(getIDFromLookupField(goodValue) + 1, 2), "ID. [" + goodValue + "] + 1 peaks olema 2";
            võrdse(getIDFromLookupField(pole määratletud), pole määratletud, "Määratlemata sisendargumendi peaks tagasi määratlemata tulemus.");
            võrdse(getIDFromLookupField(""), pole määratletud, "Tühi sisendargumendi peaks tagasi undefined väärtus.");
            võrdse(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), pole määratletud,"Tuleks alati naasta tulemus Kabriolett täisarv");
            võrdse(getIDFromLookupField("2;#mõne teise isiku"), "2", "Kontrollimine [2;#mõne teise isiku].");
            võrdse(getIDFromLookupField("9834524;#pika väärtuse"), "9834524", "Suure väärtuse test.");
            notEqual(getIDFromLookupField("5;#keegi", 6), 6, "Katsetamine on notEqual (5 ei võrdu 6 see proov: [5;#keegi]");

        });

        moodul("htmlEscape");
        test("QuizUtil htmlEscape()", funktsioon () {
            võrdse(htmlEscape("<"), "&lt;", "Põgenevad vähem kui operaator ('<')");
            võrdse(htmlEscape("<div klassi =  "someclass">Mingi tekst</DIV>"), "&lt;div klassi =&quot;someclass&quot;&gt;Mingi tekst&lt;/DIV&gt;", "Keerukam test string.");
        });

        moodul("getDateAsCaml");
        test("QuizUtil getDateAsCaml()", funktsioon () {
            võrdse(getDateAsCaml(Uus Kuupäev("12/31/2013")), "2013-12-31T:00:00:00", "Testimise kõva kodeeritud kuupäev: [12/31/2013]");
            võrdse(getDateAsCaml(Uus Kuupäev("01/05/2014")), "2014-01-05T:00:00:00", "Testimise kõva kodeeritud kuupäev: [01/05/2014]");
            võrdse(getDateAsCaml(Uus Kuupäev("01/31/2014")), "2014-01-31T:00:00:00", "Testimise kõva kodeeritud kuupäev: [01/31/2014]");
            võrdse(getTodayAsCaml(), getDateAsCaml(Uus Kuupäev()), "getTodayAsCaml() peab võrduma getDateAsCaml(uus kuupäev())");
            võrdse(getDateAsCaml("mõttetu väärtus"), pole määratletud, "Püüa saada jama väärtus kuupäev.");
            võrdse(getDateAsCaml(pole määratletud), pole määratletud, "Üritavad kuupäev ning [pole määratletud] kuupäev.");
        });

        moodul("getParameterByName");
        test("QuizUtil getParameterByName (päringu stringi)", funktsioon () {
            võrdse(getParameterByName(pole määratletud), pole määratletud, "Üritavad määratlemata parameeter peaks tagasi määratlemata.");
            võrdse(getParameterByName("pole olemas"), pole määratletud, "Proovige saada parameetri väärtus, kui teame, et parameeter ei ole olemas.");

        });

        moodul("Küpsised");
        test("QuizUtil erinevaid küpsise funktsioone.", funktsioon () {
            võrdse(setCookie("katse", "1", -1), getCookieValue("katse"), "Get seadsin küpsise peaks toimima.");
            võrdse(setCookie("anycookie", "1", -1), True, "Milles kehtiv cooking peaks tagasi"true".");
            võrdse(setCookie("hull küpsise nimi !@#$%"%\^&*(()?/><.,", "1", -1), True, "Milles halb küpsise nimi peaks tagasi 'vale'.");
            võrdse(setCookie(pole määratletud, "1", -1), pole määratletud, "Läbides määratlemata küpsise nimi.");
            võrdse(getCookieValue("pole olemas"), "", "Cookie olemas test.");
        });

    </skripti>
</juht>
<keha>
    <DIV ID= "qunit"></DIV>
    <DIV ID= "qunit-armatuur"></DIV>

</keha>
</HTML>

On mitmeid asju toimub siin:

  1. Viitamine minu kood (QuizUtil.js)
  2. Viitamine Qunity.js
  3. Määratleda mõned moodulid (getIDFromLookup, Küpsised, jt)
  4. Pannes on <DIV> kelle ID on "qunit".

Seejärel, Ma lihtsalt tõmba seda lehekülge ja sa saad midagi sellist:

image

Joonis 3

Kui sa vaatad üle ülaosa, Sul on mõned võimalused, millest kaks on huvitav:

  • Peida läbinud testid: Üsna ilmne.  Aitab silma just näha probleemsed valdkonnad ja mitte palju peegeldushäirete.
  • Moodul: (rippmenüü): See filtreerib alla just need katsesarju soovitud testid.

Nagu katsed, ise – mõned kommentaarid:

  • Loomulikult tuleb kirjutada koodi nii, et see on testitavad esimese koha.  Kasutades tööriista aitavad rakendada distsipliini. Näiteks, Mul oli funktsioon nimega "getTodayAsCaml()”.  See ei ole väga testitavad, kuna see pole sisendargumendi ja võrdsuse testimiseks, Meil oleks vaja pidevalt uuendada testimisreeglistiku peegeldab praegust kuupäeva.  Ma refactored lisades andmed sisendparameeter siis kulgeb praegune kuupäev Millal ma tahan tänast kuupäeva CAML-vormingus.
  • Qunit raamistiku dokumendid oma katseid ja tundub päris tugev.  Seda saate teha lihtsaid asju nagu võrdõiguslikkuse katsetamine ja ka toetust ajax stiilis kõnede ("päris" või pilkasid kasutades oma lemmik mocker).
  • Läbimas protsessi ka sunnib sind mõelda läbi serv juhtudel – mis juhtub "määratlemata" või null läks funktsioon.  See muudab surnud lihtne testida neid stsenaariume läbi.  Hea kraam.

Laovarude Blanket.js

Blanket.js täiendab Qunit jälgida tegelikud rida koodi, mis töötab oma katsete käigus täita.  See integreerib paremale Qunit nii et kuigi see on täiesti eraldi app, ta mängib kenasti-see tõesti näeb välja nagu oleks üks õmblusteta app.

See on blanket.js tegevuses:

image Joonis 4

image

Joonis 5

(Tegelikult on klõpsa ülaosas ruut "Luba ulatus" [vt joonis 3] võimaldab seda.)

Esiletõstetud ridade arv 5 ei ole täidetud ükski minu testide, nii et mul on vaja töötada välja testi, mis põhjustavad neil täita täies ulatuses soovi.

Saad blanket.js tööd tehes järgmist:

  1. Alla laadida http://blanketjs.org/.
  2. Mille soovite projektile lisada
  3. Uuenda rakmed testleht (QuizUtil_test.html minu puhul) järgmiselt.:
    1. Viide selle koodiga
    2. Kaunista oma <skripti> selline viide:
    <skripti tüüp= tekst/javascript"" src="QuizUtil.js" andmete kaitse></skripti>

Blanket.js kirkad "andmete alumiiniumlehte" atribuut ja ei oma magic.  Õnged sisse Qunit, uuendab UI lisada "Luba ulatus" valik ja voila!

Kokkuvõte (TL; DR)

Qunit abil saate kirjutada oma katse juhtudel.

  • Lae see
  • Mille soovite projektile lisada
  • Kirjutage rakmed testleht
  • Loo oma katsed
    • Refaktoorime mõned oma koodi testitavad
    • Loominguline!  Crazy mõelda, võimatu stsenaariume ja testida neid Igatahes.

Kasutage blanket.js tagamiseks

  • Qunit töötamise
  • Lae blanket.js ja lisada see oma projekti
  • Test rakmed lehele lisada:
    • Lisada blanket.js
    • Lisa "andmete alumiiniumlehte" omistada oma <skripti> Tag
  • Kestab Qunit katsete.

Kunagi tegin kõik see enne ja oli mõned algeline asjad töötavad üksikud tundi. 

Head katsetamist!

</lõpp>

undefinedTelli minu blogi.

Järgi mind vidistama kell http://www.twitter.com/pagalvin

Lists.asmx, GetList ja "väärtus ei saa olla null”

Ma avastasin eile et kui GetList() meetod lists.asmx veebiteenus on väga hoolikalt nimetati või on kalduvus visata salapärane "Väärtus ei tohi olla tühi" erand (ja mis eeldab saad mööda veel hullem üldise tõrketeate, "Erandi tüüp ' Microsoft.SharePoint.SoapServer.SoapServerException’ oli visatud.")  Konkreetselt, Ma leidsin, et ei anna mingeid eesliide GetList meetodil.  JQuery koodijupi illustreerib punkt:

image

Kui sa seda, veebiteenus vastab "Väärtus ei tohi olla tühi" nagu see viiuldaja-esitatud HTTP transcript:

<?XML-i versioon = "1.0" kodeering = "utf-8"?>
  <seep:Ümbrik
     xmlns:seebi ="
http://schemas.xmlsoap.org/SOAP/Envelope/"    
     xmlns:Xsi = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns:XSD ="
http://www.w3.org/ 2001/Xmlskeemi">

  <seep:Keha>
    <seep:Süü>
      <faultcode>seep:Server</faultcode>
      <faultstring>
        Erandi tüüp ' Microsoft.SharePoint.SoapServer.SoapServerException’ visati.
      </faultstring>
      <detail>
        <errorstring xmlns ="
http://schemas.microsoft.com/SharePoint/SOAP/">
Väärtus ei tohi olla nullväärtusega.
        </errorstring>
      </detail>
    </seep:Süü>
  </seep:Keha>
</seep:Ümbrik>

Muidugi, sa ilmselt ei lisa see "s0" eesliide oma, kuid mõned tööriistad on kalduvus teha (näiteks Eclipse).

See on veelgi segadust / masendav, sest muid meetodeid talu eesliited.  Näiteks, selle GetListCollection meetod ei ole meeles, kui see on olnud eesliide, isegi koos jama prefikseid nagu "xyzzy":

image

See "väärtus ei tohi olla tühi" tundub üsna levinud lists.asmx, nii et loodetavasti see aitab keegi välja tulevikus.

</lõpp>

Telli minu blogi.

Järgi mind vidistama kell http://www.twitter.com/pagalvin

Lõputult pesitsevate <DIV> Sildid ja jQuery

See tundub nagu oddball teema, Ma ei ole kindel, see on tõesti väärt blogging umbes, kuid see on lõpetanud kunagi mind enne, nii et siin me minna naeratus

Olen töötanud kui olen tõmmates mõned andmed otsingu projekti, pakendi XML-sõnum ja seejärel selle XML-I on lõppkokkuvõttes valitsevaks HTML XSLT kaudu.  JQuery palju on seotud, üks bitiseid mis rakendab tabbing funktsioone.  Kui klõpsate vahekaardil (Päriselt, a <DIV>), jQuery tugineb .hide() ja .show() erinevate DIVd kohta (Alglehekülg koormuse laadib alla kogu sisu nii, et puuduvad käesolevas asjas puudub postbacks).

A bunch of hours ago, loogikast vahetamise vahekaarti hakanud käituma tavapärasest korrapäratult ja see ei kuva üks minu vahekaardid.  Lõpuks jälitatud see asjaolu kuni selle internet explorer (vähemalt) et mõelnud ning <DIV> pesastatud palju silte, palju sügavamal kui ette nähtud.Näitaks tootearendajate tööriistariba:

-<DIV id = "Tab1Content">
  -<DIV>
    -<DIV>
      -<DIV id = "Tab2Content">
        -<DIV>
           …………………………
                   </DIV>  <— Lõpuks näitab see oli suletud kogu tee alla siit!

Nii, Kui ma tegin a $("# Tab1Content").Peida(), Ma oleks peita ka Tab2 ja ma ei ole kunagi näidata Tab2 kui ma ka ei näidata Tab1.  Kopeerimisel ja kleepimisel kood visual studio ja see kõik on div hõõrdkatte kuni ilusti näitas, just nagu nad pidid teed, vaadates nagu see:

-<DIV id = "Tab1Content">
  +<DIV>
  +<DIV>
-<DIV id = "Tab2Content">
  +<DIV>
  +<DIV>

I võita minu pea vastu seina mõnda aega ja märganud tekitava kood oli tegelik HTML tühi palju <DIV> Sildid, nagu:

<keha>

  <DIV id = "Tab1Content">

    <DIV id = "row1" />
    <DIV id = "row2" />

  </DIV>

  <DIV id = "Tab2Content">

    <DIV id = "row1" />
    <DIV id = "row2" />

  </DIV>

</keha>

(Eespool nimetatu on ülelihtsustatud waaaaaaaaaaaay.  Tühi div-siltide täielikult kehtivad. Mõned minu <DIV> sildid on täis sisu, kuid ei olnud palju rohkem.  Ma tulin realiseerimaks et minu <XSL-i:puhul iga> direktiivides olid kiirgava lühi-vormi div tags kui ka XSL-i:puhul iga ei "leia mingeid andmeid.  HTML-I kommentaar sunnitud toodangu, nagu on näidatud:

image

 

Pärast tegin, et, kõik div märkeruutudele ilusti ja vahekaarti vahetamine hakanud.

Nagu alati, Ma loodan, et see aitab keegi in a ahtaalla.

</lõpp>

Telli minu blogi.

Järgi mind vidistama kell http://www.twitter.com/pagalvin

Üks põhjus puhul "see on selle puudusepõhjusetähise looja ei täpsustanud põhjust.”

Ma olen teinud palju tööd on SharePointi otsingu viimasel ajal ja spetsiaalselt KeywordQuery klass, atribuudid ja meetodid.

Kui soovite naasta tulemused üle ja pärast tavalisi kahtlusaluseid tulemikomplekti (Vaata siit), SelectedProperties kogumine lisamist, nagu ka:

myKeywordQuery.SelectProperties.Add("xyzzy");

Suur tänu ja hat-tip Corey Roth ja See tohutult kasulik blogi postitus (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

Minu puhul, "xyzzy" ei ole tegelikult hallatava atribuudiga.  Kuna lisasin ta SelectedProperties Igatahes, SharePointi viskas üks mu lemmik kunagi runtime erandid:

"See süü looja ei täpsustanud põhjust."

Ma eriti nagu kapitali "R" põhjus.  See kõlab mulle nagu .NET ekvivalent"Mul pole suu, ja mul tuleb naerukoht.”

</lõpp>

Telli minu blogi.

Järgi mind vidistama kell http://www.twitter.com/pagalvin

Käepärane viide: Vaikimisi tuleneb KeywordQuery otsing

Kui sa tugineda selle Execute() meetod on KeywordQuery, Saate luua ResultTable põhineva ResultType.RelevantResults.  See koodilõigu näitab, mida ma mõtlen:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

Tulemuseks saadav tabel on teavet järgmised veerud: 

Töö ID
Rank
Pealkiri
Autor
Suurus
Tee
Kirjeldus
Kirjutage
SiteName
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

Selle loendi saadud SharePointi 2010 keskkond, Enterprise edition.  Loodetavasti see on mugav kellelegi tulevikus.

</lõpp>

Telli minu blogi.

Järgi mind vidistama kell http://www.twitter.com/pagalvin

Üks põhjus: "Ei saa ekstraktida cab-faili lahuses”

Töötamise ajal visual studio veebiosa projekti täna, Ma tegin väikese re-org mõned failid pannakse kausta _layouts juurutuse käigus. Konkreetselt, I ümber js faili "TypeAhead.js" "TypeAhead(vana).js"  Mul on plaan kustutada niipea, kui tema järglane "TypeAhead.js" osutub õige.  Ta nägi välja selline:

image

Põhjuseks kohe visual studio probleem, kui ma püüdsin juurutamise projekti:

Juurutamise etapis lisa lahendus ilmnes tõrge: Lahenduse cab-faili ekstraktimine nurjus.

Selgub, et te ei peaks panema sulgudes failinimed.  Eemaldasin selle parens ja probleem lahendatud.

</lõpp>

Telli minu blogi.

Järgi mind vidistama kell http://www.twitter.com/pagalvin