Sharepoint-Es 54 PDF
Sharepoint-Es 54 PDF
Sharepoint-Es 54 PDF
#sharepoint
Tabla de contenido
Acerca de 1
Observaciones 2
Versiones 2
Examples 3
Introducción 3
Requerimientos 3
Instalación 3
Configuración 3
Configuración de la granja 4
Estampación 6
Identificador de correlación 6
Introducción 7
Observaciones 7
Examples 7
SharePoint 2013: acceso a los datos del servicio de perfiles de usuario utilizando JSOM en 7
Examples 9
SharePoint 2016 21
SharePoint 2013 21
Introducción 23
Examples 23
Observaciones 31
Sintaxis de XMLHttpRequest 31
Examples 32
Código de ejemplo 33
Sintaxis 42
Parámetros 42
Observaciones 43
Examples 43
Realizar una acción cuando un cuadro de diálogo está cerrado 43
Observaciones 45
Examples 46
Creación de carpetas 47
Ejemplo básico 49
Observaciones 51
Examples 51
Lista. Recuperar todas las propiedades de todas las listas en un sitio web 53
Los grupos Recuperar todos los usuarios en todos los grupos de una colección de sitios 59
Acción personalizada. Agregar una acción personalizada de usuario para los elementos de la 62
Acción personalizada. Agregar una acción personalizada del usuario a las acciones del siti 63
Capítulo 10: Trabajar con Managed Server Side Object Model (plena confianza) 67
Observaciones 67
Jerarquía conceptual 67
Examples 67
Creditos 70
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: sharepoint
It is an unofficial and free sharepoint ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official sharepoint.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to info@zzzprojects.com
https://riptutorial.com/es/home 1
Capítulo 1: Empezando con sharepoint
Observaciones
SharePoint puede referirse a uno o más productos de la familia Microsoft SharePoint.
• SharePoint Foundation : esta fue la tecnología subyacente para todos los sitios de
SharePoint y ya no está disponible para SharePoint 2016
• SharePoint Server : esta es la versión local de SharePoint. Puede implementar uno o más
servidores de SharePoint. Ofrece características adicionales sobre SharePoint Foundation,
como las capacidades de BI, Enterprise Content Management y más
• SharePoint Online : versión de SharePoint basada en la nube. El cliente no necesita
preocuparse por la infraestructura del servidor o la escalabilidad.
Office 365 es una oferta separada de Microsoft que incluye el servicio de SharePoint Online,
aunque no todos los planes son compatibles con todas las características de SharePoint.
Los siguientes enlaces brindan amplias comparaciones de funciones entre las versiones de
SharePoint disponibles:
Versiones
https://riptutorial.com/es/home 2
Examples
Instalación de SharePoint 2016 para Single Server Farm
Introducción
SharePoint 2016 es la versión 16 de la versión de la familia de productos de SharePoint. Se lanzó
el 4 de mayo de 2016. Este ejemplo cubre la instalación de SharePoint 2016 mediante la
configuración de la granja de servidores únicos. Esta configuración cubre los conceptos básicos
de la configuración de una granja de servidores de SharePoint sin la necesidad de tener varios
servidores. Tenga en cuenta que los escenarios cubiertos por una granja de servidores únicos
generalmente se limitan al desarrollo y los escenarios de producción muy pequeños.
Requerimientos
Antes de instalar SharePoint, se debe configurar el entorno básico. SharePoint almacena
documentos, así como metadatos, registros, aplicaciones personalizadas, personalizaciones y
mucho más. Asegúrese de tener suficiente espacio en disco y RAM disponible por encima de los
requisitos de la línea base.
Todos los demás requisitos previos pueden instalarse manualmente o realizarse utilizando el
instalador de requisitos previos de SharePoint incluido con la instalación de SharePoint.
Instalación
• Ejecute el instalador de prerrequisitos; Puede solicitar reiniciar el servidor antes de
continuar.
• Ejecute Setup.exe desde la instalación de SharePoint
• Ingrese la clave de licencia
• Aceptar el acuerdo de licencia.
• Seleccione "Completo" en la pestaña Tipo de servidor
• La instalación debe completarse con éxito
• En la página completa, deje la casilla de verificación marcada junto al Asistente para
ejecutar la configuración del producto y haga clic en Cerrar
https://riptutorial.com/es/home 3
Configuración
Si continúa desde el paso anterior, el Asistente de configuración de productos de SharePoint
2016 se abrirá automáticamente. Si el cuadro no aparece o si está ejecutando la configuración
más adelante, abra el asistente de configuración yendo a Inicio -> Productos de SharePoint 2016
-> Asistente de configuración de productos de SharePoint 2016.
Configuración de la granja
Una vez que la aplicación web central, la base de datos de configuración y el administrador
central estén configurados, estará listo para configurar la granja de servidores para su uso para
los usuarios o el desarrollo. Puede marcar la ubicación del sitio de administración central o
acceder a ella a través de un acceso directo en la misma ubicación que el Asistente de
configuración del producto.
• Si está iniciando la configuración más adelante, haga clic en Inicio rápido -> Asistentes de
configuración -> Asistente de configuración de la comunidad
• Si está iniciando el Asistente desde el paso de instalación, haga clic en Iniciar el Asistente
• Elija si desea formar parte del programa de mejora del cliente haciendo clic en Sí o No
• En la página de configuración de la granja, seleccione la cuenta de dominio que ejecutará
https://riptutorial.com/es/home 4
los servicios en segundo plano en la granja.
○ Si bien esta cuenta puede ser la misma que la cuenta de la base de datos, también
puede ser diferente para la separación de roles y privilegios
○ Ingrese la cuenta como DOMINIO \ usuario
• Valide los servicios que desea que estén disponibles en la granja en la página Servicios
• Cree la primera colección de sitios en la granja (este paso se puede omitir y realizar más
adelante)
○ Ingrese el título, la descripción, la dirección web de la colección de sitios (por lo
general, el primer sitio se encuentra en la raíz del servidor) y la plantilla
○ La mayoría de las cosas se pueden cambiar (título, descripción) se pueden cambiar
fácilmente, pero otras como la URL de la web pueden requerir mucho más trabajo
para cambiar; la plantilla tampoco se puede revertir fácilmente, pero SharePoint
permite una gran cantidad de personalizaciones que le permiten tomar cualquier
plantilla base y convertir el estilo y el diseño del sitio
• Cuando hayas completado la configuración, haz clic en finalizar.
La granja de servidores y la primera colección de sitios ahora están configuradas para su uso.
SharePoint Framework es un enfoque moderno del lado del cliente para el desarrollo de
SharePoint dirigido inicialmente a SharePoint Online en Office 365. Las partes web creadas con
SharePoint Framework son un nuevo tipo de elemento web y pueden estar disponibles para
agregarse en las páginas existentes de SharePoint y Nuevas páginas de SharePoint.
Hay un gran ejemplo de "hola mundo" para este proceso alojado en " Construya su primera parte
web del lado del cliente de SharePoint" (Hola mundo parte 1) . Todos los ejemplos en
dev.office.com están disponibles para contribuciones de la comunidad a través de github.
yo @ microsoft / SharePoint
2. Edite el código generado en el editor de su elección. El soporte para Visual Studio Code es
fuerte en todas las plataformas.
un buen trago
https://riptutorial.com/es/home 5
El servicio de registro unificado de SharePoint (ULS) ofrece capacidades de soporte y depuración
tanto para operadores como para operadores. Comprender cómo leer los registros es un primer
paso importante para resolver problemas.
Estampación
Microsoft proporciona el Visor ULS para ayudar a leer los registros antiguos y los registros que
actualmente se están escribiendo mientras se ejecuta la granja. También puede filtrar y aplicar
formato a los registros para ayudar a reducir un problema.
Identificador de correlación
Para aislar un problema, es útil mirar solo un ID de correlación particular. Cada identificador de
correlación está asociado con una acción de solicitud o de extremo a extremo del sistema (como
un trabajador de tiempo). Si hay un problema con la representación de una página web, ubicar la
solicitud en los registros de ULS y aislarla a la identificación de correlación específica elimina todo
el ruido de los otros registros, lo que ayuda a identificar el problema.
Este código registrará el principio y el final de sus solicitudes, así como algunos datos de
rendimiento. La creación de su propio monitor personalizado que implementa
ISPScopedPerformanceMonitor le permite establecer el nivel de seguimiento o el tiempo máximo
de ejecución para un conjunto de códigos.
https://riptutorial.com/es/home 6
Capítulo 2: Aplicación de SharePoint
Introducción
Aplicación alojada de SharePoint
Observaciones
Referencia requerida del sitio: http://www.letsharepoint.com/what-is-user-information-list-in-
sharepoint-2013/
Examples
SharePoint 2013: acceso a los datos del servicio de perfiles de usuario
utilizando JSOM en SharePoint 2013
SharePoint 2013: acceso a los datos del servicio de perfiles de usuario utilizando JSOM en
SharePoint 2013
Perfil de usuario: tiene toda la información de las personas en una organización de manera
organizada. Muestra todas las propiedades como AccountName, FirstName, LastName,
WorkEmail, etc. relacionadas con un usuario.
Ya que vamos a trabajar utilizando JSOM, solo podemos realizar operaciones de 'Lectura' con la
excepción de que la imagen del perfil puede cambiarse utilizando JSOM (o CSOM o REST)
* El código del lado del servidor permite leer / escribir ambas operaciones.
https://riptutorial.com/es/home 7
Permite crear una aplicación alojada de SharePoint y recuperar información del usuario en esa
aplicación:
Inicie Visual Studio 2013 y seleccione "Aplicación para SharePoint 2013" desde Nuevo proyecto.
Después de seleccionar el tipo de proyecto anterior, aparece una ventana para conectarse al sitio
de SharePoint y seleccionar el tipo de aplicación que se implementará (ver la captura de pantalla
a continuación). Aquí proporcioné la URL del sitio del desarrollador de SharePoint en línea y
seleccioné la aplicación hospedada de SharePoint. Haga clic en Finalizar.
Aquí necesitamos agregar una biblioteca más para comenzar a trabajar con los perfiles de
usuario
https://riptutorial.com/es/home 8
Capítulo 3: Creación de una aplicación
alojada por el proveedor
Examples
Entorno de desarrollo de ajuste
Para comenzar con el desarrollo de aplicaciones necesitamos Visual Studio 2013 o una versión
superior. Descargue la última edición de la comunidad o expresión desde aquí>
https://www.visualstudio.com/products/free-developer-offers-vs
expandir la sección Office / SharePoint debería ver una opción para la aplicación como
se muestra a continuación.
https://riptutorial.com/es/home 9
Si la opción de aplicación no está disponible Cierre el VS, descargue e instale Microsoft Office
Developer Tools https://www.visualstudio.com/en-us/features/office-tools-vs.aspx
Una vez que tengamos Visual Studio, necesitamos un sitio para desarrolladores para implementar
aplicaciones en SharePoint. La forma más sencilla de obtener es> Registrarse para obtener una
cuenta de desarrollador de Office 365 gratuita en un año
https://profile.microsoft.com/RegSysProfileCenter/wizardnp.aspx?wizid=14b845d0-938c-45af-
https://riptutorial.com/es/home 10
b061ffb4d170&lcid=1033
Una vez que finalice el proceso de registro https://www.office.com/ center URL para toda su
aplicación
https://riptutorial.com/es/home 11
3. Ingrese la URL de su sitio de desarrollador creada en el paso anterior y seleccione
Hospedado por el proveedor
https://riptutorial.com/es/home 12
4. Se abrirá una ventana emergente que abrirá para iniciar sesión
5. El siguiente paso será en cuanto al tipo de aplicación, ya sea seleccionar MVC o Webform.
Estoy seleccionando MCV aquí
https://riptutorial.com/es/home 13
6. En ¿Cómo desea que su complemento se autentique?, Elija Usar el Servicio de control de
acceso de Windows Azure y haga clic en Finalizar
https://riptutorial.com/es/home 14
Vamos a empezar a codificar
1. Abra el sitio para desarrolladores de SharePoint y cree una lista para almacenar nuestros
artículos de noticias
https://riptutorial.com/es/home 15
3. Regrese a nuestra aplicación de SharePoint, abra el archivo AppManifest.xml, haga clic en
la pestaña de permisos y otorgue permiso de Lectura a la colección de sitios y guárdela.
4. Abrir HomeController desde la aplicación web, en mi caso es una aplicación MVC. Si está
creando una aplicación de formulario web, su código debería estar en la página
default.aspx.cs
[SharePointContextFilter]
public ActionResult Index()
{
User spUser = null;
clientContext.ExecuteQuery();
ViewBag.UserName = spUser.Title;
clientContext.ExecuteQuery();
if (newsItems != null)
{
foreach (var lstProductItem in newsItems)
{
https://riptutorial.com/es/home 16
newsList.Add(
new NewsList
{
Id = Convert.ToInt32(lstProductItem.Id.ToString()),
Title = lstProductItem.DisplayName.ToString(),
Summery = lstProductItem["Summery"].ToString(),
Thumbnail = lstProductItem["ThumbnailImageUrl"].ToString()
});
}
}
}
}
return View(newsList);
}
6. Ahora haga clic derecho en Índice y haga clic en Agregar vista. Luego haga clic en
Agregar
@model List<SharePointNewsAppWeb.Models.NewsList>
@{
ViewBag.Title = "My News - browse latest news";
}
<br />
@foreach (var item in Model)
{
<div class="row panel panel-default">
<div class="col-xs-3">
<a href="/home/aticle?ArticleId=@item.Id">
<img class="img-responsive" style="max-height:200px;max-width:100%;"
src="@item.Thumbnail" alt="@item.Title" />
</a>
</div>
<div class="col-xs-9 panel-default">
https://riptutorial.com/es/home 17
<div class="panel-heading">
<h4><a href="/home/aticle?ArticleId=@item.Id">@item.Title.ToUpper()</a></h4>
</div>
<div class="panel-body">
<p>@item.Summery</p>
</div>
</div>
9. Haga clic derecho en la carpeta Modelo de su solución y agregue un archivo de clase CS.
Añadir a continuación las clases de modelos
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace SharePointNewsAppWeb.Models
{
public class NewsApp
{
}
public class NewsList
{
}
}
10. Use la tecla F5 para implementar y ejecutar su complemento. Si ve una ventana de Alerta
de seguridad que le pide que confíe en el certificado de Localhost autofirmado, elija Sí.
Ya hemos creado la primera página que mostrará todos los artículos de noticias. Esta página
mostrará el artículo completo.
https://riptutorial.com/es/home 18
[SharePointContextFilter]
public ActionResult Aticle(int ArticleId)
{
User spUser = null;
clientContext.ExecuteQuery();
ViewBag.UserName = spUser.Title;
clientContext.ExecuteQuery();
if (newsItems != null)
{
foreach (var lstProductItem in newsItems)
{
article.Id = Convert.ToInt32(lstProductItem.Id.ToString());
article.Title = lstProductItem.DisplayName.ToString();
article.Body = lstProductItem["Body"].ToString();
}
}
}
}
return View(article);
}
2. De nuevo, haga clic derecho en Acción y cree una vista con el mismo nombre Nombre del
método de acción. En mi caso la vista se llamará Aticle
@model SharePointNewsAppWeb.Models.FullArticle
@{
ViewBag.Title = "Aticle";
}
<br />
<div class="panel panel-default">
<div class="panel-heading"><a style="font-size:20px;" href="/"><i class="glyphicon
glyphicon-chevron-left"></i> <i class="glyphicon glyphicon-home"></i> </a></div>
<div class="panel-heading"><h1 class="h2">@Model.Title.ToUpper()</h1></div>
https://riptutorial.com/es/home 19
<div class="panel-body">@Html.Raw(@Model.Body)</div>
</div>
Este es el código de la página del artículo completo que muestra el cuerpo del artículo de noticias
https://riptutorial.com/es/home 20
Capítulo 4: Principales lanzamientos
Examples
SharePoint 2016
SharePoint 2013
https://riptutorial.com/es/home 21
Número de compilación Descripción
15.0.4787.1000 MS16-004
https://riptutorial.com/es/home 22
Capítulo 5: Representación del lado del
cliente de SharePoint 2013
Introducción
Client Side Rendering (CSR) es un nuevo concepto que se introdujo en SharePoint 2013. Le
proporciona un mecanismo que le permite usar su propio render de salida para un conjunto de
controles que se alojan en una página de SharePoint (vistas de lista, formularios de lista y
resultados de búsqueda). La representación del sitio del cliente es simplemente cuando los datos
se transforman utilizando el cliente en lugar del servidor. Esto significa usar tecnologías del lado
del cliente, como HTML y JavaScript en lugar de tener que escribir XSLT.
Examples
Cambiar el hipervínculo de campos / columnas dentro de la vista de lista
usando CSR
El siguiente ejemplo muestra cómo cambiar el hipervínculo del campo " ID " y " Título (Título de
enlace) " dentro de la vista de lista mediante CSR.
(function () {
function registerRenderer() {
var ctxForm = {};
ctxForm.Templates = {};
ctxForm.Templates = {
Fields : {
'LinkTitle': { //------ Change Hyperlink of LinkTitle
View : function (ctx) {
var url = String.format('{0}?ID={1}',
"/sites/Lists/testlist/EditItem.aspx", ctx.CurrentItem.ID);
return String.format('<a href="{0}" onclick="EditItem2(event,
\'{0}\');return false;">{1}</a>', url, ctx.CurrentItem.Title);
}
},
'ID' : { //------ Change Hyperlink from ID field
View : function (ctx) {
var url = String.format('{0}?ID={1}',
"/IssueTracker/Lists/testlist/DisplayItem.aspx", ctx.CurrentItem.ID);
return String.format('<a href="{0}" onclick="EditItem2(event,
\'{0}\');return false;">{1}</a>', url, ctx.CurrentItem.ID);
}
},
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctxForm);
https://riptutorial.com/es/home 23
}
ExecuteOrDelayUntilScriptLoaded(registerRenderer, 'clienttemplates.js');
})();
Paso 2: Ir a las propiedades del elemento web de la Vista de lista y agregar la referencia de
JS Link a este archivo js recién creado (por ejemplo, ~ sitecollection / SiteAssets /
CSRCodeFile.js)
Este ejemplo muestra cómo ocultar un campo "Fecha" de la vista de lista de SharePoint mediante
CSR.
(function () {
function RemoveFields(ctx) {
var fieldName = "Date"; // here Date is field or column name to be hide
var header = document.querySelectorAll("[displayname=" + fieldName +
"]")[0].parentNode;
var index = [].slice.call(header.parentNode.children).indexOf(header) + 1;
header.style.display = "none";
for (var i = 0, cells = document.querySelectorAll("td:nth-child(" + index + ")"); i <
cells.length; i++) {
cells[i].style.display = "none";
}
}
function registerRenderer() {
var ctxForm = {};
ctxForm.Templates = {};
ctxForm.OnPostRender = RemoveFields;
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctxForm);
}
ExecuteOrDelayUntilScriptLoaded(registerRenderer, 'clienttemplates.js');
})();
Supongamos que tenemos una lista de SharePoint y tiene cuatro campos a saber. Título, nombre
completo, correo electrónico, número de teléfono móvil, etc. Ahora, si desea aplicar la validación
personalizada en el formulario Nuevo / Editar elemento, puede hacerlo fácilmente con el código
CSR. Lo siguiente mencionado puede validar las siguientes condiciones en los formularios:
https://riptutorial.com/es/home 24
Paso: 1 Cree un archivo JS, diga CSRValidations.js y copie y pegue el siguiente código en el
archivo JS
(function () {
// Create object that have the context information about the field that we want to
change it's output render
var fieldContext = {};
fieldContext.Templates = {};
fieldContext.Templates.Fields = {
// Apply the new rendering for Email field on New and Edit Forms
"Title": {
"NewForm": titleFieldTemplate,
"EditForm": titleFieldTemplate
},
"Full_x0020_Name": {
"NewForm": fullNameFieldTemplate,
"EditForm": fullNameFieldTemplate
},
"Email": {
"NewForm": emailFieldTemplate,
"EditForm": emailFieldTemplate
},
"Mobile_x0020_Phone": {
"NewForm": mobilePhoneFieldTemplate,
"EditForm": mobilePhoneFieldTemplate
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(fieldContext);
})();
formCtx.registerClientValidator(formCtx.fieldName, validators);
https://riptutorial.com/es/home 25
var isError = false;
var errorMessage = "";
if (value.trim() == "") {
isError = true;
errorMessage = "You must specify a value for this required field.";
}else if (!emailRejex.test(value) && value.trim()) {
isError = true;
errorMessage = "Please enter valid email address";
}
};
};
// Add error message to spnError element under the input field element
function emailOnError(error) {
document.getElementById("spnEmailError").innerHTML = "<span role='alert'>" +
error.errorMessage + "</span>";
}
formCtx.registerGetValueCallback(formCtx.fieldName, function () {
return document.getElementById('inpTitle').value;
});
formCtx.registerClientValidator(formCtx.fieldName, validators);
if (value.trim() == "") {
isError = true;
https://riptutorial.com/es/home 26
errorMessage = "You must specify a value for this required field.";
}
};
};
// Add error message to spnError element under the input field element
function titleOnError(error) {
document.getElementById("spnTitleError").innerHTML = "<span role='alert'>" +
error.errorMessage + "</span>";
}
formCtx.registerClientValidator(formCtx.fieldName, validators);
if (value.trim() == "") {
isError = true;
errorMessage = "You must specify a value for this required field.";
}else if (!mobilePhoneRejex.test(value) && value.trim()) {
isError = true;
errorMessage = "Please enter valid mobile phone number";
}
};
https://riptutorial.com/es/home 27
};
// Add error message to spnError element under the input field element
function mobilePhoneOnError(error) {
document.getElementById("spnMobilePhoneError").innerHTML = "<span role='alert'>" +
error.errorMessage + "</span>";
}
formCtx.registerClientValidator(formCtx.fieldName, validators);
if (value.trim() == "") {
isError = true;
errorMessage = "You must specify a value for this required field.";
}else if (!fullNameRejex.test(value) && value.trim()) {
isError = true;
errorMessage = "Please enter valid name";
}
};
};
// Add error message to spnError element under the input field element
function fullNameOnError(error) {
document.getElementById("spnFullNameError").innerHTML = "<span role='alert'>" +
error.errorMessage + "</span>";
}
https://riptutorial.com/es/home 28
Paso: 2 Abrir el formulario de nuevo elemento en el navegador. Editar página y editar parte web.
Paso: 3 En las propiedades del elemento Web, vaya a Misceláneos -> Enlace JS -> pegue la ruta
de acceso de su archivo js (por ejemplo, ~ sitecollection / SiteAssets / CSRValidations.js)
Hay casos en los que necesita cambiar el Nombre para mostrar de la columna en una vista de
lista
Por supuesto, puede cambiar el nombre de visualización de una columna cambiando el título de
la columna en la configuración de la lista, pero si desea mantenerlo como está en la configuración
de la lista y solo modificarlo en la vista previa de la página, entonces puede hacerlo usando CSR
(Client-Side-Rendering).
(function () {
function preTaskFormRenderer(renderCtx) {
modifyColumns(renderCtx);
}
function modifyColumns(renderCtx)
{
var arrayLength= renderCtx.ListSchema.Field.length;
for (var i=0; i < arrayLength;i++)
{
if(renderCtx.ListSchema.Field[i].DisplayName == 'IsApprovalNeeded')
{
var newTitle= "Is Approval Needed?";
var linkTitleField = renderCtx.ListSchema.Field[i];
linkTitleField.DisplayName = newTitle;
}
}
}
function registerRenderer()
{
var ctxForm = {};
ctxForm.Templates = {};
ctxForm.OnPreRender = preTaskFormRenderer;
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctxForm);
}
ExecuteOrDelayUntilScriptLoaded(registerRenderer, 'clienttemplates.js');
})();
https://riptutorial.com/es/home 29
Lea Representación del lado del cliente de SharePoint 2013 en línea:
https://riptutorial.com/es/sharepoint/topic/8317/representacion-del-lado-del-cliente-de-sharepoint-
2013
https://riptutorial.com/es/home 30
Capítulo 6: Servicios de descanso
Observaciones
Las URL de puntos finales anteriores deben ir precedidas por http://server/site donde el server
representa el nombre del servidor, y el site representa el nombre o la ruta al sitio específico.
URL de ejemplo
SharePoint 2010 SharePoint 2013
para ...
Obteniendo una
/_vti_bin/ListData.svc/ListName /_api/lists('ListGuid')
lista:
Obteniendo un
/_vti_bin/ListData.svc/ListName(1) /_api/lists('ListGuid')/items(1)
artículo:
Obteniendo una
(no equivalente) /_api/web
web:
A pesar de las diferencias en el acceso a las listas y los elementos de la lista, trabajar con esos
resultados es muy similar en ambas versiones.
Tenga en cuenta que el servicio ListData.svc todavía está disponible en SharePoint 2013 por
compatibilidad con versiones anteriores.
Sintaxis de XMLHttpRequest
https://riptutorial.com/es/home 31
jQuery AJAX Sintaxis
$.ajax({
method: verb,
url: url,
headers: { "Content-Type":"application/json" },
data: data
});
Para obtener más detalles sobre el envío de solicitudes a través de AJAX, consulte la
documentación de JavaScript AJAX .
Examples
Trabajando con listas
Este ejemplo muestra cómo recuperar todos los elementos de la lista e iterarlos. Puede utilizar el
parámetro top para solicitar un cierto número de resultados. También puede usar el parámetro
select para seleccionar ciertos campos ( $select=id, Title, uri ).
JavaScript
function GetListItems(){
$.ajax({
url: "../_api/web/lists/getbytitle('List Title')/items?$top=50"
contentType: "application/json;odata=verbose",
method: "GET",
headers: { "accept": "application/json;odata=verbose" },
success: function (data) {
$.each(data.d.results, function(index,item){
//use item to access the individual list item
console.log(item.Id);
});
},
error: function(error){
console.log(error);
}
});
}
JavaScript
function GetListItem(){
$.ajax({
url: "../_api/web/lists/getbytitle('List Title')/items(1)",
contentType: "application/json;odata=verbose",
method: "GET",
headers: { "accept": "application/json;odata=verbose" },
https://riptutorial.com/es/home 32
success: function (data) {
console.log(data.d.Id);
},
error: function(error){
console.log(error);
}
});
}
Probablemente no sea el ejemplo más serio, pero el problema aquí sigue siendo válido. Cuando
utiliza la solicitud habitual para recuperar valores de la lista de SharePoint, para el Type del animal,
solo obtendrá un campo llamado TypeId en la respuesta JSON. Para expandir estos elementos en
una sola llamada AJAX, se requiere un marcado adicional en los parámetros de la URL.
Este ejemplo se aplica a más que solo columnas de búsqueda también. Cuando utiliza las
columnas People/Groups , también son esencialmente solo búsquedas, por lo que puede extraer
elementos como Title , EMail y otros fácilmente.
Código de ejemplo
https://riptutorial.com/es/home 33
Nota importante : cuando defina los campos que desea recuperar de las columnas de búsqueda,
debe prefijar el nombre del campo con el nombre del campo de búsqueda en la tabla original. Por
ejemplo, si desea recuperar el atributo NumLegs de la columna de búsqueda, debe escribir
Type/NumLegs .
JavaScript
function executeRequest(url,method,callback,headers,payload)
{
if (typeof headers == 'undefined'){
headers = {};
}
headers["Accept"] = "application/json;odata=verbose";
if(method == "POST") {
headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
}
var ajaxOptions =
{
url: url,
type: method,
contentType: "application/json;odata=verbose",
headers: headers,
success: function (data) { callback(data) }
};
if(method == "POST") {
ajaxOptions.data = JSON.stringify(payload);
}
return $.ajax(ajaxOptions);
}
// Setup the ajax request by setting all of the arguments to the getItems function
function getAnimals() {
var url = "https://www.contoso.com/sites/animals";
var listTitle = "AnimalListing";
var selectFields = [
"Title",
"Age",
"Value",
"Type/Title",
"Type/NumLegs"
];
var expandFields = [
"Type/Title",
https://riptutorial.com/es/home 34
"Type/NumLegs"
];
// Callback function
// data: returns the data given by SharePoint
function processAnimals(data) {
console.log(data);
// Process data here
}
Este ejemplo asume que su columna de búsqueda se llama MultiLookupColumnName y que desea
configurar su campo de búsqueda múltiple para buscar los elementos con ID 1 y 2.
2010
2013
https://riptutorial.com/es/home 35
});
$.ajax({
method: 'POST',
url: url,
contentType: 'application/json',
headers: {
"X-HTTP-Method" : "MERGE",
"If-Match" : "*"
},
data: data
});
Usando XMLHttpRequest
2010
2013
1. Use el parámetro $skip=n para omitir las primeras n entradas de acuerdo con el parámetro
https://riptutorial.com/es/home 36
$orderby
2. Use el parámetro $top=n para devolver las entradas top n acuerdo con los parámetros
$orderby y $skip .
Este ejemplo muestra cómo recuperar una ID de un elemento recién creado mediante la API
REST de SharePoint.
Nota :
newItemBody : este será el cuerpo de su solicitud para agregar un nuevo elemento a la lista.
https://riptutorial.com/es/home 37
"content-Type": "application/json;odata=verbose"
}
});
}
CreateListItemWithDetails(listName, newItemBody)
.then(function(data){
//success callback
var NewlyCreatedItemId = data.d.ID;
}, function(data){
//failure callback
});
Crear
Para realizar una operación Crear a través de REST, debe realizar las siguientes acciones:
Cree una solicitud HTTP utilizando el verbo POST . Utilice la URL de servicio de la lista a la que
desea agregar una entidad como objetivo para el POST. Establezca el tipo de contenido en
application/json . Serialice los objetos JSON que representan sus nuevos elementos de lista
como una cadena y agregue este valor al ejemplo de JavaScript del cuerpo de la solicitud:
$.ajax({
url: webUrl + "/_vti_bin/listdata.svc/" + listName,
type: "POST",
processData: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers: {
"Accept": "application/json;odata=verbose"
},
success: function (data) {
success(data.d);
},
error: function (data) {
failure(data.responseJSON.error);
}
});
}
Uso
var taskProperties = {
'TaskName': 'Order Approval',
'AssignedToId': 12
};
createListItem('https://contoso.sharepoint.com/project/','Tasks',taskProperties,function(task){
https://riptutorial.com/es/home 38
},
function(error){
console.log(JSON.stringify(error));
}
);
Leer
Para realizar una operación de lectura a través de REST, debe realizar las siguientes acciones:
Crea una solicitud HTTP usando el verbo GET . Utilice la URL de servicio del elemento de la lista a
la que desea agregar una entidad como objetivo para el GET. Establezca el tipo de contenido en
application/json . Ejemplo de JavaScript:
Uso
getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
console.log(taskItem.TaskName);
},
function(error){
console.log(JSON.stringify(error));
}
);
Actualizar
Para actualizar una entidad existente, debe realizar las siguientes acciones:
Cree una solicitud HTTP utilizando el verbo POST . Agregue un encabezado X-HTTP-Method con un
valor de MERGE . Use la URL de servicio del elemento de la lista que desea actualizar como objetivo
para la POST. Agregue un encabezado If-Match con un valor del ETag original de la entidad, o *.
Ejemplo de JavaScript:
$.ajax({
type: 'POST',
https://riptutorial.com/es/home 39
url: item.__metadata.uri,
contentType: 'application/json',
processData: false,
headers: {
"Accept": "application/json;odata=verbose",
"X-HTTP-Method": "MERGE",
"If-Match": item.__metadata.etag
},
data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
success: function (data) {
success(data);
},
error: function (data) {
failure(data);
}
});
},
function(error){
failure(error);
});
Uso
var taskProperties = {
'TaskName': 'Approval',
'AssignedToId': 12
};
updateListItem('https://contoso.sharepoint.com/project/','Tasks',2,taskProperties,function(item){
Borrar
Cree una solicitud HTTP utilizando el verbo POST . Agregue un encabezado X-HTTP-Method con un
valor de DELETE . Utilice la URL de servicio del elemento de la lista que desea actualizar como
objetivo para la POST. Agregue un encabezado If-Match con un valor de la etiqueta original de la
entidad. Ejemplo de JavaScript:
https://riptutorial.com/es/home 40
"X-Http-Method": "DELETE",
"If-Match": item.__metadata.etag
},
success: function (data) {
success();
},
error: function (data) {
failure(data.responseJSON.error);
}
});
},
function (error) {
failure(error);
});
}
Uso
deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
console.log('Task has been deleted');
},
function(error){
console.log(JSON.stringify(error));
}
);
https://riptutorial.com/es/home 41
Capítulo 7: Trabajar con cuadros de diálogo
modales con JavaScript
Sintaxis
• var options = SP.UI. $ create_DialogOptions ();
Parámetros
https://riptutorial.com/es/home 42
opciones de propiedad Descripción
Observaciones
El espacio de nombres SP.UI.ModalDialog se introdujo en el Modelo de objetos de JavaScript con
SharePoint 2010, y está disponible en versiones posteriores de SharePoint 2013, Office365 y
2016.
Examples
Realizar una acción cuando un cuadro de diálogo está cerrado
SP.SOD.executeOrDelayUntilScriptLoaded(showDialog,"sp.js");
function showDialog(){
var options = SP.UI.$create_DialogOptions();
options.url = "/mySite/lists/myList/NewForm.aspx";
options.dialogReturnValueCallback = myCallBackFunction;
SP.UI.ModalDialog.showModalDialog(options);
function myCallBackFunction(result,data){
switch(result){
case SP.UI.DialogResult.invalid:
alert("The dialog result was invalid");
break;
case SP.UI.DialogResult.cancel:
alert("You clicked cancel or close");
break;
case SP.UI.DialogResult.OK:
alert("You clicked OK, creating an item in the list.");
break;
}
}
}
SP.SOD.executeOrDelayUntilScriptLoaded(showDialog,"sp.js");
function showDialog(){
https://riptutorial.com/es/home 43
SP.UI.ModalDialog.showModalDialog(
{ url: "/org/it/web/wik/Lists/ExampleCode/DispForm.aspx?ID=6" }
);
}
SP.SOD.executeOrDelayUntilScriptLoaded(showDialog,"sp.js");
function showDialog(){
var dialogOptions = SP.UI.$create_DialogOptions();
dialogOptions.title = "Your Title Here!";
var dummyElement = document.createElement("div");
dummyElement.style.textAlign = "center";
dummyElement.appendChild(document.createElement("br"));
dummyElement.appendChild(document.createTextNode("Some beautifully crafted text."));
dummyElement.appendChild(document.createElement("br"));
dialogOptions.html = dummyElement;
SP.UI.ModalDialog.showModalDialog(dialogOptions);
}
https://riptutorial.com/es/home 44
Capítulo 8: Trabajar con JavaScript Client
Object Model (JSOM)
Observaciones
Fondo
El modelo de objetos de JavaScript se introdujo en SharePoint 2010. Expone en el lado del cliente
muchos de los objetos a los que anteriormente solo se podía acceder a través del código del lado
del servidor o a través de servicios web dedicados.
En SharePoint 2010, puede usar la propiedad "enlace de contenido" de un elemento web del
Editor de contenido para vincularlo a un archivo HTML que contiene su script incrustado.
Referencia de objeto
Los constructores, los métodos y las propiedades de todos los objetos encontrados en el espacio
de nombres del SP se documentan en la referencia del modelo de objeto del cliente de SharePoint
2013 aquí .
La referencia del modelo de objeto cliente de SharePoint 2010 JavaScript está disponible aquí .
Alternativas
Las alternativas del lado del cliente al JSOM incluyen servicios web de SharePoint, puntos finales
https://riptutorial.com/es/home 45
REST y el modelo de objeto de cliente .NET .
Examples
Obtención de tipos de contenido de la biblioteca utilizando el nombre de la
biblioteca
function getContentTypes(site_url,name_of_the_library){
var ctx = new SP.ClientContext(site_url);
var web = ctx.get_web();
list = web.get_lists().getByTitle(name_of_the_library);
// You can include any property of the SP.ContentType object (sp.js), for this example we
are just getting the name
ctx.load(list,'ContentTypes.Include(Name)');
ctx.executeQueryAsync(onQuerySucceeded, onQueryFailed);
}
while (contentTypesEnumerator.moveNext()) {
var contentType = contentTypesEnumerator.get_current();
alert(contentType.get_name());
}
}
function deleteItem(id){
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var item = list.getItemById(id);
item.deleteObject();
clientContext.executeQueryAsync(function(){
alert("Item #"+id+" deleted successfully!");
},function(sender,args){alert(args.get_message());});
}
https://riptutorial.com/es/home 46
function createItem(){
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var newItem = list.addItem();
newItem.set_item("Title","Example Title");
newItem.update();
clientContext.load(newItem); // only needed to retrieve info from newly created item
clientContext.executeQueryAsync(function(){
var itemId = newItem.get_item("ID");
alert("Item #"+itemId+" Created Successfully!");
},function(sender,args){
alert(args.get_message());
});
}
Tenga en cuenta que no necesita pasar el nuevo objeto de elemento al método de load del
contexto del cliente para crear el elemento. Ese paso solo es necesario si desea recuperar
cualquiera de los valores de campo del elemento desde el servidor.
Creación de carpetas
Crear una carpeta es similar a agregar un elemento a una lista. La diferencia es que primero se
debe crear un objeto ListItemCreationInformation y establecer su propiedad underlyingObjectType
en SP.FileSystemObjectType.folder , y su propiedad leafName en el nombre deseado de la nueva
carpeta.
El objeto se pasa luego como un parámetro en el método addItem en la biblioteca para crear la
carpeta.
// ...
var itemCreateInfo = new SP.ListItemCreationInformation();
itemCreateInfo.set_underlyingObjectType(SP.FileSystemObjectType.folder);
itemCreateInfo.set_leafName(folderName);
var newItem = list.addItem(itemCreateInfo);
// ...
El ejemplo completo a continuación crea una carpeta con un nombre basado en la marca de
tiempo actual, y luego abre esa carpeta en un diálogo modal.
https://riptutorial.com/es/home 47
SP.SOD.executeOrDelayUntilScriptLoaded(createFolder,"sp.js");
function createFolder(){
var now = new Date();
var timeStamp = now.getYear() + "-" + (now.getMonth()+1) + "-" + now.getDate()
+ "T" + now.getHours()+"_"+now.getMinutes()+"
"+now.getSeconds()+"_"+now.getMilliseconds();
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("Library Title");
var itemCreateInfo = new SP.ListItemCreationInformation();
itemCreateInfo.set_underlyingObjectType(SP.FileSystemObjectType.folder);
itemCreateInfo.set_leafName(timeStamp);
var newItem = list.addItem(itemCreateInfo);
newItem.update();
clientContext.load(newItem);
var rootFolder = list.get_rootFolder(); // Note: use a list's root folder to determine its
server relative URL
clientContext.load(rootFolder);
clientContext.executeQueryAsync(function(){
var itemId = newItem.get_item("ID");
var name = newItem.get_item("FileLeafRef");
SP.UI.ModalDialog.showModalDialog(
{
title: "Folder \""+name+"\" (#"+itemId+") Created Successfully!",
url: rootFolder.get_serverRelativeUrl() + "/" + name
}
);
},function(sender,args){alert(args.get_message());});
}
SP.SOD.executeOrDelayUntilScriptLoaded(showUserInfo,"sp.js");
function showUserInfo(){
var clientContext = new SP.ClientContext();
var user = clientContext.get_web().get_currentUser();
clientContext.load(user);
clientContext.executeQueryAsync(function(){
var details = "ID: "+user.get_id()+"\n"+
"Title: "+user.get_title()+"\n"+
"Login: "+user.get_loginName()+"\n"+
"Email: "+user.get_email();
alert(details);
},function(sender,args){alert(args.get_message());})
}
SP.SOD.executeOrDelayUntilScriptLoaded(myFunction,"sp.js");
function myFunction(){
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var item = list.getItemById(1); // get item with ID == 1
clientContext.load(item);
clientContext.executeQueryAsync(
https://riptutorial.com/es/home 48
function(){ // onSuccess
var title = item.get_item("Title");
alert(title);
},
function(sender,args){ // onError
alert(args.get_message());
}
);
}
Ejemplo básico
Usar la set_viewXml método del objeto SP.CamlQuery para especificar una consulta CAML para
recuperar elementos.
SP.SOD.executeOrDelayUntilScriptLoaded(showListItems,"core.js");
function showListItems(){
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(
"<View><Query>" +
"<Where>" +
"<Eq><FieldRef Name=\"Title\"/><Value Type=\"Text\">Value</Value></Eq>" +
"</Where>" +
"<OrderBy><FieldRef Name=\"Modified\" Ascending=\"FALSE\"/></OrderBy>" +
"</Query>"+
//"<RowLimit>5000</RowLimit>" +
"</View>");
var items = list.getItems(camlQuery);
clientContext.load(items);
clientContext.executeQueryAsync(function(){
var itemArray = [];
var itemEnumerator = items.getEnumerator();
while(itemEnumerator.moveNext()){
var item = itemEnumerator.get_current();
var id = item.get_item("ID");
var title = item.get_item("Title");
itemArray.push(id + ": " + title);
}
alert("ID: Title\n"+itemArray.join("\n"));
},function(sender,args){alert(args.get_message());});
}
https://riptutorial.com/es/home 49
recuperar la posición actual, luego use ese valor como el parámetro en el método
set_listItemCollectionPosition un objeto set_listItemCollectionPosition para recuperar el
siguiente lote de resultados.
SP.SOD.executeOrDelayUntilScriptLoaded(showListItems,"sp.js");
function showListItems(){
var itemArray = [];
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var viewXml =
"<View><Query>" +
"<OrderBy><FieldRef Name=\"Modified\" Ascending=\"FALSE\"/></OrderBy>" +
"</Query>"+
"<RowLimit>1</RowLimit>" +
"</View>";
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(viewXml);
var items = list.getItems(camlQuery);
clientContext.load(items);
clientContext.executeQueryAsync(loadResults,showError);
function loadResults(){
var resultsFound = false;
var itemEnumerator = items.getEnumerator();
while(itemEnumerator.moveNext()){
var item = itemEnumerator.get_current();
var id = item.get_item("ID");
var title = item.get_item("Title");
itemArray.push(id + ": " + title);
}
var pos = items.get_listItemCollectionPosition();// <- get position
if(pos !== null){ // <-- position is null when no more results are returned
if(confirm("Results so far: \nID: Title\n"+itemArray.join("\n"))){
camlQuery = new SP.CamlQuery();
camlQuery.set_listItemCollectionPosition(pos);// <- set position for next
batch
camlQuery.set_viewXml(viewXml);
items = list.getItems(camlQuery);
clientContext.load(items);
clientContext.executeQueryAsync(loadResults,showError);
}
}else{
alert("Total Results: \nID: Title\n"+itemArray.join("\n")); // <- display when no
more results
}
}
function showError(sender,args){
alert(args.get_message());
}
}
https://riptutorial.com/es/home 50
Capítulo 9: Trabajar con Managed Client Side
Model Model (CSOM)
Observaciones
• La mayoría de los ejemplos son de MSDN .
• Para crear una aplicación cliente administrada .NET que use el modelo de objeto cliente,
debe establecer referencias a dos DLL de biblioteca de cliente:
Microsoft.SharePoint.Client.dll y Microsoft.SharePoint.Client.Runtime.dll. Puede encontrarlo
en la carpeta% Archivos de programa% \ Archivos comunes \ Microsoft Shared \ web server
extensions \ 16 \ ISAPI o en su servidor de SharePoint.
• o Instale el paquete NuGet de Microsoft.SharePointOnline.CSOM, que funcionará "en prem"
así como en SP O365.
• La mayoría de las propiedades son propiedades de valor y antes de acceder a ellas debe
llamar explícitamente a clientContext.Load () y clientContext.ExecuteQuery (). Más
información aquí: Call Load y ExecuteQuery antes de acceder a las propiedades de Value
Examples
Hola mundo (obteniendo titulo del sitio)
Todas las versiones de SharePoint se basan en Sitios (SPSite (SSOM) o Sitio (CSOM)) y Webs
(SPWeb (SSOM) o Web (CSOM)). Un sitio no se representa en la interfaz de usuario, aunque
contiene metadatos y características que se aplican a sus hijos. Una web es el bloque de
construcción básico que representa una IU para el usuario que accede al sitio. Todos los sitios
tienen una raíz web que contiene información y / o metadatos como bibliotecas de documentos.
Este ejemplo muestra una llamada básica para obtener la web ubicada en el servidor MyServer en
los sites ruta virtual.
using System;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveWebsite
{
static void Main()
{
// This is the URL of the target web we are interested in.
string siteUrl = "http://MyServer/sites/MySiteCollection";
// The client context is allows us to queue up requests for the server
// Note that the context can only ask questions about the site it is created for
using (ClientContext clientContext = new ClientContext(siteUrl))
{
// To make it easier to read the code, pull the target web
// context off of the client context and store in a variable
Web oWebsite = clientContext.Web;
https://riptutorial.com/es/home 51
// Tell the client context we want to request information about the
// Web from the server
clientContext.Load(oWebsite);
// After we are done creating the batch of information we need from the sever,
// request the data from SharePoint
clientContext.ExecuteQuery();
// Print the results of the query
Console.WriteLine("Title: {0} Description: {1}", oWebsite.Title,
oWebsite.Description);
}
}
}
}
https://riptutorial.com/es/home 52
WebCreationInformation webCreateInfo = new WebCreationInformation();
webCreateInfo.Description = blogDescription;
webCreateInfo.Language = blogLanguage;
webCreateInfo.Title = blogTitle;
webCreateInfo.Url = blogUrl;
webCreateInfo.UseSamePermissionsAsParentSite = blogPermissions;
webCreateInfo.WebTemplate = webTemplate;
clientContext.Load(
oNewWebsite,
website => website.ServerRelativeUrl,
website => website.Created);
clientContext.ExecuteQuery();
Lista. Recuperar todas las propiedades de todas las listas en un sitio web
clientContext.Load(collList);
clientContext.ExecuteQuery();
clientContext.Load(
collList,
lists => lists.Include(
list => list.Title,
list => list.Id));
clientContext.ExecuteQuery();
https://riptutorial.com/es/home 53
ClientContext clientContext = new ClientContext(siteUrl);
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
clientContext.ExecuteQuery();
clientContext.ExecuteQuery();
if (regEx.IsMatch(oField.InternalName))
{
Console.WriteLine("List: {0} \n\t Field Title: {1} \n\t Field Internal Name: {2}",
https://riptutorial.com/es/home 54
List oList = oWebsite.Lists.Add(listCreationInfo);
clientContext.ExecuteQuery();
true, AddFieldOptions.DefaultValue);
fieldNumber.Update();
clientContext.ExecuteQuery();
oList.DeleteObject();
clientContext.ExecuteQuery();
clientContext.Load(collListItem);
clientContext.ExecuteQuery();
https://riptutorial.com/es/home 55
Este ejemplo muestra cómo recuperar elementos del servidor y obtener propiedades más
detalladas de cada elemento de la lista. De forma predeterminada, el servidor solo devolverá la
cantidad mínima de datos para representar el objeto. Es responsabilidad de la persona que llama
solicitar información adicional del servidor.
// The first line of this request indicates the list item collection to load from the server
// The second line uses a lambda to request that from the server
// also include additional properties in the response
// The third though fifth lines are the properties being requested from the server
clientContext.Load(collListItem,
items => items.Include(
item => item.Id,
item => item.DisplayName,
item => item.HasUniqueRoleAssignments));
clientContext.ExecuteQuery();
clientContext.Load(
collListItem,
items => items.Take(5).Include(
item => item["Title"],
item => item["Body"]));
clientContext.ExecuteQuery();
https://riptutorial.com/es/home 56
clientContext.Load(
collList,
lists => lists.Where(
list => list.Hidden == false).Include(
list => list.Title,
list => list.Items.Take(10)));
clientContext.ExecuteQuery();
while (true)
{
CamlQuery camlQuery = new CamlQuery();
camlQuery.ListItemCollectionPosition = itemPosition;
clientContext.Load(collListItem);
clientContext.ExecuteQuery();
itemPosition = collListItem.ListItemCollectionPosition;
if (itemPosition == null)
{
break;
}
https://riptutorial.com/es/home 57
Al crear un nuevo elemento de la lista, sus campos se pueden configurar utilizando una sintaxis
similar a las matrices de cadenas. Tenga en cuenta que estos campos no se crean sobre la
marcha y están definidos por el esquema de la lista. Estos campos (o columnas) deben existir en
el servidor, de lo contrario la creación fallará. Todos los elementos de la lista tendrán el campo
Título. Algunas listas pueden tener campos obligatorios que deben completarse antes de que el
elemento se publique en la lista.
En este ejemplo, la lista está utilizando la plantilla de Anuncios. Además del campo de título, la
lista incluye el campo Cuerpo que mostrará el contenido del anuncio en la lista.
oListItem.Update();
clientContext.ExecuteQuery();
oListItem.Update();
clientContext.ExecuteQuery();
oListItem.DeleteObject();
clientContext.ExecuteQuery();
clientContext.Load(collUser);
https://riptutorial.com/es/home 58
clientContext.ExecuteQuery();
clientContext.Load(collUser,
users => users.Include(
user => user.Title,
user => user.LoginName,
user => user.Email));
clientContext.ExecuteQuery();
Los grupos Recuperar todos los usuarios en todos los grupos de una
colección de sitios
clientContext.Load(collGroup);
clientContext.Load(collGroup,
groups => groups.Include(
group => group.Users));
clientContext.ExecuteQuery();
https://riptutorial.com/es/home 59
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection ");
GroupCollection collGroup = clientContext.Web.SiteGroups;
Group oGroup = collGroup.GetById(6);
clientContext.ExecuteQuery();
roleCreationInfo.BasePermissions = permissions;
roleCreationInfo.Description = "A new role with create and manage alerts permission";
roleCreationInfo.Name = "Create and Manage Alerts";
roleCreationInfo.Order = 4;
clientContext.ExecuteQuery();
clientContext.Load(oUser,
user => user.Title);
clientContext.Load(oRoleDefinition,
https://riptutorial.com/es/home 60
role => role.Name);
clientContext.ExecuteQuery();
collRoleDefinitionBinding.Add(oRoleDefinition);
oWebsite.RoleAssignments.Add(oGroup, collRoleDefinitionBinding);
clientContext.Load(oGroup,
group => group.Title);
clientContext.Load(oRoleDefinition,
role => role.Name);
clientContext.ExecuteQuery();
oList.BreakRoleInheritance(true, false);
oContext.ExecuteQuery();
int itemId = 3;
ListItem oListItem = oList.Items.GetById(itemId);
https://riptutorial.com/es/home 61
oListItem.BreakRoleInheritance(false);
collRoleDefinitionBinding.Add(clientContext.Web.RoleDefinitions.GetByType(RoleType.Reader));
oListItem.RoleAssignments.Add(oUser, collRoleDefinitionBinding);
clientContext.ExecuteQuery();
int itemId = 2;
ListItem oListItem = oList.Items.GetById(itemId);
oListItem.BreakRoleInheritance(true);
collRollDefinitionBinding.Add(clientContext.Web.RoleDefinitions.GetByType(RoleType.Reader));
oListItem.RoleAssignments.Add(oUser, collRollDefinitionBinding);
clientContext.ExecuteQuery();
clientContext.Load(oList,
list => list.UserCustomActions);
https://riptutorial.com/es/home 62
clientContext.ExecuteQuery();
clientContext.Load(collUserCustomAction,
userCustomActions => userCustomActions.Include(
userCustomAction => userCustomAction.Title));
clientContext.ExecuteQuery();
clientContext.ExecuteQuery();
}
}
oUserCustomAction.Location = "Microsoft.SharePoint.StandardMenu";
oUserCustomAction.Group = "SiteActions";
oUserCustomAction.Sequence = 101;
oUserCustomAction.Title = "Website User Custom Action";
oUserCustomAction.Description = "This description appears on the Site Actions menu.";
oUserCustomAction.Url = urlWebsite + @"/_layouts/MyPage.aspx";
oUserCustomAction.Update();
clientContext.Load(oWebsite,
webSite => webSite.UserCustomActions);
clientContext.ExecuteQuery();
https://riptutorial.com/es/home 63
ClientContext oClientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
File oFile = oClientContext.Web.GetFileByServerRelativeUrl("Default.aspx");
LimitedWebPartManager limitedWebPartManager =
oFile.GetLimitedWebPartManager(PersonalizationScope.Shared);
oClientContext.Load(limitedWebPartManager.WebParts,
wps => wps.Include(
wp => wp.WebPart.Title));
oClientContext.ExecuteQuery();
if (limitedWebPartManager.WebParts.Count == 0)
{
throw new Exception("No Web Parts on this page.");
}
oWebPartDefinition.SaveWebPartChanges();
oClientContext.ExecuteQuery();
https://riptutorial.com/es/home 64
oClientContext.ExecuteQuery();
oClientContext.Load(limitedWebPartManager.WebParts);
oClientContext.ExecuteQuery();
if (limitedWebPartManager.WebParts.Count == 0)
{
throw new Exception("No Web Parts to delete.");
}
webPartDefinition.DeleteWebPart();
oClientContext.ExecuteQuery();
Si bien el código del lado del servidor puede ejecutarse con privilegios elevados, no existe un
método equivalente para elevar los privilegios en el código del lado del cliente (por razones de
seguridad obvias). Como alternativa, puede especificar credenciales para emular el acceso de un
usuario específico o cuenta de servicio.
using System.Net;
using Microsoft.SharePoint.Client;
// here the default network credentials relate to the identity of the account
// running the App Pool of your web application.
CredentialCache credCache = new CredentialCache();
cc.Add(new Uri(ctx.Web.Url), "NTLM", CredentialCache.DefaultNetworkCredentials);
ctx.Credentials = credCache;
https://riptutorial.com/es/home 65
ctx.AuthenticationMode = ClientAuthentication.Default;
ctx.ExecuteQuery();
Tenga en cuenta que otorgar privilegios elevados a la cuenta del grupo de aplicaciones en
SharePoint es contrario a las mejores prácticas, pero que en su lugar se podrían usar las
credenciales de red relevantes.
Lea Trabajar con Managed Client Side Model Model (CSOM) en línea:
https://riptutorial.com/es/sharepoint/topic/2679/trabajar-con-managed-client-side-model-model--
csom-
https://riptutorial.com/es/home 66
Capítulo 10: Trabajar con Managed Server
Side Object Model (plena confianza)
Observaciones
Jerarquía conceptual
En la jerarquía conceptual de SharePoint, las colecciones de sitios contienen sitios , que a su
vez contienen listas . Una colección de sitios ( SPSite ) no tiene una IU explícita, pero siempre
contiene un sitio de nivel raíz (accesible a través de la propiedad RootWeb ) y posiblemente
subsitios adicionales bajo ese sitio raíz. Un sitio o web ( SPWeb ) tiene una IU y contiene listas /
bibliotecas de documentos ( SPList ), páginas con elementos web y elementos / documentos (
SPListItem ).
Examples
Hola Mundo (obteniendo el título del sitio)
2013
SharePoint 2013 y las versiones más nuevas son solo de 64 bits, por lo que el ensamblaje /
programa también debe compilarse para un procesador de 64 bits.
using System;
using Microsoft.SharePoint;
namespace StackOverflow
{
class Samples
{
https://riptutorial.com/es/home 67
static void Main()
{
using (SPSite site = new SPSite("http://server/sites/siteCollection"))
using (SPWeb web = site.OpenWeb())
{
Console.WriteLine("Title: {0} Description: {1}", web.Title, web.Description);
}
}
}
}
$wacoll = get-spwebapplication
foreach($wa in $wacoll){
if($wa.IsAdministrationWebApplication -eq $false){
foreach($site in $wa.Sites){
foreach($web in $site.AllWebs){
# your code here
$web.Dispose()
}
$site.Dispose()
}
}
}
// It is always better and faster to query list items with GetItems method with
// empty SPQuery object than to use Items property
SPListItemCollection items = list.GetItems(new SPQuery());
foreach (SPListItem item in items)
{
// Do some operation with item
}
}
https://riptutorial.com/es/home 68
do
{
SPListItemCollection items = list.GetItems(query);
foreach (SPListItem item in items)
{
// Do some operation with item
}
Al crear un nuevo elemento de la lista, sus campos se pueden configurar utilizando una sintaxis
similar a las matrices de cadenas. Tenga en cuenta que estos campos no se crean sobre la
marcha y están definidos por el esquema de la lista. Estos campos (o columnas) deben existir en
el servidor, de lo contrario la creación fallará. Todos los elementos de la lista tendrán el campo
Título. Algunas listas pueden tener campos obligatorios que deben completarse antes de que el
elemento se publique en la lista.
En este ejemplo, la lista está utilizando la plantilla de Anuncios. Además del campo de título, la
lista incluye el campo Cuerpo que mostrará el contenido del anuncio en la lista.
Lea Trabajar con Managed Server Side Object Model (plena confianza) en línea:
https://riptutorial.com/es/sharepoint/topic/7543/trabajar-con-managed-server-side-object-model--
plena-confianza-
https://riptutorial.com/es/home 69
Creditos
S.
Capítulos Contributors
No
Empezando con Community, Marco, Ryan Gregg, Thriggle, Tom Resing, Zach
1
sharepoint Koehne
Aplicación de
2 Sunil sahu
SharePoint
Creación de una
3 aplicación alojada vinayak hegde
por el proveedor
Principales
4 jjr2527, MikhailSP
lanzamientos
Representación del
5 lado del cliente de Rohit Waghela, Yayati
SharePoint 2013
Trabajar con
JavaScript Client
8 Thriggle, yngrdyn
Object Model
(JSOM)
Trabajar con
Managed Client Side InvoiceGuy, Lukáš Nešpor, MikhailSP, RamenChef, Thriggle,
9
Model Model Zach Koehne
(CSOM)
Trabajar con
Managed Server
10 Lukáš Nešpor, Thriggle
Side Object Model
(plena confianza)
https://riptutorial.com/es/home 70