Γρήγορη & Εύκολη: Μετονομάστε το αρχείο χρησιμοποιώντας το μοντέλο αντικειμένου του 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();
        }

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

  1. Χωρίς όνομα
    Επίσης, Αν το κάνετε αυτό από μέσα από το Word, αυτό θα επιστρέψει ένα λάθος και να πω δεν υπάρχει το αρχείο. Δεν λέγεται σχετικά με τη νέα διεύθυνση URL. Ακόμα δεν έχω βρει έναν τρόπο γύρω από αυτό.
  2. Paul Galvin
    Ευχαριστώ για την επισήμανση. Δεν ξέρω ούτε μια απάντηση με εκείνη που … θα είναι ενδιαφέρον να δούμε πώς να το διαχειριστεί.
    RE: async & Ανακατεύθυνση
    Αναρωτιέμαι εάν η μετακίνηση σε ένα ItemAdding θα το λύσει. Αυτό είναι μια μεγάλη τρύπα.
    Ευχαριστώ!
    –Paul
  3. Nadeem Mitha
    Επειδή το αρχείο παίρνει μετακινηθεί ασύγχρονα, υπάρχει μια δυνατότητα να στραφούν προς EditForm.aspx πριν την κίνηση δεσμεύεται (και αυτό είναι κακό). Θα δείτε ότι αυτό θα συμβεί αν κάνετε τον κωδικό ύπνο πριν τη γραμμή του MoveTo. Ακόμα δεν έχω καταλάβει τι μπορεί να γίνει σχετικά με αυτό το πρόβλημα εκτός από χρησιμοποιώντας ένα προσαρμοσμένο Επεξεργασία φόρμας.

Αφήνω μια απάντηση

Η διεύθυνση email σας δεν θα δημοσιευθεί. τα απαιτούμενα πεδία είναι επισημασμένα *