top of page
Buscar

Optimiza el acceso a datos en NetSuite con SuiteQL

Utiliza SuiteQL para acceder a datos en NetSuite

En este artículo, te explicamos cómo SuiteQL facilita un acceso a los datos de NetSuite más rápido y más limpio, permite el debugging basado en el navegador y potencia scripts del lado del servidor confiables y listos para producción.

NetSuite alberga una gran cantidad de información crítica, pero acceder a ella de manera eficiente puede resultar desafiante a medida que aumentan las necesidades de reporting del negocio. Si bien las Búsquedas Guardadas (Saved Searches) siguen siendo una herramienta poderosa, a veces se vuelven complejas, difíciles de mantener y complicadas de optimizar.


SuiteQL ofrece una alternativa moderna a las Búsquedas Guardadas tradicionales de NetSuite. Es el motor de consultas basado en SQL de NetSuite, que permite a los desarrolladores recuperar datos utilizando la sintaxis SQL que ya conocen y respetar al mismo tiempo el modelo de seguridad y gobernanza de NetSuite.


Contenido


¿Por qué es importante SuiteQL en NetSuite?

  • Sintaxis SQL conocida que permite una adopción más rápida por parte de desarrolladores y analistas de datos.

  • Mejor rendimiento y legibilidad en comparación con las Búsquedas Guardadas complejas.

  • Control total sobre uniones (joins) y agregaciones.

  • Lógica de agrupación más clara que reduce las inconsistencias en los datos.



Ejecución de SuiteQL del lado del servidor

SuiteQL está diseñado para ejecutarse del lado del servidor en NetSuite. Aunque se puede acceder a él en escenarios limitados de debugging, el uso en producción siempre debe gestionarse a través de scripts del lado del servidor como Suitelets, RESTlets, Map/Reduce o scripts de User Event. Ten esto en cuenta al crear scripts que involucren la recuperación de datos de NetSuite. 

Si se requiere acceso a los resultados de SuiteQL del lado del cliente, una solución común es implementar un Suitelet que ejecute la consulta del lado del servidor y exponga los resultados al cliente.



Cuándo deberías usar SuiteQL

SuiteQL es ideal para uniones complejas, informes financieros y operativos, tableros de control (dashboards) sensibles al rendimiento, herramientas de administración interna, y para simplificar Búsquedas Guardadas demasiado complicadas. SuiteQL no reemplaza a las herramientas de reporte tradicionales de NetSuite, más bien las complementa. 

SuiteQL es la forma más directa de acceder a los datos de NetSuite y la más fácil de comprender para los desarrolladores que están acostumbrados a trabajar directamente con tecnología SQL.



Ejemplo: SuiteQL del lado del servidor con paginación (Suitelet)

El siguiente ejemplo muestra un patrón simplificado y seguro para producción para ejecutar SuiteQL con paginación en un Suitelet.


/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/ui/serverWidget', 'N/query'], (serverWidget, query) => {

    const COLUMNS = [
        { id: 'internalid', label: 'Internal ID', type: serverWidget.FieldType.TEXT },
        { id: 'tranid', label: 'Transaction Number', type: serverWidget.FieldType.TEXT },
        { id: 'trandate', label: 'Date', type: serverWidget.FieldType.DATE },
        { id: 'foreigntotal', label: 'Foreign Total', type: serverWidget.FieldType.CURRENCY }
    ];

    const onRequest = (context) => {
        try {
            const page = parseInt(context.request.parameters.page || 1, 10);
            const pageSize = 50;
            const offset = (page - 1) * pageSize;

            const sql = `
                SELECT
                    t.id            AS internalid,
                    t.tranid        AS tranid,
                    t.trandate      AS trandate,
                    t.foreigntotal  AS foreigntotal
                FROM
                    transaction t
                ORDER BY
                    t.trandate DESC
                OFFSET ${offset} ROWS
                FETCH NEXT ${pageSize} ROWS ONLY
            `;

            const results = query
                .runSuiteQL({ query: sql })
                .asMappedResults();

            const form = serverWidget.createForm({
                title: 'SuiteQL Results'
            });

            const sublist = form.addSublist({
                id: 'custpage_results',
                type: serverWidget.SublistType.LIST,
                label: 'Results'
            });

            COLUMNS.forEach(col => {
                sublist.addField({
                    id: col.id,
                    label: col.label,
                    type: col.type
                });
            });

            let line = 0;
            for (const row of results) {
                COLUMNS.forEach(col => {
                    const value = row[col.id];
                    if (value !== null && value !== undefined) {
                        sublist.setSublistValue({
                            id: col.id,
                            line,
                            value: String(value)
                        });
                    }
                });
                line++;
            }

            context.response.writePage(form);

        } catch (e) {
            log.error('SuiteQL SL Error', e);
            context.response.write(`
                <h3 style="color:red;">Error executing SuiteQL</h3>
                <pre>${e.message}</pre>
            `);
        }
    };

    return { onRequest };
});

Reflexiones finales

SuiteQL se ha convertido en una herramienta esencial para el desarrollo avanzado en NetSuite. Al combinar la sintaxis SQL con el modelo de seguridad nativo de NetSuite, permite a los desarrolladores trabajar más rápido, escribir una lógica más limpia y construir soluciones más fáciles de mantener.



Por Nahuel Fuentes, Technical Consultant

bottom of page