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
Post a Comment