Αρχεία ετικετών: JavaScript

Γρήγορη και εύκολη: Δημιουργήστε μια τοποθεσία του SharePoint χρησιμοποιώντας το υπόλοιπο

Υπάρχουν πολλοί πόροι γύρω από εκείνη την επίδειξη πώς να το κάνουμε αυτό, αλλά δεν μπορούσα να βρω μια ολοκληρωμένη πάει σε σύνδεση, έτσι είμαστε εδώ.

Μπορείτε να δημιουργήσετε μια τοποθεσία του SharePoint χρησιμοποιώντας το API υπόλοιπο.  Εδώ είναι ένα παράδειγμα της πλήρως ψημένο:

<!--
    SiteRequestForm.html: Συλλέγουν πληροφορίες και να δημιουργήσετε μια τοποθεσία για το χρήστη.
-->

<κέντρο>
<Πίνακας>
    <TR>
        <TD>Όνομα τοποθεσίας:</TD>
        <TD><εισόδου Τύπος= "κείμενο" Όνομα= "Όνομα_τοποθεσίας" αναγνωριστικό= "Όνομα_τοποθεσίας" /></TD>
    </TR>
    <TR>
        <TD ColSpan= "2">
            <εισόδου Τύπος= "αποστολή" αναγνωριστικό= "CreateSiteButton" αξία= "Δημιουργία της τοποθεσίας" />
        </TD>
    </TR>
</Πίνακας>
</κέντρο>

<σενάριο src="../Plugins/jQuery-1.11.0.min.js"></σενάριο>

<σενάριο>
var CreateSiteLogicContainer = {

    createSiteData: {
            "παράμετροι": {
                __metadata: { "τύπος": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Τίτλος: "Paultest1",
                Περιγραφή: «δημιουργήθηκε από το υπόλοιπο web από Paul!",
                Γλώσσα: 1033,
                Ήταν: "sts",
                UseUniquePermissions: ψευδές
            }
    },

    createSite: συνάρτηση () {

        jQuery.support.cors = TRUE;

        CreateSiteLogicContainer.createSiteData.parameters.Url = $("#SiteName").Val();
        
        $.Ajax({
            διεύθυνση URL: «https://bigapplesharepoint.sharepoint.com/NBAIADev/_api/web/webinfos/add",
            μέθοδος: "POST",

            κεφαλίδες: {
                "αποδοχή": "εφαρμογή/json; OData = λεπτομερή",
                "content-type": "εφαρμογή/json;OData = λεπτομερή",
                «X-RequestDigest": $("#__REQUESTDIGEST").Val()
            },

            δεδομένα: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            επιτυχία: συνάρτηση () { συναγερμού("η επιτυχία"); },
            σφάλμα: συνάρτηση () { συναγερμού("σφάλμα"); }

        });
    },

    wireUpForm: συνάρτηση () {
        $("#CreateSiteButton").Κάντε κλικ στο κουμπί(συνάρτηση () {
            συναγερμού(«Για να προσπαθήσουμε και να δημιουργήσετε την τοποθεσία.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</σενάριο>

Όταν ολοκληρωθεί με επιτυχία, Μπορείτε να πάρετε ένα πακέτο JSON σε απάντηση όπως αυτό:

image

Μου βασικές σκέψεις και εκμαθήσεις από αυτόν περιλαμβάνουν:

  • Αυτή η προσέγγιση χρησιμοποιεί jQuery.  Στην περίπτωσή μου, μου το jQuery βιβλιοθήκη βρίσκεται στην ".../ plugins. "  Θα θελήσετε να αλλάξετε ότι σας αγαπημένο JQ θέση.
  • Μπορείτε να αντιγράψετε και να επικολλήσετε αυτό ολόκληρο απόσπασμα σε ένα τμήμα Web προγράμματος επεξεργασίας περιεχομένου σε μια σελίδα και θα πρέπει να λειτουργεί μια χαρά.  Θα θελήσετε να αλλάξετε το σημείο τερματισμού της την κλήση API και βεβαιωθείτε ότι αναφέρετε JQ σωστά.
  • Η διεύθυνση URL είναι σε σχέση με το τελικό σημείο του API σας.  Στην περίπτωσή μου, είναι η δημιουργία κάτω από τις δευτερεύουσες τοποθεσίες https://bigapplesharepoint.com
  • Δεν χρειάζεται να παρέχει μια περιεχομένου-μήκους. Μερικές θέσεις blog και MSDN έγγραφο σημαίνει ότι μπορείτε να κάνετε, αλλά συνέβη για μένα αυτόματα, που μπορώ να υποθέσω is being χερούλι από τα $.ajax κλήση εαυτό.
  • Αυτή η γραμμή είναι απαιτείται προκειμένου να αποφευχθεί ένα "απαγορευμένο" απάντηση: «X-RequestDigest": $("#__REQUESTDIGEST").Val().  Υπάρχουν άλλοι τρόποι να το κάνουμε, αλλά αυτό είναι αρκετά συμπαθητικό.  Έχω χάσει το link στο blog που παρέχονται αυτήν τη συντόμευση.  H/T σε σας, μυστηριώδη blogger!

Καλή τύχη και ελπίδα αυτό βοηθά κάποιος έξω.

</Τέλος>

undefinedΕγγραφείτε στο blog μου.

Συνέχεια μου για Twitter σε http://www.twitter.com/pagalvin

Γρήγορη και απλή: SharePoint υπόλοιπο κλήση μόνο επιστρέφει 100 Εγγραφές

Έχω εργαστεί σε μια δημόσια τοποθεσία του web που αντιμετωπίζουν για SharePoint πρακτική μου εδώ στο Νέα Υόρκη και χρησιμοποιεί πολλές κλήσεις JavaScript και το υπόλοιπο να εμφανίζεται περιεχόμενο.

Κατά τη διάρκεια της κύριας γραμμής ανάπτυξης, Μπορώ να δημιουργήσω ένα μικρό σύνολο δεδομένων με απλά 10 ή έτσι γραμμές σε μια προσαρμοσμένη λίστα και κλήσεις μου υπόλοιπο τράβηξε από εκεί.  Μια φορά μου ανεβαίνει επάνω κατάλογο μερικών εκατοντάδων σειρών δεδομένων για τη δοκιμή για την αναμενόμενη αύξηση, Βρήκα ότι είχα πάρει ακριβώς 100 γραμμών που επιστρέφει πίσω στο μου υπόλοιπο κλήσεις.

Αυτό είναι ένα πολύ απλό πράγμα να διεύθυνση.  Στην περίπτωσή μου (και πιστεύω ότι στις περισσότερες περιπτώσεις), η προεπιλογή υπόλοιπο καλεί στο SharePoint (και ενδεχομένως ως ένα βιομηχανικό πρότυπο?) επιστροφή 100 σειρές.  Να επιστρέψει περισσότερες από προεπιλογή, Χρησιμοποιήστε την παράμετρο $top για την πρόσκληση σας, όπως και στην:

ΝΑ /Insights Dev/_api/web/lists/GetByTitle(«MockBlog»)/στοιχεία?$επιλέξτε = ID,Τίτλος,Κατηγορίες/τίτλος,Blog_x0020_Author/τίτλος,DatePublished,BlogSummary&$επέκταση = Blog_x0020_Author,Κατηγορίες&$φίλτρο =&$κορυφή = 9999

Εγώ διάλεξα 9999 στην περίπτωση αυτή δεδομένου ότι γνωρίζω ότι growth-wise, δεν θα υπάρξει περισσότερο από 200 ή έτσι γραμμές προστεθεί σε αυτήν τη λίστα σε ένα χρόνο.  Αν γίνεται άκομψος, μπορούμε να εφαρμόσουμε κάποια σελιδοποίησης κάτω από το δρόμο.

</Τέλος>

undefinedΕγγραφείτε στο blog μου.

Συνέχεια μου για Twitter σε http://www.twitter.com/pagalvin

Φτωχός προσωρινή αποθήκευση σε JavaScript

[TL;DR έκδοση: χρησιμοποιεί cookies για την αποθήκευση των αποτελεσμάτων των async κλήσεις; καθιστούν τα αποτελέσματα του παρελθόντος async κλήσεις αμέσως και στη συνέχεια επικύρωση τους μετά από τη σελίδα του φορτίου.]

Έχω εργαστεί στην τοποθεσία intranet του SharePoint για έναν πελάτη που χαρακτηρίζει, μεταξύ άλλων, μια στυλιζαρισμένη δευτερεύουσα πλοήγηση για διαχείριση των οποίων επιλογές μενού μέσω μια τακτική παλιό προσαρμοσμένη λίστα.  Η ιδέα είναι ότι ο πελάτης παίρνει για τον έλεγχο της ιστοσελίδας "τους" μενού χωρίς να επηρεάσει ή να επηρεαστεί από την παγκόσμιας πλοήγησης που τίθεται από αυτό.

(υπάρχει κάτι απίστευτα ανατρεπτική σχετικά με την προσθήκη ενός CEWP που οδηγεί σε ένα αρχείο HTML που φορτώνει κάποια CSS και JS να μεταβάλλουν ριζικά σχεδόν τα πάντα σχετικά με τη συμπεριφορά ενός ιστοτόπου..., αλλά αυτό είναι για άλλη θέση)

Τον κώδικα για αυτό το πολύ απλό:

  • Περιμένετε για την σελίδα για να τελειώσει τη φόρτωση και να κάνει μια async κλήσης να φορτώσει επάνω μενού στοιχεία από μια λίστα που χρησιμοποιεί το υπόλοιπο ή lists.asmx ή οτιδήποτε άλλο
  • Χρησιμοποιώντας jQuery, συμπλήρωση δυναμικά μια δέσμη, αν <Li>του μέσα σε ένα γονέα <UL> (Δείτε το άρθρο του Christian Pinder εδώ για μια απλοϊκή εξήγηση για αυτό το tecnnique)
  • Χρήση CSS για να κάνει όλη τη μορφοποίηση
  • Κέρδος!

Το ευαίσθητο σημείο εδώ είναι ότι κάθε φορά που κάποιος χτυπά μια από τις σελίδες του site, πρόγραμμα περιήγησης web του χρήστη που είναι το άνοιγμα να πάρει τα στοιχεία από τη λίστα.  Μόλις dev είναι πλήρης και δοκιμών έχει αποδειχθεί τα πράγματα να είναι σταθερή και πλήρης, η παρούσα πρόσκληση αποτελεί περιττή περισσότερο από 99% του χρόνου δεδομένου ότι ο κατάλογος αλλάζει σπάνια.  Έχει επίσης ένα παράξενο επηρεάσει UI, η οποία είναι κοινή σε αυτό γενναίο νέο κόσμο της υπερ-ajaxy τοποθεσίες web-σελίδα καθιστά και μόνο τότε το μενού καθιστούν.  Είναι φοβισμένος και αποσπούν την προσοχή κατά τη γνώμη μου.  Και εκνευρισμού. Έτσι, προσωρινή αποθήκευση. 

Άλλαξα τη λογική thusly:

  • Αναζητήστε ένα cookie στο πρόγραμμα περιήγησης που περιέχει το μενού όπως διάβασα τελευταία
    • Αν βρεθεί, καταστήσει αμέσως.  Μην περιμένετε για την σελίδα να τελειώσουν.  (Θα πρέπει να βεβαιωθείτε ότι σας HTML είναι στρατηγικά τοποθετημένα εδώ, αλλά δεν είναι δύσκολο να κάνει).
  • Περιμένετε για την σελίδα για να τελειώσει τη φόρτωση και να κάνει μια async κλήσης να φορτώσει επάνω μενού στοιχεία από μια λίστα που χρησιμοποιεί το υπόλοιπο ή lists.asmx ή οτιδήποτε άλλο
  • Συγκρίνετε αυτό που πήρα από το cookie
    • Αν ταιριάζει, Σταμάτα
    • Διαφορετικά, χρησιμοποιώντας jQuery, συμπλήρωση δυναμικά μια δέσμη, αν <Li>του σε ένα <UL>
  • Χρήση CSS για να κάνει όλη τη μορφοποίηση
  • Κέρδος!

Κάποιοι από εσάς θα πω, "Γεια σου! δεν υπάρχει καμία πραγματική εναποθηκεύοντας συνεχίζεται εδώ δεδομένου ότι διαβάζετε το μενού ούτως ή άλλως κάθε ενιαίος χρόνος.”  Και έχεις δίκιο-δεν είμαι δίνοντας το διακομιστή κάθε είδους διάλειμμα.  Αλλά επειδή η κλήση είναι ασύγχρονες και θα συμβεί μετά την αρχική σελίδα HTML ωφέλιμο φορτίο καθιστά πλήρως, "αισθάνεται" ανταποκρίνεται περισσότερο στο χρήστη.  Το μενού καθιστά αρκετά όσο εφιστά την σελίδα.  Αν το μενού που συμβαίνει στην αλλαγή, ο χρήστης υπόκειται σε μια εκνευρισμού εκ νέου κατάρτιση του μενού, αλλά μόνο μια στιγμή.

Υπάρχουν μερικοί τρόποι για να κάνει caching αυτό πιο αποτελεσματική και να βοηθήσει στο διακομιστή, την ίδια στιγμή:

  • Βάλτε σε έναν κανόνα ότι το cache"cookie" είναι έγκυρο για τουλάχιστον 24 ώρες ή κάποια άλλη προθεσμία. Όσο υπάρχει κανενός cookie που έληξε, Χρησιμοποιήστε το cookie του μενού στιγμιότυπο και ποτέ δεν χτύπησε το server.

Καλά..., που είναι όλα που έρχονται στο μυαλό αυτή τη στιγμή :). 

Αν κάποιος έχει οποιαδήποτε έξυπνες ιδέες εδώ, θα ήθελα πολύ να δοκοῦσί σοι ἐπίστασθαι.

Και τέλος-αυτή η τεχνική μπορεί να χρησιμοποιηθεί για άλλα πράγματα.  Σελίδα αυτή του πελάτη έχει μια σειρά από πράγματα που βασίζονται σε δεδομένα σε διάφορες σελίδες, Πολλοί από αυτούς αλλαγή σχετικά σπάνια (όπως μία φορά την εβδομάδα ή μία φορά το μήνα).  Αν στοχεύετε σε συγκεκριμένες περιοχές της λειτουργικότητας, Μπορείτε να δώσετε ένα πιο απαντητικό UI για το τράβηγμα περιεχόμενο από το κατάστημα τοπικά cookie και καθιστώντας αμέσως.  Αισθάνεται πιο γρήγορα στο χρήστη, ακόμη και αν δεν σώζετε το διακομιστή κάθε κύκλους.  Σας μπορεί να εκτός από τους κύκλους του διακομιστή αποφασίζοντας σχετικά με ορισμένες προϋποθέσεις και εναύσματα να ακυρώνει την cache αυτή τοπικό cookie.  Που είναι όλα της κατάστασης και artsy πράγματα και πραγματικά το πιο διασκεδαστικό :). 

</Τέλος>

undefinedΕγγραφείτε στο blog μου.

Συνέχεια μου για Twitter σε http://www.twitter.com/pagalvin