cancel
Showing results for 
Search instead for 
Did you mean: 

Crear varios documentos en un intervalo de tiempo menor a 1 minuto

0 Kudos

Buenos días,

tengo un escenario el cual pasa información de una Base de datos intermedia a SAP B1 y crea un documento cada minuto.

¿Existe alguna manera de poder crear varios documentos dentro del mismo minuto? ejemplo cada 10 segundos.

agradezco su colaboración.

Accepted Solutions (0)

Answers (1)

Answers (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Buenas tardes

Te refieres a que lea información de la base de datos cada 10 segundos?. En ese caso solo tendrías que modificar el timer de tu desarrollo.

Atte.

0 Kudos

Hola felipe,

En efecto eso eso lo que busco, sin embargo las opciones que me muestra la ayuda de la integración ninguna funciona en segundos todas me trabajan de 1 minuto en adelante, sabes cual es la manera de indicarle por segundos?

agradezco tu colaboracion.

felipe_loyolarodriguez
Active Contributor
0 Kudos

El timer del b1if no permite segundos, lo que se realiza para procesar varios documentos a la vez es usar un "for-each" para meter cada registro en un "internal queue" y ese step del internal queue procesará cada documento por separado.

Algo así como en esta imagen

http://www.qualityinfosolutions.com/wp-content/uploads/2015/08/Captura-de-pantalla-de-2015-08-19-13-...

Dentro el for-each debes colocar un atom que pase la info a otro step.

Saludos

0 Kudos

Hola felipe,

hice lo que me indicaste en el proceso queda así:

Pero tengo varias dudas,

1. En el XPath expression del Path que ruta debo indicar?

2. En el XPath expression del For each que ruta debo indicar?

3. En el internal queue tengo que adicionar la informacion que lleva el atom?


Nota: con los cambios sigue funcionando el escenario creando un documento por minuto.


Agradezco tu colaboracion

felipe_loyolarodriguez
Active Contributor
0 Kudos

Bueno, es bastante difícil de explicar pero allá voy.

Primero

El resultado del SQL CALL retornará varios documentos (en este caso 3), algo así

<Payload>

     <ResultSet rowCount="3">

          <Row>

               <CardCode>C001</CardCode>

               <DocDate>20150101</DocDate>

               <DocTotal>20000</DocTotal>

          </Row>

          <Row>

               <CardCode>C001</CardCode>

               <DocDate>20150101</DocDate>

               <DocTotal>20000</DocTotal>

          </Row>

          <Row>

               <CardCode>C001</CardCode>

               <DocDate>20150101</DocDate>

               <DocTotal>20000</DocTotal>

          </Row>

     </ResultSet>

</Payload>

En el atom "Path" debes colocar una condicion para que entre al "for-each", cuando el rowCount sea mayor a 0 (es decir cuando hayan registros) y va de la siguiente manera

/*[/vpf:Msg/vpf:Body/vpf:Payload[./@id = &apos;nombre del atom&apos;]/jdbc:ResultSet/@rowCount >0]

Nota: si es un select va de esa manera, si es un exec a un stored procedure hay un nodo adicional

/*[/vpf:Msg/vpf:Body/vpf:Payload[./@id = &apos;nombre del atom&apos;]/jdbc:ResultSets/jdbc:ResultSet/@rowCount >0]

Esa condición indica que cuando el rowCount sea mayor a 0 entrara en el Path y por ende al for-earch (es como un If en sql).

en el for-each debes colocar que por cada "Row" del resultado, se vaya el internal queue para que procese cada registro.

Si es un select:

/vpf:Msg/vpf:Body/vpf:Payload[./@id = &apos;nombre del atom&apos;]/jdbc:ResultSet/jdbc:Row

Si es un SP

/vpf:Msg/vpf:Body/vpf:Payload[./@id = &apos;nombre del atom&apos;]/jdbc:ResultSets/jdbc:ResultSet/jdbc:Row

Eso enviara cada resultado al internal queue.

En el atom internal queue, en el nombre del queue debes colcocar el nombre de la cola ejemplo (ProcDocuments) este nombre debe estar en el inbound-channel del step que procesará y que debe ser de tipo internal queue el trigger.

Y en el mismo atom, debes colocar en el xpath o atom:

Si es un select:

/vpf:Msg/vpf:Body/vpf:Payload[./@id = &apos;nombre del atom&apos;]/jdbc:ResultSet/jdbc:Row

Si es un SP

/vpf:Msg/vpf:Body/vpf:Payload[./@id = &apos;nombre del atom&apos;]/jdbc:ResultSets/jdbc:ResultSet/jdbc:Row

Saludos

0 Kudos

Hola felipe,

hice el proceso que me indicaste pero me queda fallando el escenario, adicional la ultima ruta no me quedo claro donde la puedo ajustar

Si es un select:

/vpf:Msg/vpf:Body/vpf:Payload[./@id = &apos;nombre del atom&apos;]/jdbc:ResultSet/jdbc:Row

Nota: el siguiente link es lo que tengo de la integracion WeTransfer

agradezco tu colaboracion.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Puedes darme una descripción corta de que es lo que hace?

Atte.

0 Kudos

Hola felipe,

claro que si, se toma de una Base de datos intermedia 3 datos para crear los proyectos en SAP, los campos son el Código, nombre y cierre. los cuales envían una gran cantidad en horas de la mañana y otros pocos durante el resto del día, estos los usan para la facturación del día motivo por el cual no me sirve crear uno cada minuto.

agradezco mucho tu colaboración.