Sdílet prostřednictvím


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

Ff851990.collapse_all(cs-cz,VS.110).gifNavigace 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.

}

Ff851990.collapse_all(cs-cz,VS.110).gifČ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.

Ff851990.collapse_all(cs-cz,VS.110).gifPotvrzení 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();

}

Ff851990.collapse_all(cs-cz,VS.110).gifPř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.

Viz také

Koncepty

Psaní kódu v LightSwitch