Hi community,
I have developed a very simple plugin, just some calculations on some Account fields (3 fields), registered at Update message, filtered by those fields, pre-operation, sync, running on D365.
Usually the plugin takes <50 to run, but sometimes it takes a long wait, >15000.
I have read around about first execution of plugin being slow after some inactivity, but can't belive this is the way, as it makes some users having to wait a long time until save completes, let's say 15 / 20 seconds, and in my oppinion the plugin useless.
Actually, this happens to me in other plugins also, but I choose this case as it's a very simple calculation, no queries, no external services, only a simple calc.
Some execution statistics:
Thanks in advance!!!
Plugin Execute code
IPluginExecutionContext context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext)); if (!context.InputParameters.Contains("Target")) return; var target = (Entity)context.InputParameters["Target"]; Entity image; if(!context.PreEntityImages.TryGetValue("Target", out image)) { image = new Entity("account"); }
//NOTHING SPECIAL HERE var accountWrapper = new AccountWrapper(image); accountWrapper.UpdateWith(target); //THIS CLASS JUST HAS THE CALCULATION LOGIC, INCLUDED BELOW FOR REFERENCE
var accountNextContactLogic = new AccountNextContactLogic(); var fechaProximoContactoNueva = accountNextContactLogic.ComputeAccountNextContactDate(accountWrapper); if (accountWrapper.FechaDeProximoContacto != fechaProximoContactoNueva) { target["ent_fechadeproximocontacto"] = fechaProximoContactoNueva; }
AccountNextContactLogic code
var proximoContacto = (account.FechaUltimaOperacion > account.FechaUltimaActividad || !account.FechaUltimaActividad.HasValue) ? account.FechaUltimaOperacion : account.FechaUltimaActividad; //agrego frecuencia proximoContacto = proximoContacto?.AddDays(account.FrecuenciaContacto ?? 0); //verifico que no supere la fecha no contactar antes de if(account.NoContactarAntesDe > proximoContacto) proximoContacto = account.NoContactarAntesDe; return fechaProximoContactoNueva;
*This post is locked for comments