Conquista el calendario de recursos en Dynamics 365

Conquista el calendario de recursos en Dynamics 365

3 noviembre, 2020 eromerof 0 Etiquetas:

En nuestro día a día como programadores nos vemos envueltos por dificultades y retos que nos ponen a prueba (algunas veces nuestra propia paciencia) y es que es realmente complejo cómo se han estructurado los calendarios en D365

En cada recurso (Ya sea persona, máquina u animal) de Field Services tenemos un calendario donde definimos el horario laboral, vacaciones, enfermedades, indisponibilidades.. esto tiene un aspecto tal que así:

Hasta aquí todo bien, porque la visualización es muy sencilla de manejar y con el nuevo control personalizado que han implementado lo es mucho más. Con unos pocos clicks y unos formularios rápidos podemos crear disponibilidades o indisponibilidades.

Pero claro, el problema es cuando intentamos integrar estos calendarios con algún ETL, DataFlow…etc La estructura que lleva por detrás es muy compleja. Os muestro este diagrama que espero que ayude a la explicación:

  1. Cada Recurso tiene un lookup a una entidad llamada «Calendar».
  2. Cada Calendar tiene N calendarrules y a este conjunto lo llamaremos DateRule ya que, aquí nos informará de la fecha en que ocurre el evento (disponibilidad.. indisponibilidad de calendario).
  3. Cada calendarrule tiene un calendar más asociado
  4. Este segundo calendar a su vez tiene N calendarrule asociados. A este segundo conjunto de calendarrules los llamaremos TimeRule porque en este conjunto se definirá la hora.

¿Qué significa esto de que en un sitio se defina la fecha y en otro la hora? ¿Tiene algún sentido? Seguramente no (o si) pero desde luego si quieres ganarle la batalla a estos calendarios debes aceptarlo. Este sería el proceso esquematizado si desde .Net queremos informar al sistema de una disponibilidad:

0.- Queremos insertar desde .Net que un recurso trabaja el día 5 de noviembre de 2020 de 8 a 14 horas.

1.- Recuperamos el calendar asociado al recurso

2.- Creamos un calendarrule nuevo asociándolo a este calendar. Informaremos el parámetro starttime de esta entidad con la fecha 5/11/2020

3.- Creamos un registro de calendar asociado a este calendarrule.

4.- Creamos un registro de calendarrule asociado al calendar creado en el paso 3. Y no, no informaremos la hora directamente, debemos hacer una combinación de los distintos parámetros

4.1. Offset: Es la diferencia de horas desde las 12 de la noche hasta la hora de comienzo en el calendario. En este caso será 8

4.2. Duration: Es la duración total del evento. En este caso de 8 a 14 hay 6 horas y este parámetro será 6.

Espero que os sirvan estos pequeños tips acerca del calendario. No olvidéis que si tenéis alguna duda podéis consultarme sin ningún tipo de problema!!

Y no pensaréis que os iba a dejar sin un código de ejemplo, no? Aquí en este repositorio podéis encontrar ejemplos para consultar e insertar calendarios en .Net

Leave a Reply:

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *