Πώς να καθορίσετε ένα εύρος αναζήτησης άνθρωποι / Προέλευση περιεχομένου χρησιμοποιώντας 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

Ξεπεραστούν ενοχλητικό πρόβλημα με συγγενής Urls στο SharePoint γρήγορη εκκίνηση

Θα ήθελα να προσθέσω μια σύνδεση στη ναυσιπλοΐα γρήγορης εκκίνησης τις προάλλες και μου είπε SharePoint:

image

Καθαρό κείμενο έκδοση του που είναι:

Εξασφαλίσει ότι η διεύθυνση URL είναι έγκυρη και αρχίζει με είτε έγκυρος χαρακτήρας (ένα αριθμητικό σύμβολο (#) ή κάθετο (/)) ή μια έγκυρη Υποστηριγμένο πρωτόκολλο (για παράδειγμα, «http://’, «https://’, «αρχείο://’, «ftp://’, «mailto:’, «Ειδήσεις:’).

"Blech και ευλογιά!"Είπα.

Μια λύση για αυτό είναι η χρήση JavaScript για να βρείτε μια γνωστή η αεροπορική σύνδεση στην γρήγορη έναρξη και να παρακάμψετε τη συμπεριφορά.

Για να ελέγξετε αυτό, προσθέσετε ένα νέο σύνδεσμο στο δικτυακό σας τόπο δοκιμής, thusly:

image

Χρησιμοποίησα jQuery. Να το λύσουμε, πάρετε κάποια JavaScript και jQuery στη σελίδα χρησιμοποιώντας την τεχνική σας αγαπημένο και με μια γραμμή κώδικα όπως αυτό:

 

$(έγγραφο).έτοιμο( συνάρτηση () {

    $("ένα:περιέχει(«Δοκιμή URL αντικατάσταση»)").Κάντε κλικ στο κουμπί(συνάρτηση () { συναγερμού("αλλάξει κλικ συμπεριφορά!"); επιστροφή ψευδές;});

});

Και σας θείος του Bob.

Ο επιλογέας jQuery βρίσκει κάθε <ένα> ετικέτα που έχει «Αντικατάστασης δοκιμή URL» στο όνομά του. Μπορεί να θέλετε να βρείτε-μελωδία που ανάλογα με το σας σύνδεσμο και τέτοια.

Το .click(συνάρτηση() παρακάμπτει ό, τι του SharePoint θα είχε κάνει όταν ο χρήστης κάνει κλικ. Βεβαιωθείτε ότι σας "επιστρέψει false" ή αλλιώς θα κάνουμε πράγματα σας και προσπαθήστε να το href πράγμα πάρα πολύ, που είναι σχεδόν σίγουρα δεν είναι στόχος σας.

Αυτό έγινε και δοκιμής σε περιβάλλον SharePoint online, αλλά θα πρέπει να λειτουργούν καλά σε 2010 και νωρίτερα πάρα πολύ.

</Τέλος>

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

Γρήγορη και απλή: Επίλυση "μη έγκυρη διεύθυνση URL παράμετρος” πρόβλημα με UpdateListItems στο lists.asmx

Όταν εργάζεστε με UpdateListItems μέσω lists.asmx, είναι εύκολο να δημιουργήσει το σφάλμα:

Παράμετρος μη έγκυρη διεύθυνση URL.

Το παρεχόμενο URL περιέχει μια μη έγκυρη εντολή ή τιμή. Παρακαλώ ελέγξτε το URL και πάλι.

Μπορείτε να πάρετε αυτό το σφάλμα όταν ξεχάσετε να συμπεριλάβετε το αναγνωριστικό στον τα τη λίστα των πεδίων για να ενημερώσετε.  Αυτό, σαν πολλή SP αυτών των υπηρεσιών web, είναι λίγο αντιφατικό, δεδομένου ότι θα πρέπει να συμπεριλάβετε το αναγνωριστικό στο χαρακτηριστικό ID της το <Μέθοδος> στοιχείο.  Και δεν είστε ενημέρωση ID και πιθανώς ποτέ δεν θέλουν να στην πρώτη θέση.

Το SOAP envelope λειτουργεί:

<soapenv:Φάκελος xmlns:soapenv =«http://schemas.xmlsoap.org/SOAP/Envelope/»>
  <soapenv:Οργανισμός>                      
    <UpdateListItems xmlns =«http://schemas.Microsoft.com/SharePoint/SOAP/»>                     
      <listName>{C712E2EA-54E1-47AD-9D99-1848C7773E2F}</listName>                     
        <ενημερώσεις>                     
         <Παρτίδα OnError ="Να συνεχίσει">
          <Μέθοδος ID ="1" CMD ="Ενημέρωση">
            <Πεδίο Όνομα ="CooperativeLock">κλειδωμένη!</Πεδίο>
            <Πεδίο Όνομα ="ΑΝΑΓΝΩΡΙΣΤΙΚΌ">1</Πεδίο>
          </Μέθοδος>
        </Μαζική>                     
        </ενημερώσεις>                
      </UpdateListItems>             
  </soapenv:Οργανισμός>         
</soapenv:Φάκελος>

Εάν μπορείτε να στερήσετε από την αναφορά του πεδίου ID τότε θα πάρετε το ενοχλητικό μήνυμα "Παράμετρος μη έγκυρο URL".

</Τέλος>

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

Πώς να: Ρυθμίσετε τη δοκιμασία της ενότητας και δοκιμή κάλυψης με QUnit.js και Blanket.js για ένα γραφείο 365 SharePoint App

Εισαγωγή

Εγώ εξερεύνηση δοκιμών μονάδας και δοκιμή κάλυψη για JavaScript, όπως το έργο σε μια νέα εφαρμογή SharePoint για το SharePoint online στο γραφείο 365 Σουίτα.  Τα μονοπάτια προφανές έρευνα με οδήγησε να Qunit.js και αμέσως μετά, να BLANKET.js.

QUnit θέλω να δημιουργήσει μονάδα δοκιμές και να τους ομαδοποιήσουν σε ενότητες.  Μια ενότητα είναι ένας απλός τρόπος για να οργανώσει τις σχετικές δοκιμές. (Δεν είμαι σίγουρος ότι είμαι το χρησιμοποιεί ως θελήσει, αλλά λειτουργεί για μένα μέχρι στιγμής με το μικρό σύνολο των δοκιμών που έχω μέχρι στιγμής ορίζεται).

BLANKET.js ενσωματώνει με Qunit και θα μου δείξει το πραγματικό γραμμές της JavaScript που ήταν- και πιο σημαντικό-δεν πραγματικά εκτελέστηκαν κατά τη διάρκεια εκτέλεσης των δοκιμών.  Αυτό είναι "κάλυψη"-γραμμές που εκτελούνται καλύπτονται από τη δοκιμή, ενώ άλλοι δεν είναι.

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

Qunit

Υποθέτοντας ότι έχετε το Visual Studio σας έργο, το οποίο έχει συσταθεί, έναρξη με τη μεταφόρτωση του πακέτου JavaScript από http://qunitjs.com.  Προσθέστε το JavaScript και CSS αντίστοιχη λύση σας.  Ορυχείο μοιάζει με αυτό:

image

Σχήμα 1

Όπως μπορείτε να δείτε, Ήμουν χρησιμοποιώντας 1.13.0 τη στιγμή που έγραψα αυτό το blog post. Μην ξεχάσετε να κατεβάσετε και να προσθέσετε το αρχείο CSS.

Που έξω από το δρόμο, επόμενο βήμα είναι να δημιουργήσουμε κάποιο είδος της δοκιμής καλωδίων και αναφοράς τα Qunit κομμάτια.  Εγώ δοκιμή μια δέσμη των λειτουργιών σε ένα αρχείο δέσμης ενεργειών που ονομάζεται "QuizUtil.js" έτσι δημιούργησα μια σελίδα HTML που ονομάζεται "QuizUtil_test.html", όπως φαίνεται:

image Σχήμα 2

Εδώ είναι ο κώδικας:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<κεφάλι>
    <Τίτλος>QuizUtil δοκιμή με Qunit</Τίτλος>
    <σύνδεση rel= "φύλλο στυλ" href="../CSS/qunit-1.13.0.CSS" />
    <σενάριο Τύπος= text/javascript"" src="QuizUtil.js" δεδομένα-κάλυψη></σενάριο>
    <σενάριο τύπου ="text/javascript" src ="qunit-1.13.0.js"></σενάριο>
    <σενάριο τύπου ="text/javascript" src ="blanket.min.js"></σενάριο>

    <σενάριο>
        ενότητα("getIDFromLookup");
        δοκιμή("QuizUtil getIDFromLookupField", συνάρτηση () {
            var goodValue = "1;#Paul Galvin";

            ίση(getIDFromLookupField(goodValue) + 1, 2), "Το ID του [" + goodValue + "] + 1 θα πρέπει να είναι 2";
            ίση(getIDFromLookupField(απροσδιόριστο), απροσδιόριστο, «Απροσδιόριστη όρισμα εισόδου θα πρέπει να επιστρέψει απροσδιόριστο αποτέλεσμα.");
            ίση(getIDFromLookupField(""), απροσδιόριστο, "Κενό όρισμα εισόδου θα πρέπει να επιστρέψει μια τιμή που δεν έχει οριστεί.");
            ίση(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), απροσδιόριστο,"Πρέπει να επιστρέφει πάντα ένα μετατρέψιμο αποτέλεσμα σε ακέραιο");
            ίση(getIDFromLookupField("2;#κάποιου άλλου προσώπου"), "2", "Έλεγχος [2;#κάποιου άλλου προσώπου].");
            ίση(getIDFromLookupField("9834524;#τιμή Long"), "9834524", "Μεγάλη αξία δοκιμής.");
            notEqual(getIDFromLookupField("5;#κάποιος", 6), 6, "Δοκιμή ένα notEqual (5 δεν είναι ίσο με 6 για αυτό το δείγμα: [5;#κάποιος]");

        });

        ενότητα("htmlEscape");
        δοκιμή("QuizUtil htmlEscape()", συνάρτηση () {
            ίση(htmlEscape("<"), "&lt;", "Δραπετεύοντας από μια λιγότερο από το χειριστή ('<')");
            ίση(htmlEscape("<div τάξη =  "someclass">Κάποιο κείμενο</div>"), "&lt;div τάξη =&quot;someclass&quot;&gt;Κάποιο κείμενο&lt;/div&gt;", «Πιο περίπλοκη συμβολοσειρά δοκιμή.");
        });

        ενότητα("getDateAsCaml");
        δοκιμή("QuizUtil getDateAsCaml()", συνάρτηση () {
            ίση(getDateAsCaml(νέα Ημερομηνία("12/31/2013")), «2013-12-31T:00:00:00", «Δοκιμαστεί σκληρά κωδικοποιημένο ημερομηνία: [12/31/2013]");
            ίση(getDateAsCaml(νέα Ημερομηνία("01/05/2014")), "2014-01-05T:00:00:00", «Δοκιμαστεί σκληρά κωδικοποιημένο ημερομηνία: [01/05/2014]");
            ίση(getDateAsCaml(νέα Ημερομηνία("01/31/2014")), "2014-01-31T:00:00:00", «Δοκιμαστεί σκληρά κωδικοποιημένο ημερομηνία: [01/31/2014]");
            ίση(getTodayAsCaml(), getDateAsCaml(νέα Ημερομηνία()), "getTodayAsCaml() θα πρέπει να ισούται με getDateAsCaml(νέα ημερομηνία())");
            ίση(getDateAsCaml(«ανοησίες αξία"), απροσδιόριστο, "Προσπαθήστε να πάρετε την ημερομηνία αξίας ανοησίες.");
            ίση(getDateAsCaml(απροσδιόριστο), απροσδιόριστο, "Προσπαθήστε να πάρετε την ημερομηνία της [απροσδιόριστο] ημερομηνία.");
        });

        ενότητα("getParameterByName");
        δοκιμή("QuizUtil getParameterByName (από τη συμβολοσειρά ερωτήματος)", συνάρτηση () {
            ίση(getParameterByName(απροσδιόριστο), απροσδιόριστο, "Προσπαθήστε να πάρετε απροσδιόριστη παράμετρος θα πρέπει να επιστρέψει απροσδιόριστη.");
            ίση(getParameterByName("δεν υπάρχει"), απροσδιόριστο, "Προσπαθήστε να πάρετε τιμή παραμέτρου, όταν γνωρίζουμε ότι δεν υπάρχει η παράμετρος.");

        });

        ενότητα("Cookies");
        δοκιμή("QuizUtil διάφορες λειτουργίες του cookie.", συνάρτηση () {
            ίση(setCookie("δοκιμή", "1", -1), getCookieValue("δοκιμή"), "Πάρτε ένα cookie που έθεσα πρέπει να λειτουργήσει.");
            ίση(setCookie("anycookie", "1", -1), TRUE, "Ρύθμιση ένα έγκυρο ψήσιμο πρέπει να επιστρέψει «αληθινή».");
            ίση(setCookie("το όνομα του cookie τρελό !@#$%"%\^&*(()?/><.,", "1", -1), TRUE, "Ρύθμιση ένα όνομα κακή cookie θα πρέπει να επιστρέψει 'false'.");
            ίση(setCookie(απροσδιόριστο, "1", -1), απροσδιόριστο, «Περνώντας αόριστη ως το όνομα του cookie.");
            ίση(getCookieValue("δεν υπάρχει"), "", "Cookie δεν υπάρχει τεστ.");
        });

    </σενάριο>
</κεφάλι>
<οργανισμός>
    <div αναγνωριστικό= "qunit"></div>
    <div αναγνωριστικό= "qunit-φωτιστικό"></div>

</οργανισμός>
</HTML>

Υπάρχουν διάφορα πράγματα που συμβαίνουν εδώ:

  1. Παραπομπή κωδικός (QuizUtil.js)
  2. Αναφορά Qunity.js
  3. Ακρίβεια ορισμένων μονάδων (getIDFromLookup, Τα cookies, και άλλοι)
  4. Τοποθέτηση ένα <div> του οποίου η ταυτότητα είναι "qunit".

Στη συνέχεια, Μόλις σηκώσετε αυτή τη σελίδα και μπορείτε να πάρετε κάτι σαν αυτό:

image

Σχήμα 3

Αν κοιτάξετε πέρα από την κορυφή, έχετε μερικές επιλογές, δύο από τα οποία είναι ενδιαφέροντα:

  • Απόκρυψη περάσει δοκιμές: Αρκετά προφανές.  Μπορεί να βοηθήσει το μάτι σας δείτε απλά τις προβληματικές και δεν έχει πολλή ακαταστασία.
  • Ενότητα: (αναπτυσσόμενο): Αυτό θα φιλτράρετε τις δοκιμές κάτω ακριβώς από αυτές τις ομάδες των δοκιμών που θέλετε.

Όσο για τις δοκιμές τους – μερικά σχόλια:

  • Είναι αυτονόητο ότι θα πρέπει να γράψετε τον κωδικό σας ώστε να είναι ελέγξιμο στην πρώτη θέση.  Χρησιμοποιώντας το εργαλείο μπορεί να βοηθήσει να επιβάλει την πειθαρχία που. Για παράδειγμα, Είχα μια λειτουργία που ονομάζεται "getTodayAsCaml()”.  Αυτό δεν είναι πολύ δοκιμάσιμος δεδομένου ότι παίρνει κανένα όρισμα εισόδου και να το δοκιμάσετε για την ισότητα, θα πρέπει να συνεχώς να ενημερώσετε τον κωδικό του τεστ να αντικατοπτρίζουν την τρέχουσα ημερομηνία.  Εγώ το αλλαγμένος από προσθέτοντας μια παράμετρο εισόδου δεδομένων, στη συνέχεια, περνώντας την τρέχουσα ημερομηνία όταν θέλω σήμερα σε μορφή CAML.
  • Το πλαίσιο Qunit τεκμηριώνει τις δικές της δοκιμές και φαίνεται αρκετά ισχυρή.  Αυτό μπορεί να κάνει τα απλά πράγματα όπως τη δοκιμή για την ισότητα και έχει επίσης την υποστήριξη για ajax κλήσεις ύφους (τόσο «πραγματική» ή εμπαίζονται χρησιμοποιώντας σας αγαπημένο στασιαστικά·).
  • Περάσει από τη διαδικασία και τις δυνάμεις σας για να σκέφτονται μέσα από περιπτώσεις ακρών-τι θα συμβεί με το "απροσδιόριστο" ή null είναι πέρασε σε μια λειτουργία.  Καθιστά νεκρός απλό να ελέγξετε αυτά τα σενάρια έξω.  Καλά πράγματα.

Κάλυψη με Blanket.js

BLANKET.js συμπληρώνει Qunit παρακολουθώντας τις πραγματικές γραμμές κώδικα που εκτελούνται κατά τη διάρκεια του τρεξίματος σας δοκιμές.  Ενσωματώνει δικαίωμα στο Qunit ώστε ακόμα κι αν είναι ένα ολόκληρο ξεχωριστό app, παίζει ωραία-φαίνεται πραγματικά σαν να είναι ένα άνευ ραφής app.

Αυτό είναι blanket.js σε δράση:

image Σχήμα 4

image

Σχήμα 5

(Στην πραγματικότητα, έχετε να κάνετε κλικ για το κουτάκι "Ενεργοποίηση κάλυψη" στην κορυφή [βλέπε σχήμα 3] για να επιτρέψετε αυτό.)

Γραμμές που επισημαίνονται στο σχήμα 5 δεν έχουν εκτελεστεί από οποιαδήποτε από τις δοκιμές μου, έτσι πρέπει να επινοήσουν μια δοκιμή που να τους αναγκάσει να εκτελέσει αν θέλω πλήρη κάλυψη.

Πάρετε blanket.js εργασίας ακολουθώντας τα παρακάτω βήματα:

  1. Κατεβάσετε από http://blanketjs.org/.
  2. Προσθέστε στο έργο σας
  3. Ενημέρωση σας λουρί δοκιμαστική σελίδα (QuizUtil_test.html στη δική μου περίπτωση) ως εξής:
    1. Ο κωδικός αναφοράς
    2. Διακοσμήσετε σας <σενάριο> αναφοράς, όπως αυτό:
    <σενάριο Τύπος= text/javascript"" src="QuizUtil.js" δεδομένα-κάλυψη></σενάριο>

BLANKET.js παίρνει το χαρακτηριστικό "δεδομένα-κάλυψη" και κάνει τη μαγεία.  Αυτό να γάντζους σε Qunit, ενημερώνει το UI για να προσθέσετε την επιλογή "Ενεργοποίηση κάλυψη" και voila!

Περίληψη (TL; DR)

Χρήση Qunit να γραφτούν περιπτώσεις σας.

  • Το κατεβάσετε
  • Προσθέστε στο έργο σας
  • Γράψτε μια δοκιμαστική σελίδα λουρί
  • Δημιουργήστε τις δοκιμές σας
    • Μερικά του κώδικά σας να δοκιμάσιμος Refactor
    • Να είστε δημιουργικός!  Σκεφτείτε τρελό, αδύνατο σενάρια και δοκιμή τους ούτως ή άλλως.

Χρήση blanket.js για να εξασφαλισθεί η κάλυψη

  • Βεβαιωθείτε ότι εργάζεται Qunit
  • Λήψη blanket.js και να το προσθέσετε στο έργο σας
  • Προσθέσετε στη σελίδα δοκιμής καλωδίων:
    • Προσθέστε μια αναφορά για το blanket.js
    • Προσθέστε ένα χαρακτηριστικό "δεδομένα-κάλυψη" να σας <σενάριο> ετικέτα
  • Εκτελέστε τις δοκιμές σας Qunit.

Ποτέ δεν έκανα κανένα από αυτό πριν και είχε κάποια στοιχειώδη πράγματα που εργάζονται σε μια χούφτα ώρες. 

Καλή δοκιμή!

</Τέλος>

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

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

Το τελευταίο κοστούμι σας θα φορέσει ποτέ?

[Γρήγορη σημείωση-αυτή είναι μια αρκετά μακρά θέση σε μια εργασία που ανοίγει για την ομάδα μου εδώ στη Νέα Υόρκη και εσείς πρέπει να ζήσουν στο τρι-κρατική περιοχή, αν σας ενδιαφέρει.]

Μπήκα σλάλομ διαβούλευση πάνω από 18 πριν από μήνες και που να κάνει αυτή την δουλειά μου μακροβιότερη από 2007. Εγώ δεν το σχέδιο με αυτόν τον τρόπο. Πριν από μια σειρά από hopping δουλειά που ξεκίνησε με μου άλμα στον κόσμο του SharePoint, Ήμουν σε ένα τόπο για έντεκα χρόνια. Έχω βρεθεί τελικά μια νέα, διαρκή περιβάλλον εργασίας για μεγάλο χρονικό διάστημα εδώ στο σλάλομ.

Ο τόπος αυτός αυξάνεται και χρειάζομαι κάποια βοήθεια για τον έλεγχο αυτής. Το είδος της βοήθειας που χρειάζομαι καλείται συνήθως «Αρχιτέκτονα SharePoint λύσεις» αν και βρήκα τη λέξη αρχιτέκτονα πάνω από ή/και εσφαλμένα χρησιμοποιηθεί στον χώρο του SharePoint για αρκετό διάστημα τώρα. Έχω ήδη αγωνίζεται για το πώς να blog σχετικά με αυτό. Δεν θέλω να ΠΙΣ έξω ένα μάτσο κουκκίδες σε στυλ ζάρια/τέρας. Εξαιρετική πρόσληψη συμμαθητές μου έχουν κάνει ότι ήδη :). Έτσι, Αποφάσισα να πάρω μια προσέγγιση "ημέρα στη ζωή". Διαβάζουν και να εξετάσει:

1) Αν απευθύνεται και

2) Αν γνωρίζετε στα οστά σας ότι μπορείτε να το κάνετε.

Αν ναι, Επικοινωνήστε μαζί μου (Paul.Galvin@slalom.com) και ας μιλήσουμε.

Αυτά είναι τι μπορείτε να αναμένετε να κάνει σε τυπική εβδομάδα/μήνα ως αρχιτέκτονας λύσεις στην ομάδα μου:

  • Εκτέλεση έργων, συχνά περισσότερους του ενός σε έναν χρόνο. Ορισμένα σχέδια είναι μεγάλα και έτσι θα έχετε στην κατοχή σας ότι ένα έργο. "Τρέχει" ένα πρόγραμμα σημαίνει ότι έχετε την εποπτεία και ευθύνη για την συνολική ποιότητα της παράδοσης. Σχεδόν σε κάθε περίπτωση θα έχετε ένα PM και μια πραγματικά ισχυρή ομάδα devs, BAs, UX άνθρωποι, κ.λπ., για την υποστήριξη σας. Αλλά θα σας το κύριο πρόσωπο που βλέπει ο πελάτης, τραστ, κλπ. Δεν υπάρχει καμία κρύβονται στις σκιές σε αυτό το ρόλο :). Που θα χρεώνετε αυτή τη φορά και ο στόχος είναι να σας κρατήσουν απασχολημένους αρκετά για να το κάνετε αυτό 80 τοις εκατό του χρόνου.
  • Βοηθήσει με χαρτιά-θηλυκοί χοίροι, Προκηρύξεις, γέφυρες – όλα τα καλά πράγματα. Νομίζω ότι έχουμε μας διαδικασία ΧΟΙΡΟΜΗΤΈΡΑ κάτω αρκετά σφιχτό και δομημένο έτσι είναι αρκετά στερεότυπη. Αν έχετε συνηθίσει στο γράψιμο χοιρομητέρες σήμερα, διαδικασία μας δεν πρόκειται να είναι μια πρόκληση για εσάς. Προκηρύξεις-αυτά είναι λίγο πιο δύσκολο. Έχουν την τάση να είναι κατά παραγγελία στη φύση να αρχίσει με και προκηρύξεις συνήθως τραβήξει σε πολλούς διαφορετικούς συντάκτες. Είναι τόσο καλό και κακό, αλλά κυρίως καλής. Αυτό μπορεί να πάρει scrambly όταν χρειάζεται να κάνει ταχυδακτυλουργίες την ανάγκη για την άριστη εξυπηρέτηση, ενώ επίσης προσπαθεί να κερδίσει νέα εργασία. Πιθανώς δεν θα διαθέτετε RFP, αλλά θα σας ζητηθεί να συμβάλουν τμήματα.
  • Κλήσεις πωλήσεων, αλλά δεν είναι μια πιο προσεκτική. Κατά τη διάρκεια ένα μήνα, Μπορείτε να περιμένετε να πάει σε ένα ζευγάρι των κλήσεων πώλησης που με την ομάδα πωλήσεων μας. Θα σας τις ΜΜΕ στο δωμάτιο, κρατήσετε σημειώσεις και να βοηθήσει να διαμορφώσει την λύση. Ωστόσο, δεν θα ζητήσει ή να αναμένεται να χειριστεί τον κύκλο πωλήσεων από την αρχή μέχρι το τέλος. Δεν χρειάζεται να "πουλήσουν,"απλά πρέπει να είναι η ήρεμη φωνή των εμπειρογνωμόνων λόγο στο δωμάτιο. Αυτό δημιουργεί εμπιστοσύνη και την εμπιστοσύνη, και αυτός είναι ο λόγος ότι είστε εκεί. Φυσικά, Αν σας αρέσει η πώληση, στη συνέχεια, υπάρχει χώρος για σας να αυξηθείς εδώ πάρα πολύ.
  • Βοήθεια με πρόσληψη. Έχουμε κάποιο πρόγραμμα παραπομπής, Έτσι εάν ξέρετε πραγματικά ισχυρή λαοί στην Κοινότητα που νομίζετε ότι πρέπει να είναι μέρος της σλάλομ, Μπορείτε να επωφεληθείτε με αυτόν τον τρόπο. Αφιερώσαμε τις στρατολόγησα (που είναι εξαιρετική) να κάνει το μεγαλύτερο μέρος αυτού του είδους της εργασίας. Η πραγματική βοήθεια συνεντεύξεων με υποψηφίους-είναι μια καλή τακτοποίηση πολιτισμικά? Να γνωρίζουν την ουσία τους? Μπορεί να κάνουν * μου * ζωή πιο εύκολη? 🙂 This comes in spurts, μερικές φορές το μήνα, Αν και σε μερικούς μήνες σας δεν θα το κάνει σε όλα.
  • Βοηθήσει στον καθορισμό των βέλτιστων πρακτικών, δημιουργία IP μας και να μας κάνει πιο ανταγωνιστική στην αγορά. Είστε ένα έμπειρο τύπος/gal. Έχετε ήδη γύρω από το τετράγωνο-όχι μόνο στο SharePoint, αλλά έχετε εμπειρία σε άλλες τεχνολογίες και έζησαν σε καλό και κακό (ακόμη και τρομερό) έργα πάνω από όλα. Ως εκ τούτου, ξέρετε τι λειτουργεί και τι όχι. Θα θέλουμε να μοιραστείτε αυτή την εμπειρία μαζί μας σε καθημερινή βάση σε μια αίσθηση της τακτικής (ήτοι. τα έργα σας να τρέχει πραγματικά καλά) αλλά και στρατηγικά.. "Βέλτιστες πρακτικές" είναι λίγο υπερκατανάλωση ως όρος και διστάζω να το χρησιμοποιήσει. Η βασική ιδέα είναι ότι έρχεστε ως έναν έμπειρο άτομο με βαθιά και σχετική εμπειρία και θέλουμε να ενσωματώσουμε την πώς διεξάγουμε με τους πελάτες σε καθημερινή βάση το καλύτερο από σας εκμαθήσεις.
  • Να περάσεις καλά -Είμαστε μια πολύ ολοκληρωμένη δέσμη. Θέλω να αποφύγω ακόμη κοινοτοπία, αλλά σε αυτή την περίπτωση είναι πραγματικά apt-δουλεύουμε σκληρά (είδος) και παίζουμε σκληρότερα :). Υπάρχει ένα είδος Aaron Sorkin πειράγματα εδώ, το δωμάτιο είναι πάντα γεμάτη από έξυπνοι άνθρωποι, μας αρέσει το ποτό μας και να οργανώνουμε ένα δίκαιο αριθμό διασκέδαση γεγονότα-κινηματογράφων νύχτας, μπέιζμπολ ταξίδια (ακόμα κι αν είναι φρικτό, πρακτικά κακό ομάδες).

Εάν μπορούσα να συνοψίσω αυτό όλα σε μία λέξη, Θα χρησιμοποιούσα τη λέξη «ηγεσίας». Μόλυβδος έργα, αναλάβει ηγετικό ρόλο στην οικοδόμηση από την πρακτική (IP, δημιουργία ομάδας), κλπ.

Αλλά περιμένετε! Υπάρχει περισσότερο! Γιατί αλλιώς λειτουργεί στο σλάλομ?

  • Αξιοσημείωτη ενότητα προθέσεως – ο καθένας θέλει να αυξηθεί αυτό το πράγμα έξω. "Αυτό το πράγμα" είναι το γραφείο της Νέας Υόρκης. Ο καθένας είναι επί του σκάφους με αυτό.
  • Αέρα στα πανιά σας – αδελφή γραφεία, αδελφή πρακτικές-σλάλομ είναι ένα «πλήρη υπηρεσία"διαβούλευση με την οργάνωση. Έχω οδηγήσει μέχρι την πρακτική του SharePoint (μια «πρακτική περιοχή οδηγήσει"στη γλώσσα του σλάλομ). Έχω αδελφή πρακτικές σε 11 άλλα γραφεία σλάλομ. Έτσι ακόμα κι αν είμαι βασιλιάς, όπως SharePoint ανησυχεί εδώ στη Νέα Υόρκη σλάλομ, Έχω peer πρακτικές στο Σικάγο, Σιάτλ, Ντάλας, Ατλάντα, Βοστώνη, κλπ. από που μπορώ να βγάλω από υποστήριξη. Είναι πραγματικά τα καλύτερα των δύο κόσμων-σημαντική αυτονομία εδώ στη Νέα Υόρκη αλλά πρόσβαση σε τόνους του ταλέντο σε όλη την εταιρεία.
  • Ανεμος τις πωλήσεις σας (2) -Μπορούμε να κάνουμε περισσότερα από ό, τι SharePoint-πολύ πιο. Κάνουμε BI, CRM, UX, συμβούλων επιχειρήσεων, Κινητό, ανάπτυξη συνήθειας και άλλοι. Είμαστε καλοί στο σταυρό πώλησης μεταξύ μας και να είμαστε καλοί στο ζωγραφικής- και το πιο σημαντικό, παράδοση επάνω-σε μια «πλήρη υπηρεσία» εικόνα για τους πελάτες μας. Αυτό είναι ιδιαίτερα ελκυστικό για μένα. Έχω ήδη σε πολλές μικρότερες orgs λειτουργεί ξανά και ξανά στις συναυλίες του SharePoint και απογοητευμένοι, διότι ήμασταν Περιστέρι οπές ως «οι άνθρωποι του SharePoint.» Αυτό δεν συμβαίνει με σλάλομ και έχουμε την ευκαιρία να κάνει πιο ενδιαφέρουσα δουλειά ως αποτέλεσμα.
  • Τοπικό μοντέλο-ταξίδια.
  • Μακροπρόθεσμη ανάπτυξη-σλάλομ έχει συνεχιστεί gangbusters σε. Πολλή ανάπτυξη και σταθερότητα. Ανάπτυξη σημαίνει επίσης ότι πρέπει να προσλάβει ηγέτες σήμερα να το κεφάλι μέχρι τα νέα ομάδων καθώς προσθέτουμε περισσότερους πελάτες και προσωπικό για την υποστήριξη της εν λόγω πελάτες.

Θα μπορούσα να συνεχίσω, αλλά πιθανώς ήδη έχω πάει πάρα πολύ καιρό. Νομίζω ότι έχετε καταλάβει την ουσία εδώ. Εάν σκέφτεστε για αλλαγή των θέσεων εργασίας και αυτό φαίνεται καλό σε σας, Ας μιλήσουμε.

Αν είστε ευχαριστημένοι στην τρέχουσα εργασία σας-ας μιλήσουμε ούτως ή άλλως :). Έχω σε πολλά μέρη και ήταν πολύ "χαρούμενος" τη στιγμή. Σλάλομ είναι διαφορετικό και θα ήθελα να χαιρετίσω την ευκαιρία να σας πείσω για το που.

</Τέλος>

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

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

Γρήγορη και εύκολη: Ορίστε το μέγεθος από ένα στοιχεία σε ένα πλαίσιο λίστας σε ένα App κατάστημα Windows

Σε ένα App κατάστημα Windows είμαι δημιουργώντας, Θέλω να δείξει στο χρήστη διαφόρων ενημερωτικών μηνυμάτων.  Πήρα ένα πλαίσιο λίστας ως εργαλείου για να δείξει έτσι ώστε αυτοί να διατρέξετε τους και όλη αυτή η καλή ουσία. 

Τα μηνύματα είναι πληροφοριακό μόνο, έτσι δεν υπάρχει καμία ανάγκη να παρέχει όλα τα έξτρα κενό διάστημα γύρω τους, δεδομένου ότι ο χρήστης μπορεί να επιλέξει ποτέ τους για οτιδήποτε.  Η προεπιλεγμένη συμπεριφορά του ListBox παρέχει ένα σημαντικό ποσό γεμίσει και θα ήθελα να απαλλαγούμε από αυτό.  Λοιπόν.... δεν μπορείτε να κάνετε τέτοιου είδους πράγματα σχετικά με το πλαίσιο λίστας άμεσα.  ΩΣΤΌΣΟ, Μπορείτε να το κάνετε με τα στοιχεία που προσθέτετε:

        ιδιωτική άκυρη AddGameStateLogMessage(συμβολοσειρά theMessage)
        {
            Πλαίσιο κειμένου t = νέα Πλαίσιο κειμένου();
            t.Text = GameStateCounter    + ": " + theMessage;
            t.TextWrapping = TextWrapping.Wrap;
            t.MinWidth = 400;
            Πάχος thisPadding = νέα Πάχος(5, 0, 5, 0);
            t.Padding = thisPadding;
            t.FontSize = 12;

            ListBoxItem li = νέα ListBoxItem();
            Li.Περιεχομένου = t;
            Li.MaxHeight = 25;
            thisPadding = νέα Πάχος(5, 0, 5, 0);
            Li.Αναπλήρωση = thisPadding;

            GameStateLog.Items.Insert(0,Li);
        }

στο παραπάνω, Είμαι δημιουργώντας ένα πλαίσιο κειμένου και καθορισμό γραμματοσειρά του, το υλικό παραγεμίσματος, κλπ.

Επόμενη, Μπορώ να δημιουργήσω ένα ListBoxItem και να ορίσετε το περιεχόμενό της να το μορφοποιημένο πλαίσιο κειμένου.

Τέλος, Εισάγω το ListBoxItem σε το πλαίσιο λίστας.  (Θέλω να δείξω πιο πρόσφατα μηνύματα στην κορυφή της λίστας, ως εκ τούτου το ένθετο(0,Li) αντί για μια απλή προσθήκη() επίκληση.).

Θα είναι μικροαλλαγές αυτό λίγο πριν είμαι πραγματικά χαρούμενος με τη συμπεριφορά του πλαισίου λίστας, αλλά το πρότυπο που παρουσιάζεται ανωτέρω υπήρξε πολύ γόνιμη.  Ας ελπίσουμε ότι κάποιος άλλος κρίνει χρήσιμο.

</Τέλος>

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

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