Αρχεία κατηγοριών: Ανάπτυξη του SharePoint

Απλή εξήγηση: “Η τιμή δεν εμπίπτουν εντός της περιοχής που αναμενόταν.”

Η ΕΝΗΜΕΡΩΜΈΝΗ ΈΚΔΟΣΗ: Ένα ανώνυμο αφίσα που άφησε ένα μεγάλο σχόλιο σχετικά με εσωτερικούς ονόματα. Να είστε βέβαιος να το διαβάσετε.

Όταν εργάζεστε με εκδήλωση δέκτες και άλλο κώδικα που αναφέρεται σε στοιχεία της λίστας του SharePoint μέσω του μοντέλου αντικειμένου, Κάνω συχνά λάθη που δημιουργούν αυτό το σφάλμα κατά το χρόνο εκτέλεσης:

Σφάλμα κατά τη φόρτωση και εκτέλεση εκδήλωσης δέκτη Conchango.xyzzyEventReceiver στο xyzzy, Έκδοση = 1.0.0.0, Πολιτισμός = ουδέτερη, PublicKeyToken = 0dc50a750396c3ac. Πρόσθετες πληροφορίες είναι κάτω από. : Η τιμή δεν εμπίπτουν εντός της περιοχής που αναμενόταν.

Νομίζω ότι αυτό είναι ένα αρκετά γενικό σφάλμα που προκαλείται ενδεχομένως πολλούς διαφορετικούς τρόπους. Ωστόσο, μία απλή εξήγηση είναι ότι είμαι συσχέτιση ένα πεδίο εσφαλμένα. Εάν το όνομα του πεδίου "Ημ/νία Παράδοσης", Πρέπει να αναφορά όπως αυτό σε ένα δέκτη συμβάντων:

ιδιότητες.Στοιχείο λίστας["Ημ/νία"]

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

ιδιότητες.Στοιχείο λίστας["Ημ/νία"]

</Τέλος>

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

Γρήγορη & Εύκολη: Δημιουργήστε ένα φάκελο και εκχωρήστε έναν τύπο περιεχομένου (Ή, Έχουν δείκτες KPI σας και να φάω πολύ)

Για να επιλύσετε ένα πρόβλημα KPI Έγραψα για εδώ, Έκανα μερικές δοκιμές και ανακάλυψε ότι KPI εργασία κατά τους φακέλους με τα μετα-δεδομένα με τον ίδιο τρόπο ότι λειτουργεί εις βάρος των εγγράφων ή στοιχεία λίστας. Έχω αποδείξει αυτό έξω με τη δημιουργία ενός νέου τύπου περιεχομένου με βάση τον τύπο περιεχομένου φάκελο και στη συνέχεια να προσθέσει μερικά πεδία. Δημιούργησα ορισμένους δείκτες και απέδειξε στον εαυτό μου ότι KPI λειτουργεί όπως αναμένεται. Αυτό ήταν ευπρόσδεκτη είδηση. Δεν είναι τέλειο, γιατί το τρυπάνι-κάτω μπορείτε να πάρετε από το KPI εναντίον τους φακέλους δεν είναι ακριβώς αυτό που θέλετε. Αυτό δεν είναι πάρα πολύ ένα μειονέκτημα στη δική μου περίπτωση, γιατί 1) οι τελικοί χρήστες δεν γνώριζαν καθόλου καλύτερα και 2) το τρυπάνι-κάτω πηγαίνει σε ένα φάκελο. Κάντε κλικ στο όνομα του φακέλου και διατρέχουν το στοιχείο. Είναι δύο κλικ, αντί για ένα, που δεν είναι το τέλος του κόσμου.

Αυτό διοχετεύθηκε όμορφα με το έργο που έκανα. Είμαι δημιουργώντας ένα φάκελο για κάθε έγγραφο που παίρνει φορτωθεί. Αυτό γίνεται μέσω ενός δέκτη συμβάντων. Ως εκ τούτου, είναι ένα κομμάτι κέικ να κρατήσει το του γονικού φακέλου μετα-δεδομένα σε συγχρονισμό με το KPI με γνώμονα meta-στοιχεία από το αρχείο του ίδιου από τα υδραυλικά είναι ήδη σε ισχύ. This allows me to have my KPI’s and eat them too 🙂

Τροποποίησα το δέκτη συμβάντων να προσθέσετε στο φάκελο και στη συνέχεια, ορίστε τον τύπο περιεχομένου αυτόν το νέο φάκελο μου προσαρμοσμένο τύπο περιεχομένου KPI-φιλικό. Αυτό το κομμάτι του κώδικα που έκανε το κόλπο:

 SPFolderCollection srcFolders = targetWeb.GetFolder("Έγγραφα").Υποφακέλους;
  SPFolder addedFolder = srcFolders.Add(ιδιότητες.ListItem.ID.ToString());
  SPContentTypeId kpiCT = νέα SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["Αναγνωριστικό περιεχομένου τύπου"] = kpiCT;
  addedFolder.Item.Update();

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

εικόνα

</Τέλος>

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

Γρήγορη και εύκολη: Αποκτήστε το SPFolder της ένα SPListItem σε ένα δέκτη συμβάντων

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

ιδιωτική άκυρη UpdateParentFolder(SPItemEventProperties ιδιότητες)
{

SPFolder thisItemFolder = ιδιότητες.ListItem.File.ParentFolder;
thisItemFolder.Item[Κατάσταση έγκρισης ZZ»"] = «Καλή είδηση, όλος ο κόσμος!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

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

Το κόλπο είναι ότι δεν μπορείτε να πάρετε το SPFolder του είδους απευθείας από το ίδιο το στοιχείο (ήτοι. ιδιότητες.ListItem.Folder είναι null). Αντί, Μεταβείτε στο σχετικό αρχείο του στοιχείου της λίστας και να πάρετε το αρχείο του φακέλου.

</Τέλος>

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

Ακόμα ένα άλλο δέκτη συμβάντων εντοπισμού σφαλμάτων μπάζα

Είμαι βέβαιος ότι δεν είμαι το πρώτο πρόσωπο για να καταλήξει σε αυτό. Ωστόσο, Δεν έχω παρατηρήσει κάποιος δημοσιεύει ένα τέχνασμα όπως αυτό από τότε που άρχισα, δίνοντας ιδιαίτερη προσοχή στην Κοινότητα περασμένο Ιούλιο. Έτσι, Σκέφτηκα ότι θα το δημοσιεύσω αυτή η γρήγορη και εύκολη debug άκρη.

Δουλεύω για ένα δέκτη συμβάντων που ξεκίνησε να παράγει αυτό το σφάλμα σε το 12 Κυψέλη:

Σφάλμα κατά τη φόρτωση και εκτέλεση εκδήλωσης δέκτη Conchango.xyzzyEventReceiver στο xyzzy, Έκδοση = 1.0.0.0, Πολιτισμός = ουδέτερη, PublicKeyToken = blahbalhbalh. Πρόσθετες πληροφορίες είναι κάτω από. : Αναφορά αντικειμένου δεν έχει οριστεί σε μια παρουσία ενός αντικειμένου.

Δεν ήξερα πού είχε εισαγάγει αυτό το bug επειδή είχα κάνει πάρα πολλά πράγματα σε ένα από μου κύκλους κώδικα/ανάπτυξη/δοκιμή.

Προσπάθησα Αυτή η λύση να πάρει το ΠΣΠ μου εκεί με τις ελπίδες ότι του SharePoint 12 Κυψέλη θα δείξει η Ιχνηλάτηση στοίβας, αλλά καμία τύχη. Δεν ξέρω αν είναι δυνατόν και αν κάποιος κάνει, παρακαλώ να με ενημερώσετε 🙂

Ξέρω ότι είναι δυνατόν να Γράψτε το δικό σας μηνύματα καταγραφής για να το 12 Κυψέλη. Ειλικρινά, Ήθελα κάτι λίγο λιγότερο τρομακτικό και ταχύτερη.

Αυτό συνέβη σε μένα ότι θα μπορούσα να πάρω τουλάχιστον μερικές βασικές ίχνος πληροφορίες από την αλίευση και την εκ νέου ρίψη γενικές εξαιρέσεις όπως αυτό:

  Δοκιμάστε {
    UpdateEditionDate(ιδιότητες);
  }
  αλιευμάτων (Εξαίρεση ε)
  {
    ρίξει νέα Εξαίρεση(«Αποστολέας, UpdateEditionDate(): Εξαίρεση: [" + e.ToString() + "].");
  }

Αυτό έδειξε σε το 12 thusly κυψέλη:

Σφάλμα κατά τη φόρτωση και εκτέλεση εκδήλωσης δέκτη Conchango.xyzzyEventReceiver στο xyzzy, Έκδοση = 1.0.0.0, Πολιτισμός = ουδέτερη, PublicKeyToken = blahblahblah. Πρόσθετες πληροφορίες είναι κάτω από. : Αποστολέας, UpdateEditionDate(): Εξαίρεση: [System.NullReferenceException: Αναφορά αντικειμένου δεν έχει οριστεί σε μια παρουσία ενός αντικειμένου. στο Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties ιδιότητες) στο Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties ιδιότητες, Συμβολοσειρά eventDescription)].

Που μου έδωσε όλες τις λεπτομέρειες που χρειαζόμουν για να εντοπίσουμε αυτό το συγκεκριμένο πρόβλημα και να περιμένω να το χρησιμοποιήσετε πολύ πηγαίνοντας προς τα εμπρός.

</Τέλος>

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

Λύση: SPQuery δεν πραγματοποιεί αναζήτηση σε φακέλους

Αυτή η προηγούμενη εβδομάδα, είχα την εφαρμογή ένα «εξελίσσεται" λύση για έναν πελάτη που χρησιμοποιεί BDC και SPQuery και έτρεξε σε κάποια δυσκολία χρησιμοποιώντας SPQuery ενάντια σε μια βιβλιοθήκη εγγράφων που περιέχουν τους φακέλους. Κάτω γραμμή: αντιστοιχίσετε "αναδρομικό" για το χαρακτηριστικό γνώμη του ερωτήματος.

Το σενάριο μου:

  • Τη Δευτέρα, Μπορώ να φορτώσω ένα έγγραφο και να παρέχουν κάποια μετα-δεδομένα.
  • Την επόμενη εβδομάδα, Μπορώ να φορτώσω ένα νέο έγγραφο. Μεγάλο μέρος αυτού του νέου εγγράφου μετα-δεδομένα είναι με βάση το έγγραφο που ανέβασα τη Δευτέρα (που ονομάζουμε "πρωτεύον έγγραφο").
  • Έχουμε δημιουργήσει μια πρόσοψη υπηρεσία web που παρέχει μια διεπαφή BDC φιλικές στον κατάλογο, έτσι ώστε οι χρήστες να εντοπίσετε εύκολα το έγγραφο τη Δευτέρα μέσω μια αναζήτηση του τίτλου.
  • Μια στήλη δεδομένων BDC παρέχει ένα φιλικό περιβάλλον εργασίας. (Αυτό είναι μέρος της προσπάθειά μου σε χρήση BDC για ένα πιο φιλικό στήλη αναζήτησης).

Η τελική BDC πρόσοψη υπηρεσία χρησιμοποιεί ένα ερώτημα όπως αυτό να κάνετε την αναζήτηση:

 // Χρησιμοποιείται το εργαλείο U2U να βοηθήσει στην δημιουργία αυτή CAML ερώτημα.
      oQuery.Query =
        "<Όπου>";

      Αν (titleFilter.Length > 0)
        oQuery.Query  =
          "  <Και>";

      oQuery.Query  =
        "    <Και>" +
        "      <GEQ>" +
        "        <FieldRef όνομα =  "DocumentId" />" +
        "        <Δημιουργία τύπου τιμής =  "Text">" + minId + "</Αξία>" +
        "      </GEQ>" +
        "      <LEQ>" +
        "        <FieldRef όνομα =  "DocumentId" />" +
        "        <Δημιουργία τύπου τιμής =  "Text">" + maxId + "</Αξία>" +
        "      </LEQ>" +
        "    </Και>";

      Αν (titleFilter.Length > 0)
        oQuery.Query  =
          "    <Περιέχει>" +
          "      <FieldRef όνομα =  "Title" />" +
          "      <Δημιουργία τύπου τιμής =  "Text">" + titleFilter + "</Αξία>" +
          "    </Περιέχει>" +
          "  </Και>";
      oQuery.Query  =
        "</Όπου>";

Κατά το αρχικό στάδιο της ανάπτυξης, αυτό έλυσα σπουδαίος. Ωστόσο, Εισαγάγαμε φακέλους στον κατάλογο να λύσει κάποια προβλήματα και ξαφνικά, μου επιλογέα BDC δεν θα επιστρέψει καθόλου αποτελέσματα. Αυτό εντοπίζονται στο γεγονός ότι το SPQuery ποτέ δεν θα επιστρέψει καθόλου αποτελέσματα. Χρησιμοποιήσαμε φακέλους κατά κύριο λόγο για να επιτρέπει πολλά αρχεία με το ίδιο όνομα για να φορτωθούν αλλά με διαφορετικά μετα-δεδομένα. Όταν το αρχείο έχει φορτωθεί, δημιουργούμε ένα φάκελο με βάση το ID του στοιχείου λίστας και έπειτα μετακινήστε το αρχείο εκεί (Έγραψα για αυτό Εδώ; είχαμε ανάμεικτα αποτελέσματα με την προσέγγιση αυτή, αλλά σε όλη τη, αυτό λειτουργεί καλά). Ο χρήστης δεν ενδιαφέρονται για τους φακέλους και στην πραγματικότητα, πραγματικά δεν καταλαβαίνω ότι υπάρχουν οποιουσδήποτε φακέλλους. Ότι θα έχουν ρυθμιστεί όλες τις απόψεις για την βιβλιοθήκη να δείξει στοιχεία αδιαφορώντας για φακέλους.

Χτύπησα δύο φορές ως την τεχνική εφαρμογή εξελίχθηκε και να λυθεί αυτό διαφορετικά κάθε φορά που αυτό το πρόβλημα. Πρώτη φορά, Εγώ δεν ήμουν χρησιμοποιώντας τον τελεστή περιέχει στο ερώτημα. Χωρίς ένα χειριστή περιέχει, Ήμουν σε θέση να λύσει το πρόβλημα, καθορίζοντας την άποψη σχετικά με το SPQuery ανάδοχος. Αντί να χρησιμοποιήσετε την προεπιλεγμένη κατασκευή:

SPList oList = web.Λίστες["Έγγραφα"];

SPQuery oQuery = νέα SPQuery();

Αντίθετα, χρησιμοποίησα ένα κατασκευαστή που ορίσει μια προβολή:

SPList oList = web.Λίστες["Έγγραφα"];

SPQuery oQuery = νέα SPQuery(oList.Views["Όλα τα έγγραφα"]);

Που έλυσε το πρόβλημα και άρχισα να μου αποτελέσματα.

Στη συνέχεια, προστίθενται στο χειριστή περιέχει στο μίγμα και έσπασε πάλι. Αποδεικνύεται ότι ο φορέας εκμετάλλευσης περιέχει, μέχρι στιγμής, όπως μπορώ να πω, δεν λειτουργεί με την άποψη τον ίδιο τρόπο όπως το ένα απλούστερο GEQ / LEQ φορείς. Έκανα κάποια έρευνα και έμαθε ότι η ViewAttributes του ερωτήματος πρέπει να ρυθμιστεί σε «Αναδρομικό», όπως και στην:

oQuery.ViewAttributes = «Πεδίο εφαρμογής = "Recursive"";

Που έλυσε το πρόβλημα για περιέχει. Στην πραγματικότητα, αυτό επίσης λυθεί το πρόβλημά μου Αρχική αναζήτηση και αν που είχα ορίζεται η αναδρομική αποδίδουν την πρώτη φορά, Δεν θα έχουν τρέξει το θέμα και πάλι.

Το γεγονός ότι ένα βάσει προβολής SPQuery λειτουργεί για ορισμένους οικονομικούς παράγοντες (GEQ/LEQ) και όχι τους άλλους (ΠΕΡΙΈΧΕΙ), σε συνδυασμό με το γεγονός ότι KPI δεν φαίνεται να λειτουργεί καθόλου με το φάκελο που περιέχει το έγγραφο οδηγεί βιβλιοθήκες να πιστέψω ότι η SPQuery έχει κάποια θέματα ορθογωνιότητα.

Ιδιαίτερες ευχαριστίες:

  • Οι καλοί λαοί στο U2U και η τους εργαλείο ερωτημάτων.
  • Michael Hoffer είναι μεγάλη "Εκμάθηση μέσω της πράξης" καταχώρηση ιστολογίου, σχόλια και απαντήσεις.

</Τέλος>

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

MOSS KPI bug? Λίστα δεικτών που συνδέονται σε βιβλιοθήκη εγγράφων με φακέλους

Η ΕΝΗΜΕΡΩΜΈΝΗ ΈΚΔΟΣΗ 02/29/08: Έλυσα αυτό το πρόβλημα δημιουργώντας ένα φάκελο και αναθέτοντας στη συνέχεια έναν τύπο περιεχομένου στο φάκελο που έχει το meta-στοιχεία που χρειάζομαι για το KPI. Που περιέγραψα λίγο πιο αναλυτικά εδώ.

Εφαρμόσαμε μια τεχνική λύση όπου οι χρήστες ανεβάσετε έγγραφα σε μια βιβλιοθήκη εγγράφων. Ένα δέκτη συμβάντων δημιουργεί έναν κατάλογο και μετακινεί το αρχείο σε εκείνο τον κατάλογο (χρησιμοποιώντας μια τεχνική που είναι παρόμοια με αυτό που έγραψα για Εδώ). Εμείς έχετε πλοηγηθεί επιτυχώς γύρω από τα πιθανά ζητήματα που προκαλούνται από εκδήλωση δέκτες που μετονομάσετε φορτωμένα αρχεία (κυρίως επειδή οι χρήστες αρχίσουν ποτέ τους έγγραφο κάνοντας κλικ στο "νέα" αλλά αντί να δημιουργήσετε το docs σε τοπικό επίπεδο και στη συνέχεια να φορτώσετε τους).

Το meta-στοιχεία για τα εν λόγω έγγραφα περιλαμβάνει ένα ναι/καμία στήλη τοποθεσίας που ονομάζεται "ΕΠΕΙΓΟΝ" και μια άλλη στήλη τοποθεσίας που ονομάζεται "Κατάσταση". Πρέπει να καλύψει τις άνάγκες επιχειρήσεων που δείχνει το ποσοστό των «ΕΠΕΙΓΟΝ" τα έγγραφα των οποίων η κατάσταση είναι "Σε εκκρεμότητα".

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

Με λίγα λόγια, Έκανα τα εξής:

  • Δημιουργήσετε μια προβολή για την βιβλιοθήκη doc που ονομάζεται "Εν αναμονή".
  • Ρυθμίσετε την άποψη να αγνοήσει τη δομή του φακέλου.
  • Δημιουργήστε μια λίστα KPI.
  • Δημιουργήσετε ένα δείκτη στη λίστα που αφορά το lib doc και που "εν αναμονή" προβολή.

Αυτό απλά δεν λειτουργεί. Ο δείκτης KPI δείχνει το στόχο μου (π.χ.. πέντε επείγοντα έγγραφα) αλλά πάντα δείχνει τον πραγματικό αριθμό των επείγοντα έγγραφα ως μηδέν. Παραδόξως, Αν πραγματοποιήσετε αναζήτηση μέχρι την παραμικρή λεπτομέρεια, δείχνει τα πέντε επείγοντα έγγραφα στη λίστα. Δημιούργησα ένα πολύ απλό σενάριο με δύο έγγραφα, μία σε ένα φάκελο και δεν. Εδώ είναι το στιγμιότυπο οθόνης:

εικόνα

Το παραπάνω στιγμιότυπο οθόνης δείχνει ξεκάθαρα υπάρχουν δύο έγγραφα υπό την άποψη αλλά η αξία"" είναι ένα. Η CamlSchema"" με κενό έγγραφο Id είναι στο ριζικό φάκελο και το άλλο είναι σε ένα φάκελο που ονομάζεται "84".

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

Αν κάνω λάθος, παρακαλώ πτώση μου μια γραμμή ή αφήστε ένα σχόλιο.

</Τέλος>

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

Technorati Tags:

Λύση στο πρόβλημα: “FileNotFoundException” Με δέκτη μου χαρακτηριστικό.

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

Χρησιμοποιώντας τη γραμμή εντολών, Θα μπορούσα να εγκαταστήσετε τη δυνατότητα χωρίς σφάλμα (αλλά δείτε παρακάτω για το κρυφό σφάλμα). Όταν προσπάθησα να αναπτύξετε το χαρακτηριστικό γνώρισμα τῆς Ἱστοσελίδος, ΒΡΎΑ καταγγέλλει μια "FileNotFoundException" σφάλμα. Αυτό το ιστολόγιο εισόδου περιγράφει πώς θα το λύσει.

Αυτό είναι το λάθος που ΒΡΎΑ μου έδειξε στο πρόγραμμα περιήγησης:

Το χαρακτηριστικό ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ δεν θα μπορούσε να εγκατασταθεί επειδή η φόρτωση του συγκρότηση δέκτη συμβάντος "xyzzyFeatureReceiver_0" απέτυχε: System.IO.FileNotFoundException: Δεν μπόρεσε να φορτωθεί αρχείου ή της συγκρότησης ' xyzzyFeatureReceiver_0’ ή μία από τις εξαρτήσεις. Το σύστημα δεν μπορεί να βρει το καθορισμένο αρχείο.
Όνομα αρχείου: «xyzzyFeatureReceiver_0’
στο System.Reflection.Assembly.nLoad(Όνομα αρχείου AssemblyName, Συμβολοσειρά codeBase, Στοιχεία assemblySecurity, Συνέλευση locationHint, StackCrawlMark& stackMark, Δυαδική throwOnFileNotFound, Δυαδική forIntrospection)
στο System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Στοιχεία assemblySecurity, StackCrawlMark& stackMark, Δυαδική forIntrospection)
στο System.Reflection.Assembly.InternalLoad(Συμβολοσειρά assemblyString, Στοιχεία assemblySecurity, StackCrawlMark& stackMark, Δυαδική forIntrospection)
στο System.Reflection.Assembly.Load(Συμβολοσειρά assemblyString)
στο Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Είναι ενεργοποιημένη η Συνέλευση καταγραφή δεσμευτική OFF.
Να ενεργοποιήσετε την καταγραφή αποτυχία δεσμεύουν Συνέλευση, Ορίστε την τιμή μητρώου [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) να 1.
Σημείωση: Υπάρχει κάποια ποινή επιδόσεων που σχετίζονται με Συνέλευσης δεσμεύουν αποτυχία καταγραφή.
Για να απενεργοποιήσετε αυτό το χαρακτηριστικό γνώρισμα, καταργεί την τιμή μητρώου [HKLMSoftwareMicrosoftFusion!EnableLog].

Αντιμετώπιση προβλημάτων με το Windows SharePoint Services.

Ξέρω πώς να προκαλέσει σκόπιμα το σφάλμα: Μην εγκαταστήστε τη συναρμολόγηση στο GAC. Αλλά, ήταν στο GAC. Εγώ κανονικά εγκαταστήσει συγκροτήσεις στο GAC από έσυρα αυτούς into το c:\windowsassembly φάκελο χρησιμοποιώντας τον εξερευνητή παραθύρων. Ποτέ δεν έχω αισθητή 100% άνετα να κάνουν αυτό, διότι πάντα πίστευα ότι gacutil υπήρχε για έναν λόγο … έτσι δοκίμασα που. Δεν είχε καμία διαφορά.

Έψαξα το Ίντερνετ και βρήκα αυτό το post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

Η αφίσα συνέβη να χρησιμοποιεί το ίδιο bit ρίζα του κώδικα (από το βιβλίο μέσα WSS από αυτόν τον κατάλογο) έτσι ώστε ήταν ένα ελπιδοφόρο σημάδι. Ωστόσο, η πρόταση της διακόσμησης του συγκροτήματος με μια [Συνέλευση: ] οδηγίας δεν έχει νόημα για μένα. Δοκίμασα κι αλλιώς και είχα δίκιο. Δεν είχε καμία διαφορά.

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

Επόμενη, Πήγα στο πρόβλημα της διευκόλυνσης της "Συνέλευσης δεσμεύουν αποτυχία καταγραφής" (ακολουθώντας τις χρήσιμες και ακριβείς οδηγίες που παρέχονται) και αυτό είναι όπου τα πράγματα άρχισαν να παίρνουν ενδιαφέροντα. Ότι log μου δείχνει ότι ο χρόνος εκτέλεσης είναι η αναζήτηση παντού σε αυτόν το διακομιστή μου ΕΓΚΑΤΑΣΤΑΣΗΣ. Φαίνεται ακόμη και για να ψάχνουν για αυτό σε μου γραφείο ιατρικής. Αλλά … αυτό δεν θα το αναζητήσετε στο GAC.

Έβαλα μου σακάκι χειμώνα και ψάξω και πάλι το Ίντερνετ και βρείτε ότι κάποιος είχε αυτό το πρόβλημα πολύ. Η μακρά συζήτηση στην απόσπαση εξασθενεί με την απομάκρυνση μακριά σε τίποτα και δεν μπορώ να βρω μια λύση.

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

Απέτυχε η δημιουργία αντικειμένου δέκτη χαρακτηριστικό από Συνέλευση "xyzzyFeatureReceiver_0", Πληκτρολογήστε "Conchango.xyzzyFeatureReceiver" για το χαρακτηριστικό b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Αξία δεν μπορεί να είναι null.
Το όνομα παραμέτρου: Τύπος
στο System.Activator.CreateInstance(Τύπο, Δυαδική μη δημοσιεύσιμες)
στο System.Activator.CreateInstance(Τύπο)
στο Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Αντιμετώπιση προβλημάτων με το Windows SharePoint Services.

Χρόνος για ένα τελευταίο ταξίδι στο Ίντερνετ!

Αυτή τη φορά μπορώ να μάθω, αρκετά προβλέψιμα, ότι το ΒΡΎΟ θέματα αυτό το σφάλμα, διότι η Συνέλευση δεν βρίσκεται στο GAC.

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

Τελικά αποφασίζουν να punt. Δημιουργήσει ένα εξ ολοκλήρου νέο πρόγραμμα και copy/paste τον κώδικα από το incredible-cloaked-from-the-GAC-assembly μη-ηλικία εργασίας έργου πάνω σε αυτό το νέο σχέδιο. (Κοιτάζω για μια κατασκευή σημαία κάλεσα κάτι σαν "Απόκρυψη από τη συγκρότηση δεσμευτική εάν εγκατασταθεί στο GAC" αλλά δεν μπορώ να βρω ένα).

Εγκαθιστά τη δυνατότητα και να ενεργοποιήσετε και … λειτουργεί! Έτσι, μετά από όλα αυτά, Βασικά έπρεπε να «επανεκκίνηση’ το έργο μου. Ένας ακόμη λόγος γιατί μισώ υπολογιστές.

Είχα μάθει κάτι χρήσιμο από αυτό. Εγώ είχα την εγκατάσταση χαρακτηριστικά χρησιμοποιώντας τη γραμμή εντολών stsadm όλη την ημέρα και να χρησιμοποιήσει το "-δύναμη" επιλογή από συνήθεια. Για κάποιο λόγο, Δεν χρησιμοποιώ την επιλογή - force όταν εγκατέστησα το νέο έργο. Αυτή τη φορά, Έκανα πραγματικά, πραγματικά ξεχάσετε να αντιγράψετε το νέο αυτό έργο της συγκρότησης στο GAC. Ως εκ τούτου, Έλαβα ότι "FielNotFoundException" σφάλμα. Αυτή τη φορά, Εγώ το πήρα από stsadm, όταν δεν προσπάθησα να ενεργοποιήσετε τη δυνατότητα μέσω του προγράμματος περιήγησης web. Έτσι, -δύναμη παίζει πραγματικά δύο ρόλους. Σας επιτρέπει να εγκαταστήσετε εκ νέου ένα υπάρχον στοιχείο. Επίσης σας επιτρέπει να εγκαταστήσετε ένα αμαξάκι χαρακτηριστικό που δεν μπορεί να λειτουργήσει κατά το χρόνο εκτέλεσης με την καταστολή του σφάλματος. Ίσως λέει τόσο πολύ στη βοήθεια κάπου, αλλά ποτέ δεν το παρατήρησα.

</Τέλος>

Γρήγορη & Εύκολη: Μετονομάστε το αρχείο χρησιμοποιώντας το μοντέλο αντικειμένου του SharePoint μέσω δέκτη μια εκδήλωση

Η ΕΝΗΜΕΡΩΜΈΝΗ ΈΚΔΟΣΗ: Αυτό λειτουργεί, αλλά υπάρχουν σημαντικοί περιορισμοί που περιγράφονται στα σχόλια. Μπορεί να είναι χρήσιμη στην κάποιο Γέροντα.

Η ΕΝΗΜΕΡΩΜΈΝΗ ΈΚΔΟΣΗ 2: Στο τρέχον έργο μου, Οι χρήστες πάντα αποστολής εγγράφων. Ως εκ τούτου, Δεν τρέχει σε ένα πρόβλημα όπου εκτελείται το MS Word και νομίζει ότι το αρχείο μετονομάζεται σε αυτό. Εγώ έκανα τρακάρω ένα πρόβλημα, "το αρχείο αυτό τροποποιήθηκε από κάποιον άλλο" και αυτό λυθεί μέσω μια απλή σηματοφορέα (semaphore) τύπου σημαία. Οι χρήστες πρέπει να αλλάξτε ένα πεδίο δεδομένων meta από την προεπιλεγμένη τιμή σε κάτι άλλο. Το itemupdated() δέκτης αναζητά μια έγκυρη τιμή εκεί πριν από την εκτέλεση η μετονομασία, και από τότε, Δεν είχα κανένα πρόβλημα. Απόσταση σε μίλια σας μπορεί να διαφέρουν.

Έχω μια απαίτηση του πελάτη για να αλλάξετε το όνομα των αρχείων που φορτώνονται σε μια συγκεκριμένη βιβλιοθήκη εγγράφων να συμμορφώνονται με μια συγκεκριμένη σύμβαση ονομασίας. Το API δεν παρέχει μια μετονομασία"()" μέθοδος. Αντί, χρησιμοποιούμε "MoveTo(…)". Εδώ είναι ένα ελάχιστο κομμάτι του κώδικα για να επιτευχθεί αυτό:

 δημόσια παράκαμψη άκυρη ItemAdded(SPItemEventProperties ιδιότητες)
        {
            SPFile f = ιδιότητες.ListItem.File;

            f.MoveTo(ιδιότητες.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Το μόνο δύσκολο κομμάτι είναι το "ιδιότητες. ListItem.ParentList.RootFolder.Url". Το MoveTo() η μέθοδος απαιτεί μια διεύθυνση URL. Που πουρέ συμβολοσειρά βαθμούς μου στο ριζικό φάκελο μου τρέχουσα βιβλιοθήκης εγγράφων. Αυτό μου επιτρέπει να αποφευχθεί οποιοδήποτε σκληρό κωδικοποίησης στο δέκτη μου εκδήλωση.

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

 δημόσια παράκαμψη άκυρη ItemAdded(SPItemEventProperties ιδιότητες)
        {
            DisableEventFiring();

            // Εκχωρήσει τον τίτλο αυτού του στοιχείου στο όνομα του αρχείου, η ίδια.
 // ΣΗΜΕΊΩΣΗ: Αυτή η ανάθεση δεν πρέπει να λαμβάνει χώρα πριν έχουμε τροποποιήσει το ίδιο το αρχείο.
 // Καλώντας την ενημέρωση() σχετικά με το SPFile φαίνεται να ακυρώσει τις ιδιότητες σε
 // κάποια αίσθηση.  Ανανεώσεις "Τίτλος" απέτυχε μέχρι που να αλλάξετε (και ενημέρωση() κλήση)
 // κινήθηκαν μπροστά από την αλλαγή στο όνομα αρχείου.
            ιδιότητες.Στοιχείο λίστας["Τίτλος"] = ιδιότητες.ListItem.File.Name;

            ιδιότητες.ListItem.Update();

            SPFile f = ιδιότητες.ListItem.File;

            // Πάρετε την επέκταση του αρχείου.  Χρειαζόμαστε που αργότερα.
 συμβολοσειρά spfileExt = νέα FileInfo(f.Name).Επέκταση;

            // Μετονομάστε το αρχείο σε αναγνωριστικό στοιχείου λίστας και χρησιμοποιήστε την επέκταση αρχείου για να κρατήσει
 // το μέρος της ανέπαφη.
            f.MoveTo(ιδιότητες.ListItem.ParentList.RootFolder.Url +
                "/" + ιδιότητες.Στοιχείο λίστας["ΑΝΑΓΝΩΡΙΣΤΙΚΌ"] + spfileExt);

            // Διαπράττουν την κίνηση.
            f.Update();

            EnableEventFiring();
        }

Γρήγορη συμβουλή: Τμήμα Web ερωτήματος περιεχομένου, Τιμή στήλης αναζήτησης και XSL

Έχω ένα όνομα στήλης σε έναν τύπο περιεχομένου που ονομάζεται "Real Estate τοποθεσία".

Αυτήν τη στήλη είναι τύπου "αναζήτησης".

Έχω τροποποιήσει <CommonViewFields> και ItemStyle.xsl να δείχνω the στήλη.

Ένα απλό <XSL:αξία της επιλέξτε =…> επιστρέφει πίσω μια εσωτερική αξία, που περιλαμβάνει τη θέση σειράς δεδομένων, όπως:

1;#Μαϊάμι

Να πάρει την αξία του ανθρώπου φιλικό, χρήση xsl δευτερεύουσα συμβολοσειρά-μετά, όπως φαίνεται:

<XSL:Επιλέξτε το valuXSLf = "δευτερεύουσα συμβολοσειρά-μετά(@Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></XSL:αξία των>

Χρησιμοποιήσετε αυτή την τεχνική κάθε φορά που εργάζεστε με τιμές αναζήτησης σε μετασχηματισμοί XSL και πρέπει να πάρετε την αξία του ανθρώπου φιλικό.

<Τέλος />

Technorati Tags: , ,

Γρήγορη και εύκολη: Καθορίσει την εσωτερική στήλη όνομα του έναs Site στήλη

Η ΕΝΗΜΕΡΩΜΈΝΗ ΈΚΔΟΣΗ: Jeremy Thake έχει blogged σχετικά με αυτό και έβαλα επάνω μερικά κώδικα για μια κονσόλα εφαρμογή που δείχνει εσωτερικά ονόματα.

Προσπαθούσα να πάρει ένα τμήμα web ερωτήματος περιεχομένου για να εμφανίσετε μια ημερομηνία πληρωμής από μια εργασία και επειδή η ετικέτα οθόνη είναι "Ημ/νία", Υπέθεσα ότι το όνομα της στήλης για χρήση σε <CommonViewFields> είναι "Due_x0020_Date".

Λάθος!

Στην περίπτωση αυτή, το πραγματικό στήλη όνομα ήταν "Ημερομηνία λήξης".

Πώς το βρω? Ξαναδιάβασα την Heather Του Σολομώντα είσοδο blog σχετικά με την τροποποίηση CQWP για να εμφανίσετε πρόσθετες στήλες δεδομένων. Περιγράφει αυτή τη διαδικασία στο βήμα #13. Εμπιστεύονται. Είναι σωστή. Τουλάχιστον, ήταν σωστή για μένα. Δεν το είχαν εμπιστοσύνη στην αρχή για μια άλλη στήλη με ένα πολύ μεγαλύτερο όνομα.

Λέω "εμπιστεύονται" επειδή δεν είχαν εμπιστοσύνη και να σπαταληθεί πιθανώς κοντά σε δύο ώρες που σας διακόπτω το κεφάλι μου επάνω ενάντια σε έναν τοίχο. Μετά θα επιλυθεί "ημερομηνία λήξης" Όνομα, Θα ήθελα να προσθέσω ένα άλλο πεδίο να <CommonViewFields>. Χρησιμοποιώντας την τεχνική του Σολομώντα, Είχα πάρει ένα όνομα στήλης, όπως "XYZ_x0020_Project_x0020_Due_x00".

Σκέφτηκα να τον εαυτό μου, Αυτό είναι σαφώς ένα περικομμένο όνομα. Πήγα μπροστά και un-περικοπεί με όχι επιτυχία. Θα χρησιμοποιηθεί τελικά το φαινομενικά περικομμένο όνομα και αυτό έλυσα.

Άκρη επιδομάτων: Όταν δούλευα με το CQWP, Εάν θα προστεθεί μια κακή εσωτερικό όνομα να <CommonViewFields>, το CQWP θα μου πείτε ότι το ερώτημα είχε δεν επέστρεψε αποτελέσματα. Αλλά, Αν έχω προσθέσει έναν τύπο δεδομένων στο πεδίο Όνομα, αυτό θα επιστρέψει ένα αποτέλεσμα. Προσθέτοντας τα δεδομένα τύπου πραγματικά συγκαλύπτεται ένα πρόβλημα δεδομένου ότι ήμουν ένα ανύπαρκτο πεδίο αναφοράς. Θα μπορούσα να το προσθέσω, αλλά όταν προσπάθησα να εμφανίσετε την τιμή, Θα ήθελα πάντα να πάρετε ένα κενό.

Αυτό κρύβει το σφάλμα:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

Αυτό μάσκα το σφάλμα:

<CommonViewFields>Due_x0020_Date,Ημερομηνία/ώρα;</CommonViewfields>

</Τέλος>