Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
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>&#160;</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">&lt;HTML></p>
		<p align="left">&lt;HEAD></p>
		<p align="left">&#160; &lt;TITLE>Ejemplo - Cliente&lt;/TITLE></p>
		<p align="left">&#160; &lt;LINK REL=STYLESHEET
			HREF="/webdesk203/wdk/global.css"></p>
		<p align="left">&lt;/HEAD></p>
		<p align="left">&lt;BODY scroll=yes></p>
		<p align="left">&lt;span class="NumSecao"></p>
		<p align="left">&lt;strong>&#160;Registro&lt;/strong>&lt;/span></p>
		<p align="left">&lt;HR></p>
		<p align="left">&lt;br></p>
		<p align="left">&lt;form></p>
		<p align="left">&lt;table></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Código:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong>&lt;input type="text" size="6"
			name="A1_COD">&lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Tienda:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong>&lt;input type="text" size="2"
			name="A1_TIENDA">&lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Física/Jurídica:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;select name="A1_PERSONA"></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="F">Física&lt;/option></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="J">Jurídica&lt;/option></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;/select></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Nombre:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong>&lt;input type="text" size="40"
			name="A1_NOMBRE">&lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Nombre Fantasía:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong>&lt;input type="text" size="20"
			name="A1_NREDUC">&lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Dirección:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong>&lt;input type="text" size="40"
			name="A1_DIR">&lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Tipo:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;select name="A1_TIPO"></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="F">Cons. Final&lt;/option></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="L">Productor Rural&lt;/option></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="R">Revendedor&lt;/option></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="S">Solidario&lt;/option></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="X">Exportación&lt;/option></p>
		<p align="left">&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;/select></p>
		<p align="left">&#160;&#160;&#160; &lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Municipio:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong>&lt;input type="text" size="60"
			name="A1_MUN">&lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160; &lt;tr></p>
		<p align="left">&#160;&#160;&#160; &lt;td align="right"
			width="150" class="Labels">&lt;b>Estado:&lt;/b>&lt;/td></p>
		<p align="left">&#160;&#160;&#160; &lt;td
			class="Normal">&lt;strong>&lt;input type="text" size="2"
			name="A1_EST">&lt;/strong>&lt;/td></p>
		<p align="left">&#160; &lt;/tr></p>
		<p align="left">&#160;&lt;/table></p>
		<p align="left">&lt;/form></p>
		<p align="left">&lt;/BODY></p>
		<p align="left">&lt;/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 \ &lt;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">&#160;</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] :=
			'&lt;HTML>'+; // contenido del archivo</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;HEAD>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;
			&lt;TITLE>Ejemplo - Cliente&lt;/TITLE>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;LINK
			REL=STYLESHEET HREF="/webdesk203/wdk/global.css">'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;/HEAD>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;BODY
			scroll=yes>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;span
			class="NumSecao">'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;strong>&#160;Registro&lt;/strong>&lt;/span>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;HR>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;br>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;form>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;table>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150"
			class="Labels">&lt;b>Código:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>&lt;input type="text" size="6"
			name="A1_COD">&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150"
			class="Labels">&lt;b>Tienda:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>&lt;input type="text" size="2"
			name="A1_TIENDA">&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150"
			class="Labels">&lt;b>Física/Jurídica:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;select name="A1_PERSONA">'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="F">Física&lt;/option>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="J">Jurídica&lt;/option>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;/select>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150"
			class="Labels">&lt;b>Nombre:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>&lt;input type="text" size="40"
			name="A1_NOMBRE">&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150" class="Labels">&lt;b>Nombre
			Fantasía:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>&lt;input type="text" size="20"
			name="A1_NREDUC">&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150"
			class="Labels">&lt;b>Dirección:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>&lt;input type="text" size="40"
			name="A1_DIR">&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150"
			class="Labels">&lt;b>Tipo:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;select name="A1_TIPO">'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="F">Cons. Final&lt;/option>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="L">Productor Rural&lt;/option>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="R">Revendedor&lt;/option>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="S">Solidario&lt;/option>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;option value="X">Exportación&lt;/option>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;/select>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;&#160;&#160;&#160;
			&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150"
			class="Labels">&lt;b>Municipio:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>&lt;input type="text" size="60"
			name="A1_MUN">&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;tr> '+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td align="right" width="150"
			class="Labels">&lt;b>Estado:&lt;/b>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160;&#160;&#160;
			&lt;td class="Normal">&lt;strong>&lt;input type="text" size="2"
			name="A1_EST">&lt;/strong>&lt;/td>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&#160; &lt;/tr>'+;</p>
		<p align="left" style="margin-left: 30.0px;">' &lt;/table>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;/form>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;/BODY>'+;</p>
		<p align="left" style="margin-left: 30.0px;">'&lt;/HTML>'</p>
		<p align="left">&#160;</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">&#160;</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;">&#160;&#160; aError
			:= FWWFGetError()</p>
		<p align="left" style="margin-left: 30.0px;">&#160;&#160;
			MsgStop(aError[2])</p>
		<p align="left" style="margin-left: 30.0px;">Else</p>
		<p align="left" style="margin-left: 30.0px;">&#160;&#160;
			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">&#160;</p>
		<p align="left">
			<a href="http://oViewsetOperation(3)" class="external-link"
				rel="nofollow">oView:setOperation(3)</a>
		</p>
		<p align="left">&#160;</p>
		<p align="left">
			aFiles := oView:<strong>GetXMLLayOut(lHtm,lEmbedded,lDocType)</strong>
		</p>
		<p align="left">&#160;</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">&#160;</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">&#160;&#160; aError := FWWFGetError()</p>
		<p align="left">&#160;&#160; MsgStop(aError[2])</p>
		<p align="left">Else</p>
		<p align="left">&#160;&#160; 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">&#160;</p>
		<p align="left">
			<strong>FwAliasMVC(cTable,cProcessId,cDescription)</strong>
		</p>
		<p align="left">&#160;</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">&#160;</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">&#160;</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">&#160;&#160; aError := FWWFGetError()</p>
		<p align="left">&#160;&#160; MsgStop(aError[2])</p>
		<p align="left">Else</p>
		<p align="left">&#160;&#160; MsgInfo("Fichero actualizado con
			éxito")</p>
		<p align="left">EndIf</p>
		<p align="left">Return</p>
	</blockquote>
	<p align="left">&#160;</p>
	<p align="left">&#160;</p>
	<p>&#160;</p>
	<p>
		<br /> <br />
	</p>
	<p>&#160;</p>
</div>

Como criar um formulário diretamente no ECM

  1. Criar um arquivo HTML com os campos com o mesmo nome utilizado no Microsiga Protheus
  2. 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>&nbsp;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

  1. Configurar a integração para GED entre o Protheus e o ECM no Configurador na opção Ambiente > Totvs ECM > Wizard do GED
  2. 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>&nbsp;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

  1. Configurar a integração para GED entre o Protheus e o ECM no Configurador na opção Ambiente > Totvs ECM > Wizard do GED
  2. Utilizar o método GetXMLLayout do View para gerar o HTML
    1. Somente os componentes Fields e Grid serão convertidos para HTML
    2. 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.
    3. 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.

 

oView:setOperation(3)

 

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")

oView:setOperation(3)

 

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

 

 

 

...