Szybkie & Łatwe: Zmień nazwę załadowany plik przy użyciu Model obiektowy programu SharePoint za pośrednictwem odbiorca zdarzeń

AKTUALIZACJA: To działa, ale istnieją znaczne ograniczenia, które są opisane w komentarzach. To jeszcze może być przydatne w niektórych przypadkach.

AKTUALIZACJA 2: W bieżącym projekcie, użytkownicy zawsze przesłać dokumenty. W rezultacie, Nie ja biegaæ w pewien problem gdzie MS Word pracuje i myśli, że plik został przemianowany na to. Popaść w problem, "plik został zmodyfikowany przez kogoś innego" i rozwiązać to poprzez flagę typu proste semafor. Użytkownik potrzebować wobec zmienić pole danych meta z domyślnej wartości na coś innego. Itemupdated() Odbiornik szuka prawidłowej wartości przed faktycznie świadczącego zmiany nazwy i od tamtego czasu, Nie miał żadnych problemów. Może się wahać.

Mam klienta wymóg, aby zmienić nazwę plików przesłane do określonej biblioteki dokumentów odpowiadają szczególnym konwencji nazewnictwa. API nie podać nazwy"()" Metoda. Zamiast tego, używamy "MoveTo(…)". Tutaj jest trochę minimalny kod, aby osiągnąć:

 publiczne zastępowanie nieważne ItemAdded(SPItemEventProperties właściwości)
        {
            SPFile f = właściwości.ListItem.File;

            f.moveTo(właściwości.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Trochę trudne, tylko jest "właściwości. ListItem.ParentList.RootFolder.Url". MoveTo() Metoda wymaga adresu URL. Że tłuczone ciąg punktów mnie do głównego folderu mój obecny biblioteki dokumentów. To pozwala mi uniknąć wszelkich twardych kodowania w moim przypadku odbiornika.

To jest bardziej użyteczne wersja, która działa tak samo, ale przypisuje nazwę pliku "Tytuł":

 publiczne zastępowanie nieważne ItemAdded(SPItemEventProperties właściwości)
        {
            DisableEventFiring();

            // Tytuł ten element można przypisać nazwę pliku, sam.
 // UWAGA: Ten przydział musi nastąpić przed możemy modyfikować sam plik.
 // Wywołanie aktualizacji() na SPFile wydaje unieważnia właściwości
 // jakimś sensie.  Aktualizacje "Tytuł" nie powiodło się, dopóki zmienić (i aktualizacja() Wywołanie)
 // zostały przeniesione z przodu zmiany do nazwy pliku.
            właściwości.ListItem["Tytuł"] = właściwości.ListItem.File.Name;

            właściwości.ListItem.Update();

            SPFile f = właściwości.ListItem.File;

            // Pobierz rozszerzenia pliku.  Potrzebujemy który później.
 ciąg spfileExt = Nowy FileInfo(f.Name).Rozszerzenie;

            // Zmień nazwę pliku elementu listy ID i rozszerzenie pliku służy do przechowywania
 // część jego nienaruszone.
            f.moveTo(właściwości.ListItem.ParentList.RootFolder.Url +
                "/" + właściwości.ListItem["IDENTYFIKATOR"] + spfileExt);

            // Zatwierdzić przeniesienie.
            f.Update();

            EnableEventFiring();
        }

4 przemyślenia na temat „Szybkie & Łatwe: Zmień nazwę załadowany plik przy użyciu Model obiektowy programu SharePoint za pośrednictwem odbiorca zdarzeń

  1. Bez nazwy
    Również, Spowoduje to z programu Word, on zwróci błąd i mówią, że plik nie istnieje. Nie jest opowiedział o nowy adres URL. Nie znalazłem jeszcze sposób wokół to.
  2. Paul Galvin
    Dzięki za wskazanie, że obecnie. Nie wiem, albo odpowiedź że jeden … będzie ciekawa zobaczyć, jak zarządza nim.
    RE: asynchroniczne & Przekierowanie
    Zastanawiam się, jeśli przeniesienie go do ItemAdding rozwiąże to. To jest wielka dziura.
    Podziękowania!
    –Paul
  3. Nadeem Mitha
    Ponieważ plik jest przenoszony asynchronicznie, istnieje możliwość przekierowywane do EditForm.aspx przed zobowiązała się przejście (i to jest zły). Zobaczysz, że to się dzieje, jeśli wprowadzisz kod spać przed wierszem MoveTo. Jeszcze nie zorientowali się, co można zrobić o tym problemie oprócz za pomocą formularza edycja dostosowane.

Odpowiedz

Twoj adres e-mail nie bedzie opublikowany. wymagane pola są zaznaczone *