Principales respuestas
El evento Refresh de Subgrid no se dispara para todos los escenarios. Ayuda!!!

Pregunta
-
Buenas Tardes Jovenes,
Gusto de saludarlos, aca molestandoles entre su amplia gama de conocimientos.
Estoy CRM 2011, en el cual requiero hacer muchos procedimientos de javascript al agregar, borrar o actualizar items de subgrids en los formularios, por lo que necesito que se haga en tiempo real.
Encontre un metodo en el cual supuestamente es usado despues de roll up 12, y que funciona bien mas no en todos los escenarios; a que me refiero con esto.
Relacion de 1:N
Si yo agrego un nuevo item al subgrid el evento "SI SE ACTIVA"
Si yo elimino del subgrid sin entrar al item, es decir con el boton "Quitar elemento del subgrid", el evento "NO SE ACTIVA"
Relacion de N:N
Si yo agrego un nuevo item al subgrid el evento "NO SE ACTIVA"
Si yo elimino del subgrid sin entrar al item, es decir con el boton "Quitar elemento del subgrid", El evento "SI SE ACTIVA"
Como que fuera en sentido contrario,
esto me afecta ya que yo necesito que para cualquier escenario al final es una actualización de subgrid debe de invocar el evento.
Vale la pena tambien mencionar que los eventos en donde no se activa, al presionar o darle click en el boton actualizar subgrid que esta en la esquina superior derecha de cada subgrid, ahi si lo activa.
Parace extraño ya que siempre visualmente se ve que el subgrid se refresca pero los eventos no son llamados en los escenarios que les comente.
El codigo para atachar mi evento es el siguiente.
function setOnRefresh_Grid_DetalleContrato() {
try {
var c = Xrm.Page.ui.controls.get("Detalles_de_Contrato");
if(c != null) {
if(c._control.get_innerControl() != null) {
var self = c._control.get_innerControl();
self.RefreshBack = self.Refresh;
self.Refresh = function() {
self.RefreshBack();
ConsolidacionDeMontos();
};
}
else {
setTimeout("setOnRefresh_Grid_DetalleContrato();", 500);
}
}
else {
setTimeout("setOnRefresh_Grid_DetalleContrato();", 500);
}
}
catch(e) {
setTimeout("setOnRefresh_Grid_DetalleContrato();", 500);
}
}De antemano les agradezco su ayuda ya que sera de vital importancia para un proyecto muy importante.
Saludos Cordiales.
Respuestas
-
Hola Bayron, lo que estas haciendo es No soportado ya que estas accediendo a los objetos del formulario y modificando comportamientos.
Puedes poner a depurar el propio js del CRM, que te llevará algo de tiempo, pero que luego en una actualización podría cambiar, o pasar a hacer algo 100% soportado.
Las formas de hacerlo soportado pasarían por varias alternativas (aunque por ahí no son tan buenas como esta).
1) hacer lo que deseas en un web resource, en lugar de un subgrid estándar de CRM. desde aquí tioenes total control.
2) Hacer en el formulario un "SetTimeOut()" que vaa haciendo las consultas de esos subgrids cada x segundos y detecte los cambios y haga lo que necesitas.
un saludo
Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"
- Marcado como respuesta Bayron Daniel Carranza miércoles, 2 de abril de 2014 15:33
-
Hola Bayron,
Tal como dice Demian, es algo que no esta soportado. Bueno la forma como lo haces, el SDK te da el siguiente método para hacer el refresh del subgrid
Xrm.Page.getControl("accountcontactsgrid").refresh();
Te dejo la pagina del SDK para que le puedas echar un vistazo.
http://msdn.microsoft.com/en-us/library/jj602964.aspx
Salu2 Atilin | http://www.dexrm.com
- Marcado como respuesta Bayron Daniel Carranza miércoles, 2 de abril de 2014 15:33
-
Gracias Demian y Atilio por el apoyo,
Estoy analizando ya que es un tema bastante delicado, la opción 2 la intente hacer pero de igual manera no funciona ya que es extraño porque el subgrid si hace refresh colocando en una función Xrm.Page.getControl("accountcontactsgrid").refresh(); y llamandola cada determinado tiempo con un set timeout, pero cuando agregas un add existing en el subgrid el set timeout sigue funcionando y como cosa rara no activa el evento, hasta que le das click en el boton de actualizar subgrid de la parte superior derecha.
La opción me suena, ya que todo quedaria a la administración de un web resource, el problema que veo es que es un tema complicado porque seria bastante complejo manejar las relaciones desde, creo que es darle mucho la vuelta.
Una de mis opciones tambien fue un plugin y lo hace bien el problema es que a pesar que es syncrono, yo actualizo el papa para que me muestre los datos pero este no se ve reflejado a la primera, le tienes que dar muchos f5 para que aparezca o si no salirte y volver a entrar al formulario padre. Esto es bastante molesto para el usuario ya que puede reflejar un valor que no es el correcto.
Algún consejo para esta ultima parte, y de antemano muchas gracias por su pronta respuesta.
Saludos.
- Marcado como respuesta Bayron Daniel Carranza miércoles, 2 de abril de 2014 15:33
Todas las respuestas
-
Hola Bayron, lo que estas haciendo es No soportado ya que estas accediendo a los objetos del formulario y modificando comportamientos.
Puedes poner a depurar el propio js del CRM, que te llevará algo de tiempo, pero que luego en una actualización podría cambiar, o pasar a hacer algo 100% soportado.
Las formas de hacerlo soportado pasarían por varias alternativas (aunque por ahí no son tan buenas como esta).
1) hacer lo que deseas en un web resource, en lugar de un subgrid estándar de CRM. desde aquí tioenes total control.
2) Hacer en el formulario un "SetTimeOut()" que vaa haciendo las consultas de esos subgrids cada x segundos y detecte los cambios y haga lo que necesitas.
un saludo
Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"
- Marcado como respuesta Bayron Daniel Carranza miércoles, 2 de abril de 2014 15:33
-
Hola Bayron,
Tal como dice Demian, es algo que no esta soportado. Bueno la forma como lo haces, el SDK te da el siguiente método para hacer el refresh del subgrid
Xrm.Page.getControl("accountcontactsgrid").refresh();
Te dejo la pagina del SDK para que le puedas echar un vistazo.
http://msdn.microsoft.com/en-us/library/jj602964.aspx
Salu2 Atilin | http://www.dexrm.com
- Marcado como respuesta Bayron Daniel Carranza miércoles, 2 de abril de 2014 15:33
-
Gracias Demian y Atilio por el apoyo,
Estoy analizando ya que es un tema bastante delicado, la opción 2 la intente hacer pero de igual manera no funciona ya que es extraño porque el subgrid si hace refresh colocando en una función Xrm.Page.getControl("accountcontactsgrid").refresh(); y llamandola cada determinado tiempo con un set timeout, pero cuando agregas un add existing en el subgrid el set timeout sigue funcionando y como cosa rara no activa el evento, hasta que le das click en el boton de actualizar subgrid de la parte superior derecha.
La opción me suena, ya que todo quedaria a la administración de un web resource, el problema que veo es que es un tema complicado porque seria bastante complejo manejar las relaciones desde, creo que es darle mucho la vuelta.
Una de mis opciones tambien fue un plugin y lo hace bien el problema es que a pesar que es syncrono, yo actualizo el papa para que me muestre los datos pero este no se ve reflejado a la primera, le tienes que dar muchos f5 para que aparezca o si no salirte y volver a entrar al formulario padre. Esto es bastante molesto para el usuario ya que puede reflejar un valor que no es el correcto.
Algún consejo para esta ultima parte, y de antemano muchas gracias por su pronta respuesta.
Saludos.
- Marcado como respuesta Bayron Daniel Carranza miércoles, 2 de abril de 2014 15:33
-
Hola Bayron,
Yo creo que no nos escapamos de hacer algo a medida.
Lo del plugin, creo que así es su funcionamiento, se ejecuta en el servidor, pero claro, si quieres ver los cambios deberías de refrescar el cliente!
Sobre el desarrollo a medida, hay cosas muy practicas de usar para hacer algo rápido, por ejmeplo,
Este articulo de Demian, hacer un grid con Angular. http://www.demianrasko.com/2014/01/angularjs-en-dynamics-crm-2013.html
o Quizás con el jqgrid http://www.trirand.com/jqgridwiki/doku.php
te dejo su página de demos http://trirand.com/blog/jqgrid/jqgrid.html
Salu2 Atilin | http://www.dexrm.com
- Editado Atilio jueves, 3 de abril de 2014 14:22
-