2017-01-29 4 views
0

Unten ist mein Code, um den Wert einzugeben, der in meinem UsrWLAmt-Feld in mein BudgetGrid eingegeben wird, das den Verlauf der Feldwerte darstellt.Wie SetPropertyException von einem anderen Ereignishandler aufgerufen wird?

Ich möchte eine Warnung erhöhen Benutzer auffordert, in der BudgetGrid Geschichte

protected void PMProject_UsrWLAmt_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler) 
{ 
    if(InvokeBaseHandler != null) 
    InvokeBaseHandler(cache, e); 
    var row = (PMProject)e.Row; 
     PMProject con = Base.Project.Current; 
     PX.Objects.PM.ProjectExt item = con.GetExtension<PX.Objects.PM.ProjectExt>(); 
     if (item.UsrWLAmt > 0) 
     { 
      atcBudgetHis bud = new atcBudgetHis(); 
      bud.CreatedDateTime = DateTime.Now; 
      bud.Value = item.UsrWLAmt; 
      BudgetGrid.Insert(bud); 
      // to attach the exception object to the field 
      BudgetGrid.View.Cache.RaiseExceptionHandling<atcBudgetHis.details>(
      bud, " ", 
      new PXSetPropertyException(
      "Please specifiy reason for budget change.", 
      PXErrorLevel.Warning)); 

     } 
    } 

Ich habe auch

versucht, einen Wert in die Details Feld eingeben

Der obige Code doesn BudgetGrid.Cahce.RaiseExceptionHandling Keine Spurfehler.

EDIT:

PXUIFieldAttribute.SetWarning<atcBudgetHis.details>(BudgetGrid.Cache, null, "Please specifiy reason for budget change."); 

enter image description here

Works für alle Zeilen, aber

PXUIFieldAttribute.SetWarning<atcBudgetHis.details>(BudgetGrid.Cache, bud, "Please specifiy reason for budget change."); 

wirft keine Warnungen.

Ich könnte ein anderes Feld über dem Raster für die einzufügenden Notizen erstellen, aber gibt es eine Möglichkeit, die Warnung für die letzte Zeile im BudgetGird festzulegen?

Antwort

1

Es scheint, als hätten Sie versucht, eine Warnung für eine DAC-Instanz zu setzen, die zum Zeitpunkt des Aufrufs des Ereignisses nicht im Grid vorhanden war.

Haben Sie versucht, stattdessen die Warnung für die vorhandene Zeile zu setzen, die im Event-Handler-Parameter zurückgegeben wird?

PXUIFieldAttribute.SetWarning<atcBudgetHis.details>(BudgetGrid.Cache, row, "Please specify reason for budget change."); 

Die Warnung gilt für alle Zeilen, die die Bedingung erfüllen, die diese Zeile ausführt. Wenn Sie nur die letzte Zeile anzeigen möchten, müssen Sie manuell überprüfen, ob die im Parameter empfangene Zeile mit der letzten Zeile in der Datenansicht übereinstimmt, und erst dann die Warnung für diese Zeile ausführen.

+0

Danke, aber dieses Ereignis durch ein Feld ausgelöst wird über meinem PXGrid sitzt. Die Verwendung von row als zweitem Parameter in SetWarning gibt keine Warnung und keinen Fehler, da er im atcBudgetHis-DAC nach PMProject sucht – nickivey

0

Die Lösung war das RowInserted Ereignis für mein Raster zu verwenden und die Zeilenvariable in SetWarning

1

Das Wichtigste zuerst, passieren muss verwendet werden, um eine Warnung in Acumatica eines der folgenden Ereignisse zeigen:

  • FieldVerifying und werfen PXSetPropertyException, wann sollte nur während der Zeit Benutzer angezeigt Warnung aktualisiert einen Datensatz

  • RowUpd Ating mit RaiseExceptionHandling Methode auf PXCache aufgerufen, wenn Warnung auf mehreren Feldern nur während der Zeit Benutzer aktualisiert einen Datensatz

  • RowSelected mit RaiseExceptionHandling Methode aufgerufen auf PXCache angezeigt werden soll, wenn Warnung auf mehreren Feldern die ganze Zeit, bis erscheinen soll ein Benutzer die Ursache der Warnung

    Adressen

ich für Ihr spezielles Szenario erraten, könnte RowSelected am besten arbeiten ständig für alle leeren Zellen in Spalte Anmerkungen Warnungen anzuzeigen:

public void atcBudgetHis_RowSelected(PXCache sender, PXRowSelectedEventArgs e) 
{ 
    atcBudgetHis row = e.Row as atcBudgetHis; 
    if (row == null) return; 

    if (string.IsNullOrEmpty(row.Details)) 
    { 
     sender.RaiseExceptionHandling<atcBudgetHis.details>(row, string.Empty, 
      new PXSetPropertyException("Please specify reason for budget change.", PXErrorLevel.Warning)); 
    } 
    else 
    { 
     sender.RaiseExceptionHandling<atcBudgetHis.details>(row, row.Details, null); 
    } 
} 
0

Sie müssen diesen Code ändern:

BudgetGrid.Insert(bud); 
// to attach the exception object to the field 
BudgetGrid.View.Cache.RaiseExceptionHandling<atcBudgetHis.details>(bud, " ",new PXSetPropertyException("Please specifiy reason for budget change.",PXErrorLevel.Warning)); 

Um so etwas wie dieses:

bud = BudgetGrid.Insert(bud); //you need to get the "bud" which is in the cache 
// to attach the exception object to the field 
BudgetGrid.View.Cache.RaiseExceptionHandling<atcBudgetHis.details>(bud, " ",new PXSetPropertyException("Please specifiy reason for budget change.",PXErrorLevel.Warning)); 
Verwandte Themen