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.
}
}
}
Navegar 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.
}
eer 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.
Confirmar 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();
}
Invalidar 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.