Tag Archives: JavaScript

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

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

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