Sdílet prostřednictvím


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.
        }
    }
}

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.