Nachdem ich den Code unten angepasst habe und ich SLA durch AssignDateTime aktualisieren möchte. Aber mit der Änderung des Schweregrads hat sich mein SLA geändert, um auch datetime von createdDateTime zu erhalten. Ich denke, es sollte andere Ereignisse haben, die angepasst werden müssen.Was ist das Ereignis zum Ändern des Schweregrades auf dem Bildschirm Case (ScreenID: CR306000)?
protected virtual void CRCase_RowUpdated(PXCache cache, PXRowUpdatedEventArgs e, PXRowUpdated InvokeBaseHandler)
{
if (InvokeBaseHandler != null)
InvokeBaseHandler(cache, e);
var row = e.Row as CRCase;
var oldRow = e.OldRow as 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);
}
}
}
}
Also wenn ich bei der Änderung des Schweregrades aktualisieren möchte, sollte ich die gleiche Codierung am CRCase_RowUpdated Event anpassen? – YSP
FieldDefaulting wird für das Feld SLAETA immer dann ausgelöst, wenn CRCase.severity aufgrund der Implementierung von PXFormulaAttribute geändert wird. Um SLAETA zu aktualisieren, "wenn der Schweregrad geändert wird", sollten Sie CRCase_SLAETA_FieldDefaulting nur überschreiben und e.NewValue einen neuen Wert zuweisen. Zum Ausführen Ihrer Aufgabe sind keine zusätzlichen Handler wie CRCase_RowUpdated erforderlich. – RuslanDev
Wie auch immer, wie kann ich den Max-Wert und Min-Wert von DateTime mit BQL-Struktur festlegen? – YSP