Wykonywanie zadań związanych z danych przy użyciu kodu
Można użyć projektantów i okien narzędzi w Visual Studio LightSwitch, aby wykonać wiele zadań związanych w projektowaniem danych.Jednak niektóre zadania można wykonywać tylko przez dodanie kodu do aplikacji.Na przykład, aby sprawdzić poprawność pola, stosując warunki niestandardowe, należy napisać kod.Ten dokument zawiera sposoby wykonywania zadań związanych z danymi przy użyciu obiektowego modelu danych środowiska uruchomieniowego.Więcej informacji o tym, gdzie można wpisać kod w aplikacji, zobacz następujące tematy:
Aby uzyskać ogólne wytyczne na temat pisania kodu Visual Studio LightSwitch, zobacz Pisanie kodu w LightSwitch.
Typowe zadania
Na poniższej liście pokazano niektóre typowe powiązane z danymi zadania wykonywane przy użyciu modelu obiektu danych środowiska uruchomieniowego.Zadania są opisane w dalszej części dokumentu.
Odczyt danych
Aktualizowanie danych
Usuwanie danych
Dodawanie danych
Zapisywanie danych
Sprawdzanie poprawności danych
Ustawianie uprawnień dla danych
Praca z zestawami zmian
Rozszerzanie zapytań
Odczyt danych
Można czytać pojedyncze elementy danych lub kolekcje elementów danych z dowolnego źródła danych w aplikacji.
Poniższy przykład pobiera klienta, który jest aktualnie zaznaczony na ekranie.
Private Sub RetrieveCustomer_Execute()
Dim cust As Customer = Me.Customers.SelectedItem
If cust.ContactName = "Bob" Then
'Perform some task on the customer entity.
End If
End Sub
partial void RetrieveCustomer_Execute()
{
Customer cust = this.Customers.SelectedItem;
if (cust.ContactName == "Bob")
{
//Perform some task on the customer entity.
}
}
Poniższy przykład iteruje po zbiorze klientów.
Private Sub RetrieveCustomers_Execute()
For Each cust As Customer In Me.DataWorkspace.NorthwindData.Customers
If cust.ContactName = "Bob" Then
'Perform some task on the customer entity.
End If
Next
End Sub
partial void RetrieveCustomers_Execute()
{
foreach (Customer cust in this.DataWorkspace.NorthwindData.Customers)
{
if (cust.ContactName == "Bob")
{
//Perform some task on the customer entity.
}
}
}
Nawigacja po relacjach danych
Można odczytywać dane z jednostek powiązanych.Na przykład jednostka Klient może znajdować się w relacji jeden do wielu z jednostką Zamówienia.Można przejść przez wszystkie zamówienia, które zostały złożone przez klienta za pomocą właściwości Zamówienia jednostki Klient.
Poniższy przykład iteruje po kolekcji zamówień powiązanych z klientem.
Private Sub RetrieveSalesOrders_Execute()
Dim cust As Customer = Me.Customers.SelectedItem
For Each myOrder As Order In cust.Orders
If myOrder.OrderDate = Today Then
'Perform some task on the order entity.
End If
Next
End Sub
partial void RetrieveSalesOrders_Execute()
{
Customer cust = this.Customers.SelectedItem;
foreach (Order order in cust.Orders)
{
if (order.OrderDate == DateTime.Today)
{
//perform some task on the order entity.
}
}
}
Poniższy przykład pobiera klienta, który złożył określone zamówienie.
Private Sub RetrieveCustomer_Execute()
Dim order As Order
order = Me.DataWorkspace.NorthwindData.Orders_Single _
(Orders.SelectedItem.OrderID)
Dim cust As Customer
cust = order.Customer
'Perform some task on the order entity.
End Sub
partial void RetrieveCustomer_Execute()
{
Order order = this.DataWorkspace.NorthwindData.Orders_Single
(Orders.SelectedItem.OrderID);
Customer cust = order.Customer;
//Perform some task on the customer entity.
}
Odczytywanie danych przez wykonywanie zapytania
Można pobrać zapytania z modelu i wykonać je w kodzie.Aby wyświetlić przykład, zobacz Jak: pobrać dane z kwerendy przy użyciu kodu.
Aktualizowanie danych
Można zaktualizować dane dla dowolnej jednostki przy użyciu kodu.W poniższym przykładzie przedstawiono kod, który jest uruchamiany, gdy użytkownik utworzy zamówienie w jednostce zamówienia na ekranie, a następnie kliknie przycisk Zapisz.Kod aktualizuje pole w jednostce Produkty za pomocą pola w jednostce Szczegóły zamówienia.
Private Sub Orders_Inserting(entity As Order)
For Each detail In entity.Order_Details
detail.Product.UnitsInStock =
detail.Product.UnitsInStock - detail.Quantity
Next
End Sub
partial void Orders_Inserting(Order entity)
{
foreach (Order_Detail detail in entity.Order_Details)
{
detail.Product.UnitsInStock =
(short?)(detail.Product.UnitsInStock - detail.Quantity);
}
}
[!UWAGA]
Jeżeli kod modyfikuje dane z innego źródła danych, należy zatwierdzić te zmiany przez wywołanie metody SaveChanges tego źródła danych.Aby uzyskać więcej informacji, zobacz How to: Save Data.
Usuwanie danych
Można usunąć dane, wywołując metodę Delete jednostki.Poniższy przykład usuwa klienta ze źródła danych NorthwindData.
Private Sub DeleteCustomer_Execute()
Dim cust As Customer
cust = Me.Customers.SelectedItem
If Customers.CanDelete Then
cust.Delete()
End If
End Sub
partial void DeleteCustomer_Execute()
{
Customer cust =
this.Customers.SelectedItem;
if (Customers.CanDelete)
{
cust.Delete();
}
}
Dodawanie danych
Poniższy przykład dodaje nowego klienta do źródła danych NorthwindData.W tym przykładzie wypełniono pola, które opisują nowego klienta przy użyciu informacji z kontaktu, który niedawno został dodany do listy programu SharePoint.Przykład wywołuje zapytanie o nazwie NewCustomersInSharePoint w celu określenia, które kontakty na liście programu SharePoint nie zostały jeszcze zaimportowane do źródła danych NorthwindData.
Private Sub ImportCustomers_Execute()
For Each spCust As SharePointCustomer In _
Me.DataWorkspace.SharePointData.NewCustomersInSharePoint
Dim newCust As Customer = New Customer()
With newCust
.ContactName = spCust.FirstName & " " & spCust.LastName
.Address = spCust.Address
.City = spCust.City
.PostalCode = spCust.PostalCode
.Region = spCust.Region
'Set the CopiedToDatabase field of the item in SharePoint.
spCust.CopiedToDatabase = "Yes"
End With
Next
Me.DataWorkspace.SharePointData.SaveChanges()
End Sub
partial void ImportCustomers_Execute()
{
foreach (SharePointCustomer spCust in
this.DataWorkspace.SharePointData.NewCustomersInSharePoint())
{
Customer newCust = new Customer();
newCust.ContactName = spCust.FirstName + " " + spCust.LastName;
newCust.Address = spCust.Address;
newCust.City = spCust.City;
newCust.PostalCode = spCust.PostalCode;
newCust.Region = spCust.Region;
//Set the CopiedToDatabase field of the item in SharePoint.
spCust.CopiedToDatabase = "Yes";
}
this.DataWorkspace.SharePointData.SaveChanges();
}
Zapisywanie danych
Zazwyczaj oczekujące zmiany są zatwierdzane do źródła danych, gdy użytkownik kliknie przycisk Zapisz na ekranie.Jednakże można także zatwierdzić oczekujące zmiany przez dodanie kodu wywołującego metodę SaveChanges źródła danych.Aby wykonać którekolwiek z tych zadań, należy ten kod:
Zatwierdź zmiany wprowadzone w danych znajdujących się w innych źródłach danych.
Zastąp zdarzenie ekranu Save.
Zatwierdzanie zmian wprowadzonych w danych znajdujących się w innych źródłach danych.
Pliki, w których pisany jest kod niestandardowy mają główne źródło danych.Jeżeli dodany zostanie niestandardowy kod, który modyfikuje dane z innego źródła danych w rozwiązaniu LightSwitch, należy zatwierdzić te zmiany przez wywołanie metody SaveChanges tego źródła danych.
W poniższym przykładzie przedstawiono kod, który jest uruchamiany, gdy użytkownik utworzy zamówienie w jednostce zamówienia na ekranie, a następnie kliknie przycisk Zapisz.Kod aktualizuje pole w jednostce Produkty za pomocą pola w jednostce Szczegóły zamówienia.Ponieważ jednostka Produkty znajduje się w innym źródle danych, to kod wywołuje metodę SaveChanges źródła danych, aby zatwierdzić zmiany.
Private Sub Orders_Inserting(entity As Order1)
For Each detail In entity.Order_Details
detail.Product.UnitsInStock = detail.Product.UnitsInStock - detail.Quantity
Next
Me.DataWorkspace.ProductDataSource.SaveChanges()
End Sub
partial void Orders_Inserting(Order1 entity)
{
foreach (Order_Detail1 detail in entity.Order_Details)
{
detail.Product.UnitsInStock = (short?)
(detail.Product.UnitsInStock - detail.Quantity);
}
this.DataWorkspace.ProductDataSource.SaveChanges();
}
Zastępowanie zdarzenia zapisywania ekranu.
Można zmienić zachowanie przycisku Zapisz na ekranie przez zastąpienie zdarzenia Save.Ponieważ zastępowane jest zachowanie przycisku Zapisz, kod musi wywoływać metodę SaveChanges, aby zatwierdzić oczekujące zmiany.
Poniższy przykład zastępuje zdarzenie Save na ekranie klienta, aby uchwycić i obsłużyć określony wyjątek, który może zostać wygenerowany, jeśli operacja zapisu zakończy się niepowodzeniem.
Private Sub CustomersListDetail_Saving(ByRef handled As Boolean)
Try
Me.DataWorkspace.SharePointData.SaveChanges()
Catch ex As DataServiceOperationException
If ex.ErrorInfo = "DTSException" Then
Me.ShowMessageBox(ex.Message)
Else
Throw ex
End If
End Try
handled = True
End Sub
partial void CustomersListDetail_Saving(ref bool handled)
{
try
{
this.DataWorkspace.SharePointData.SaveChanges();
}
catch (DataServiceOperationException ex)
{
if (ex.ErrorInfo == "DTSException")
{
this.ShowMessageBox(ex.Message);
}
else
{
throw ex;
}
}
handled = true;
}
Sprawdzanie poprawności danych
Można zastosować niestandardowe reguły sprawdzania poprawności w polach jednostki.Można dodawać niestandardowe komunikaty o błędach wyświetlane, gdy użytkownicy zmodyfikują wartości właściwości w sposób, który nie jest zgodny z regułami sprawdzania poprawności.Aby uzyskać więcej informacji, zobacz Jak: Sprawdzanie poprawności danych
Ustawianie uprawnień dla danych
Domyślnie wszyscy użytkownicy mogą wyświetlać, wstawiać, usuwać lub aktualizować dane wyświetlane na ekranie.Może jednak ograniczyć te uprawnienia, dodając kod do jednej z następujących metod:
CanRead
CanInsert
CanDelete
CanUpdate
Jeśli operacja zostanie ograniczona poprzez użycie tych metod, LightSwitch powoduje, że operacja jest niedostępna dla użytkowników, którzy nie mają nieograniczonych uprawnień.Aby uzyskać więcej informacji, zobacz Jak: obsługi zdarzeń danych.
Poniższy przykład pozwala użytkownikowi na aktualizowanie informacji o kliencie, jeśli użytkownik ma uprawnienia do aktualizacji.Poniższy przykład kodu wymaga grupy uprawnień o nazwie RoleUpdate.Aby uzyskać więcej informacji na temat dodawania grup zezwoleń do aplikacji, zobacz Włączanie zezwolenia i tworzenie uprawnienia.
Private Sub Customers_CanUpdate(ByRef result As Boolean)
result = Me.Application.User.HasPermission(Permissions.RoleUpdate)
End Sub
partial void Customers_CanUpdate(ref bool result)
{
result = this.Application.User.HasPermission(Permissions.RoleUpdate);
}
Domyślnie LightSwitch wywołuje te metody, gdy użytkownik próbuje wyświetlić, wstawić, usunąć lub zaktualizować informacje.Metody te można również wywołać w niestandardowym kodzie przed odczytem lub modyfikacją danych.
Praca z zestawami zmian
Można zidentyfikować i odrzucić zmiany oczekujące, zanim zostaną zatwierdzone dla źródła danych.Poniższy przykład przedstawia trzy metody użytkownika, które identyfikują i odrzucają oczekujące zmiany.Metoda UndoAllCustomerUpdates odrzuca wszystkie zmiany wprowadzone do wszystkich klientów.Metoda UndoAllUpdates odrzuca wszystkie zmiany wprowadzone do źródła danych.Metoda UndoCustomerEdit odrzuca zmiany wprowadzone w aktualnie zaznaczonym wierszu danych na ekranie klienta.
Private Sub UndoAllCustomerUpdates_Execute()
For Each Cust As Customer In _
Me.DataWorkspace.NorthwindData.Details. _
GetChanges().OfType(Of Customer)()
Cust.Details.DiscardChanges()
Next
End Sub
Private Sub UndoAllUpdates_Execute()
Me.DataWorkspace.NorthwindData.Details.DiscardChanges()
End Sub
Private Sub UnduCustomerEdit_Execute()
Customers.SelectedItem.Details.DiscardChanges()
End Sub
partial void UndoAllCustomerUpdates_Execute()
{
foreach (Customer cust in
this.DataWorkspace.NorthwindData.Details.
GetChanges().OfType<Customer>())
{
cust.Details.DiscardChanges();
}
}
partial void UndoAllUpdates_Execute()
{
this.DataWorkspace.NorthwindData.Details.DiscardChanges();
}
partial void UndoCustomerEdit_Execute()
{
Customers.SelectedItem.Details.DiscardChanges();
}
Rozszerzanie modelowanych zapytań
Jeśli chcesz zmodyfikować zapytanie poza możliwościami projektanta zapytań, możesz rozszerzyć zapytania przez dodanie kodu do metody zapytania PreProcessQuery.Aby uzyskać więcej informacji, zobacz Jak: rozszerzenie kwerendy przy użyciu kodu.