Compartir a través de


Realizar tareas relacionadas con datos usando código

Puede usar los diseñadores y las ventanas de herramientas en Visual Studio LightSwitch para lograr muchas tareas de diseño relacionadas con datos.Sin embargo, ciertas tareas sólo se pueden lograr agregando el código a una aplicación.Por ejemplo, para validar un campo aplicando las condiciones personalizadas, debe escribir código.En el documento se muestra cómo hacer las tareas relacionadas con datos utilizando los datos del modelo de objetos en tiempo de ejecución.Para obtener más información sobre dónde puede escribir el código en la aplicación, vea los siguientes temas:

Para obtener información general acerca de cómo escribir código en Visual Studio LightSwitch, vea Escribir código en LightSwitch.

Tareas comunes

La siguiente lista describe algunas tareas relacionadas con datos comunes que se llevan a cabo con el modelo de objetos de runtime de datos.Las tareas se describen más adelante en el documento.

  • Lectura de datos

  • Actualizar datos

  • Eliminar datos

  • Agregar datos

  • Guardar datos

  • Validar datos

  • Establecer permisos en los datos

  • Trabajar con conjuntos de cambios

  • Extender las consultas

Lectura de datos

Puede leer elementos de datos individuales o colecciones de elementos de datos de cualquier origen de datos en su aplicación.

En el siguiente ejemplo se recupera el cliente que está seleccionado actualmente en una pantalla.

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

En el siguiente ejemplo se itera sobre una colección 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(es-es,VS.110).gifNavegar por relaciones de datos

Puede leer los datos de las entidades relacionadas.Por ejemplo, una entidad Cliente podría tener una relación de uno a varios con una entidad Pedidos.Puede recorrer en iteración todos los pedidos hechos por un cliente utilizando la propiedad Pedidos de la entidad Cliente.

En el siguiente ejemplo se recorre en iteración la colección de pedidos que se relacionan con un 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.
        }
    }
}

En el siguiente ejemplo se obtiene el cliente que hizo un pedido concreto.

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(es-es,VS.110).gifeer datos ejecutando un consulta

Puede recuperar las consultas del modelo de la aplicación y, a continuación, ejecutarlas en el código.Para consultar un ejemplo, vea Cómo: Recuperar datos de una consulta usando código.

Actualizar datos

Puede actualizar los datos para cualquier entidad utilizando el código.El siguiente ejemplo muestra código que se ejecuta cuando un usuario crea un pedido en la entidad Pedido en una pantalla y, a continuación, se hace clic en el botón Guardar.El código actualiza un campo en la entidad Productos utilizando un campo de la entidad Detalles de 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);
    }
}

[!NOTA]

Si el código modifica datos de otro origen de datos, debe confirmar esos cambios llamando al método SaveChanges de ese origen de datos.Para obtener más información, vea How to: Save Data.

Eliminar datos

Puede eliminar datos llamando al método Delete de una entidad.En el siguiente ejemplo se elimina un nuevo cliente del origen de datos 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();
    }
}

Agregar datos

En el siguiente ejemplo se agrega un nuevo cliente al origen de datos de NorthwindData.En el ejemplo se rellenan los campos que describen el nuevo cliente utilizando información desde un contacto que se agregó recientemente a una lista de SharePoint.En el ejemplo se llama a una consulta denominada NewCustomersInSharePoint para determinar qué contactos en la lista de SharePoint no se han importado todavía al origen de datos 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();


}

Guardar datos

Normalmente, los cambios pendientes se confirman en un origen de datos cuando el usuario hace clic en el botón Guardar en una pantalla.Sin embargo, también puede confirmar los cambios pendientes agregando código que llama al método SaveChanges de un origen de datos.Debe agregar el código si desea hacer alguna de las siguientes tareas:

  • Confirmar los cambios que realiza en los datos que se encuentran en otros orígenes de datos.

  • Invalidar el evento Save de una pantalla.

Ff851990.collapse_all(es-es,VS.110).gifConfirmar los cambios que realiza en los datos que se encuentran en otros orígenes de datos

Los archivos en los que escribe el código personalizado tienen un origen de datos primario.Si agrega código personalizado que modifica los datos de otro origen de datos en su solución LightSwitch, debe confirmar esos cambios llamando al método SaveChanges de ese origen de datos.

El siguiente ejemplo muestra código que se ejecuta cuando un usuario crea un pedido en una entidad Pedido en una pantalla y, a continuación, se hace clic en el botón Guardar.El código actualiza un campo en la entidad Productos utilizando un campo de la entidad de Detalles de pedido.Dado que la entidad Productos se encuentra en otro origen de datos, el código llama al método SaveChanges de ese origen de datos para confirmar los cambios.

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(es-es,VS.110).gifInvalidar el evento de guardar de una pantalla

Puede cambiar el comportamiento del botón Guardar en una pantalla invalidando el evento Save.Dado que está reemplazando el comportamiento del botón Guardar, su código debe llamar al método SaveChanges cuando desee confirmar los cambios pendientes.

En el siguiente ejemplo se invalida el evento Save de una pantalla de cliente para detectar y administrar una excepción concreta que se podría producir si la operación de guardar da error.

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;


}

Validar datos

Puede aplicar reglas de validación personalizadas a los campos de una entidad.Puede agregar mensajes de error personalizados que aparecen cuando los usuarios modifican el valor de las propiedades de manera que no cumplen las reglas de validación.Para obtener más información, vea Cómo: Validar datos

Establecer permisos en los datos

De forma predeterminada, todos los usuarios pueden ver, insertar, eliminar o actualizar los datos que aparecen en una pantalla.Sin embargo, puede restringir los permisos agregando el código a uno de los siguientes métodos:

  • CanRead

  • CanInsert

  • CanDelete

  • CanUpdate

Si restringe una operación utilizando estos métodos, LightSwitch hace la operación no disponible a los usuarios que no tienen permisos no restringidos.Para obtener más información, vea Cómo: Controlar eventos de datos.

El siguiente ejemplo permite a un usuario actualizar información del cliente si el usuario tiene el permiso de actualización.El ejemplo de código requiere un grupo de permisos RoleUpdate con nombre.Para obtener más información sobre cómo agregar un grupo de permisos a la aplicación, vea Habilitar autorización y crear permisos.

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

De forma predeterminada, LightSwitch llama a los métodos cuando un usuario intenta ver, insertar, eliminar o actualizar información.También puede llamar a los métodos en su código personalizado antes de que los datos se lean o modifiquen.

Trabajar con conjuntos de cambios

Puede identificar y descartar los cambios pendientes antes de confirmarse en un origen de datos.En el siguiente ejemplo se muestran tres métodos de usuario que identifican y descartan los cambios pendientes.El método UndoAllCustomerUpdates descarta todos los cambios realizados en todos los clientes.El método UndoAllUpdates descarta todos los cambios realizados en los orígenes de datos.El método UndoCustomerEdit descarta los cambios realizados en la fila de datos actualmente seleccionada en una pantalla 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();
}

Ampliar consultas modeladas

Si desea modificar una consulta más allá de las posibilidades del diseñador de consultas, puede extender la consulta agregando código al método PreProcessQuery de la consulta.Para obtener más información, vea Cómo: Extender una consulta usando código.

Vea también

Conceptos

Escribir código en LightSwitch