在屏幕上更改严重性的事件是什么(ScreenID:CR306000)?

时间:2016-08-01 13:44:36

标签: acumatica

在我自定义下面的代码后,我想通过AssignDateTime更新SLA。但随着Severity的更改,我的SLA也已更改为从createdDateTime获取datetime。我认为它应该有其他需要自定义的事件。

{{1}}

2 个答案:

答案 0 :(得分:1)

SLAETA字段用PXFormulaAttribute修饰,每次更改以下字段之一时都会引发FieldDefaulting事件:

  • 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
    
        ...
    
    }
    

最好只在CRCaseMaint BLC扩展中自定义CRCase_SLAETA_FieldDefaulting处理程序,而不是实现CRCase_RowUpdated:

public class CRCaseMaint : PXGraph<CRCaseMaint, CRCase>
{
    ...

    protected virtual void CRCase_SLAETA_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
    {
        CRCase row = e.Row as 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;
            }
        }
    }

    ...
}

答案 1 :(得分:-1)

您可以使用FieldUpdated事件,也可以在行更新事件中查找字段的更改。

例如:row.Severity!= oldRow.Severity