Escolar Documentos
Profissional Documentos
Cultura Documentos
Nota Técnica - Integração TOTVS Microsiga Protheus Com Fluig ECM PDF
Nota Técnica - Integração TOTVS Microsiga Protheus Com Fluig ECM PDF
08/2013
Integrao TOTVS Microsiga Protheus e Fluig ECM
Sumrio
Sumrio ......................................................................................................................................................... 2
1 Objetivo ....................................................................................................................................... 3
2 Integrao manual ...................................................................................................................... 3
2.1 Formulrio ................................................................................................................................... 3
2.1.1 ECM ................................................................................................................................................................ 3
2.1.2 Protheus.......................................................................................................................................................... 4
2.1.3 MVC ................................................................................................................................................................ 5
2.1.4 Rotina Automtica (Modelo 1) ....................................................................................................................... 6
2
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
1 Objetivo
Integrar rotinas do MVC e automticas da linha Microsiga Protheus com o Fluig ECM para criao processos permitindo ao cliente
trabalhar com a rotina como uma solicitao com atribuio de responsveis por atividade (baseada no dicionrio de pastas), utilizando o
workflow do Fluig ECM para controle de prazo de consluso, acompanhamento notificao de responsvel e requisitante, sendo as
informaes enviadas no final do processo para a linha de produtos Microsiga Protheus para persistncia.
2 Integrao manual
2.1 Formulrio
2.1.1 ECM
1. Criar um arquivo HTML com os campos com o mesmo nome utilizado no Protheus como o exemplo abaixo:
<HTML>
<HEAD>
<TITLE>Exemplo - Cliente</TITLE>
<LINK REL=STYLESHEET HREF="/webdesk203/wdk/global.css">
</HEAD>
<BODY scroll=yes>
<span class="NumSecao">
<strong> Cadastro</strong></span>
<HR>
<br>
<form>
<table>
<tr>
<td align="right" width="150" class="Labels"><b>Cdigo:</b></td>
<td class="Normal"><strong><input type="text" size="6" name="A1_COD"></strong></td>
</tr>
<tr>
<td align="right" width="150" class="Labels"><b>Loja:</b></td>
<td class="Normal"><strong><input type="text" size="2" name="A1_LOJA"></strong></td>
</tr>
<tr>
<td align="right" width="150" class="Labels"><b>Fsica/Jurdica:</b></td>
<td class="Normal"><strong>
<select name="A1_PESSOA">
<option value="F">Fsica</option>
<option value="J">Jurdica</option>
</select>
</strong></td>
</tr>
<tr>
<td align="right" width="150" class="Labels"><b>Nome:</b></td>
<td class="Normal"><strong><input type="text" size="40" name="A1_NOME"></strong></td>
</tr>
<tr>
<td align="right" width="150" class="Labels"><b>Nome Fantasia:</b></td>
<td class="Normal"><strong><input type="text" size="20" name="A1_NREDUZ"></strong></td>
</tr>
<tr>
<td align="right" width="150" class="Labels"><b>Endereo:</b></td>
<td class="Normal"><strong><input type="text" size="40" name="A1_END"></strong></td>
</tr>
3
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
<tr>
<td align="right" width="150" class="Labels"><b>Tipo:</b></td>
<td class="Normal"><strong>
<select name="A1_TIPO">
<option value="F">Cons. Final</option>
<option value="L">Produtor Rural</option>
<option value="R">Revendedor</option>
<option value="S">Solidario</option>
<option value="X">Exportacao</option>
</select>
</strong></td>
</tr>
<tr>
<td align="right" width="150" class="Labels"><b>Municpio:</b></td>
<td class="Normal"><strong><input type="text" size="60" name="A1_MUN"></strong></td>
</tr>
<tr>
<td align="right" width="150" class="Labels"><b>Estado:</b></td>
<td class="Normal"><strong><input type="text" size="2" name="A1_EST"></strong></td>
</tr>
</table>
</form>
</BODY>
</HTML>
2. Adicionar o arquivo .html como um Novo Fichrio nos Documentos do ECM e verificar o Cdigo que foi gerado que ser
utilizado para criar o Processo utilizar esse fichrio.
2.1.2 Protheus
1. Configurar a integrao para GED entre o Protheus e o ECM no Configurador na opo Ambiente > Totvs ECM > Wizard do GED
2. Utilizar a funo FWECMPutCard para enviar o formulrio para o ECM conforme o exemplo abaixo (o fichrio sera criado na
pasta ERP_MP \ <empresas> \ MP_CARDS no ECM):
#include "totvs.ch"
User Function FormCliente()
Local cProcessId := "CLIENTE" // se informado atualiza o formulrio relacionado ao processo seno cria um
novo
Local cDescription := "Formulrio do cadastro de cliente"
Local cCardDescription := ""
Local aHTML := Array(1,2) // arquivos do formulario
Local aEvents := Array(1,2) // eventos que sero customizados para o formulario
Local nFormId
Local aError
4
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
2.1.3 MVC
1. Configurar a integrao para GED entre o Protheus e o ECM no Configurador na opo Ambiente > Totvs ECM > Wizard do GED
5
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
2. Utilizar o mtodo GetXMLLayout do View para gerar o HTML . Somente os componentes Fields e Grid sero convertidos para
HTML
#include "totvs.ch"
User Function FormView()
Local oView := FWLoadView("MATA030_MVC")
Local cProcessId := "CLIENTE" // se informado atualiza o formulrio relacionado ao processo seno cria um
novo
Local cDescription := "Formulrio do cadastro de cliente"
Local cCardDescription := ""
Local aEvents := Array(1,2) // eventos que sero customizados para o formulario
Local nFormId
Local aError
Local aFiles
Local lHtm := .T.
Local lEmbedded := .F.
Local lDocType := .T.
oView:setOperation(3)
aFiles := oView:GetXMLLayOut(lHtm,lEmbedded,lDocType)
#include "totvs.ch"
User Function FormTable()
Local cTable := "SA1"
Local cProcessId := "MATA030"
Local cDescription := "Cliente (rotina automatica)"
Local oView
Local aEvents := Array(1,2) // eventos que sero customizados para o formulario
Local nFormId
Local aError
Local aFiles
Local lHtm := .T.
Local lEmbedded := .F.
Local lDocType := .T.
FwAliasMVC(cTable,cProcessId,cDescription)
oView := FwLoadView("PROTHEUSMVC")
oView:setOperation(3)
aFiles := oView:GetXMLLayOut(lHtm,lEmbedded,lDocType)
6
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
'}'
2.2 Processo
1. Configurar a integrao para workflow entre o Protheus e o ECM no Configurador na opo Ambiente > Totvs ECM > Wizard do
WF
2. Utilizar a funo FWECMProcess para criar e/ou atualizar o processo no ECM conforme o exemplo abaixo:
#include "totvs.ch"
User Function ProcCliente()
Local cProcessId := "CLIENTE"
Local cDescription := "Cadastro de cliente"
Local cInstruction := "Instrues de uso do processo"
Local nFormId := 22 // id do fichrio adicionado no ECM no passo anterior
Local aStates := Array(4,6) // atividades do processo em sequencia para criao automtica dos fluxos
Local aEvents := Array(1,2) // eventos que sero customizados para o processo
Local aProperties := Array(1,2) // propriedades que sero utilizadas nos scripts dos eventos do processo
Local aError
aEvents[1][1] := "beforeTaskSave"
// script na linguagem JavaScript
aEvents[1][2] := 'function beforeTaskSave(colleagueId,nextSequenceId,userList){'+;
'var A1_COD = hAPI.getCardValue("A1_COD");'+;
'if (A1_COD == ""){'+;
' throw "O campo Cdigo obrigatrio"'+;
'}'+;
'}'
7
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
A validao do formulrio dos processos no ECM realizada atravs da customizao dos eventos dos fichrios e processos
utilizando scripts na linguagem JavaScript. Os eventos podem ser implementados no prprio ECM ou enviados pelo Protheus como
parmetro das funes utilizadas nos exemplos anteriores.
Para validar os campos informados pelo usurio utilizar o evento beforeTaskSave do processo que executado em cada
confirmao de tarefa para enviar para a prxima etapa do workflow.
Para acessar o valor de um campo do formulrio utilizar a API do workflow hAPI. getCardValue(<nomeCampo>) e para o
tratamento de exees utilizar o comando throw <mensagem> que apresentar a mensagem para o usurio impendindo que prossiga
enquanto no corrigir as informaes digitadas.
function beforeTaskSave(colleagueId,nextSequenceId,userList){
var A1_COD = hAPI.getCardValue("A1_COD");
if (A1_COD == ""){
throw "O campo Cdigo obrigatrio"
}
}
2.3.2 Protheus
A validao nos scripts dos eventos utilizando aplicaes externas realizada atraves de WebServices que devem ser cadastradas
como servio no ECM na opo Painel de Controle > Servios > Adicionar. Quando qualquer definio do WebService for alterada ou
includa ser necessrio atualizar o ECM na opo Painel de Controle > Servios > Editar > Atualizar.
O WebService pode ser cadastrado atravs do Painel de Controle do ECM ou pelo Protheus utilizando a funo FWWFPutService
como no exemplo abaixo.
#include "totvs.ch"
If FWWFPutService(cName,cUrl,cDescription)
MsgInfo("Servio cadastrado com sucesso")
EndIf
Return
8
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
2.3.3 WebService
Exemplo de WebService do Protheus:
#include "totvs.ch"
#include "apwebsrv.ch"
::RETEXISTCOD := existchav("SA1",::A1_COD+::A1_LOJA)
Return .T.
If oXML:Parse(::XML)
aAdd( aDadosCli, { "A1_COD" , oXML:XPathGetNodeValue("/SA1/A1_COD") , NIL } )
aAdd( aDadosCli, { "A1_LOJA" , oXML:XPathGetNodeValue("/SA1/A1_LOJA") , NIL } )
aAdd( aDadosCli, { "A1_TIPO" , oXML:XPathGetNodeValue("/SA1/A1_TIPO") , NIL } )
aAdd( aDadosCli, { "A1_PESSOA" , oXML:XPathGetNodeValue("/SA1/A1_PESSOA"), NIL } )
aAdd( aDadosCli, { "A1_NOME" , oXML:XPathGetNodeValue("/SA1/A1_NOME") , NIL } )
aAdd( aDadosCli, { "A1_NREDUZ" , oXML:XPathGetNodeValue("/SA1/A1_NREDUZ"), NIL } )
aAdd( aDadosCli, { "A1_END" , oXML:XPathGetNodeValue("/SA1/A1_END") , NIL } )
aAdd( aDadosCli, { "A1_MUN" , oXML:XPathGetNodeValue("/SA1/A1_MUN") , NIL } )
aAdd( aDadosCli, { "A1_EST" , oXML:XPathGetNodeValue("/SA1/A1_EST") , NIL } )
lMsErroAuto := .F.
MSExecAuto( { | x, y | MATA030( x, y ) } , aDadosCli, 3 )
If lMsErroAuto
If __lSX8
RollBackSX8()
EndIf
::RETINCLUIR := .F.
Else
If __lSX8
ConFirmSX8()
EndIf
::RETINCLUIR := .T.
EndIf
Else
SetSoapFault("WSCLIENTE:INCLUIR",oXML:LastError())
lRet := .F.
EndIf
Return lRet
9
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
function beforeTaskSave(colleagueId,nextSequenceId,userList){
var A1_COD = hAPI.getCardValue("A1_COD");
if (A1_COD == ""){
throw "O campo Cdigo obrigatrio"
}
try {
ret = service.EXISTCOD(A1_COD);
}
catch(erro){
throw erro.message
}
if (!ret) {
throw "Cliente j existe";
}
}
2.3.4 MVC
A validao do processo de uma rotina MVC realizada utilizando o WebService FWWSMODEL
(http://hostexemplo:8080/ws/fwwsmodel.apw?wsdl) com a invocao do mtodo GETXMLDATADETAIL que retorna o XML do model
para popular os dados e do mtodo VLDXMLDATA que validar o XML.
#include "totvs.ch"
User Function WSMVC()
Local cName := "TOTVS_FWMVC"
Local cURL := "http://hostname:8080/ws/fwwsmodel.apw?wsdl "
Local cDescription := "Servio do TOTVS MVC para integrao de rotinas/programas com ECM"
Local aService := FWWFGetService(cName)
function beforeTaskSave(colleagueId,nextSequenceId,userList){
var wsService = ServiceManager.getService("TOTVS_FWMVC");
var serviceHelper = wsService.getBean();
10
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
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);
function updateXMLFields(node,err){
var list = node.children();
var name,value;
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;
11
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
value = value.trim();
switch (eval("struct.@datatype.toString()")){
case "D":
if (value.replace("/","").trim() != ""){
len = value.length();
d = setDate.indexOf("d");
m = setDate.indexOf("m");
y = setDate.indexOf("y");
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 = "O campo "+eval("struct.@info")+" ("+name+") contm uma data invlida";
else
err.empty = false;
}
break;
case "N":
len = eval("struct.@len.toString().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 = "O campo "+eval("struct.@info")+" ("+name+") contm um nmero (valor ou
tamanho) invlido"
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(",",".");
12
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
if(!reg.test(str)){
str = value.replace(",","");
if(!reg.test(str)){
err.message = "O campo "+eval("struct.@info")+" ("+name+") contm um nmero (valor ou
tamanho) invlido"
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,"");}
A atualizao dos dados no Protheus tambm realizada atraves de WebServices como visto na validao utilizando o evento do
processo afterProcessFinish que executado na finalizao da solicitao.
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_LOJA = hAPI.getCardValue("A1_LOJA");
SA1.A1_TIPO = hAPI.getCardValue("A1_TIPO");
SA1.A1_PESSOA = hAPI.getCardValue("A1_PESSOA");
SA1.A1_NOME = hAPI.getCardValue("A1_NOME");
SA1.A1_NREDUZ = hAPI.getCardValue("A1_NREDUZ");
SA1.A1_END = hAPI.getCardValue("A1_END");
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
}
13
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
2.4.1 MVC
A validao do processo de uma rotina MVC tambm realizada utilizando o WebService FWWSMODEL
(http://hostexemplo:8080/ws/fwwsmodel.apw?wsdl) com a invocao do mtodo GETXMLDATADETAIL que retorna o XML do model
para popular os dados e do mtodo PUTXMLDATA que gravar o 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;
function convertValue(name,struct,value,err){
var y,m,d,n,len,str,reg
var setYear = new Date().getFullYear().toString().substring(0,2);
14
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
value = value.trim();
switch (eval("struct.@datatype.toString()")){
case "D":
if (value.replace("/","").trim() != ""){
len = value.length();
d = setDate.indexOf("d");
m = setDate.indexOf("m");
y = setDate.indexOf("y");
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 = "O campo "+eval("struct.@info")+" ("+name+") contm uma data invlida";
else
err.empty = false;
}
break;
case "N":
len = eval("struct.@len.toString().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 = "O campo "+eval("struct.@info")+" ("+name+") contm um nmero (valor ou
tamanho) invlido"
hasErr = true;
break;
}
}
if (!hasErr){
n = parseInt(str);
if (!isNaN(n)){
value = new java.lang.String(str);
if (n > 0)
err.empty = false;
}
}
}
15
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
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 = "O campo "+eval("struct.@info")+" ("+name+") contm um nmero (valor ou
tamanho) invlido"
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,"");}
#include "totvs.ch"
User Function WSMVC()
Local cName := "TOTVS_FWWSECM"
Local cURL := "http://hostname:8080/ws/fwwsecm.apw?wsdl"
Local cDescription := "Servio do TOTVS Microsiga Protheus para integrao de rotinas automticas com
ECM"
Local aService := FWWFGetService(cName)
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};
16
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
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.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;
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;
17
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
value = value.trim();
switch (eval("struct.@datatype.toString()")){
case "D":
if (value.replace("/","").trim() != ""){
len = value.length();
d = setDate.indexOf("d");
m = setDate.indexOf("m");
y = setDate.indexOf("y");
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 = "O campo "+eval("struct.@info")+" ("+name+") contm uma data invlida";
else
err.empty = false;
}
break;
case "N":
len = eval("struct.@len.toString().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 = "O campo "+eval("struct.@info")+" ("+name+") contm um nmero (valor ou
tamanho) invlido"
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]+"})?$");
18
Verso 1.0
Integrao TOTVS Microsiga Protheus e Fluig ECM
str = value.replace(".","").replace(",",".");
if(!reg.test(str)){
str = value.replace(",","");
if(!reg.test(str)){
err.message = "O campo "+eval("struct.@info")+" ("+name+") contm um nmero (valor ou
tamanho) invlido"
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,"");}
19
Verso 1.0