Con la versión 12 de Domino, tenemos disponible una nueva clase “(Notes)QueryResultsProcess“ (de la cual ya hablamos en este blog) que nos ayuda a mezclar resultados que provengan de distintos tipos de búsquedas (No solo DQL) e incluso ¡distintas NSFs! presentándolos al usuario como JSON (O como una Vista “especial” si estamos en la versión 12.0.1).
El uso de esta clase en un agente web de los de toda la vida nos permite de una manera clara, sencilla y sin dependencia de librerías de terceros obtener los datos almacenados en nuestro servidor Domino en formato JSON.
'Seguro que ya sabéis para qué son estas variables
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.Currentdatabase
'Es necesario definir la variable que almacenará la Query
Dim domQuery As NotesDominoQuery
Set domQuery = db.Createdominoquery()
'Ahora definimos el NotesQueryResultsProcessor.
Dim nqr As NotesQueryResultsProcessor
Set nqr = db.Createqueryresultsprocessor()
'Definimos los criterios de búsqueda
Call nqr.Adddominoquery(domQuery, "Precio > 1000", "PrecioMasDeMil")
'Alternativamente, se puede utilizar una NotesDocumentCollection ya definida,
que puede provenir de un Search, FTSearch, etc ...
'Call nqr.Addcollection(col, "PrecioMasDeMil")
'Uno de los grandes añadidos de la clase NotesQueryResultsProcessor es la
posibilidad de ordenar los resultados de búsqueda.
'Para ello, es necesario definir las columnas por las que se ordenará la
'colección, además de los datos que queremos que se devuelvan en el JSON
Call nqr.Addcolumn("Numero", "Numero", |@TextToNumber("Numero")|, SORT_DESCENDING, False, False)
Call nqr.Addcolumn("Precio, "Precio", |@TextToNumber("Precio")|, SORT_UNORDERED, False, False)
'Para poder devolver los datos en formato JSON, utilizamos la función "Stringify",
'disponible en la clase NotesJSONNavigator
Dim jsonNavigator As NotesJSONNavigator
Set jsonNavigator = nqr.Executetojson()
'Cabeceras que ayudan al navegador a formatear y no cachear la respuesta
Print |Content-Type: text/json|
Print |Cache-Control: no-cache|
Print jsonNavigator.Stringify()
Podemos ir mas allá y parametrizarlo mediante una QueryString o utilizar un XAgent para extenderlo y/o integrar lógica ya definida en Xpages.
Lo que sí que está claro es que aunque sea una llamada que devuelva JSON, no cumple los estándares REST. Para eso hay mejores formas de definir servicios REST o, directamente, utilizar la nueva tecnología Domino REST API, que estará disponible para la versión 12.0.1 del servidor Domino.
Comentarios