Á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">
	<h3
		id="id-4.ExecuçãodeProceduresemProgramasProgressnoDatasul-4.1.Objetivo">
		<strong>4.1. Objetivo<Objective</strong>
	</h3>
	<p align="LEFT">
		<span>Hacer<span>Enable posible- a través de script</span><span>s</span><span>
			enthrough </span>script<span>s</span><span> in </span><strong>Fluig</strong><span>
			- lathe ejecuciónexecution deof procedure</span><span>s</span><span> (business
			(reglas de negociorules) enin programasProgress Progressprograms (BO – Business Object) enin </span><strong>Datasul</strong><span>.
			La<Th</span><span>sspan><span>e </span><span>llamada<span><span>call</span><span>s</span><span>se
			podr</span><span>án</span><span> hace<c</span><span>r<span><span>an</span><span> a
			cualquier procedure de manera no persistente, disponible</span>s</span><span>be mad</span><span>e</span><span> to any procedure in a
			non-persistent way, availabl</span><span>e</span><span> on programs
			en programas en el in </span><strong>AppServer Progress</strong><span>
			de in </span><strong>Datasul</strong><span>. Se respetarán los
			parámetrosThe desend idaand yreturn vueltaparameters defor cadaeach procedure sinwill necesidadbe derespected,
			realizar cambios en ellos. El acceso a los proceduress </span><span>está<without the need to modify them. Access to procedures </span><span>is</span><span>
			disponibleavailable through a través de un </span><strong>Web Services<span><strong>Webservices</strong><span>
			en elin </span><strong>Datasul</strong><span>
			called llamado </span><strong>ExecBO</strong><span>.
			El gráficoFigure </span><strong>3.1.a</strong><span> a continuación ilustra
			la estructura general de la solución</strong>below<span> shows the overall architecture of the solution.</span>
	</p>
	<p align="LEFT">
		<span><img class="confluence-embedded-image image-center"
			src="http://tdn.totvs.com/download/attachments/81789185/screen1.png?version=1&modificationDate=1380888898000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/81789185/screen1.png?version=1&modificationDate=1380888898000&api=v2"></span>
	</p>
	<p align="LEFT" style="text-align: center;">
		<span>Gráfico<span><strong>Figure 3.1.a</span><brstrong><br />
		<></span>
	</p>
	<p align="LEFT">
		<span>El<span>Figure gráfico 33.1. b presentapresents lathe interaccióninteraction entre los
			módulosamong modules.</span>
	</p>
	<p align="LEFT" style="text-align: center;">
		<span><img class="confluence-embedded-image image-center"
			src="http://tdn.totvs.com/download/attachments/81789185/screen2.png?version=1&modificationDate=1380888982000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/81789185/screen2.png?version=1&modificationDate=1380888982000&api=v2"><strong>Gráfico3><strong>Figure
				3.1.b</strong></span>
	</p>
	<p align="LEFT" style="text-align: left;">
		<span><br /></span>
	</p>
	<h3
		id="id-4.ExecuçãodeProceduresemProgramasProgressnoDatasul-4.2.GuiadeProgramação">
		<strong>4.2. GuíaProgramming de Programación<Guide</strong>
	</h3>
	<p align="LEFT">
		El <strong>WebServices ExecBO</strong> poseehas losthe siguientesfollowing métodosmethods:
	</p>
	<div class="table-wrap">
		<table class="confluenceTable">
			<tbody>
				<tr>
					<th class="confluenceTh"><p align="LEFT">Método<>Method</p></th>
					<th class="confluenceTh"><p align="LEFT">Descripción<>Description</p></th>
					<th class="confluenceTh"><p align="LEFT">Parámetros<>Parameters</p></th>
					<th class="confluenceTh"><p align="LEFT">Devolución<>Return</p></th>
				</tr>
				<tr>
					<td class="confluenceTd"><p align="LEFT">
							<strong>login</strong>
						</p></td>
					<td class="confluenceTd"><p align="LEFT">Realiza>Enter elusing logina
							deluser usuariologin, obteniendoobtaining lasthe credencialescredentials athrough travésthe delHEADER HEADERin delthe
							mensajeSOAP SOAPmessage.</p></td>
					<td class="confluenceTd"><p align="LEFT">No>It recibedoes not
							parámetrosreceive parameters directamentedirectly, perobut losit obtienegets athem travésthrough delthe HEADER del
							mensajein the SOAP message, donde se deberán informarwhere the following information is informed:</p>
						<p align="LEFT">
							<strong>username</strong>: nombreuser delname usuarioin en Datasul
						</p>
						<p align="LEFT">
							<strong>password</strong>: contraseñauser delpassword usuarioin en formato
							Base64Base64 format.
						</p></td>
					<td class="confluenceTd"><p align="LEFT">
							SiWhen elsuccessfully loginlogged sein, realizaan con éxito responde con un <strong>token<authentication <strong>token</strong>
							deis autenticaciónreturned.
						</p>
						<p align="LEFT">Si>When lasthe credencialescredentials sonare inválidasinvalid, accionaan unaexception
							exceptionis triggered.</p></td>
				</tr>
				<tr>
					<td class="confluenceTd"><p align="LEFT">
							<strong>userLogin</strong>
						</p></td>
					<td class="confluenceTd"><p align="LEFT">
							LaSame mismafunction funciónof delthe método <strong>login</strong> recibe sinmethod, but it
							embargoreceives lasthe credencialescredentials athrough través de parámetros normalesnormal parameters.
						</p></td>
					<td class="confluenceTd"><p align="LEFT">
							<strong>username</strong>: nombreuser delname usuarioin en Datasul.
						</p>
						<p align="LEFT">
							<strong>password</strong>: contraseñauser delpassword usuarioin en formato
							Base64Base64 format.
						</p></td>
					<td class="confluenceTd"><p align="LEFT">
							SiWhen elsuccessfully loginlogged sein, realiza con éxito responde con un an authentication <strong>token</strong>
							deis autenticaciónreturned.
						</p>
						<p align="LEFT">Si>When lasthe credencialescredentials sonare inválidasinvalid, accionaan unaexception
							exceptionis triggered.</p></td>
				</tr>
				<tr>
					<td class="confluenceTd"><p align="LEFT">
							<strong>callProcedure</strong>
						</p></td>
					<td class="confluenceTd"><p align="LEFT">
							EjecutaIt performs una procedure enin una BO Progress, recibiendo el <strong>token</strong>receiving the
							deauthentication autenticación<strong>token</strong> athrough travésthe del HEADER del mensaje SOAPin the
							SOAP message.
						</p>
						<p align="LEFT">
							Añadir el parámetroAt the HEADER, add the <strong>usertoken</strong> en el HEADERparameter.
						</p></td>
					<td class="confluenceTd"><p align="LEFT">
							<strong>programName:</strong>String – nombreBO delor BOProgress o programaprogram
							Progressname. This Esteprogram programashould deberábe estarin ena unafolder carpetaindicated indicadain enthe
							elAppServer PROPATH. delIf AppServer.it Siis estáin ena unasub subcarpetafolder, la mismait must be indicated
							deberánext estarto indicadathe al lado como el nombre del programaprogram name.
						</p>
						<p align="LEFT">
							<strong>procedureName:</strong>String – nombrename of delthe procedure ato
							ejecutarbe performed.
						</p>
						<p align="LEFT">
							<strong>jsonParams:</strong>String – string enin formatoJSON JSONformat
							conteniendocontaining los parámetros de la procedureprocedure parameters.
						</p></td>
					<td class="confluenceTd"><p align="LEFT">String enin formatoJSON
							JSONformat conwith losthe resultadosresults deof lathe ejecución de la procedureprocedure execution.</p></td>
				</tr>
				<tr>
					<td class="confluenceTd"><p align="LEFT">
							<strong>callProcedureWithToken</strong>
						</p></td>
					<td class="confluenceTd"><p align="LEFT">
							LaThe mismasame funciónfunction delas métodothe <strong>callProcedure</strong> method, no
							obstantebut the elauthentication <strong>token</strong> deis autenticaciónsent seas pasaa comonormal
							un parámetro normal del métodomethod parameter.
						</p></td>
					<td class="confluenceTd"><p align="LEFT">
							<strong>token</strong><span>:String – token deauthentication
								autenticacióntoken.</span>
						</p>
						<p align="LEFT">
							<strong>programName<<strong>programName:</strong> – String – nombreBO deor laProgress BO oprogram
							programa Progress. Este programa deberá estar en una carpetaname. This program should be in a folder indicated in the
							indicada en el PROPATH del AppServer. Si está en una subcarpeta,AppServer PROPATH. If it is in a sub folder, it must be indicated
							senext lato debethe indicar al lado como el nombre del programaprogram name.
						</p>
						<p align="LEFT">
							<strong>procedureName<<strong>procedureName:</strong> – String – nombrename deof lathe procedure
							ato be ejecutarperformed.
						</p>
						<p align="LEFT">
							<strong>jsonParams<<strong>jsonParams:</strong> – String – string enin formatoJSON JSONformat
							conteniendocontaining los parámetros de la procedure.procedure parameters.
						</p></td>
					<td class="confluenceTd"><p align="LEFT">String enin formatoJSON
							JSONformat conwith losthe resultadosresults deof lathe ejecución de la procedureprocedure execution.</p></td>
				</tr>
			</tbody>
		</table>
	</div>
	<p>&#160;</p>
	<p align="LEFT">
		<span>La<span>The contraseñauser's delpassword usuarioin enDatasul Datasulshould sebe debeinformed informarin dea
			manera codificada en Base64Base64-encoded way. PorFor ejemploexample, siif the lapassword contraseñais es
			'framework', su codificación resulta en laits
			coding results in the string ' ZnJhbWV3b3Jr = '. There are several
			Hayways variasto manerasperform dethis realizar esa codificación, </span><span>encodification. </span><span>In Javascript, we can
			Javascript podemos utilizar la función use the </span><strong>btoaspan>function<strong>btoa()</strong><span>, according to
			como se muestra en el ejemplo a continuaciónthe following example:</span>
	</p>
	<pre>var pwd64 = btoa("framework");</pre>
	<p>&#160;</p>
	<p align="LEFT">
		<span>El<span>The parámetroparameter </span><strong>jsonParams </strong><span>destrong><span>from
			losthe métodosmethods </span><strong>callProcedure</strong><span> oor </span><strong>callProcedureWithToken</strong><span>
			contendráshall contain losthe </span><strong>parámetros de la procedure<span><strong>procedure parameters</strong><span>
			enin formatoJSON JSONformat. DeIn esathis maneraway, lathe string </span><strong>jsonParams</strong><span>
			deberáshould represent representaran un<</span><strong>Array</strong><span> deof objetosobjects,
			dondewhere cadaeach objetoobject contienecontains losthe siguientesfollowing atributosattributes:</span>
	</p>
	<ul>
		<li><p align="LEFT">
				<strong>name</strong><span>: nombre del parámetro,parameter name, matching the
					correspondiente enProgress la procedure Progress. </span>
			</p></li>
		<li><p align="LEFT">
				<strong>type</strong><span>: tipoparameter detype, parámetro,which pudiendomay serbe:
					“input”"input", “output”"output" oor “input"input-output”output". </span>
			</p></li>
		<li><p align="LEFT">
				<strong>dataType</strong><span>: tipodata detype, dato,which pudiendomay serbe:
					“character”"character", “integer”"integer", “decimal”"decimal", “logical”"logical", “date”"date", “datetime”"datetime" oor
					“temp"temp-table”table". </span>
			</p></li>
		<li><p align="LEFT">
				<strong>value</strong><span>: valor delparameter parámetrovalue. </span><br />
				<span><br /></span>
			</p></li>
	</ul>
	<p align="LEFT">
		<span>Suponiendo<span>Assume una programaprogram llamadonamed </span><strong>Testespan><strong>Test. p</strong><span>
			quewith posee unaa procedure llamadanamed </span><strong>suma<span><strong>sum</strong><span>. This
			Esa procedure recibereceives dostwo valores </span><strong>enteros<span><strong>integer</strong><span> values
			comoas parámetros de </span><strong>input</strong><span> parameters, losit sums sumathem yand
			devuelvereturns tambiénan un </span><strong>entero<span><strong>integer</strong><span> comoas </span><strong>output</strong><span>.
			LaThe llamadacall parafor lathe </span><strong>callProcedure</strong><span> in enJava
			Java quedaría de la siguiente manerawould be as follows: </span>
	</p>
	<pre>String result = endpoint.callProcedure(“Teste.p”, “suma”“soma”, params);</pre>
	<p>&#160;</p>
	<p align="LEFT">
		DondeWhere <strong>params</strong> podríacould tenerhave elthe siguientefollowing valorvalue:
	</p>
	<pre>[{"dataType":"integer","name":"value1","value":55,"type":"input"},</pre>
	<pre> {"dataType":"integer","name":"value2","value":99,"type":"input"},</pre>
	<pre> {"dataType":"integer","name":"result","value":0,"type":"output"}]</pre>
	<p>&#160;</p>
	<p align="LEFT">
		ElThe retornomethod delreturn métodois tambiénalso esan unaABLTO Listalist. deIn ABLTO.this Enexample, esethe ejemplovalue elof
		valor de lathe <strong>result</strong> variable <strong>result</strong>would seríabe:
	</p>
	<pre>[{"dataType":"integer","name":"result","value":154,"type":"output"}]</pre>
	<p>&#160;</p>
	<p align="LEFT">Ahora veremos un ejemplo de llamada a una>Now let's see an example of calling a procedure
		quethat recibereceives unaa temp-table comoas parámetroa yparameter devuelveand elreturns mismoit pobladopopulated.</p>
	<pre>String result = endpoint.callProcedure(“Teste.p”, “getPaises”, params);</pre>
	<p>&#160;</p>
	<p align="LEFT">
		DondeWhere <strong>params</strong> has poseelthe aJSON string JSONwith conthe la declaracióndeclaration
		deof lathe siguientefollowing TEMP-TABLE:
	</p>
	<div class="code panel pdl" style="border-width: 1px;">
		<div class="codeContent panelContent pdl">
			<pre class="theme: Eclipse; brush: plain; gutter: true"
				style="font-size: 12px;">DEFINE TEMP-TABLE ttPais
   FIELD códigocode AS CHARACTER LABEL CódigoCode
   FIELD nombrename AS CHARACTER LABEL NombreName.</pre>
		</div>
	</div>
	<p align="LEFT">&#160;</p>
	<p align="LEFT">
		String JSON deString laat TEMP-TABLE <strong>ttPais</strong>:
	</p>
	<pre>[{"name":"ttPais",</pre>
	<pre>  "type":"input-output",</pre>
	<pre>  "dataType":"temptable",</pre>
	<pre>  "value":{"name":"ttPais",</pre>
	<pre>           "fields":[{"name":"códigocodigo","label":"CódigoCodigo","type":"integer"},</pre>
	<pre>                     {"name":"nombrenome","label":"NombreNome","type":"character"}],</pre>
	<pre>           "records":[]</pre>
	<pre>          }</pre>
	<pre>}]</pre>
	<p>&#160;</p>
	<p align="LEFT">El>The return retornocan puedebe serthe elfollowing siguienteJSON string JSON:</p>
	<pre>[{"name":"ttPais",</pre>
	<pre>  "type":"input-output",</pre>
	<pre>  "dataType":"temptable",</pre>
	<pre>  "value":{"name":"ttPais",</pre>
	<pre>           "fields":[{"name":"códigocodigo","label":"CódigoCodigo","type":"integer"},</pre>
	<pre>                     {"name":"nombrenome","label":"NombreNome","type":"character"}],</pre>
	<pre>           "records":[{"códigocodigo":55,"nombrenome":"Brasil"},</pre>
	<pre>                      {"códigocodigo":1,"nombrenome":"USA"},</pre>
	<pre>                      {"códigocodigo":33,"nombrenome":"Italia"},</pre>
	<pre>                      {"códigocodigo":15,"nombrenome":"Canadá”Canada”}]</pre>
	<pre>          }</pre>
	<pre>}]</pre>
	<p>&#160;</p>
	<h4
		id="id-4.ExecuçãodeProceduresemProgramasProgressnoDatasul-ParaobteroWSDLdoserviçoutilizaraseguinteURL:">Para>In
		obtener elorder to obtain the WSDL del servicio utilizar la siguientefor the service, use the following URL:</h4>
	<p>&#160;</p>
	<pre>
		<a href="http://server" class="external-link" rel="nofollow">http://server</a>:port/wsexecbo/WebServiceExecBO?wsdl</pre>
	<p>
		DondeWhere <strong>server:port </strong>esstrong>is elDatasul’s servidorserver y puerto de Datasuland port.<strong><br /></strong>
	</p>
	<p>&#160;</p>
	<h4
		id="id-4.ExecuçãodeProceduresemProgramasProgressnoDatasul-ExemplodeChamadaaoServiçoExecBOatravésdeumProcessonoFluig">
		<strong>Ejemplo<strong>Example of dea LlamadaCall alto Serviciothe ExecBO aService travésthrough de una
			ProcesoProcess enin Fluig</strong>
	</h4>
	<p align="LEFT" style="margin-left: 28.8px;">
		<span>A<span>Through través de </span><span><strong>Fluig&#160; Studio</strong></span><span>,
			registrarregister elthe servicioservice </span><span><strong>WSExecBO</strong></span><span>&#160;</span><span>despan><span>according
			acuerdoto conthe los siguientes<steps</span><span> pasosbelow:</span>
	</p>
	<p align="LEFT" style="margin-left: 29.7667px;">
		<span><strong>a.</strong></span><span> AFrom partir dethe la </span><span><strong>perspectivaspan><span><strong>Fluig
				Fluig<view, </strong></span><span>span><span>select the seleccionarPreview laService tab Visualización de Servicio </span><span>yspan><span>and
			luegothen </span><span><strong>Incluirspan><span><strong>Include Servicio<Service</strong></span><span> deas
			acuerdoshown conin el gráficofigure 3.2. a.</span>
	</p>
	<p style="margin-left: 19.2px; text-align: center;">
		<img class="confluence-embedded-image image-center"
			src="http://tdn.totvs.com/download/attachments/81789185/screen3.png?version=2&modificationDate=1380891568000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/81789185/screen3.png?version=2&modificationDate=1380891568000&api=v2"><strong>Gráfico><strong>Figure
			3.2.a</strong>
	</p>
	<p style="margin-left: 19.2px;">&#160;</p>
	<p align="LEFT" style="margin-left: 29.7667px;">
		<span><strong>b. </strong></span><span>Archivespan><span>Register the elnew nuevoservice
			servicio de manera similar alto gráficofigure 3.2. b.</span>
	</p>
	<p style="margin-left: 19.2px; text-align: center;">
		<img class="confluence-embedded-image image-center"
			src="http://tdn.totvs.com/download/attachments/81789185/screen4.png?version=1&modificationDate=1380891589000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/81789185/screen4.png?version=1&modificationDate=1380891589000&api=v2"><strong>Gráfico><strong>Figure
			3.2.b</strong>
	</p>
	<p style="margin-left: 19.2px;">&#160;</p>
	<p align="LEFT" style="margin-left: 30.7167px;">
		<span><strong>c.</strong></span><span> SeleccioneSelect lathe opción <strong>Consulta<strong>Service
				Servicio<Query</strong>, paraoption probarto latest comunicacióncommunications conwith elthe <strong>WebServices
				ExecBO</strong> yand listarlist lasthe operacionesavailable disponiblesoperations, comoas shown muestrain elfigure gráfico
			3.2.c.
		</span>
	</p>
	<p style="margin-left: 0.966667px; text-align: center;">
		<img class="confluence-embedded-image image-center"
			src="http://tdn.totvs.com/download/attachments/81789185/screen5.png?version=1&modificationDate=1380891739000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/81789185/screen5.png?version=1&modificationDate=1380891739000&api=v2"><strong>Gráfico><strong>Figure
			3.2.c</strong>
	</p>
	<p style="margin-left: 0.966667px;">&#160;</p>
	<p align="LEFT" style="margin-left: 28.8px;">
		<span><strong>d.</strong></span><span> CreeCreate una script parafor elthe
				evento de un proceso donde haya necesidad de obtener informaciones deevent of a process that has the need for information from a BO in
			una BO en Datasul. AAn continuaciónexample veremosfor unthe ejemplo para el evento event </span><span><strong>afterTaskSave</strong></span><span>
			de un procesoof a process can be seen below. </span>
	</p>
	<div class="code panel pdl" style="border-width: 1px;">
		<div class="codeContent panelContent pdl">
			<pre class="theme: Eclipse; brush: javascript; gutter: true"
				style="font-size: 12px;">function afterTaskSave(colleagueId,nextSequenceId,userList) {
   try {
      // UtilizaUses elthe ServiceManager parato obtain obtenera unareference referenciato althe servicioservice.
      var serviceProvider = ServiceManager.getService('WSEXECBO');
      var serviceLocator = 
          serviceProvider.instantiate('com.totvs.framework.ws.execbo.service.WebServiceExecBO');
      var service = serviceLocator.getWebServiceExecBOPort();
           
      var params = new Array();
 
      // Prepara los parámetros de // Prepares the procedure paraparameters to hacerbe llamadacalled enin Progress
      var param1 = new Object();
      param1.dataType = "integer";
      param1.name = "value1";
      param1.value = 55;
      param1.type = "input";
      params[0] = param1;
 
      var param2 = new Object();
      param2.dataType = "integer";
      param2.name = "value2";
      param2.value = 99;
      param2.type = "input";
      params[1] = param2;
 
      var param3 = new Object();
      param3.dataType = "integer";
      param3.name = "result";
      param3.type = "output";
      params[2] = param3;
 
      var jsonParams = JSON.stringify(params);
      log.info(">>> ParámetrosProcedure de procedureparameters:");
      log.info(jsonParams);
 
      // Logs Hacein loginand yreceives recibean elauthentication token de autenticación
      var token = service.userLogin("framework", "ZnJhbWV3b3Jr=");
 
      // LlamaCall athe procedure pasandoby lospassing parámetrosthe yparameters eland tokenthe deauthentication autenticacióntoken.
      var resp = service.callProcedureWithToken(token, "testeProcedure.p", "somasum", jsonParams);
 
      // ConvierteConverts elthe resultadoresult ato unan objetoobject
      var respObj = JSON.parse(resp);
 
      // PresentaDisplays elthe resultadoresult enin elthe log.
      log.info(respObj[0].value);

   } catch (error) {
      log.error(error.message);
   }
}
</pre>
		</div>
	</div>
	<p align="LEFT" style="margin-left: 28.8px;">
		<span><br /></span>
	</p>
	<pre>    </pre>
</div>