Provádění úloh souvisejících s daty pomocí kódu
Můžete použít návrháři a panely nástrojů v Visual Studio LightSwitch provádět mnoho úloh souvisejících s daty návrhu.Přidáním kódu do aplikace však lze pouze provést určité úlohy.Můžete například k ověření pole použitím vlastních podmínek, musíte napsat kód.Tento dokument ukazuje, jak provádět úlohy související s daty s použitím objektový model dat modulu runtime.Další informace o kterém budete psát kód v aplikaci naleznete v následujících tématech:
Obecné úlohy
Následující seznam obsahuje běžné úkoly související s daty, které lze provádět pomocí objektový model dat modulu runtime.Ú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ěřování dat
Nastavení oprávnění na datech
Práce se sadami změn
Rozšíření dotazů
Čtení dat
Je možné číst jednotlivé datové položky nebo kolekce položek dat z libovolného zdroje dat ve vaší aplikaci.
Následující příklad načte zákazníka, který je jezdec momentálně 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 iterace 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 relací dat
Je možné číst data ze souvisejících entit.Můžete například entitu Zákazník pravděpodobně – vztah jeden mnoho s entitou, objednávky.Může iteraci přes všechny objednávky, které byly umístěny zákazníkem pomocí objednávky vlastnosti entity zákazníků.
Následující příklad iterace přes kolekci objednávek, které se vztahují k odběrateli.
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 získá zákazník, který je umístěn v určitém pořadí.
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 následně je spustit ve vašem kódu.Příklad naleznete v tématu Postupy: Načtení dat z dotazu pomocí kódu.
Aktualizace dat
Data pro všechny entity lze aktualizovat pomocí kódu.Následující příklad ukazuje kód, který běží, když uživatel vytvoří objednávku v entitě pořadí na obrazovce a pak klikne Uložit tlačítko.Kód aktualizuje pole v entitě produkty s použitím pole v entitě údaje v objednávce.
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 upraví data z jiných zdrojů dat, je nutné tyto změny potvrdit voláním SaveChanges metody tohoto zdroje dat..
Odstranění dat
Data můžete odstranit voláním Delete metoda jakémukoli subjektu.Následující příklad odstraní ze zdroje dat NorthwindData zákazníka.
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 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.Příklad volá dotaz s názvem NewCustomersInSharePoint k určení, kontakty, které v seznamu služby SharePoint ještě nebyla importována ke zdroji 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
Obvykle čekající změny jsou potvrzené ke zdroji dat když uživatel klikne Uložit tlačítko na obrazovce.Však můžete také potvrzovat změny čekající změny přidáním kód, který volá SaveChanges metoda zdroje dat.Pokud chcete provést některou z těchto úloh, je nutné přidat tento kód:
Potvrzení změn, které provedete na data, která se nachází v jiné zdroje dat.
Přepsání Save událostí na obrazovce.
Potvrzení změn, které provedete na Data, která se nachází v jiné zdroje dat
Soubory, ve kterých můžete napsat vlastní kód mít primární datový zdroj.Pokud můžete přidat vlastní kód, který upravuje data z jiného zdroje dat v vaše LightSwitch řešení, je nutné tyto změny potvrdit voláním SaveChanges metody tohoto zdroje dat..
Následující příklad ukazuje kód, který se spustí, jakmile uživatel vytvoří pořadí v pořadí entity na obrazovce a klepnutí Uložit tlačítko.Kód aktualizuje pole v entitě produkty s použitím pole v entitě údaje v objednávce.Vzhledem k tomu, že produkty entity, která se nachází v jiný zdroj dat, volá tento kód SaveChanges metody tohoto zdroje dat. Chcete-li potvrdit změny.
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í uložení událostí obrazovky
Můžete změnit chování Uložit tlačítka na obrazovce přepsáním Save události.Vzhledem k tomu, že chcete nahradit chování Uložit tlačítko, musí volat váš kód SaveChanges metodu, pokud chcete zapsat změny čekající na zpracování.
Následující příklad přepisuje Save událostí na obrazovce zákazníka zachytit a zpracovat specifická výjimka, která může být vyvolána, pokud uložení operace se nezdaří.
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ěřování dat
Můžete použít vlastní ověřovací pravidla do polí sady entit.Můžete přidat vlastní chybové zprávy, které se zobrazí, když uživatelé upravit hodnotu vlastnosti způsoby, které nejsou v souladu s ověřovacích pravidel.Další informace naleznete v tématu Postupy: Ověření dat v aplikaci LightSwitch
Nastavení oprávnění na datech
Ve výchozím nastavení všichni uživatelé mohou zobrazit, vložit, odstranit nebo aktualizovat data, která se objeví na obrazovce.Tato oprávnění však můžete omezit přidáním kódu na jeden z následujících způsobů:
CanRead
CanInsert
CanDelete
CanUpdate
Je-li omezit operace pomocí těchto metod LightSwitch provede operaci není k dispozici uživatelům, kteří nemají neomezené oprávnění.Další informace naleznete v tématu Postupy: Zpracování datových událostí.
Následující příklad umožňuje uživateli aktualizovat informace o zákaznících, pokud má uživatel oprávnění pro aktualizaci.Tento příklad kódu vyžaduje oprávnění skupiny s názvem RoleUpdate.Další informace o tom, jak přidat skupinu oprávnění do vaší aplikace naleznete v tématu Povolení autorizace a vytvoření oprávnění v LightSwitchi.
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í LightSwitch volání těchto metod, když se uživatel se pokusí zobrazit, vložit, odstranit nebo aktualizovat informace.Tyto metody můžete také volat ve vaší vlastní kód před data čtena nebo upravit.
Práce se sadami změn
Můžete identifikovat a předtím, než budou potvrzeny ke zdroji dat k zahození změny čekající na zpracování.Následující příklad ukazuje tři metody uživatele, které identifikovat a zrušit změny čekající na zpracování.UndoAllCustomerUpdates Metoda odstraní všechny změny provedené všem zákazníkům.UndoAllUpdates Metoda odstraní všechny změny provedené ke zdroji dat.UndoCustomerEdit Metoda odstraní změny provedené v aktuálně vybraný řádek dat na obrazovce zákazníků.
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í Modelovaný dotazy
Pokud chcete změnit dotaz nad rámec funkcí návrháře dotazu, můžete rozšířit dotaz tak, že přidáte kód, který má PreProcessQuery metoda dotazu.Další informace naleznete v tématu Postupy: Rozšíření dotazu pomocí kódu.