taggarkiv: JavaScript

Snabb och enkel: Skapa en SharePoint-webbplats med resten

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

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

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

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

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

<skript>
var CreateSiteLogicContainer = {

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

    createSite: funktionen () {

        jQuery.support.cors = sant;

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

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

            data: JSON.stringify(CreateSiteLogicContainer.createSiteData),

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

        });
    },

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


}

CreateSiteLogicContainer.wireUpForm();

</skript>

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

image

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

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

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

</slutet>

undefinedPrenumerera på min blogg.

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

Snabb och enkel: SharePoint resten kallar endast returnerar 100 Poster

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

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

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

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

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

</slutet>

undefinedPrenumerera på min blogg.

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

Stackars mannen cachelagring i JavaScript

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

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

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

Koden för denna ganska enkla:

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

Jag ändrade logiken thusly:

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

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

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

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

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

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

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

</slutet>

undefinedPrenumerera på min blogg.

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