Obtener datos en JSON con Domino 12 y DQL (Una manera fácil)

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.

Mi charla en el próximo CollabSphere 2021: How to make a hackathon-winner HCL Domino Volt application"

Comentarios

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×