Pregunta

Creé una plantilla de sitio a partir de un sitio básico que a su vez se creó a partir de la plantilla de sitio de grupo básica.Ahora me gustaría usar esa plantilla de sitio fuera de la web donde se creó para que actúe como una plantilla global.

Por ejemplo, me gustaría que mi nueva plantilla aparezca en la lista de plantillas que se muestra en get-spwebtemplate o copiar un archivo 'stp' a un sistema de prueba y crear un nuevo sitio allí usando la plantilla incluida.

¿Es eso posible?Si no es posible, ¿cuál es la forma correcta de compartir puntos?

(Usando SharePoint 2010 Servidor RC)

¡gracias!

¿Fue útil?

Solución

Creo que ahora sé cómo hacer esto.Agradecería que alguien opinara sobre la forma "correcta" de hacer esto, porque este proceso parece un poco extraño.

Con la interfaz de usuario, puede crear una web utilizando una plantilla estándar dentro de una colección de sitios y personalizarla agregándole piezas y eliminando cosas que no desee.Luego, con la web seleccionada que desea usar como plantilla, como administrador, elija 'Configuración del sitio' y luego 'Guardar sitio como plantilla' donde podrá asignar un nombre de archivo, un nombre descriptivo y un texto descriptivo.Al hacer esto, evidentemente se coloca la plantilla resultante en la base de datos y se crea una referencia que se encuentra en la lista "Soluciones" también en la página Configuración del sitio.(Si visita la lista de 'Soluciones', puede hacer clic en la plantilla y guardarla como un archivo local que luego puede cargarse en otro sitio, lo cual resulta útil).

Es razonablemente bien conocido que puedes crear un sitio en código agregando una nueva web a la colección web de un sitio, que se ve así:

SPWeb newWeb = subSite.Webs.Add(
                "pathtoweb",
                "Title of New Web",
                "Web Description",
                1033,
                template, 
                false, false);

donde 'plantilla' aquí es una instancia de SPWebTemplate que desea utilizar.Si se trata de una de las plantillas estándar, normalmente puede hacer referencia a ella por su nombre, por ejemplo, "STS#0", etc., en lugar de la referencia de plantilla que se muestra aquí.La pregunta es:cómo obtener el nombre de la plantilla personalizada para usarla en la llamada API.

Para encontrar el 'nombre' de la plantilla que se creó, utilicé PowerShell así

$x = get-spsite http://machine/managedpath/sitecollectionname
$x.GetWebTemplates(1033) 

que descartó todas las plantillas en este subsitio e incluyó mis plantillas modificadas al final con nombres no muy convenientes que copié y pegué en mi programa C#.

No exploré todas las permutaciones aquí, por ejemplo, probablemente puedas usar el nombre basado en GUID en la llamada .Add, pero para ser explícito, esta es la secuencia que funcionó para mí.Me encantaría saber que esto es una locura. Por favor, háganme saber algo más elegante:

        // or any of the other hundred ways to do this...
        SPSite s = new SPSite("your url here");
        SPWeb subSite = s.RootWeb;

        // 1033 is the locale id for English
        SPWebTemplateCollection wtc = s.GetWebTemplates(1033);
        // use the name for the index
        SPWebTemplate template = 
            wtc["{8925048C-DF71-guidguidguidguid}#MyTemplate"];

        SPWeb newWeb = subSite.Webs.Add(
                "pathtoweb",
                "Title of New Web",
                "Web Description",
                1033,
                template, 
                false, false);

¡Compartir Punto!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top