Árvore de páginas

La actualización de los datos en Protheus también se lleva a cabo a través de WebServices como se ve en la validación utilizando el evento del proceso afterProcessFinish que se ejecuta en la finalización de la solicitud.

 

function afterProcessFinish(processId){

var wsService = ServiceManager.getService("WSCLIENTE");

var serviceHelper = wsService.getBean();

var serviceLocator = serviceHelper.instantiate("localhost.WSCLIENTELocator");

var service = serviceLocator.getWSCLIENTESOAP();

var SA1 = new XML("<SA1/>");

 

SA1.A1_COD = hAPI.getCardValue("A1_COD");

SA1.A1_TIENDA = hAPI.getCardValue("A1_TIENDA");

SA1.A1_TIPO = hAPI.getCardValue("A1_TIPO");

SA1.A1_PERSONA = hAPI.getCardValue("A1_PERSONA");

SA1.A1_NOMBRE = hAPI.getCardValue("A1_NOMBRE");

SA1.A1_NREDUC = hAPI.getCardValue("A1_NREDUC");

SA1.A1_DIR = hAPI.getCardValue("A1_DIR");

SA1.A1_MUN = hAPI.getCardValue("A1_MUN");

SA1.A1_EST = hAPI.getCardValue("A1_EST");

 

try {

   ret = service.INCLUIR(new java.lang.String(SA1.toXMLString()).getBytes());

}

catch(erro){

   throw erro.message

}

}

MVC

La validación del proceso de una rutina MVC también se lleva a cabo utilizando WebService FWWSMODEL (http://hostexemplo:8080/ws/fwwsmodel.apw?wsdl)  con la invocación del método GETXMLDATADETAIL que devuelve el XML del modelo para llenar los datos y el método PUTXMLDATA que graba XML.

 

function afterProcessFinish(processId){

var wsService = ServiceManager.getService("TOTVS_FWMVC");

var serviceHelper = wsService.getBean();

var serviceLocator = serviceHelper.instantiate("br.com.totvs.webservices.fwwsmodel_apw.FWWSMODELLocator");

var service = serviceLocator.getFWWSMODELSOAP();

var err = {message:"", empty:true};

var ret, xml;

 

try {

   ret = service.GETXMLDATADETAIL([],"MATA030_MVC");

   xml = new XML(new String(new java.lang.String(ret)).replace(/<\?.*\?>/g,""));

}

catch(erro){

   throw erro.message;

   return;

}

 

updateXMLFields(xml,err);

 

eval("xml.@Operation = 3");

try{

   service.PUTXMLDATA([],"MATA030_MVC",new java.lang.String(xml.toXMLString()).getBytes());

} catch(e){

   throw e.message;

}

}

 

function updateXMLFields(node,err){

var list = node.children();

var name,value;

 

for (var i=0;i<list.length();i++){

   switch (Trim(eval("list[i][email protected]()"))){

      case "FIELDS":

         updateXMLFields(list[i],err);

         break;

      default:

         name = list[i].name().localName;

         value = hAPI.getCardValue(name);

         if (value != null)

            list[i].value = convertValue(name,list[i],value,err);

         break;

   }

   if (err.message.length > 0)

      break;

}

}

 

function convertValue(name,struct,value,err){

var y,m,d,n,len,str,reg

var setYear = new Date().getFullYear().toString().substring(0,2);

var setDate = "dd/mm/yyyy";

var yCount = setDate.match(/yyyy/) ? 4 : 2;

var hasErr = false;

 

value = value.trim();

 

switch (eval("[email protected]()")){

case "D":

   if (value.replace("/","").trim() != ""){

      len = value.length();

      d = setDate.indexOf("d");

      m = setDate.indexOf("m");

      y = setDate.indexOf("y");

 

      if (d + 2 > len || m + 2 > len || y + yCount > len){

         hasErr = true;

      }

      else{

         str = value.substr(m,2) + value.substr(d,2);

         if (yCount == 4)

            str = value.substr(y,4) + str;

         else

            str = setYear + value.substr(y,2) + str;

 

         if (str.match(/((((19|20)(([02468][048])|([13579][26]))0229))|((19|20)[0-9][0-9])((((0[1-9])|(1[0-2]))((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))31)|(((0[1,3-9])|(1[0-2]))(29|30)))))/g))

            value = new java.lang.String(str);

         else

            hasErr = true;

      }

 

      if (hasErr)

         err.message = "El campo "+eval("struct.@info")+" ("+name+") contiene una fecha no válida";

      else

         err.empty = false;

   }

   break;

case "N":

   len = eval("[email protected]().split(',')");

   if (len[1] == "0"){

      reg = new RegExp("^[0-9]{1,"+len[0]+"}$");

      str = value.replace(",","");

      if(!reg.test(str)){

         str = value.replace(".","");

         if(!reg.test(str)){

            err.message = "El campo "+eval("struct.@info")+" ("+name+") contiene un número (valor o tamaño) no válido"

            hasErr = true;

            break;

         }

      }

 

      if (!hasErr){

         n = parseInt(str);

         if (!isNaN(n)){

            value = new java.lang.String(str);

            if (n > 0)

               err.empty = false;

         }

      }

   }

   else{

      reg = new RegExp("^0$|^0\.[0-9]{1,"+len[1]+"}$|^[0-9]{0,"+len[0]+"}(\.[0-9]{1,"+len[1]+"})?$");

      str = value.replace(".","").replace(",",".");

      if(!reg.test(str)){

         str = value.replace(",","");

         if(!reg.test(str)){

            err.message = "El campo "+eval("struct.@info")+" ("+name+") contiene un número (valor o tamaño) no válido"

            hasErr = true;

            break;

         }

      }

            

      if (!hasErr){

         n = parseFloat(str);

         if (!isNaN(n)){

            value = new java.lang.String(str);

            if (n > 0)

               err.empty = false;

         }

      }

   }

   break;

default:

   if (value != "")

      err.empty = false;

   break;

}

return value;

}

function Trim(str){return str.replace(/^\s+|\s+$/g,"");}

 

Rutina Automática (Modelo 1)

Como las rutinas automáticas después de la validación ejecutan la actualización en vez de utilizar el evento afterProcessFinish utilice el evento beforeTaskSave cuando el proceso esté en la actividad final. Además de WebService de MVC utilice también FWWSMODEL (http://hostexemplo:8080/ws/fwwsecm.apw?wsdl) con la invocación del método PUTDATA.

 

#include "totvs.ch"

User Function WSMVC()

Local cName := "TOTVS_FWWSECM"

Local cURL := "http://hostname:8080/ws/fwwsecm.apw?wsdl"

Local cDescription := "Servicio de TOTVS Microsiga Protheus para integración de rutinas automáticas con ECM"

Local aService := FWWFGetService(cName)

 

If Empty(aService) .and. FWWFPutService(cName,cUrl,cDescription)

   MsgInfo("Servicio registrado con éxito")

EndIf

Return

 

Evento beforeTaskSave:

 

function beforeTaskSave(colleagueId,nextSequenceId,userList){

var wsService = ServiceManager.getService("TOTVS_FWMVC");

var serviceHelper = wsService.getBean();

var serviceLocator = serviceHelper.instantiate("br.com.totvs.webservices.fwwsmodel_apw.FWWSMODELLocator");

var service = serviceLocator.getFWWSMODELSOAP();

var err = {message:"", empty:true};

var ret, xml;

 

try {

   ret = service.GETXMLDATADETAIL([],"MATA030_MVC");

   xml = new XML(new String(new java.lang.String(ret)).replace(/<\?.*\?>/g,""));

}

catch(erro){

   throw erro.message;

   return;

}

 

updateXMLFields(xml,err);

 

if (err.message.length > 0){

   throw err.message;

}

else if (err.empty){

   throw "Complete el formulario";

}

else{

   wsService = ServiceManager.getService("TOTVS_FWWSECM");

   serviceHelper = wsService.getBean();

   serviceLocator = serviceHelper.instantiate("br.com.totvs.webservices.fwwsecm_apw.FWWSECMLocator");

   service = serviceLocator.getFWWSMODELSOAP();

 

   eval("xml.@Operation = 3");

   try{

      service.PUTDATA([],"SA1","MATA030",new java.lang.String(xml.toXMLString()).getBytes());;

   } catch(e){

      throw e.message;

   }

}

}

 

function updateXMLFields(node,err){

var list = node.children();

var name,value;

 

for (var i=0;i<list.length();i++){

   switch (Trim(eval("list[i][email protected]()"))){

      case "FIELDS":

         updateXMLFields(list[i],err);

         break;

      default:

         name = list[i].name().localName;

         value = hAPI.getCardValue(name);

         if (value != null)

            list[i].value = convertValue(name,list[i],value,err);

         break;

   }

   if (err.message.length > 0)

      break;

}

}

 

function convertValue(name,struct,value,err){

var y,m,d,n,len,str,reg

var setYear = new Date().getFullYear().toString().substring(0,2);

var setDate = "dd/mm/yyyy";

var yCount = setDate.match(/yyyy/) ? 4 : 2;

var hasErr = false;

 

value = value.trim();

 

switch (eval("[email protected]()")){

case "D":

   if (value.replace("/","").trim() != ""){

      len = value.length();

      d = setDate.indexOf("d");

      m = setDate.indexOf("m");

      y = setDate.indexOf("y");

 

      if (d + 2 > len || m + 2 > len || y + yCount > len){

         hasErr = true;

      }

      else{

         str = value.substr(m,2) + value.substr(d,2);

         if (yCount == 4)

            str = value.substr(y,4) + str;

         else

            str = setYear + value.substr(y,2) + str;

 

         if (str.match(/((((19|20)(([02468][048])|([13579][26]))0229))|((19|20)[0-9][0-9])((((0[1-9])|(1[0-2]))((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))31)|(((0[1,3-9])|(1[0-2]))(29|30)))))/g))

            value = new java.lang.String(str);

         else

            hasErr = true;

      }

 

      if (hasErr)

         err.message = "El campo "+eval("struct.@info")+" ("+name+") contiene una fecha no válida";

      else

         err.empty = false;

   }

   break;

case "N":

   len = eval("[email protected]().split(',')");

   if (len[1] == "0"){

      reg = new RegExp("^[0-9]{1,"+len[0]+"}$");

      str = value.replace(",","");

      if(!reg.test(str)){

         str = value.replace(".","");

         if(!reg.test(str)){

            err.message = "El campo "+eval("struct.@info")+" ("+name+") contiene un número (valor o tamaño) no válido"

            hasErr = true;

            break;

         }

      }

 

      if (!hasErr){

         n = parseInt(str);

         if (!isNaN(n)){

            value = new java.lang.String(str);

            if (n > 0)

               err.empty = false;

         }

      }

   }

   else{

      reg = new RegExp("^0$|^0\.[0-9]{1,"+len[1]+"}$|^[0-9]{0,"+len[0]+"}(\.[0-9]{1,"+len[1]+"})?$");

      str = value.replace(".","").replace(",",".");

      if(!reg.test(str)){

         str = value.replace(",","");

         if(!reg.test(str)){

            err.message = "El campo "+eval("struct.@info")+" ("+name+") contiene un número (valor o tamaño) no válido"

            hasErr = true;

            break;

         }

      }

            

      if (!hasErr){

         n = parseFloat(str);

         if (!isNaN(n)){

            value = new java.lang.String(str);

            if (n > 0)

               err.empty = false;

         }

      }

   }

   break;

default:

   if (value != "")

      err.empty = false;

   break;

}

return value;

}

function Trim(str){return str.replace(/^\s+|\s+$/g,"");}

 

 

 

  • Sem rótulos