Histórico da Página
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> </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> </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> </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> </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> </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> </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"> </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> </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> </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> </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> </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  Studio</strong></span><span>, registrarregister elthe servicioservice </span><span><strong>WSExecBO</strong></span><span> </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;"> </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;"> </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;"> </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> |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas