How Can We Help?
Akcje
W tym artykule dowiesz się jak dodać akcje (przycisk w toolbarze), przy pomocy której operator będzie mógł (włączyć/wyłączyć) samochód z użycia.
Dodatkowo stworzymy nową encję SamochodAktywacjaZmiany, w której będziemy rejestrować wszystkie właczenia i wyłączenia samochodu z użycia. Powstanie w ten sposób historia zmian z informacją kto i kiedy zmieniał dostępność samochodu. Encja SamochodAktywacjaZmiany będzie się składać z następujących pól: Samochód (referencja do samochód One-To-Many), Operator (kto dokonał zmiany), Data (data zmiany), Operacja (tu będziemy zapisywać wykonane operacje (Aktywacja/Deaktywacja).
Zobacz jak
SamochodAktywacjaZmiany – Zdefiniowanie Pól
Do SamochodAktywacjaZmiany dodajemy następujące pola:
// W tym miejscu będziemy definiować pola klasy (properties). // ... private samochod _Samochod; [Association("samochod-samochodaktywacja")] // <- Referencja do Samochod.cs (One-To-Many) public samochod Samochod { get { return _Samochod; } set { SetPropertyValue("Samochod", ref _Samochod, value); } } private DateTime _Data; [ReadOnly(true)] public DateTime Data { get { return _Data; } set { SetPropertyValue("Data", ref _Data, value); } } private string _Operacja; public string Operacja { get { return _Operacja; } set { SetPropertyValue("Operacja", ref _Operacja, value); } } // ...
Aby to wszystko funkcjonowało musimy także stworzyć nowe pola w encji Samochod.cs oraz zdefiniować relację One-To-Many. (relacje musimy zdefiniować w obu encjach)
Zobacz jak:
Do już istniejącej encji Samochod.cs dodajemy pola: Aktywny(boolean – bedzie przyjmować wartość true/false, czyli aktywny/nieaktywny) oraz AktywacjaZmiany(kolekcja)
// W tym miejscu będziemy definiować pola klasy (properties). // ... private bool _Aktywny; public bool Aktywny { get { return _Aktywny; } set { SetPropertyValue("Aktywny", ref _Aktywny, value); } } [Association("samochod-samochodaktywacja"), DevExpress.Xpo.Aggregated] // <- Relacja One-To-Many z SamochodAktywacjaZmiany public XPCollection<SamochodAktywacjaZmiany> SamochodAktywacjaZmiany { get { return GetCollection<SamochodAktywacjaZmiany>("SamochodAktywacjaZmiany"); } } // ...
Dodanie Akcji
Jeżeli zrobiliśmy wszystkie kroki powyżej poprawnie to możemy przejść do zdefiniowania akcji, stworzymy teraz akcje aktywacji i akcje deaktywacji samochodu. Zrobimy to za pomocą kodu w encji Samochod.cs
// W tym miejscu będziemy definiować pola klasy (properties). // ... [Action(Caption = "Aktywacja", ConfirmationMessage = "Are you sure?", ImageName = "Attention", AutoCommit = false)] public void Aktywacja() { this.Aktywny = true; SamochodAktywacjaZmiany samochodAktywacjaZmiany = new SamochodAktywacjaZmiany(Session); samochodAktywacjaZmiany.Samochod = this; samochodAktywacjaZmiany.Data = DateTime.Today; samochodAktywacjaZmiany.Operacja = "Aktywacja"; samochodAktywacjaZmiany.Save(); } [Action(Caption = "Deaktywacja", ConfirmationMessage = "Are you sure?", ImageName = "Attention", AutoCommit = true)] public void Deaktywacja() { this.Aktywny = false; SamochodAktywacjaZmiany samochodAktywacjaZmiany = new SamochodAktywacjaZmiany(Session); samochodAktywacjaZmiany.Samochod = this; samochodAktywacjaZmiany.Data = DateTime.Today; samochodAktywacjaZmiany.Operacja = "Deaktywacja"; samochodAktywacjaZmiany.Save(); } // ...
Dodatkowo możemy też wyłączyć guzik (Aktywacja) gdy samochód jest już Aktywny oraz wyłączyć guzik (Deaktywacja) gdy samochód jest już nieaktywny. Można zrobić to za pomocą zasad wyglądu (AppearanceRules):
// namespace Ingenes.ExpressApp.Samochody.BusinessObjects // ... [Appearance("WylaczAktywacje", AppearanceItemType = "Action", TargetItems = "samochod.Aktywacja", Criteria = "[Aktywny] = True", Context = "Any", Enabled = false)] [Appearance("WylaczDeaktywacje", AppearanceItemType = "Action", TargetItems = "samochod.Deaktywacja", Criteria = "[Aktywny] = False", Context = "Any", Enabled = false)] // ... // public class samochod : BaseObject
Efekt:
Za pomocą akcji Deaktywacji możemy wyłączyć wybrany samochód z użytku, namiast za pomocą Aktywacji możemy przywrócić samochód do użytku.