acumatica - What's the event for changing Severity on screen Case (ScreenID: CR306000)? -


after customized code below , want update sla assigndatetime. severity changed sla has changed datetime createddatetime also. think should have other event need customize.

protected virtual void crcase_rowupdated(pxcache cache, pxrowupdatedeventargs e, pxrowupdated invokebasehandler) {     if (invokebasehandler != null)         invokebasehandler(cache, e);     var row = e.row crcase;     var oldrow = e.oldrow crcase;     crcaseext rowext = pxcache<crcase>.getextension<crcaseext>(row);      if (row == null || oldrow == null) return;      if (row.ownerid == null)     {         row.assigndate = null;         row.slaeta = null;     }     else if (oldrow.ownerid == null)     {         row.assigndate = pxtimezoneinfo.now;         if (row == null || row.assigndate == null) return;          if (row.classid != null && row.severity != null)         {             var severity = (crclassseveritytime)pxselect<crclassseveritytime,                             where<crclassseveritytime.caseclassid, equal<required<crclassseveritytime.caseclassid>>,                             and<crclassseveritytime.severity, equal<required<crclassseveritytime.severity>>>>>                             .select(base, row.classid, row.severity);             if (severity != null && severity.timereaction != null)             {                 row.slaeta = ((datetime)row.assigndate).addminutes((int)severity.timereaction);             }         }         if (row.severity != null && row.contractid != null)         {             var template = (contract)pxselect<contract, where<contract.contractid, equal<required<crcase.contractid>>>>.select(base, row.contractid);             if (template == null) return;             var sla = (contractslamapping)pxselect<contractslamapping,                     where<contractslamapping.severity, equal<required<crcase.severity>>,                     and<contractslamapping.contractid, equal<required<crcase.contractid>>>>>                     .select(base, row.severity, template.templateid);             if (sla != null && sla.period != null)             {                 row.slaeta = ((datetime)row.assigndate).addminutes((int)sla.period);             }         }     } } 

slaeta field decorated pxformulaattribute raise fielddefaulting event every time change made 1 of following fields:

  • crcase.contractid
  • crcase.severity
  • crcase.caseclassid

    public partial class crcase : ibqltable, iassign, iattributesupport, ipxselectable {     ...      #region slaeta     public abstract class slaeta : ibqlfield { }      [pxdbdate(preservetime = true, displaymask = "g")]     [pxuifield(displayname = "sla")]     [pxformula(typeof(default<crcase.contractid, crcase.severity, crcase.caseclassid>))]     public virtual datetime? slaeta { get; set; }     #endregion      ...  } 

it’s way better customize crcase_slaeta_fielddefaulting handler in crcasemaint blc extension instead of implementing crcase_rowupdated:

public class crcasemaint : pxgraph<crcasemaint, crcase> {     ...      protected virtual void crcase_slaeta_fielddefaulting(pxcache sender, pxfielddefaultingeventargs e)     {         crcase row = e.row crcase;         if (row == null || row.createddatetime == null) return;          if (row.classid != null && row.severity != null)         {             var severity = (crclassseveritytime)pxselect<crclassseveritytime,                                                     where<crclassseveritytime.caseclassid, equal<required<crclassseveritytime.caseclassid>>,                                                     and<crclassseveritytime.severity, equal<required<crclassseveritytime.severity>>>>>.                                                     select(this, row.classid, row.severity);             if (severity != null && severity.timereaction != null)             {                 e.newvalue = ((datetime)row.createddatetime).addminutes((int)severity.timereaction);                 e.cancel = true;             }         }          if (row.severity != null && row.contractid != null)         {             var template = (contract)pxselect<contract, where<contract.contractid, equal<required<crcase.contractid>>>>.select(this, row.contractid);             if (template == null) return;              var sla = (contractslamapping)pxselect<contractslamapping,                                               where<contractslamapping.severity, equal<required<crcase.severity>>,                                               and<contractslamapping.contractid, equal<required<crcase.contractid>>>>>.                                               select(this, row.severity, template.templateid);             if (sla != null && sla.period != null)             {                 e.newvalue = ((datetime)row.createddatetime).addminutes((int)sla.period);                 e.cancel = true;             }         }     }      ... } 

Comments