Base de datos · moca · Queries

Creación de comandos moca en el WMS de JDA

Una de las particularidades de moca, es la de ser de fácil uso y adaptable a las necesidades específicas de las operaciones a un alto nivel.

Por tal motivo los comandos moca son clave para pequeñas modificaciones en la aplicación estándar, logrando de esta manera la creación, manipulación y/o trazabilidad de los datos.

Todos los comandos moca se encuentran almacenados dentro de la siguiente carpeta:

Les/src/cmdsrc/

 

2019-05-27_19-02-45

Imagen 1 : Directorio de comandos moca

Dentro de la carpeta cmdsrc existen varios subdirectorios en los cuales se encuentran todos aquellos comandos tanto core como de usuario, es importante evitar la manipulación de estas carpetas ya que una mala manipulación puede ser causa de problemas críticos en la aplicación.

La carpeta en la que siempre debemos trabajar es en la de usr:

Les/src/cmdsrc/usr

La particularidad que tiene esta carpeta es que la aplicación la identifica como una carpeta de usuario, como lo mencione anteriormente los comandos core también se encuentran en cmdsrc, por tal motivo cada que se hace un refresh del servidor a nivel aplicación y/o una actualización de la versión core todas las carpetas de comandos moca diferentes a USR serán eliminadas y reemplazadas por las nuevas versiones, por tal motivo es de suma importancia crear todos nuestros comandos moca dentro de la carpeta de usuario.

Creación del comando moca (Caso de Estudio).

Debemos seguir los siguientes puntos para poder llegar a la creación correcta del comando moca.

1.- Analizar el requerimiento y la necesidad en operaciones, ejemplo:

Operaciones solicita que por medio del número de Orden el sistema pueda identificar los siguientes datos:

  • Número de Shipment
  • Número del trailer
  • Número del carrier move
  • Número del ship to de la orden

Para este requerimiento lo primero que se realizará es crear el query, al momento de crear el query es importante identificar los valores de entrada, los cuales los explico en el siguiente ejemplo:

Necesitamos realizar pruebas en nuestro query para lo cual haremos uso del comando moca publish data publicando el valor de alguna orden previamente identificada para realizar la prueba:

publish data
where orden = '4495529119'
/*Este numero de orden es con el que realizaremos las pruebas puedes 
reemplazarlo con algún número de orden válido para tu almacén */

Posteriormente procedemos a realizar el query para la obtención de los datos:

[select shipment.ship_id as No_Shipment,
car_move.trlr_id as No_Trailer,
car_move.car_move_id as No_Carrier,
shipment.rt_adr_id as No_Ship_To
from ord
join ord_line
on ord.ordnum = ord_line.ordnum
join shipment_line
on shipment_line.ordnum = ord_line.ordnum
join shipment
on shipment.ship_id = shipment_line.ship_id
join stop
on stop.stop_id = shipment.stop_id
join car_move
on car_move.car_move_id = stop.car_move_id
where ord.ordnum = @orden]

Este es el query que estaremos utilizando para la creación del comando moca cumpliendo las necesidades de la operación,  el valor «@orden»  es el valor heredado de la variable previamente publicada con el mismo nombre.

Para realizar pruebas de los valores obtenidos por el query es necesario ejecutar ambos dentro del mismo query usando el símbolo pipe «|» de la siguiente manera:

publish data
where orden = '4495529119'
/*Este numero de orden es con el que realizaremos las pruebas puedes reemplazarlo con algun numero de orden valido para tu almacen*/
|
[select shipment.ship_id as No_Shipment,
car_move.trlr_id as No_Trailer,
car_move.car_move_id as No_Carrier,
shipment.rt_adr_id as No_Ship_To
from ord
join ord_line
on ord.ordnum = ord_line.ordnum
join shipment_line
on shipment_line.ordnum = ord_line.ordnum
join shipment
on shipment.ship_id = shipment_line.ship_id
join stop
on stop.stop_id = shipment.stop_id
join car_move
on car_move.car_move_id = stop.car_move_id
where ord.ordnum = @orden
/*@orden es el valor heredado del publish data*/]

2.- Al momento de validar que el query regresa la información solicitada y que se cumple con la necesidad de la operación:

2019-05-27_19-36-42

Imagen 2: Validación de la ejecución del query

Validado el query se procede a eliminar la primer parte en donde se publica la variable orden. ya que ese fragmento de código solo es utilizado para realizar pruebas con valores controlados.

3.- En el cliente GUI del WMS de JDA procedemos a entrar a la pantalla «Server Command Maintenance», siendo esta la pantalla en donde se crean todos los comando moca para la aplicación.

2019-05-27_19-40-22

Imagen 3 : Pantalla «Server command maintenance»

4.- Procederemos a seleccionar el botón «Add» y posteriormente se agregaría el query como en el ejemplo de la Imagen 4:

2019-05-27_19-44-25

Imagen 4 : Nombrado de comando en nivel USRint

Es importante seguir el nombrado de los comandos como buena práctica de la siguiente manera:

  • Acción del comando: list, get, change, create
  • Nivel del comando: usr
  • Enunciado del comando: order information

El comando con el que se realiza el ejercicio se nombró como:

list usr order information

5.- Procedemos a ingresar el query previamente validado como tipo «local syntax» y en description una breve descripción del comando, como se muestra de ejemplo en la imagen 5:

2019-05-27_19-50-37

Imagen 5: Creación del comando moca

5.- Tras agregar el query procedemos a crear los argumentos de la siguiente manera dentro de la misma pantalla:

2019-05-27_19-52-25

Imagen 6: Creación de argumentos

6.- Después de crear los argumentos procedemos a salvar con el botón «save».

7.- Como último paso es necesario reiniciar la aplicación para que se realice el refresh de la memoria y el comando sea agregado.

8.- Ejecución del comando: al momento de que se reinicia el servidor nuestro comando está listo para ser ejecutado como se muestra en la imagen 7:

2019-05-27_19-56-58

Imagen 7: Ejecución del comando moca

9.- Si tu instancia se encuentra en cluster, es necesario repetir los pasos en todos los nodos relacionados de tu aplicación.

Conclusión

La mayoría de las veces surgen necesidades a nivel operaciones las cuales la aplicación no siempre puede cumplir, en mi experiencia he visto que muchas veces los super usuarios comparten queries para que sean ejecutados y se cumpla la necesidad, de esta manera se puede evitar que los usuarios de piso lean y modifiquen los queries ya que solo tendrían que ejecutar el comando por su nombre, lo cual tampoco es recomendable pero a veces por la urgencia de la necesidad recurrimos a este tipo de soluciones.

Gracias por pasarte por mi blog, y recuerda que si tienes dudas o sugerencias no dudes en redactarlos en la sección de comentarios.

Nota: La información presentada en este blog es solo para uso didáctico, ni el autor ni  la página se hacen responsables por el uso indebido de la información presentada. 

8 comentarios sobre “Creación de comandos moca en el WMS de JDA

    1. Hola José, ¿cómo qué tipo de manual requieres ?, casi no tengo manuales, pero si gustas puedo hacer una entrada a mi blog del tema en específico que requieras, gracias por pasarte por mi blog, saludos.

      Me gusta

  1. En casos no recurrentes pienso que lo recomentable sería pasar resultado a operaciones en algún formato de facíl interpretación u ofrecerles alguna otra forma de obtener sus datos o similar al resultado que esperan.

    Me gusta

  2. Hola David, estaria bien que nos ayudaras con una entrada donde pudieramos conocer mas comandos como estos ya que ayudan mucho:

    [select sto_zone_id
    from sto_zone] catch(@?) >> res_sto_id
    |
    convert column results to string
    where res = @res_sto_id
    and colnam = ‘sto_zone_id’
    and separator = ‘,’
    |
    convert list to in clause
    where string = @result_string
    and column_name = ‘sto_zone_id’
    and separator = ‘,’
    o

    publish data combination
    where res1 = @res1
    and res2 = @res2 >> res3
    |
    select from internal table
    where res = @res3
    and select_stmt = ‘select wrkzon, min(hora_inicio), max(piezas_pendientes)’
    and group_by_clause = ‘group by wrkzon’

    Me gusta

  3. Excelente descripción, me pregunto si tienes información sobre hacer comandos con multihilos para hacer mas eficiente un comando muy pesado?

    Me gusta

    1. Hola Esau, perdón por la tardía respuesta para poder crear un comando multihilos tendríamos que hacer la llamada de otro comando dentro del comando padre, me puedes por favor compartir más detalles del requerimiento para poder analizarlo y encontrar una mejor solución. Saludos

      Me gusta

Deja un comentario