2017-04-25 2 views
0

Ich versuche, einen Mitarbeiter mit einer Aktion zu erstellen.So erstellen Sie einen Mitarbeiter mit einer Aktion

I identifiziert die minimal erforderliche Felder in der Benutzeroberfläche als: - EmployeeID (Schlüsselfeld) - Name (Kontakt DAC) - Mitarbeiter Klasse - Abteilung

ich zunächst nur die Werte einzugeben versucht erwartet dass SetValueExt die Standardereignisse ausführen und andere angeforderte Felder zuweisen würde, aber nach dem Ausführen der Aktion habe ich verschiedene Nachrichten erhalten, die diese zusätzlichen Felder anfordern. Also habe ich sie auch aufgenommen.

Mein Code sieht wie folgt aus:

 public PXAction<EPEmployee> testAction; 
    [PXButton] 
    [PXUIField(DisplayName = "EXTENDED")] 
    protected virtual IEnumerable TestAction(PXAdapter adapter) 
    { 
     EmployeeMaint employeeMaintGraph = PXGraph.CreateInstance<EmployeeMaint>(); 
     employeeMaintGraph.Clear(); 


     EPEmployee epEmployeeRow = new EPEmployee(); 
     epEmployeeRow.AcctCD = "CODED"; 
     epEmployeeRow.AcctName = "employee"; 
     epEmployeeRow.Status = "A"; 
     employeeMaintGraph.Employee.Insert(epEmployeeRow); 

     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.vendorClassID>(epEmployeeRow, "EMPDEFAULT"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.classID>(epEmployeeRow, "EMPDEFAULT"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.departmentID>(epEmployeeRow, "ADMIN"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.positionLineCntr>(epEmployeeRow, 1); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.consolidateToParent>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.allowOverrideCury>(epEmployeeRow, true); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.allowOverrideRate>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.payToParent>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.acctName>(epEmployeeRow, "employee"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.vendor1099>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.taxAgency>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.updClosedTaxPeriods>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.taxReportRounding>(epEmployeeRow, "R"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.taxUseVendorCurPrecision>(epEmployeeRow, true); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.taxReportFinPeriod>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.taxPeriodType>(epEmployeeRow, "M"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.enableTaxStartDate>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.landedCostVendor>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.isLaborUnion>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.lineDiscountTarget>(epEmployeeRow, "E"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.ignoreConfiguredDiscounts>(epEmployeeRow, false); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.sVATReversalMethod>(epEmployeeRow, "D"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.sVATInputTaxEntryRefNbr>(epEmployeeRow, "M"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.sVATOutputTaxEntryRefNbr>(epEmployeeRow, "M"); 
     employeeMaintGraph.CurrentEmployee.Cache.SetValueExt<EPEmployee.type>(epEmployeeRow, "EP"); 

     employeeMaintGraph.CurrentEmployee.Update(epEmployeeRow); 

     Contact contactRow = new Contact(); 
     contactRow.LastName = "lastname"; 
     employeeMaintGraph.Contact.Insert(contactRow); 


     Address addressRow = new Address(); 
     addressRow.CountryID = "US"; 
     employeeMaintGraph.Address.Insert(addressRow); 


     employeeMaintGraph.Actions.PressSave(); 

     return adapter.Get();} 

Mit dieser aktuellen Version erhalte ich die Meldung: "Fehler:‚Zweigniederlassung‘darf nicht leer sein. Fehler:.‚Default Location‘darf nicht leer sein Fehler : 'Route E-Mails' darf nicht leer sein. "

Ich habe in der Datenbank in BAccount, Employee, Vendor (Mitarbeiter DAC erbt davon) nach dem Branch-Feld gesucht, Kontakt- und Adresstabellen ohne Glück. Irgendeine Idee, was der Fehler sein könnte?

Danke.

Antwort

1

finden Sie im Codeausschnitt unten für ein Beispiel eines Mitarbeiters innerhalb einer Aktion zu erstellen:

public PXAction<EPEmployee> CreateEmployee; 
[PXButton] 
[PXUIField(DisplayName = "Create Employee")] 
protected void createEmployee() 
{ 
    EmployeeMaint employeeMaintGraph = PXGraph.CreateInstance<EmployeeMaint>(); 
    EPEmployee epEmployeeRow = new EPEmployee(); 
    epEmployeeRow.AcctCD = "EMPLOYEE1"; 
    epEmployeeRow = employeeMaintGraph.Employee.Insert(epEmployeeRow); 

    Contact contactRow = employeeMaintGraph.Contact.Current = employeeMaintGraph.Contact.Select(); 
    contactRow.FirstName = "John"; 
    contactRow.LastName = "Green"; 
    employeeMaintGraph.Contact.Update(contactRow); 

    Address addressRow = employeeMaintGraph.Address.Current = employeeMaintGraph.Address.Select(); 
    addressRow.CountryID = "US"; 
    addressRow = employeeMaintGraph.Address.Update(addressRow); 
    addressRow.State = "DC"; 
    employeeMaintGraph.Address.Update(addressRow); 

    epEmployeeRow.VendorClassID = "EMPSTAND"; 
    epEmployeeRow.DepartmentID = "FINANCE"; 
    employeeMaintGraph.Employee.Update(epEmployeeRow); 

    employeeMaintGraph.Actions.PressSave(); 

    throw new PXRedirectRequiredException(employeeMaintGraph, null); 
} 
+0

Dank Ruslan. Ich werde es versuchen –

+0

Danke @RuslanDev. Hat super funktioniert. Ich habe meine Fehler gesehen. 1 Follow-up-Frage: Weisen Sie ** employeeMaintGraph.Contact.Current = employeeMaintGraph.Contact.Select(); ** aus einem bestimmten Grund zu? Nach dem Debuggen scheint der Inhalt für diese Datenansicht bereits nach dem ersten Einfügen verfügbar zu sein. Ich habe es so versucht ** Kontakt contactRow = employeeMaintGraph.Contact.Current **, und scheint den Datensatz korrekt zu speichern –

+0

Wenn Sie einen neuen Mitarbeiter einfügen, gibt 'employeeMaintGraph.Contact.Current' immer den Hauptkontaktdatensatz als Kontakt zurück Der Datensatz wird automatisch in den Cache eingefügt und steht daher über die Eigenschaft Current von PXCache/Data View zur Verfügung. Die Verwendung der 'Select()' Methode ist etwas generischer, da sie in allen möglichen Szenarien funktioniert, unabhängig davon, ob Sie einen neuen Mitarbeiter hinzufügen oder einen vorhandenen aktualisieren müssen. – RuslanDev

Verwandte Themen