eu tenho esse script de cliente frappe, mas eu quero que ele chame a api apenas se o modal for aberto: function buscarRecomendacaoAuditoria(frm) {
    // Escuta clique em linha da child table
    frm.fields_dict.tab_achados.grid.wrapper.on('click', '.grid-row', function (e) {
        const row_name = $(this).attr('data-name');
        const grid_row = frm.doc.tab_achados.find(row => row.name === row_name);

        if (grid_row) {
            const seq_achado = grid_row.seq_achado;
            console.log("seq_achado da linha clicada:", seq_achado);

            const tbody = document.getElementById('rec-auditoria-tbody');
            tbody.innerHTML = ''; // limpa conteúdo anterior

            // Adiciona linha de carregamento
            const loadingRow = document.createElement('tr');
            loadingRow.classList.add('loading-row');
            loadingRow.innerHTML = '<td colspan="2">Carregando recomendações...</td>';
            tbody.appendChild(loadingRow);

            // Chamada ao back-end via neo.call
            neo.call({
                method: "sefaz_integracoes.sefaz_integracoes.doctype.dadosrnc.dadosrnc.get_recomendacoes_auditoria",
                args: {
                    seq_achado: seq_achado
                },
                callback: function (r) {

                    tbody.innerHTML = ''; // remove a linha de carregamento

                    if (Array.isArray(r.message) && r.message.length > 0) {
                        r.message.forEach(rec => {
                            const tr = document.createElement('tr');

                            const tdRecomendacao = document.createElement('td');
                            tdRecomendacao.textContent = rec.des_recomendacao_auditoria || '—';

                            const tdNatureza = document.createElement('td');
                            tdNatureza.textContent = rec.nom_classificacao_natureza_recomendacao_auditoria || '—';

                            tr.appendChild(tdRecomendacao);
                            tr.appendChild(tdNatureza);

                            tbody.appendChild(tr);
                        });

                    } else {
                        const tr = document.createElement('tr');
                        const td = document.createElement('td');
                        td.colSpan = 2;
                        td.textContent = 'Nenhuma recomendação encontrada.';
                        tr.appendChild(td);
                        tbody.appendChild(tr);

                        neo.msgprint("Nenhuma recomendação encontrada.");
                    }
                },
                error: function (err) {
                    tbody.innerHTML = '';
                    const tr = document.createElement('tr');
                    tr.innerHTML = '<td colspan="2">Erro ao buscar recomendações.</td>';
                    tbody.appendChild(tr);

                    console.error("Erro ao buscar recomendações:", err);
                    neo.msgprint("Erro ao buscar recomendações de auditoria.");
                },
                freeze: true,
                freeze_message: "Buscando recomendações..."
            });

        } else {
            console.warn("Linha da tabela não encontrada para data-name:", row_name);
        }
    });
}