2017-08-29 4 views
1

Ich möchte einige Validierungen im Kundenauftragsfenster durchführen, ich vergleiche das Feld Kunde (customerID) und das Feld Kundenauftrag (CustomerOrderNbr) und versuche eine Fehlermeldung zu geben, wenn beide Felder übereinstimmen.Acumatica Validierung für Kundenauftrag

Ich bin kein Programmierer, aber ich versuchte, einen Code, der viele Fehler geben, und ich bin nicht in der Lage, es zu beheben ...

namespace PX.Objects.SO 
{ 
    public class SOOrderEntry_Extension:PXGraphExtension<SOOrderEntry> 
    { 
     public const string ordernbrErrorMessage = "Customer name and customer number cannot be same."; 


    public void SOOrder_RowPersisting(PXCache sender, PXRowPersistingEventArgs e) 
    { 
     if (!ValidateCustomerID(sender, e.Row as SOOrder)) 
      { 
       PXUIFieldAttribute.SetError<SOOrder.customerID>(sender, e.Row, ordernbrErrorMessage); 
      } 
    } 



     public bool ValidateCustomerID(PXCache sender, SOOrder soOrder) 
     { 
      if (soOrder != null) 
      { 
       string soCustomerID = PXSelectorAttribute.GetField(sender, soOrder, typeof(SOOrder.customerID).Name, soOrder.CustomerID, typeof(Customer.acctCD).Name) as string; 
       string soCustomerOrderNbr = soOrder.CustomerOrderNbr; 

       if (soCustomerID != null && soCustomerOrderNbr != null) 
       { 
        return !soCustomerID.Trim().Equals(soCustomerOrderNbr.Trim(), StringComparison.OrdinalIgnoreCase); 
       } 
      }    

      return true; 

     } 
    } 
} 

Und dies ist mein erster Eintrag mit einigen Kundennamen und Bestellnummer

enter image description here

und das ist mein zweiter Eintrag mit dem gleichen Kundennamen und Bestellnummer

enter image description here

Nachdem Sie die Änderungen im Code tun es keine Fehlermeldung angezeigt wird ... neu gestartet ich die Website und überprüft, aber keine Ergebnisse

Antwort

2

ich unter die Syntaxfehler behoben. Ich würde jedoch geneigt sein zu glauben, dass diese Validierung keinen praktischen Anwendungsfall hat. CustomerID ist ein Integer-Feld (Zahl) in der Datenbank, das den Kundendatensatz identifiziert, normalerweise wird dies dem Benutzer nicht angezeigt. CustomerOrderNbr ist ein Freiform-Textfeld, das beliebige Zeichenfolgenwerte enthalten kann, die vom Benutzer eingegeben wurden. Ich würde nicht erwarten, dass der Benutzer eine CustomerID in CustomerOrderNbr eingibt.

EDIT: geändert SOOrder.CustomerID von Customer.AcctCD

namespace PX.Objects.SO 
{ 
    public class SOOrderEntry_Extension:PXGraphExtension<SOOrderEntry> 
    { 
     public const string ordernbrErrorMessage = "Customer name and customer number cannot be same."; 

     public void SOOrder_RowPersisting(PXCache sender, PXRowPersistingEventArgs e) 
     { 
      if (!ValidateCustomerID(sender, e.Row as SOOrder)) 
      { 
       PXUIFieldAttribute.SetError<SOOrder.customerID>(sender, e.Row, ordernbrErrorMessage); 
      } 
     } 

     public bool ValidateCustomerID(PXCache sender, SOOrder soOrder) 
     { 
      if (soOrder != null) 
      { 
       string soCustomerID = PXSelectorAttribute.GetField(sender, soOrder, typeof(SOOrder.customerID).Name, soOrder.CustomerID, typeof(Customer.acctCD).Name) as string;     string soCustomerOrderNbr = soOrder.CustomerOrderNbr; 

       if (soCustomerID != null && soCustomerOrderNbr != null) 
       { 
        return !soCustomerID.Trim().Equals(soCustomerOrderNbr.Trim(), StringComparison.OrdinalIgnoreCase); 
       } 
      }    

      return true; 
     } 
    } 
} 
+0

Der Grund, warum ich diese Validierung implementieren wollen, weil ich die gleiche Auftragsnummer jedes Mal eine neue haben nicht die gleichen Kunden wollen Bestellung wird ausgelöst ... – user8534573

+0

Das hat funktioniert! Danke ... – user8534573

+0

Aber es gibt den Fehler, selbst wenn die Kundenauftragsnummer leer oder geändert ist ... Ich will nur, es Fehler zu erhöhen, wenn beide Felder übereinstimmen – user8534573