Provádění úkolů souvisejících s daty pomocí kódu
Pomocí návrhářů a oken nástrojů v aplikaci Visual Studio LightSwitch můžete provádět mnoho úloh návrhu souvisejících s daty.Určité úkoly však lze provést pouze přidáním kódu do aplikace.Pokud například chcete ověřit pole použitím vlastních podmínek, je nutné napsat kód.Tento dokument obsahuje informace o tom, jak provádět úlohy související s daty pomocí objektového modelu modulu runtime dat.Další informace o tom, kde můžete v aplikaci psát kód, naleznete v následujících tématech:
Obecné pokyny, jak napsat kód v aplikaci Visual Studio LightSwitch, naleznete v tématu Psaní kódu v LightSwitch.
Obecné úlohy
Následující seznam zobrazuje běžné činnosti v souvislosti s daty, které lze provádět pomocí objektového modelu runtime dat.Úlohy jsou popsány dále v tomto dokumentu.
Čtení dat
Aktualizace dat
Odstranění dat
Přidání dat
Ukládání dat
Ověření dat
Nastavení oprávnění pro Data
Práce se sadami změn
Rozšíření dotazů
Čtení dat
Jednotlivé položky dat nebo kolekce položek dat můžete číst z jakéhokoli zdroje dat ve vaší aplikaci.
Následující příklad načte zákazníka, který je aktuálně vybrán na obrazovce.
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.
}
}
Následující příklad iteruje přes kolekci zákazníků.
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.
}
}
}
Navigace v rámci relací dat
Můžete číst data ze souvisejících entit.Například entita Zákazník může mít relaci 1:N s entitou Objednávky.Iterovat přes všechny objednávky, které byly zadány zákazníkem, můžete pomocí vlastnosti Objednávky entity Zákazník.
Následující příklad iteruje přes kolekci objednávek, které se vztahují k zákazníkovi.
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.
}
}
}
Následující příklad načte zákazníka, který zadal konkrétní objednávku.
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.
}
Čtení dat spuštěním dotazu
Můžete načíst dotazy z modelu a pak je spouštět ve vašem kódu.Příklad naleznete v tématu Jak: načíst Data z dotazu pomocí kódu.
Aktualizace dat
Pomocí kódu můžete aktualizovat data pro každou entitu.Následující příklad zobrazuje kód, který se spustí, když uživatel vytvoří objednávku v entitě Objednávka na obrazovce a pak klikne na tlačítko Uložit.Kód aktualizuje pole v entitě Produkty pomocí pole v entitě Podrobnosti objednávky.
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);
}
}
[!POZNÁMKA]
Pokud váš kód změní data z jiných zdrojů dat, je nutné tyto změny potvrdit voláním metody SaveChanges tohoto zdroje dat.Další informace naleznete v tématu How to: Save Data.
Odstranění dat
Data můžete odstranit pomocí volání metody Delete jakékoli entity.Následující příklad odstraní zákazníka ze zdroje dat 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();
}
}
Přidání dat
Následující příklad přidá nového zákazníka ke zdroji dat NorthwindData.V tomto příkladu se naplní pole, která popisují nového zákazníka, pomocí informací z kontaktu, který byl nedávno přidán do seznamu služby SharePoint.V příkladu je volán dotaz s názvem NewCustomersInSharePoint k určení kontaktů v seznamu služby SharePoint, které dosud nebyly naimportovány do zdroje dat 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();
}
Ukládání dat
Čekající změny jsou obvykle potvrzeny ve zdroji dat, když uživatel klikne na obrazovce na tlačítko Uložit.Můžete však také potvrdit čekající změny přidáním kódu, který volá metodu SaveChanges zdroje dat.Tento kód je nutné přidat, chcete-li provést některý z těchto kroků:
Potvrďte provedené změny dat, která se nacházejí v jiných zdrojích dat.
Přepište událost Save na obrazovce.
Potvrzení provedených změn dat, která se nacházejí v jiných zdrojích dat
Soubory, ve kterých napíšete vlastní kód, mají primární zdroj dat.Pokud přidáte vlastní kód, který změní data z jiného zdroje dat ve vašem řešení LightSwitch, je nutné tyto změny potvrdit voláním metody SaveChanges tohoto zdroje dat.
Následující příklad zobrazuje kód, který se spustí, když uživatel vytvoří objednávku v entitě Objednávka na obrazovce a pak klikne na tlačítko Uložit.Kód aktualizuje pole v entitě Produkty pomocí pole v entitě Podrobnosti objednávky.Vzhledem k tomu, že se entita Produkty nachází v jiném zdroji dat, volá tento kód metodu SaveChanges daného zdroje dat za účelem potvrzení změn.
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();
}
Přepsání události uložení obrazovky
Můžete změnit chování tlačítka Uložit na obrazovce přepsáním události Save.Vzhledem k tomu, že nahrazujete chování tlačítka Uložit, musí váš kód volat metodu SaveChanges pro potvrzení čekajících změn.
Následující příklad přepisuje událost Save obrazovky zákazníka pro zachycení a zpracování určité výjimky, která může být vyvolána, pokud se nezdaří operace uložení.
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;
}
Ověření dat
V polích entity lze použít vlastní ověřovací pravidla.Můžete přidat vlastní chybové zprávy, které se zobrazí, když uživatelé změní hodnotu vlastností způsobem, který neodpovídá ověřovacím pravidlům.Další informace naleznete v tématu Jak: ověření dat
Nastavení oprávnění pro Data
Ve výchozím nastavení mohou všichni uživatelé zobrazovat, vkládat, odstraňovat a aktualizovat data, která se zobrazí na obrazovce.Tato oprávnění však můžete omezit přidáním kódu do jedné z následujících metod:
CanRead
CanInsert
CanDelete
CanUpdate
Pokud omezíte operaci pomocí těchto metod, LightSwitch operaci znepřístupní uživatelům, kteří nemají neomezená oprávnění.Další informace naleznete v tématu Jak: zpracování dat událostí.
Následující příklad umožňuje uživateli aktualizovat informace o zákazníkovi, pokud má uživatel oprávnění k aktualizaci.Tento příklad kódu vyžaduje skupinu oprávnění s názvem RoleUpdate.Další informace o tom, jak přidat skupinu oprávnění do aplikace, viz Povolení autorizace a vytváření oprávnění
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);
}
Ve výchozím nastavení aplikace LightSwitch volá tyto metody, když se uživatel pokusí zobrazit, vložit, odstranit nebo aktualizovat informace.Můžete také volat tyto metody ve vlastním kódu před čtením nebo úpravami dat.
Práce se sadami změn
Můžete identifikovat a zrušit čekající změny před jejich potvrzením do zdroje dat.Následující příklad ukazuje tři uživatelské metody, které identifikují a zruší čekající změny.Metoda UndoAllCustomerUpdates zahodí všechny změny provedené u všech zákazníků.Metoda UndoAllUpdates zahodí všechny změny provedené ve zdroji dat.Metoda UndoCustomerEdit zahodí změny provedené v aktuálně vybraném řádku dat na obrazovce zákazníka.
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();
}
Rozšíření modelových dotazů
Chcete-li upravit dotaz nad rámec možností Návrháře dotazu, můžete dotaz rozšířit přidáním kódu do metody PreProcessQuery dotazu.Další informace naleznete v tématu Jak: dotaz rozšířit pomocí kódu.