Αρχεία κατηγοριών: SharePoint σε απευθείας σύνδεση

Κακό συναρπαστικό ανακοίνωση

Εξαγγελίες δεν είναι πραγματικά το πράγμα μου, αλλά αυτή τη φορά, Είμαι πραγματικά ενθουσιασμένος για το site σλάλομ Big Apple SharePoint ακριβώς ξεκίνησε. 

Δουλεύω σε σλάλομ consulting και διαχειριστείτε τις πύλες & Πρακτική συνεργασία.  Η τοποθεσία του Big Apple είναι "μου" τοποθεσία για την πρακτική μου εδώ στη Νέα Υόρκη.  Έχω καιρό ήθελε ένα από αυτά. Είμαι βέβαιος ότι πολλοί SP υπέρ επιθυμούσαν για κάτι παρόμοιο.  Πόσες φορές κοιτάξαμε στο δημόσιο χώρο της εταιρείας μας, ή ένας από τους πελάτες και τους δει κτίριο έξω και μόνο γνωρίζοντας και επιθυμούν ότι θα έχτιζαν την SP?  Όλοι γνωρίζουμε ότι η SP είναι αρκετά καλός σ ' αυτό το είδος του πράγματος, αλλά δεν είναι πολύ συχνές. 

Καλά, ΚΟΣΜΩΝ τέλος ευθυγραμμίζεται ακριβώς δεξιά για μένα-SP Online είναι πραγματικά ανέξοδες, Είχα τη σωστή ομάδα και αρκετό χρόνο να το κάνουμε πραγματικότητα.

Ήταν ένα εκπληκτικό ταξίδι για να ξεκινήσει και και μερικά που είναι κοινά μέχρι εκεί στην ιστοσελίδα.

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

Εδώ είναι η επίσημη ανακοίνωση σύνδεση: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=82 #O365

</Τέλος>

Πώς να: Ρυθμίσετε τη δοκιμασία της ενότητας και δοκιμή κάλυψης με 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

BPOS 2010 και "υπερσύνολο”

Διάβαζα ένα από αυτά τα πολύ γενικό μπλα-όπως άρθρα για BPOS (Ανταλλαγή της Microsoft και το SharePoint στο σύννεφο) και ευτυχώς waded μέσω στο τέλος:

Όσον αφορά άλλες βραχυπρόθεσμες παραδοτέα, Η Microsoft είναι η δέσμευση να παρέχει στην BPOS v.Next μητρική PowerShell scripting μέσω έναs χτίζω απόληξη PowerShell για PowerShell έκδοση 2. Θα γίνει έλεγχος ταυτότητας μέσω ηλεκτρονικών αναγνωριστικών, με μια ενιαία πιστοποίηση που μπορούν να χρησιμοποιηθούν τόσο για PowerShell και η πύλη.Keane επανέλαβε το μήνυμα άλλα Microsoft execs έχουμε εκφράσει στο TechEd αυτή την εβδομάδα: Σύννεφο δυνατότητες, πάροδο του χρόνου, θα  γίνει ένα υπερσύνολο του τι είναι διαθέσιμα για χώρους. Επί του παρόντος, το αντίθετο συμβαίνει, και της Microsoft Online υπηρεσίες προσφέρουν ένα υποσύνολο από τις λειτουργίες που είναι διαθέσιμες στα αντίστοιχα λογισμικό του κάθε προϊόντος.

Την έννοια ότι το σύννεφο θα παρέχει μεγαλύτερη ικανότητα από ό, τι σε ενδοεταιρικό είναι νέο για μένα. Αναρωτιέμαι πόσο αλήθεια που πρόκειται να είναι στο τέλος.  Αισθάνεται counterintuitive για μένα.  Είμαι απόλυτα πάρει την ιδέα ότι πολλές εταιρείες θα μετακινήσετε πράγματα στο νέφος (ή να αρχίσετε στο σύννεφο) αλλά νομίζω συνήθως το κάνουν επειδή τα υπέρ (ευκολότερη admin, SLA, κλπ) υπερβαίνουν κατά πολύ τα μειονεκτήματα (μειωμένης λειτουργικότητας). 

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

Θα πιθανώς τρώει τα λόγια μου σε αυτό.  Θυμάμαι σκέψης ότι κανείς δεν θα μπορούσε ενδεχομένως να χρειαστεί περισσότερο από 650 MB δεδομένων και ως εκ τούτου, το CD δεν επρόκειτο ποτέ να τελειοποιηθούν.

</Τέλος>

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

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

SharePoint Online και InfoPath

Μπορεί να είμαι το τελευταίο πρόσωπο για να συνειδητοποιήσουν αυτό, αλλά το SharePoint Online (που συχνά ακούω ανθρώπους να λένε είναι ένα δοξασμένο WSS) υποστηρίζει τις υπηρεσίες InfoPath Forms Services.  Που είναι αρκετά ισχυρή ουσία, ιδίως αν ληφθεί υπόψη ότι η IP FS είναι ένα χαρακτηριστικό γνώρισμα ΒΡΎΑ επιχείρηση και BPOS είναι κάτι σαν $1.99/ μήνα για 10,000 Οι χρήστες.  Ίσως είναι λίγο περισσότερο από αυτό.

Έτσι, Του SharePoint Online αψηφά εύκολης ερμηνείας.  Έχει αυτό το χαρακτηριστικό γνώρισμα επιχείρηση, αλλά δεν ανώνυμη πρόσβαση (που ακόμη και WSS υποστηρίζει).  Μπορείτε να κάνετε κάποια ενδιαφέροντα πράγματα με αναζήτηση (MOSS-ish, Δεδομένου ότι μπορείτε να ορίσετε το επίπεδο εμβέλειες site), αλλά εάν χρειάζεστε πρόσβαση στην υπηρεσία SSP, δεν μπορείτε να το κάνετε.  You can play the “on the one hand and on the other” game all night long with this product 🙂

Microsoft αναμένεται να κυκλοφορήσει μια νέα έκδοση του SP Online σε τους επόμενους μήνες.  Αναρωτιέμαι τι παράξενο υβρίδιο που πρόκειται να?

</Τέλος>

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

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