Para mejorar la apariencia del msgbox del sistema se ha implementado la posibilidad de hacer una colección donde podamos mostrar mensajes personalizados con la apariencia que se desee.

La colección que podemos llamarla como queramos, es una colección especial que tiene los atributos cancelable=“false” y cancelable-outside=“false”, que hacen que se comporte como una ventana “modal”, de forma que el usuario tendrá que seleccionar uno de los botones mostrados para poder continuar. Aparece como “flotante” sobre la pantalla actual.

Los botones mostrados en esta colección deben tener un atributo button-option=“NUM”, donde se indica el valor que van a devolver si se pulsan.

Llamada msgbox personalizado

Para llamar a la colección que nos muestra el mensaje podremos hacerlo tanto con vbscript como con javascript, la colección se trata como cualquier otra, lo único es que de dicha colección nos devolverá un resultado con el valor del botón que haya pulsado el usuario.

En algún lugar del código se hará una llamada como la siguiente:

// El tercer parámetro es para que muestre los botones Si/No y el cuarto parámetro si queremos mostrar unicamente OK ó CANCELAR
	var vResult=showMsgBox("¿Desea guardar los cambios?", "CONFIRMACIÓN!!",1,0);
	if (vResult==6) 
	{
		self.executeNode("btn_save");
	}
 
	showMsgBox("Debe introducir una firma", "ERROR!!",0,1);
 
// Hay que definir la funcion que lanza la colección en edicion (Se le pasa el objeto como parámetro al ui.msgBox)
function showMsgBox(strText,strTitle,showBt1,showBt2)
{
	var mColeccionMessageBox = appData.getCollection("MsgBoxColl");
	var mNuevoMessageBox = mColeccionMessageBox.createObject();
	mNuevoMessageBox.MAP_TITULO = strTitle;
	mNuevoMessageBox.MAP_MENSAJE = strText;
	mNuevoMessageBox.MAP_IMG = "incidencias.png";
	mNuevoMessageBox.MAP_SHOW1 = showBt1;
	mNuevoMessageBox.MAP_SHOW2 = showBt2;
 
	var nResult = ui.msgBox(mNuevoMessageBox);
	return nResult;
}

Ejemplo Coll msgbox personalizada

<coll name="MsgBoxColl" title="XoneCollvacia" sql="" objname="" updateobj="" progid="" filter="" sort="" special="true" cancelable="false" cancelable-outside="false">
      <group name="General" id="1">
        <frame name="frmBack" class="colorframebackflotante" width="100%" height="100%" align="center">
          <frame name="title2" classd="colorfrmgrupos" bgcolor="#FFFFFF" width="1000p" height="600p" align="center|center">
            <prop name="MAP_IMG" visible="0" type="IMG" height="70p" lmargin="0" />
            <prop name="MAP_TITULO" visible="1" type="T" labelwidth="0" classx="lockedTL" locked="true" newlinec="false" lmarginx="5%" width="90%" text-align="center" textfont-size="8" />
            <prop name="BTNBLUEM13" visible="0" type="B" img="lineaG.png" width="90%" height="4p" lmargin="0" tmargin="10p" />
            <prop name="MAP_MENSAJE" type="T" visible="7" title=" " width="90%" labelwidth="0" tmargin="40p" class="loginProp" locked="true" text-align="center" lines="2" text-border-bottom="false" />
            <frame name="frameSiNo" class="frame_data" tmargin="40p" align="center" disablevisible="MAP_SHOW1=0">
              <prop name="BTNOK" type="B" visible="1" title="Si" button-option="6" class="buttontxtsmallfocus" method="executenode(onback)" />
              <prop name="BTNCANCEL" type="B" visible="1" title="No" button-option="2" class="buttontxtsmall" method="executenode(onback)" newline="false" lmargin="30p" />
            </frame>
            <frame name="frameCerrar" class="frame_data" tmargin="40p" align="center" disablevisible="MAP_SHOW2=0">
              <prop name="BTNCANCEL2" type="B" visible="1" title="Cerrar" button-option="1" class="buttontxtsmall" width="260p" method="executenode(onback)" />
            </frame>
            <prop name="MAP_SHOW1" type="N" visible="0" title="" labelwidth="0" fieldsize="6" size="6" />
            <prop name="MAP_SHOW2" type="N" visible="0" title="" labelwidth="0" fieldsize="6" size="6" />
          </frame>
        </frame>
      </group>
</coll>