Αρχεία κατηγοριών: ΥΠΌΛΟΙΠΟ

HTTP 406 Σφάλμα κατά τη χρήση γωνιακή $http.get εναντίον του SharePoint υπόλοιπο τελικά σημεία

Ενημέρωση: Marc AD ndersson επεσήμανε αυτό το μεγάλο κομμάτι των πληροφοριών: http://Blogs.Office.com/2014/08/13/JSON-Light-support-REST-SharePoint-API-Released/. Που εξηγεί πολύ :).

Αυτό μπορεί να είναι η χειρότερη τίτλος του ένα blog post ποτέ! Anyhoo.

Συνήθως κάνω όλα μου πρωτοτυποποίηση ενάντια σε μια παρουσία O365. Έχω προσωπική παράδειγμα μου, έτσι ώστε δεν χρειάζεται να ανησυχείτε για το που κάποιος άλλος επηρεάζουν. Σαν παραλειπόμενα-Θυμηθείτε όταν καλούμε γίνεται γύρω από τις εικονικές μηχανές μας φορητούς υπολογιστές με το ΒΡΎΟ-SQL Server, IIS, ΑΡΧΈΣ vs Hyper-V. VMWare? Anyhoo...

Είχα αναπτύξει app χρησιμοποιώντας γωνιακή σε αυτό το περιβάλλον που κάνει, μεταξύ άλλων, αυτό:

$http.get(serverUrl)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.value.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Δούλευε μια χαρά σε δύο διαφορετικά SharePoint online περιβάλλοντα. Ωστόσο, όταν ο συνάδελφός μου μεταφέρει σε μια παρουσία Cloudshare, είχε πάρει μια HTTP 406 σφάλμα (που ήταν η πρώτη φορά που πήρα ποτέ ότι ένας, έτσι... yay, Υποθέτω). Κάναμε ένα κομμάτι της έρευνας και παρατήρησα ότι η επικεφαλίδα "Αποδοχή" ήταν μακριά. SharePoint online ήταν απόλυτα ευχαριστημένος με:

Δεχθεί: εφαρμογή/json

Αλλά η παρουσία του cloudshare (Ποιο είναι το SP στο prem, φιλοξενείται σε έναν εικονικό διακομιστή) ήθελε το κλασικό "odata = verbose" προστίθεται στο καθώς και:

Δεχθεί: εφαρμογή/json;OData = λεπτομερή

Να καθορίσει ότι, Έχουμε προσθέσει την κεφαλίδα, ως εκ τούτου:

var config = {κεφαλίδες: {
"Αποδοχή": «εφαρμογή/json;OData = λεπτομερή»
}
};

$http.get(serverUrl,Config)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.value.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Που πια απαλλαγεί από το 406, αλλά επίσης άλλαξε την μορφή της απάντησης. Ήταν περισσότερο... λεπτομερούς καταγραφής. (haha!) Περισσότερες αλλαγές που απαιτούνταν, και εδώ είναι το τελικό αποτέλεσμα:

var config = {κεφαλίδες: {
"Αποδοχή": «εφαρμογή/json;OData = λεπτομερή»
}
};

$http.get(serverUrl,Config)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.d.Results.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Αυτό μόνο να μετατραπεί σε ένα 30 λεπτό πρόβλημα για μας, έτσι εμείς lucked έξω. Ας ελπίσουμε ότι κάποιος βρίσκει χρήσιμες.

</Τέλος>

Πώς να καθορίσετε ένα εύρος αναζήτησης άνθρωποι / Προέλευση περιεχομένου χρησιμοποιώντας SharePoint 2013 ΥΠΌΛΟΙΠΟ API

Είχα λόγο να εργαστεί με το SharePoint 2013 API αναζήτησης μέσω υπόλοιπο για πρώτη φορά. Θα ήθελα να ψάξει για τους ανθρώπους, δεν έγγραφα. Το κλειδώστε τη μαθαίνοντας εδώ είναι ότι μπορείτε να καθορίσετε προελεύσεις περιεχομένου μέσω του GUID (ή τουλάχιστον σε αυτή την περίπτωση). Το ακόλουθο απόσπασμα jQuery πώς:

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

        jQuery.support.cors = TRUE;

        $.Ajax({
            διεύθυνση URL: αυτό.CreateFullApiUrl() +
                "?querytext = «πύλες»&"αναγνωριστικό προέλευσης" = "b09a7990-05ea-4af9-81ef-edfab16c4e31"" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Δεξιότητες,AboutMe,Συμφέροντα,Τίτλος εργασίας,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl»" +
                "&ROWLIMIT = 99",
            μέθοδος: "ΠΆΡΕΤΕ",
            κεφαλίδες: { "Δεχθεί": "εφαρμογή/json; OData = λεπτομερή" },
            cache: ψευδές,
            επιτυχία: συνάρτηση (αποτέλεσμα) {

Στην περίπτωσή μου, Τρέχω το API εναντίον του SharePoint σε απευθείας σύνδεση. Να πάρει το GUID, Ακολούθησα τα βήματα:

  1. Να επισκεφτείτε το κέντρο admin του SharePoint
  2. Επιλέξτε "Αναζήτηση" από το αριστερό χέρι πλοήγησης
  3. Επιλέξτε "Διαχείριση αποτέλεσμα πηγές"
  4. Επιλέξτε "Αποτελέσματα ντόπιοι"
  5. Εξετάσουμε το URL.

URL μου φαινόταν κάτι σαν:

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

Η παράμετρος αναγνωριστικού προέλευσης είναι τι λειτούργησε για μένα.

(Καταλαβαίνω ότι το "αναγνωριστικό προέλευσης" στην πραγματικότητα μπορεί να είναι ένα είδος μόνιμης πράγμα με SP, but I’ll always check anyway 🙂 ).

</Τέλος>

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

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

Παράδειγμα SharePoint υπόλοιπο κλήσεις

Εδώ είναι ένα σύνολο δείγμα υπόλοιπο κλήσεις που λειτουργεί για μένα και μπορεί να σας βοηθήσει καθώς και. Ως της 02/2014, there are two examples 🙂

  1. Αναφοράς μια στήλη με τα διαστήματα στο όνομά της
  2. Αναφορά μιας πολλαπλής επιλογής στήλης
  3. Εκτελέστε μια αναζήτηση άνθρωποι μέσω υπόλοιπο

 

Εγώ θα προσθέσω σε αυτό όσο περνάει ο καιρός.

Εδώ είναι μερικές χρήσιμες μελάνια που βρήκα καθώς και:

Αναφοράς μια στήλη με τα διαστήματα στο όνομά της

Μπορώ να δημιουργήσω μια προσαρμοσμένη λίστα με μια στήλη που ονομάζεται "Συγγραφέας Blog" (διάστημα μεταξύ των Blog και συγγραφέας).

Το $select να αναφέρονται σε αυτήν τη στήλη είναι:

image

Απλά αντικαταστήστε το διάστημα με "_x0020_". Βλέπουμε το _x0020_ σε πολλά παραδείγματα σε όλο το Ίντερνετ και το υπόλοιπο είναι δεν διαφέρει.

Αν δεν το κάνετε αυτό, είστε ενδέχεται να λάβετε ένα μήνυμα σφάλματος όπως αυτό:

Η έκφραση “Συγγραφέας του blog” δεν είναι έγκυρη.

Αρκετά εύκολο.

Αναφοράς μια στήλη πολλαπλής επιλογής αναζήτησης

Έχει συσταθεί:

  1. Δημιουργήσετε μια προσαρμοσμένη λίστα όνομα "κατηγορίες".
  2. Προσθέστε μερικές κατηγορίες. Πρόσθεσα κατηγορίες thusly:image
  3. Δημιουργήσετε ένα άλλο προσαρμοσμένη λίστα που ονομάζεται MockBlog και να προσθέσετε κατηγορίες ως μια στήλη λίστας πολλαπλών επιλογών (ή στήλη τοποθεσίας, αν αυτό είναι το πώς ζαριά).

Προσθέσετε ορισμένα στοιχεία στη λίστα Mockblog και είστε έτοιμοι.

Μια κλήση Ajax στυλ που χρησιμοποιούν jQuery θα φανεί κάτι παρεμφερή:

serverUrl  = "/_api/web/κατάλογοι/GetByTitle(«MockBlog»)/στοιχεία" +
             "?$Επιλέξτε = τίτλος,Κατηγορίες/τίτλος,Blog_x0020_Author/τίτλος" + 
             "&$επέκταση = Blog_x0020_Author,Κατηγορίες";

Λέμε SharePoint "Δώσε μου τίτλο για όλες τις κατηγορίες (Κατηγορίες/τίτλος). Πάρτε τις πραγματικές τιμές για Τίτλος από $επεκτείνετεσης λίστα κατηγορίες." (Ξεκούραστη παραφράσει μου είναι πιθανώς αρκετά χαλαρά, αλλά αυτό πώς ερμηνεία).

Αν το κάνετε αυτό μέσω JavaScript και χρησιμοποιώντας Fiddler να εξετάσουμε την έξοδο, Μπορείτε να πάρετε κάτι σαν αυτό σε αντάλλαγμα:

 

image

(Τα παραπάνω είναι ένα αντικείμενο JSON)

Εκτελέστε μια αναζήτηση άνθρωποι μέσω υπόλοιπο

Εγώ blogged σχετικά με αυτό χωριστά. Το κλειδί είναι να καθορίσετε μια παράμετρο αναγνωριστικού προέλευσης των οποίων η αξία είναι το GUID της προέλευσης περιεχομένου ντόπιους. (Προελεύσεις περιεχομένου που χρησιμοποιείται για να ονομάζεται εμβελειών και είναι μου-ω-μου δεν είναι τόσο δύσκολο να καλέσετε τα πάντα ένα πεδίο για μένα!).

Διαβάστε περισσότερα για αυτό εδώ: http://www.mstechblogs.com/paul/?p=10385

 

</Τέλος>

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

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

Γρήγορη και εύκολη: Δημιουργήστε μια τοποθεσία του 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