Esta semana me han pedido que al acceder a la página principal de un SharePoint saliera un recordatorio respecto a la normativa corporativa de la empresa. Querían que saliera todas las veces que accedían al portal.
Solución rápida: Un alert de JavaScript.
Como era de esperar a los tres días les ha parecido que no era una buena solución y que les parecía mejor la solución que les propuse inicialmente, que sólo saliera la primera vez que accedes al espacio y que quedase registrado cuando has dicho que estabas de acuerdo con los términos legales de la empresa.
Para ello, lo primero que he creado ha sido una lista llamada AceptaciónCondiciones. En ella, sólo utilizo la columna Título, Creado por y Creado. Todas ellas propias del tipo de contenido Elemento, propio de una lista personalizada.
Y en la página de inicio he incluido el siguiente script en un editor de secuencias de comando:
<script type="text/javascript">
$( document ).ready(function(){
var usuario = $().SPServices.SPGetCurrentUser({
fieldNames: ["FirstName", "LastName", "UserName"],
debug: false
});
$().SPServices({
operation: "GetListItems",
async: false,
listName: "AceptacionCondiciones",
CAMLViewFields: "<ViewFields><FieldRef Name='Title' /></ViewFields>",
CAMLQuery: "<Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>"+usuario.UserName+"</Value></Eq></Where></Query>",
completefunc: function (xData, Status) {
if($(xData.responseXML).SPFilterNode("z:row").length == 0){
//No está y lo incluyo
alert('Advertencia: Este acceso sólo está disponible para usuarios autorizados por personal del servicio. Cualquier intento de acceso no autorizado quedará registrado para su posterior análisis. La documentación aquí alojada es para uso profesional, no permitiéndose su divulgación. ');
AddListItem(usuario.UserName);
}
}
});
})
function AddListItem(TitleField) {
$().SPServices({
operation: "UpdateListItems",
async: false,
batchCmd: "New",
listName: "AceptacionCondiciones",
valuepairs: [["Title", TitleField]],
completefunc: function (xData, Status) {
}
});
}
</script>
Lo que hace este Script es guardar en una variable llamada "usuario" el Nombre, Apellido y Nombre de usuario. Luego hago una llamada a la lista AceptacionCondiciones a través de una Query de CALM preguntando si existe algún elemento que en la columna Title (Nombre interno de la columna Título) que contenga el valor de UserName del usuario de DA que esta accediendo a la página principal.
En caso de que no este, hago saltar un Alert de JavaScript con el texto deseado y tras ello incluyo en la lista el usuario, a través de la función AddListItem, completando el campo Titulo con el UserName y como los campos "Creado" y "Creado por" toman automáticamente el nombre a mostrar del usuario y el momento en que hemos aceptado las condiciones.
Ya tendríamos nuestra lista de aceptación de condiciones pedida.
Sí nos hubieran pedido que esta aceptación saliera en cualquier página de nuestro sitio, bastaría con incluir este Script en la página maestra e incluir la línea que indica donde esta la lista, por si estamos en un sitio diferente al de la lista:
webURL: "https://URL del sitio donde esta mi lista de Aceptación de condiciones",
Quedando algo como:
$().SPServices({
webURL: "https://URL del sitio donde esta mi lista de Aceptación de condiciones",
operation: "GetListItems",
async: false,
Y el resto igual.
Posiblemente con .Net se pudiera hacer algo más completo, pero seguro que también sería más costoso en tiempo.
Mostrando entradas con la etiqueta SPServices. Mostrar todas las entradas
Mostrando entradas con la etiqueta SPServices. Mostrar todas las entradas
sábado, 24 de febrero de 2018
Aceptación de condiciones con SharePoint
Etiquetas:
2013,
JavaScript,
JQuery,
Lista,
Página Maestra,
Sharepoint,
Sharepoint 2013,
Sharepoint Designer,
SPServices,
Vista de Datos,
XSL
sábado, 28 de enero de 2017
Campos dependientes en SharePoint
Esta es una entrada que tal vez debiera haber hecho hace mucho tiempo. Una de las limitaciones que más sorprende a la gente cuando se acerca por primera vez a SharePoint, es el hecho de que no se pueda establecer una dependencia entre los campos de tipo elección.
La verdad es que es una gran limitación en el día a día. Por suerte, como siempre tenemos JQuery y en este caso en concreto SPServices.
Uno de mis clientes nos solicito un formulario para etiquetar empresas que ofrecían servicios, clasificables en tres niveles, niveles dependientes entre ellos.
Lo primero que tuve que hacer es una lista con los valores del primer nivel:
Tras ello, crearemos otra lista, que tendrá un campo de tipo texto, donde irán los valores del segundo nivel, y un campo de tipo búsqueda que buscará sobre la columna de la primera lista:
Y de manera análoga el para el tercer nivel:
Estas serán nuestras tres listas maestras, desde donde podremos gestionar los valores de los tres campos de elección. Lo siguiente que haremos será crear tres columnas de tipo búsqueda, en la lista donde queremos utilizar los valores:
Cada una de las columnas, buscará sobre la lista correspondiente a su nivel, eligiendo al crearlas, si son de valor único o múltiple selección (en mi caso los tres son de múltiple selección):
Y por último tendremos que añadir en los formularios que deseemos que se comporten como campos dependientes el siguiente código:
<script type="text/javascript">
$(document).ready(function() {
$().SPServices.SPCascadeDropdowns({
relationshipList: "Nivel 2",
relationshipListParentColumn: "Nivel",
relationshipListChildColumn: "Title",
parentColumn: "Listado1",
childColumn: "Listado2";
});
$().SPServices.SPCascadeDropdowns({
relationshipList: "Nivel 3",
relationshipListParentColumn: "Nivel",
relationshipListChildColumn: "Title",
parentColumn: "Listado2",
childColumn: "Listado3";
});
});
</script>
En la primera llamada a SPCascadeDropdowns, lo que se indica es la lista sobre la que se va a filtrar el valor, en nuestro caso Nivel 2, que es donde se encuentra la relación. Lo siguiente que diremos es sobre que columna de esa lista va a actuar como Padre y cual sobre Hijo, es decir, cual la que nos permite seleccionar el valor para filtrar y sobre cual se filtran los valores. Por último, indicaremos sobre que campos de nuestra actual lista actuará.
En la segunda llamada a SPCascadeDropdowns, se repite la operación pero sobre el segundo y tercer valor.
Quedando un funcionamiento de campos dependientes:
NOTAS:
Fuentes:
http://sympmarc.github.io/SPServices/value-added/SPCascadeDropdowns.html
http://www.bentedder.com/sharepoint-sketches-spservices-cascading-dropdowns/
La verdad es que es una gran limitación en el día a día. Por suerte, como siempre tenemos JQuery y en este caso en concreto SPServices.
Uno de mis clientes nos solicito un formulario para etiquetar empresas que ofrecían servicios, clasificables en tres niveles, niveles dependientes entre ellos.
Lo primero que tuve que hacer es una lista con los valores del primer nivel:
Tras ello, crearemos otra lista, que tendrá un campo de tipo texto, donde irán los valores del segundo nivel, y un campo de tipo búsqueda que buscará sobre la columna de la primera lista:
Y de manera análoga el para el tercer nivel:
Estas serán nuestras tres listas maestras, desde donde podremos gestionar los valores de los tres campos de elección. Lo siguiente que haremos será crear tres columnas de tipo búsqueda, en la lista donde queremos utilizar los valores:
Y por último tendremos que añadir en los formularios que deseemos que se comporten como campos dependientes el siguiente código:
<script type="text/javascript">
$(document).ready(function() {
$().SPServices.SPCascadeDropdowns({
relationshipList: "Nivel 2",
relationshipListParentColumn: "Nivel",
relationshipListChildColumn: "Title",
parentColumn: "Listado1",
childColumn: "Listado2";
});
$().SPServices.SPCascadeDropdowns({
relationshipList: "Nivel 3",
relationshipListParentColumn: "Nivel",
relationshipListChildColumn: "Title",
parentColumn: "Listado2",
childColumn: "Listado3";
});
});
</script>
En la primera llamada a SPCascadeDropdowns, lo que se indica es la lista sobre la que se va a filtrar el valor, en nuestro caso Nivel 2, que es donde se encuentra la relación. Lo siguiente que diremos es sobre que columna de esa lista va a actuar como Padre y cual sobre Hijo, es decir, cual la que nos permite seleccionar el valor para filtrar y sobre cual se filtran los valores. Por último, indicaremos sobre que campos de nuestra actual lista actuará.
En la segunda llamada a SPCascadeDropdowns, se repite la operación pero sobre el segundo y tercer valor.
Quedando un funcionamiento de campos dependientes:
NOTAS:
- Se da por supuesto, que en la página maestra o bien en el código de la página, se encuentra una referencia a JQuery y otra SPServices.
- Los líneas relationshipListParentColumn: "Nivel" y relationshipListChildColumn: "Title", hacen referencia al Nombre interno del campo en la lista donde hacemos la relación "Nivel 2". De hecho, en mi ejemplo, como utilizo SharePoint en Español, el nombre externo es Título y no Title.
- Las segundas referencias parentColumn: "Listado1" y childColumn: "Listado2", hacen referencia al nombre a mostrar de la columna y no al nombre interno.
- En esta última referencia, si un campo es obligatorio, la referencia debe ser de la forma: parentColumn: "Listado1 Campo requerido", que corresponde con el title en HTML del campo. En mi caso es Campo requerido, porque mi SharePoint esta en Español, si lo tenéis en Inglés, posiblemente sea Requiered field.
Fuentes:
http://sympmarc.github.io/SPServices/value-added/SPCascadeDropdowns.html
http://www.bentedder.com/sharepoint-sketches-spservices-cascading-dropdowns/
Etiquetas:
2007,
2010,
2013,
Filtro,
JavaScript,
JQuery,
Master Page,
Página Maestra,
Sharepoint,
Sharepoint 2010,
Sharepoint 2013,
Sharepoint Designer,
SPServices
Suscribirse a:
Entradas (Atom)