Andrés desde Colombia me ha solicitado una funcionalidad que me parece muy interesante, ya que puede ser utilizada para muchas cosas.
La situación es la siguiente:
- Hay una planilla de Google en la cual están los datos con la calificación de los alumnos.
- Hay un Google Sites donde se necesita incorporar un formulario en el cual, el alumno, ingrese su código y al presionar un botón traiga las notas de él.
La planilla es similar a ésta.
De esta planilla voy a necesitar el ID para poder referenciarla desde el script en Google Sites (este valor lo pueden obtener de la url, es el parámetro key).
El Script
Lo que vamos a hacer es crear un script que contenga un formulario (UI) y ese script lo publicaremos como servicio.
Empezamos creando todos los elementos en la función doGet()
function doGet(e){
var app = UiApp.createApplication().setTitle('Consultar Calificaciones');
var grid = app.createGrid(1, 3);
grid.setWidget(0, 0, app.createLabel('Codigo de alumno:'));
grid.setWidget(0, 1, app.createTextBox().setName('codigo').setId('codigo'));
var button = app.createButton('Consultar Calificaciones');
var submitHandler = app.createServerClickHandler('submit');
submitHandler.addCallbackElement(grid);
button.addClickHandler(submitHandler);
grid.setWidget(0, 2, button);
// Create a vertical panel and add the grid to the panel
var panel = app.createFlowPanel();
panel.add(grid);
// Create label called statusLabel and make it invisible; add buttonPanel and statusLabel to the main display panel.
var resultTable = app.createFlexTable().setId('resultado');
resultTable.setBorderWidth(1);
resultTable.setText(0, 0, "Nombre");
resultTable.setText(0, 1, "Nota 1");
resultTable.setText(0, 2, "Nota 2");
resultTable.setText(0, 3, "Nota 3");
panel.add(resultTable);
app.add(panel);
return app;
}
La función que se va a ejecutar en el momento en que hagamos click es submit
function submit(e) {
var app = UiApp.getActiveApplication();
var table = app.getElementById('resultado');
var codigo = e.parameter.codigo;
var encontro = false;
//LEER los datos del documento
var doc = SpreadsheetApp.openById('0Asc5B6RPrg-_dFdXT0lTNlN1ZFlxS3dybzNKZGF5MGc').getActiveSheet();
var data = doc.getDataRange().getValues();
//RECORRER los datos hasta encontrar el codigo
for(var i = 1; i<data.length; i++ ){
if(data[i][0]==codigo){
table.setText(i, 0, data[i][1]);
table.setText(i, 1, data[i][2]);
table.setText(i, 2, data[i][3]);
table.setText(i, 3, data[i][4]);
encontro = true;
break;
}
}
if(!encontro){
app.add(app.createLabel('No se encontraron datos para el codigo '+codigo));
}
return app;
}
Para publicar la función debemos ir al menu Publicar -> Publicar como Servicio...
Allí se debe configurar como se muestra en la imagen para que cualquiera pueda realizar consulta (no necesita loguearse). Copiamos la URL (que es a partir de la cual vamos a acceder) y presionamos guardar.
Probamos la URL en el browser. Se debe ver el formulario creado. Mi ejemplo quedó asi.
Ahora, insertamos esta pantalla en el sitio que querramos y walá: