Buenas tardes. Realicé en mi ambiente local una validación con JQUERY y AJAX y funciona sin problema, a la hora de pasarlo al servidor en producción me “desaparece” el input al cual estoy validando.
En principio cree un entry point que apunta a un archivo PHP que hace la validación en la base de datos y devuelve un valor u otro si existe o no el campo. Hasta ahi vamos bien.
El módulo no tiene una vista de edición creada, por lo que en mi carpeta CUSTOM cree en la ruta /custom/MODULO/views/view.edit.php :
<?php
if (!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
require_once('include/MVC/View/views/view.edit.php');
class CustomEmpresasViewEdit extends ViewEdit
{
public function __construct()
{
parent::__construct();
}
/**
* @see SugarView::display()
*
* We are overridding the display method to manipulate the sectionPanels.
* If portal is not enabled then don't show the Portal Information panel.
*/
public function display()
{
$this->useForSubpanel = true;
// habilitamos el valor del nombre en el archivo tpl (enviar y recibir archivos por medio de HTTP)
$this->ss->assign('cuit_cuil_c', $this->bean->cuit_cuil_c);
// cargamos el contenido del tpl en la variable
$name_input_code = $this->ss->fetch('custom/modules/empre_Empresas_vp/tpls/cuitUnico.tpl.js');
// enviamos el contenido a "editviewdefs"
$this->ss->assign('validacionCuit', $name_input_code);
parent::display();
}
}
?>
El archivo .tpl.js en /custom/MODULO/tpls/…tpl.js
<input type="text" name="cuit_cuil_c" id="cuit_cuil_c" maxlength="11" value="{$cuit_cuil_c}"/>
<span id="cuit_unico_resultado"></span>
{literal}
<script src='/include' type="text/javascript">
$(document).ready(function() {$('#cuit_cuil_c').blur(function () {
$(".module-title-text").prop("id", "tipoVista");
let vista = document.getElementById('tipoVista').innerHTML.trim();
$('#cuit_unico_resultado').html('<strong> Verificando cuit...</strong>');
$.post('RutaDelEntryPoint', { cuit_cuil_c: $('#cuit_cuil_c').val() }, function (data) {
var cuitString = document.getElementById('cuit_cuil_c').value;
var digitos = cuitString.length;
const regex = /^[0-9]*$/;
const soloNumeros = regex.test(cuitString);
//Si existe la información o tiene menos de 11 dígitos, agregamos la propiedad Disabled al botón de guardar y le damos un valor true.
//Agregamos comentarios para que el usuario sepa el motivo del error
if (!soloNumeros) {
$(".button.primary").prop("disabled", "true");
$('#cuit_unico_resultado').html('<strong style="color:red;"> ✗ <br>Ingrese únicamente dígitos numéricos</strong>');
}
else if (digitos < 11) {
$(".button.primary").prop("disabled", "true");
$('#cuit_unico_resultado').html('<strong style="color:red;"> ✗ <br>Debe tener al menos 11 dígitos</strong>');
}
else if (data == 'existe' && vista == 'Crear') {
$(".button.primary").prop("disabled", "true");
$('#cuit_unico_resultado').html('<strong style="color:red;"> ✗ <br>CUIT Duplicado o inválido</strong>');
}
else if (data == 'existe' && vista != 'Crear' || data == 'unico') {
$(".button.primary").prop("disabled", "");
$('#cuit_unico_resultado').html('<strong style="color:green;"> ✓ </strong>');
}
else { }
});
})});
</script>
{/literal}
y finalmente en custom/MODULO/metadata/editviewdefs.php, le agregue la siguiente línea al campo:
'customCode' => '{$validacionCuit}',
El problema está, justo, en esta línea. A la hora de hacer una reconstrucción rápida me desaparece el input al que apunto. Entiendo que es esta línea ya que, si la borro y pongo otra “reconstruccion rapida” vuelve a aparecer… No entiendo que está pasando ya que en otros ambientes me funciona correctamente.
Espero alguno haya pasado por algo similar y pueda ayudarme!
Gracias…