Ràpida & Fàcil: Rebategi l'arxiu carregat mitjançant el Model d'objectes de SharePoint mitjançant un auricular d'esdeveniment

ACTUALITZACIÓ: Això treballa però existeixen importants limitacions que es descriuen en els comentaris. Això encara pot ser útil en alguns cirumstances.

ACTUALITZACIÓ 2: En el meu projecte actual, els usuaris sempre carregar documents. Com a resultat, No corro a un problema on MS Word està funcionant i pensa que l'arxiu fou rebatejada en això. Corria a un problema, "l'arxiu va ser modificat per una altra persona" i això resolia mitjançant una bandera de tipus simple semàfor. Els usuaris necessiten canviar un camp de dades meta del seu valor per defecte a una altra cosa. La itemupdated() receptor busca un valor vàlid allà abans d'efectuar en realitat el canvi de nom i des d'aleshores, No he tingut cap problema. El seu quilometratge pot variar.

Tinc un requeriment del client a canviar el nom dels arxius pujats a una biblioteca de documents específics per ajustar-se amb una convenció de nomenclatura particular. L'API no proporciona un "canvi de nom()" mètode. En canvi, utilitzem "MoveTo(…)". Heus aquí una mica de codi per aconseguir això mínima:

 públic invalidació buit ItemAdded(SPItemEventProperties Propietats)
        {
            SPFile f = propietats.ListItem.File;

            f.MoveTo(propietats.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

La mica complicat només és les propietats". ListItem.ParentList.RootFolder.Url". La MoveTo() mètode requereix una adreça URL. Que amassat amunt punts corda m a la carpeta arrel de la meva biblioteca de document actual. Això permet em d'evitar qualsevol codificació dura al meu auricular d'esdeveniment.

Aquesta és una versió més útil que fa el mateix, però assigna el nom del fitxer "Títol":

 públic invalidació buit ItemAdded(SPItemEventProperties Propietats)
        {
            DisableEventFiring();

            // Assignar el títol d'aquest element al nom d'arxiu propi.
 // NOTA: Aquesta tasca ha de tenir lloc abans que podem modificar l'arxiu mateix.
 // Anomenant actualització() en l'SPFile sembla invalidar les propietats de
 // una mica de sentit.  Actualitzacions al títol"" fracassat fins que canvieu (i actualització de() convocatòria)
 // s'han desplaçat davant el canvi de nom del fitxer.
            propietats.Element de llista[Títol""] = propietats.ListItem.File.Name;

            propietats.ListItem.Update();

            SPFile f = propietats.ListItem.File;

            // Aconseguir l'extensió del fitxer.  Necessitem que més tard.
 corda spfileExt = nou FileInfo(f.Name).Extensió;

            // Rebategi l'arxiu a ID de l'element llista i utilitzeu l'extensió per mantenir
 // aquesta part del que intacta.
            f.MoveTo(propietats.ListItem.ParentList.RootFolder.Url +
                "/" + propietats.Element de llista["ID"] + spfileExt);

            // Cometre el moviment.
            f.Update();

            EnableEventFiring();
        }

4 comentaris a "Ràpida & Fàcil: Rebategi l'arxiu carregat mitjançant el Model d'objectes de SharePoint mitjançant un auricular d'esdeveniment

  1. Sense nom
    També, Si fa això des de dins de la paraula, es tornarà un error i dir que l arxiu no existeix. No està explicat sobre l'URL nou. Jo encara no he trobat un camí al voltant d'aquest.
    Resposta
  2. Paul Galvin
    Gràcies per assenyalar que. No sé una resposta a aquell o … serà interessant veure com gestionar-lo.
    RE: asíncrona & redirecció
    Em pregunto si desplaçar-los a un ItemAdding de solucionar. Això és un gran forat.
    Gràcies!
    –Paul
    Resposta
  3. Nadeem Mitha
    Perquè el fitxer és mogut manera asíncrona, hi ha una possibilitat de sent redirigit a EditForm.aspx abans que el moviment s'ha compromès (i això és dolent). Ja veuràs que això passa si fas el codi dormir abans de la línia de MoveTo. Encara no he imaginat què es pot fer sobre aquest problema a part mitjançant un formulari personalitzat de editar.
    Resposta

Deixi una contestació a Nadeem Mitha Cancel resposta

no es publicarà la seva adreça de correu electrònic. Els camps necessaris estan marcats *