Share via


Executar tarefas relacionadas a dados por meio de código

Você pode usar os designers e janelas de ferramenta em Visual Studio LightSwitch para executar muitas tarefas relacionadas design. No entanto, determinadas tarefas só podem ser realizadas adicionando código a um aplicativo. Por exemplo, para validar um campo aplicando condições personalizadas, você deve escrever código. Este documento mostra como realizar tarefas relacionadas a dados usando o modelo de objeto de tempo de execução de dados. Para obter mais informações sobre onde você pode escrever código em um aplicativo, consulte os seguintes tópicos:

Para obter guias gerais sobre como escrever código no Visual Studio LightSwitch, consulte Escrever o código em LightSwitch.

Tarefas comuns

A lista a seguir mostra dados relacionados a tarefas comuns que você pode realizar usando o modelo de objeto de tempo de execução de dados. As tarefas são descritas posteriormente neste documento.

  • Lendo dados

  • Atualização de dados

  • Excluindo Dados

  • Adicionando dados

  • Salvando dados

  • Validando Dados

  • Configurando permissões em dados

  • Trabalhando com Conjuntos de alterações

  • Estendendo consultas

Lendo dados

Você pode ler itens de dados individuais ou coleções de itens de dados de qualquer fonte de dados em seu aplicativo.

O exemplo a seguir recupera o cliente que está atualmente selecionado em uma tela.

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

O exemplo a seguir efetua iterações por uma coleção de clientes.

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(pt-br,VS.110).gifNavegando em relações de dados

Você pode ler dados das entidades relacionadas. Por exemplo, uma entidade de cliente pode ter um relacionamento um-para-muitos com uma entidade pedidos. Você pode iterar sobre todos os pedidos que foram colocadas por um cliente usando a propriedade Pedidos da entidade de cliente.

O exemplo itera através da coleção de pedidos relacionados a um cliente.

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

O exemplo a seguir obtém o cliente que fez uma ordem específica.

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(pt-br,VS.110).gifLer dados através da execução de uma consulta

Você pode recuperar consultas do modelo e então executá-las no seu código. Para exibir um exemplo, consulte Como: recuperar dados de uma consulta usando código.

Atualização de dados

Você pode atualizar dados para qualquer entidade usando código. O exemplo a seguir mostra código que executa quando um usuário cria uma ordem na entidade de ordem em uma tela e então clique no botão de Salvar. O código atualiza um campo na entidade de produtos usando um campo na entidade dos detalhes do pedido.

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);
    }
}
ObservaçãoObservação

Se seu código modifica dados de outras fontes de dados, você deve confirmar as alterações chamando o método SaveChanges da fonte de dados. Para obter mais informações, consulte How to: Save Data.

Excluindo Dados

Você pode excluir dados chamando o método Delete de qualquer entidade. O exemplo a seguir exclui um cliente da fonte de dados de 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();
    }
}

Adicionando dados

O exemplo a seguir adiciona um novo cliente para a fonte de dados de NorthwindData. Este exemplo preenche os campos que descrevem o novo cliente usando as informações de um contato que foi recém adicionado a uma lista do SharePoint. O exemplo chama uma consulta denominada NewCustomersInSharePoint para determinar que contatos na lista do SharePoint não foram importados ainda para a fonte de dados de 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();


}

Salvando dados

Normalmente, as alterações pendentes estarão comprometidos a uma fonte de dados quando o usuário clica no botão de Salvar em uma tela. No entanto, você também pode confirmar as alterações pendentes adicionando código que chama o método SaveChanges de uma fonte de dados. Você deve adicionar este código se você deseja realizar qualquer uma dessas tarefas:

  • Confirme alterações realizadas nos dados que estão localizados em outras fontes de dados.

  • Substitua o evento Save de uma tela.

Ff851990.collapse_all(pt-br,VS.110).gifConfirmando alterações realizadas nos dados que estão localizados em outras fontes de dados.

Os arquivos em que você escreve o código personalizado têm uma fonte de dados primária. Se você adicionar o código personalizado que modifica dados de outra fonte de dados na sua solução LightSwitch, você deve confirmar as alterações chamando o método SaveChanges da fonte de dados.

O exemplo a seguir mostra código que executa quando um usuário cria uma ordem em uma entidade de ordem em uma tela e então clique no botão de Salvar. O código atualiza um campo na entidade de produtos usando um campo na entidade dos detalhes do pedido. Porque a entidade de produtos está localizada em outra fonte de dados, esse código chama o método SaveChanges dessa fonte de dados para confirmar as alterações.

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(pt-br,VS.110).gifSubstituindo o evento de salvamento de uma tela

Você pode alterar o comportamento do botão Salvar em uma tela substituindo o evento Save. Porque você está substituindo o comportamento do botão Salvar, seu código deve chamar o método SaveChanges quando você deseja confirmar as alterações pendentes.

O exemplo a seguir substitui o evento Save de uma tela de cliente para capturar e manipular uma exceção específica que pode ser lançada se a operação de salvamento falhar.

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;


}

Validando Dados

Você pode aplicar regras de validação personalizada para os campos de uma entidade. Você pode adicionar as mensagens de erro personalizadas que aparecem quando usuários alteram o valor das propriedades de maneiras que não estão em conformidade com as regras de validação. Para obter mais informações, consulte Como: validar dados

Configurando permissões em dados

Por padrão, todos os usuários podem exibir, inserir, excluir, ou atualizar os dados que aparecem em uma tela. No entanto, você pode restringir essas permissões adicionando código para um dos seguintes métodos:

  • CanRead

  • CanInsert

  • CanDelete

  • CanUpdate

Se você restringir uma operação usando esses métodos, LightSwitch faz com que a operação esteja indisponível para os usuários que não tem permissões ilimitadas. Para obter mais informações, consulte Como: manipular eventos de dados.

O exemplo permite que um usuário atualize informações de cliente se o usuário tem permissão de atualização. Este exemplo de código requer um grupo de permissões nomeadas RoleUpdate. Para obter mais informações sobre como adicionar um grupo de permissões para seu aplicativo, consulte Habilitando a autorização e permissões de criação.

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);
}

Por padrão, LightSwitch chama esses métodos quando um usuário tentar exibir, inserir, excluir, ou atualizar informações. Você também pode chamar esses métodos no seu código personalizado antes que os dados sejam lidos ou alterados.

Trabalhando com Conjuntos de alterações

Você pode identificar e descartar alterações pendentes antes que sejam confirmados a uma fonte de dados. O exemplo a seguir mostra três métodos de usuário que identificam e rejeitam alterações pendentes. O método UndoAllCustomerUpdates descarta todas as alterações feitas a todos os clientes. O método UndoAllUpdates descarta todas as alterações feitas à fonte de dados. O método UndoCustomerEdit rejeita as alterações feitas na linha selecionada de dados em uma tela de cliente.

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();
}

estendendo consultas modeladas

Se você deseja modificar uma consulta além dos recursos de designer de consulta, você pode estender a consulta adicionando código para o método PreProcessQuery da consulta. Para obter mais informações, consulte Como: estende uma consulta usando código.

Consulte também

Conceitos

Escrever o código em LightSwitch