2008-10-08 15 views

Respuesta

7

El control de versiones no se realiza en el nivel del sitio, sino en el nivel de la lista.

Si desea control de versiones que se enciende en cada nueva biblioteca, que tendrá que o bien:

  • Use su propia plantilla de biblioteca (con el control de versiones activado)
  • Utilice la función + controlador de eventos para programáticamente activar el control de versiones en cada nueva lista

La forma más fácil es, probablemente, utilizar su propia plantilla. Para hacer esto, cree una nueva biblioteca de documentos, active el control de versiones, luego guarde esta lista como plantilla.

Al crear una nueva lista, podrá usar su plantilla y crear directamente una lista con control de versiones activado.

+0

La creación de una plantilla es extremadamente simple como solución. – CodeGrue

5

Por supuesto, puede crear su propia definición de sitio, pero esa no es probablemente la mejor solución. La creación de una plantilla de biblioteca personalizada también funcionará, pero si desea activar el control de versiones para las bibliotecas que crea una definición de sitio particular para usted, tendrá que pensar en otra cosa.

Hemos hecho esto para nuestra implementación de SharePoint. Decidimos que la mejor manera era crear una función de controlador de eventos y engraparla a todos los sitios para que, cuando se creara el sitio, se activara el control de versiones para todas las bibliotecas de documentos existentes. Por supuesto, las nuevas bibliotecas de documentos obtendrían las opciones de control de versiones que el usuario que las creó.

El problema que encontramos es que no hay controlador de eventos "ListCreating", por lo que no pudimos activar el control de versiones en ese momento. Por lo tanto, tratamos de poner el código dentro del controlador de eventos FeatureActivated, calculando que se activaría en la creación del sitio y luego se podrían cambiar todas las bibliotecas de documentos para tener activado el control de versiones. El problema es que este evento se disparó antes de que se crearan realmente las bibliotecas.

En su lugar, decidimos poner el código en el controlador de eventos "ItemAdding" y eliminarlo después de la primera vez que se ejecuta. Por lo tanto, la primera vez que un usuario agrega un elemento de la lista o un documento, activará el control de versiones para todas las bibliotecas de documentos en el sitio. De esta forma, nos aseguramos de que no haya forma de que un usuario agregue un documento a una biblioteca existente sin que se haya versionado. Además, cualquier biblioteca que se crea antes de que se agregue un elemento también tendrá versiones activadas por defecto.

Fue una solución algo peluda, pero nos ha funcionado muy bien. Aquí está el código que usamos:

public class SetVersioning : SPItemEventReceiver 
{ 
    public override void ItemAdding(SPItemEventProperties properties) 
    { 
     SPWeb CurrentWeb = properties.OpenWeb(); 
     foreach (SPDocumentLibrary doclib in CurrentWeb.GetListsOfType(SPBaseType.DocumentLibrary)) 
     { 
      doclib.EnableVersioning = true; 
      doclib.MajorVersionLimit = 8; 
      //doclib.EnableMinorVersions = true; 
      doclib.Update(); 
     } 
     //now get rid of the receiver 
     SPEventReceiverDefinitionCollection receivers = CurrentWeb.EventReceivers; 
     foreach (SPEventReceiverDefinition definition in receivers) 
     { 
      if (definition.Name.Equals(EVENT_RECEIVER_NAME)) 
      { 
       definition.Delete(); 
       break; 
      } 
     } 

     base.ItemAdding(properties); 
    } 
} 
Cuestiones relacionadas