Histórico da Página
HTML |
---|
<div id="main-content" class="wiki-content group">
<h1 id="id-2.1Formulário-ComocriarumformuláriodiretamentenoECM">Cómo
crear un formulario directamente en ECM</h1>
<ol>
<li>Crear un archivo HTML con los campos con el mismo nombre
utilizado en Microsiga Protheus</li>
<li>Agregar el archivo HTML como un Nuevo Fichero en los
Documentos de ECM y verificar el Código que se generó. Este código se
utilizará en la creación del Processo en el futuro</li>
</ol>
<p> </p>
<p>
<em>*Para más información sobre personalizaciones del formulario
en ECM, consulte la documentación de ECM. El objetivo de esta
documentación es citar los cuidados que se deben tener para crear un
formulario para la integración con Microsiga Protheus.</em>
</p>
<h2 id="id-2.1Formulário-Exemplodeformulário">Ejemplo de
formulario</h2>
<blockquote>
<p align="left"><HTML></p>
<p align="left"><HEAD></p>
<p align="left">  <TITLE>Ejemplo - Cliente</TITLE></p>
<p align="left">  <LINK REL=STYLESHEET
HREF="/webdesk203/wdk/global.css"></p>
<p align="left"></HEAD></p>
<p align="left"><BODY scroll=yes></p>
<p align="left"><span class="NumSecao"></p>
<p align="left"><strong> Registro</strong></span></p>
<p align="left"><HR></p>
<p align="left"><br></p>
<p align="left"><form></p>
<p align="left"><table></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Código:</b></td></p>
<p align="left">    <td
class="Normal"><strong><input type="text" size="6"
name="A1_COD"></strong></td></p>
<p align="left">  </tr></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Tienda:</b></td></p>
<p align="left">    <td
class="Normal"><strong><input type="text" size="2"
name="A1_TIENDA"></strong></td></p>
<p align="left">  </tr></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Física/Jurídica:</b></td></p>
<p align="left">    <td
class="Normal"><strong></p>
<p align="left">       
<select name="A1_PERSONA"></p>
<p align="left">           
<option value="F">Física</option></p>
<p align="left">           
<option value="J">Jurídica</option></p>
<p align="left">       
</select></p>
<p align="left">      
</strong></td></p>
<p align="left">  </tr></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Nombre:</b></td></p>
<p align="left">    <td
class="Normal"><strong><input type="text" size="40"
name="A1_NOMBRE"></strong></td></p>
<p align="left">  </tr></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Nombre Fantasía:</b></td></p>
<p align="left">    <td
class="Normal"><strong><input type="text" size="20"
name="A1_NREDUC"></strong></td></p>
<p align="left">  </tr></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Dirección:</b></td></p>
<p align="left">    <td
class="Normal"><strong><input type="text" size="40"
name="A1_DIR"></strong></td></p>
<p align="left">  </tr></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Tipo:</b></td></p>
<p align="left">    <td
class="Normal"><strong></p>
<p align="left">       
<select name="A1_TIPO"></p>
<p align="left">           
<option value="F">Cons. Final</option></p>
<p align="left">           
<option value="L">Productor Rural</option></p>
<p align="left">           
<option value="R">Revendedor</option></p>
<p align="left">           
<option value="S">Solidario</option></p>
<p align="left">           
<option value="X">Exportación</option></p>
<p align="left">       
</select></p>
<p align="left">    </strong></td></p>
<p align="left">  </tr></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Municipio:</b></td></p>
<p align="left">    <td
class="Normal"><strong><input type="text" size="60"
name="A1_MUN"></strong></td></p>
<p align="left">  </tr></p>
<p align="left">  <tr></p>
<p align="left">    <td align="right"
width="150" class="Labels"><b>Estado:</b></td></p>
<p align="left">    <td
class="Normal"><strong><input type="text" size="2"
name="A1_EST"></strong></td></p>
<p align="left">  </tr></p>
<p align="left"> </table></p>
<p align="left"></form></p>
<p align="left"></BODY></p>
<p align="left"></HTML></p>
</blockquote>
<h1 id="id-2.1Formulário-Construindoformuláriospararotinasautomáticas">Creación
de formularios para rutinas automáticas</h1>
<ol>
<li>Configurar la integración para GED entre Protheus y ECM en el
Configurador en la opción <em>Entorno > Totvs ECM > Wizard de
GED</em>
</li>
<li>Utilizar la función <strong>FWECMPutCard</strong> para enviar
el formulario a ECM, como muestra el siguiente ejemplo (el fichero se
creará en la carpeta <em>ERP_MP \ <empresas> \ MP_CARDS</em> en
ECM):
</li>
</ol>
<h2 id="id-2.1Formulário-Exemplodecódigo-fonte">Ejemplo de
código-fuente</h2>
<blockquote>
<p align="left" style="margin-left: 30.0px;">#include "totvs.ch"</p>
<p align="left" style="margin-left: 30.0px;">User Function
FormCliente()</p>
<p align="left" style="margin-left: 30.0px;">Local cProcessId :=
"CLIENTE" // si se informa actualice el formulario relacionado con el
proceso, sino cree uno nuevo</p>
<p align="left" style="margin-left: 30.0px;">Local cDescription :=
"Formulario del registro de cliente"</p>
<p align="left" style="margin-left: 30.0px;">Local
cCardDescription := ""</p>
<p align="left" style="margin-left: 30.0px;">Local aHTML :=
Array(1,2) // archivos del formulario</p>
<p align="left" style="margin-left: 30.0px;">Local aEvents :=
Array(1,2) // eventos que se personalizarán para el formulario</p>
<p align="left" style="margin-left: 30.0px;">Local nFormId</p>
<p align="left" style="margin-left: 30.0px;">Local aError</p>
<p align="left"> </p>
<p align="left" style="margin-left: 30.0px;">aHTML[1][1] :=
"cliente.html" // nombre del archivo</p>
<p align="left" style="margin-left: 30.0px;">aHTML[1][2] :=
'<HTML>'+; // contenido del archivo</p>
<p align="left" style="margin-left: 30.0px;">'<HEAD>'+;</p>
<p align="left" style="margin-left: 30.0px;">' 
<TITLE>Ejemplo - Cliente</TITLE>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <LINK
REL=STYLESHEET HREF="/webdesk203/wdk/global.css">'+;</p>
<p align="left" style="margin-left: 30.0px;">'</HEAD>'+;</p>
<p align="left" style="margin-left: 30.0px;">'<BODY
scroll=yes>'+;</p>
<p align="left" style="margin-left: 30.0px;">'<span
class="NumSecao">'+;</p>
<p align="left" style="margin-left: 30.0px;">'<strong> Registro</strong></span>'+;</p>
<p align="left" style="margin-left: 30.0px;">'<HR>'+;</p>
<p align="left" style="margin-left: 30.0px;">'<br>'+;</p>
<p align="left" style="margin-left: 30.0px;">'<form>'+;</p>
<p align="left" style="margin-left: 30.0px;">'<table>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150"
class="Labels"><b>Código:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong><input type="text" size="6"
name="A1_COD"></strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150"
class="Labels"><b>Tienda:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong><input type="text" size="2"
name="A1_TIENDA"></strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150"
class="Labels"><b>Física/Jurídica:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong>'+;</p>
<p align="left" style="margin-left: 30.0px;">'       
<select name="A1_PERSONA">'+;</p>
<p align="left" style="margin-left: 30.0px;">'           
<option value="F">Física</option>'+;</p>
<p align="left" style="margin-left: 30.0px;">'           
<option value="J">Jurídica</option>'+;</p>
<p align="left" style="margin-left: 30.0px;">'       
</select>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
</strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150"
class="Labels"><b>Nombre:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong><input type="text" size="40"
name="A1_NOMBRE"></strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150" class="Labels"><b>Nombre
Fantasía:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong><input type="text" size="20"
name="A1_NREDUC"></strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150"
class="Labels"><b>Dirección:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong><input type="text" size="40"
name="A1_DIR"></strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150"
class="Labels"><b>Tipo:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong>'+;</p>
<p align="left" style="margin-left: 30.0px;">'       
<select name="A1_TIPO">'+;</p>
<p align="left" style="margin-left: 30.0px;">'           
<option value="F">Cons. Final</option>'+;</p>
<p align="left" style="margin-left: 30.0px;">'           
<option value="L">Productor Rural</option>'+;</p>
<p align="left" style="margin-left: 30.0px;">'           
<option value="R">Revendedor</option>'+;</p>
<p align="left" style="margin-left: 30.0px;">'           
<option value="S">Solidario</option>'+;</p>
<p align="left" style="margin-left: 30.0px;">'           
<option value="X">Exportación</option>'+;</p>
<p align="left" style="margin-left: 30.0px;">'           
</select>'+;</p>
<p align="left" style="margin-left: 30.0px;">'      
</strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150"
class="Labels"><b>Municipio:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong><input type="text" size="60"
name="A1_MUN"></strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  <tr> '+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td align="right" width="150"
class="Labels"><b>Estado:</b></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'   
<td class="Normal"><strong><input type="text" size="2"
name="A1_EST"></strong></td>'+;</p>
<p align="left" style="margin-left: 30.0px;">'  </tr>'+;</p>
<p align="left" style="margin-left: 30.0px;">' </table>'+;</p>
<p align="left" style="margin-left: 30.0px;">'</form>'+;</p>
<p align="left" style="margin-left: 30.0px;">'</BODY>'+;</p>
<p align="left" style="margin-left: 30.0px;">'</HTML>'</p>
<p align="left"> </p>
<p align="left" style="margin-left: 30.0px;">aEvents[1][1] :=
"setEnable" // nombre del evento</p>
<p align="left" style="margin-left: 30.0px;">aEvents[1][2] :=
'function setEnable() {'+; // script en lenguaje JavaScript</p>
<p align="left" style="margin-left: 30.0px;">'log.info("Prueba de
llamada de función");'+;</p>
<p align="left" style="margin-left: 30.0px;">'}'</p>
<p align="left"> </p>
<p align="left" style="margin-left: 30.0px;">
nFormId := <strong>FWECMPutCard(cProcessId,cDescription,cCardDescription,aHTML,aEvents)</strong>
// devuelve el código del fichero en ECM
</p>
<p align="left" style="margin-left: 30.0px;">If FWWFIsError()</p>
<p align="left" style="margin-left: 30.0px;">   aError
:= FWWFGetError()</p>
<p align="left" style="margin-left: 30.0px;">  
MsgStop(aError[2])</p>
<p align="left" style="margin-left: 30.0px;">Else</p>
<p align="left" style="margin-left: 30.0px;">  
MsgInfo("Fichero actualizado con éxito")</p>
<p align="left" style="margin-left: 30.0px;">EndIf</p>
<p align="left" style="margin-left: 30.0px;">Return</p>
</blockquote>
<h1 id="id-2.1Formulário-ConstruindoformuláriospararotinasMVC">Creando
formularios para rutinas MVC</h1>
<ol>
<li>Configurar la integración para GED entre Protheus y ECM en el
Configurador, en la opción Entorno > Totvs ECM > Wizard de GED</li>
<li>Utilizar el método <strong>GetXMLLayout</strong> de View para
generar el HTML <br />
<ol>
<li>Sólo los componentes Fields y Grid se convertirán a HTML</li>
<li>Sólo los formularios del tipo CRUD y Master/Detail pueden
exportarse a ECM, ya que no es posible simular todos los eventos de
los demás tipos de formularios de Microsiga Protheus.</li>
<li>Este método es sólo una demostración de cómo es el
mecanismo en Microsiga Protheus. Los formularios MVC tienen una
forma automática de generar un proceso con formulario en ECM en las
'Acciones Relacionadas' de la rutina.</li>
</ol></li>
</ol>
<blockquote>
<p align="left">#include "totvs.ch"</p>
<p align="left">User Function FormView()</p>
<p align="left">Local oView := FWLoadView("MATA030_MVC")</p>
<p align="left">Local cProcessId := "CLIENTE" // si se informa
actualice el formulario relacionado con el proceso, sino cree uno
nuevo</p>
<p align="left">Local cDescription := "Formulario del registro de
cliente"</p>
<p align="left">Local cCardDescription := ""</p>
<p align="left">Local aEvents := Array(1,2) // eventos que se
personalizarán para el formulario</p>
<p align="left">Local nFormId</p>
<p align="left">Local aError</p>
<p align="left">Local aFiles</p>
<p align="left">Local lHtm := .T.</p>
<p align="left">Local lEmbedded := .F.</p>
<p align="left">Local lDocType := .T.</p>
<p align="left"> </p>
<p align="left">
<a href="http://oViewsetOperation(3)" class="external-link"
rel="nofollow">oView:setOperation(3)</a>
</p>
<p align="left"> </p>
<p align="left">
aFiles := oView:<strong>GetXMLLayOut(lHtm,lEmbedded,lDocType)</strong>
</p>
<p align="left"> </p>
<p align="left">aEvents[1][1] := "setEnable" // nombre del evento</p>
<p align="left">aEvents[1][2] := 'function setEnable() {'+; //
script en lenguaje JavaScript</p>
<p align="left">'log.info("Prueba de llamada de función");'+;</p>
<p align="left">'}'</p>
<p align="left"> </p>
<p align="left">nFormId :=
FWECMPutCard(cProcessId,cDescription,cCardDescription,aFiles,aEvents)
// devuelve el código del fichero en ECM</p>
<p align="left">If FWWFIsError()</p>
<p align="left">   aError := FWWFGetError()</p>
<p align="left">   MsgStop(aError[2])</p>
<p align="left">Else</p>
<p align="left">   MsgInfo("Fichero actualizado con
éxito")</p>
<p align="left">EndIf</p>
<p align="left">Return</p>
</blockquote>
<h2 id="id-2.1Formulário-UsandoMVCnosformuláriosModelo1">Usando
MVC en los formularios Modelo 1</h2>
<p>Para rutinas automáticas del tipo Modelo 1 (CRUD) que utilizan
sólo campos del Diccionario de Datos se puede utilizar MVC para
simplificar el proceso de personalización del formulario, de la
siguiente manera:</p>
<blockquote>
<p align="left">#include "totvs.ch"</p>
<p align="left">User Function FormTable()</p>
<p align="left">Local cTable := "SA1"</p>
<p align="left">Local cProcessId := "MATA030"</p>
<p align="left">Local cDescription := "Cliente (rutina
automática)"</p>
<p align="left">Local oView</p>
<p align="left">Local aEvents := Array(1,2) // eventos que se
personalizarán para el formulario</p>
<p align="left">Local nFormId</p>
<p align="left">Local aError</p>
<p align="left">Local aFiles</p>
<p align="left">Local lHtm := .T.</p>
<p align="left">Local lEmbedded := .F.</p>
<p align="left">Local lDocType := .T.</p>
<p align="left"> </p>
<p align="left">
<strong>FwAliasMVC(cTable,cProcessId,cDescription)</strong>
</p>
<p align="left"> </p>
<p align="left">oView := FwLoadView("PROTHEUSMVC")</p>
<p align="left">
<a href="http://oViewsetOperation(3)" class="external-link"
rel="nofollow">oView:setOperation(3)</a>
</p>
<p align="left"> </p>
<p align="left">
aFiles := <strong>oView:GetXMLLayOut(lHtm,lEmbedded,lDocType)</strong>
</p>
<p align="left">aEvents[1][1] := "setEnable" // nombre del evento</p>
<p align="left">aEvents[1][2] := 'function setEnable() {'+; //
script en lenguaje JavaScript</p>
<p align="left">'log.info("Prueba de llamada de función");'+;</p>
<p align="left">'}'</p>
<p align="left"> </p>
<p align="left">nFormId :=
FWECMPutCard(cProcessId,cDescription,cCardDescription,aFiles,aEvents)
// devuelve el código del fichero en ECM</p>
<p align="left">If FWWFIsError()</p>
<p align="left">   aError := FWWFGetError()</p>
<p align="left">   MsgStop(aError[2])</p>
<p align="left">Else</p>
<p align="left">   MsgInfo("Fichero actualizado con
éxito")</p>
<p align="left">EndIf</p>
<p align="left">Return</p>
</blockquote>
<p align="left"> </p>
<p align="left"> </p>
<p> </p>
<p>
<br /> <br />
</p>
<p> </p>
</div> |
Como criar um formulário diretamente no ECM
- Criar um arquivo HTML com os campos com o mesmo nome utilizado no Microsiga Protheus
- Adicionar o arquivo HTML como um Novo Fichário nos Documentos do ECM e verificar o Código que foi gerado. Este código será utilizado na criação do Processo futuramente
*Para maiores informações sobre personalizações do formulário no ECM, consulte a documentação do ECM. O Objetivo desta documentação é citar os cuidados que devemos ter ao construir um formulário para a integração com o Microsiga Protheus.
Exemplo de formulário
<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>Código:</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>Física/Jurídica:</b></td>
<td class="Normal"><strong>
<select name="A1_PESSOA">
<option value="F">Física</option>
<option value="J">Jurídica</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>Endereço:</b></td>
<td class="Normal"><strong><input type="text" size="40" name="A1_END"></strong></td>
</tr>
<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>Município:</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>
Construindo formulários para rotinas automáticas
- Configurar a integração para GED entre o Protheus e o ECM no Configurador na opção Ambiente > Totvs ECM > Wizard do GED
- Utilizar a função FWECMPutCard para enviar o formulário para o ECM conforme o exemplo abaixo (o fichário sera criado na pasta ERP_MP \ <empresas> \ MP_CARDS no ECM):
Exemplo de código-fonte
#include "totvs.ch"
User Function FormCliente()
Local cProcessId := "CLIENTE" // se informado atualiza o formulário relacionado ao processo senão cria um novo
Local cDescription := "Formulário do cadastro de cliente"
Local cCardDescription := ""
Local aHTML := Array(1,2) // arquivos do formulario
Local aEvents := Array(1,2) // eventos que serão customizados para o formulario
Local nFormId
Local aError
aHTML[1][1] := "cliente.html" // nome do arquivo
aHTML[1][2] := '<HTML>'+; // conteúdo do arquivo
'<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>Código:</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>Física/Jurídica:</b></td>'+;
' <td class="Normal"><strong>'+;
' <select name="A1_PESSOA">'+;
' <option value="F">Física</option>'+;
' <option value="J">Jurídica</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>Endereço:</b></td>'+;
' <td class="Normal"><strong><input type="text" size="40" name="A1_END"></strong></td>'+;
' </tr>'+;
' <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>Município:</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>'
aEvents[1][1] := "setEnable" // nome do evento
aEvents[1][2] := 'function setEnable() {'+; // script na linguagem JavaScript
'log.info("Teste de chamada de função");'+;
'}'
nFormId := FWECMPutCard(cProcessId,cDescription,cCardDescription,aHTML,aEvents) // retorna o codigo do fichário no ECM
If FWWFIsError()
aError := FWWFGetError()
MsgStop(aError[2])
Else
MsgInfo("Fichário atualizado com sucesso")
EndIf
Return
Construindo formulários para rotinas MVC
- Configurar a integração para GED entre o Protheus e o ECM no Configurador na opção Ambiente > Totvs ECM > Wizard do GED
- Utilizar o método GetXMLLayout do View para gerar o HTML
- Somente os componentes Fields e Grid serão convertidos para HTML
- Somente os formulários do tipo CRUD e Master/Detail podem ser exportados para o ECM, uma vez que não é possível simular todos os eventos dos demais tipos de formulários do Microsiga Protheus.
- Este método é apenas uma demonstração de como é o mecanismo no Microsiga Protheus. Os formulários MVC possuem uma forma automática de gerar um processo com formulário no ECM nas 'Ações Relacionadas' da rotina.
#include "totvs.ch"
User Function FormView()
Local oView := FWLoadView("MATA030_MVC")
Local cProcessId := "CLIENTE" // se informado atualiza o formulário relacionado ao processo senão cria um novo
Local cDescription := "Formulário do cadastro de cliente"
Local cCardDescription := ""
Local aEvents := Array(1,2) // eventos que serão customizados para o formulario
Local nFormId
Local aError
Local aFiles
Local lHtm := .T.
Local lEmbedded := .F.
Local lDocType := .T.
aFiles := oView:GetXMLLayOut(lHtm,lEmbedded,lDocType)
aEvents[1][1] := "setEnable" // nome do evento
aEvents[1][2] := 'function setEnable() {'+; // script na linguagem JavaScript
'log.info("Teste de chamada de função");'+;
'}'
nFormId := FWECMPutCard(cProcessId,cDescription,cCardDescription,aFiles,aEvents) // retorna o codigo do fichário no ECM
If FWWFIsError()
aError := FWWFGetError()
MsgStop(aError[2])
Else
MsgInfo("Fichário atualizado com sucesso")
EndIf
Return
Usando MVC nos formulários Modelo 1
Para rotinas automáticas do tipo Modelo 1 (CRUD) que usam somente campos do Dicionário de Dados pode-se utilizar o MVC para simplificar o processo de customização do formulário, conforme abaixo:
#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 serão 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")
aFiles := oView:GetXMLLayOut(lHtm,lEmbedded,lDocType)
aEvents[1][1] := "setEnable" // nome do evento
aEvents[1][2] := 'function setEnable() {'+; // script na linguagem JavaScript
'log.info("Teste de chamada de função");'+;
'}'
nFormId := FWECMPutCard(cProcessId,cDescription,cCardDescription,aFiles,aEvents) // retorna o codigo do fichário no ECM
If FWWFIsError()
aError := FWWFGetError()
MsgStop(aError[2])
Else
MsgInfo("Fichário atualizado com sucesso")
EndIf
Return
...