Agregar lógica de negocios al servicio de dominio
En este tema, aprenderá a agregar lógica de negocios a un servicio de dominio en una aplicación de RIA Services . Un servicio de dominio de RIA Services contiene métodos de actualización, inserción y eliminación de forma predeterminada, pero suele ser necesario agregar lógica de negocios adicional que modifique los datos. También puede ser necesario agregar métodos que realizan operaciones que no sean los métodos tradicionales de consulta, actualización, inserción o eliminación. En este tema, aprenderá a modificar operaciones de datos para satisfacer los requisitos de negocios. También aprenderá a agregar un método de actualización con nombres y una operación de invocación.
Para agregar lógica de negocios a métodos de modificación de datos
Cree los métodos de actualización, inserción o eliminación que necesite en su aplicación.
Puede crear estos métodos seleccionando Habilitar edición al generar el servicio de dominio en el cuadro de diálogo Agregar nueva clase de servicio de dominio o agregando los métodos que coincidan con la signatura esperada para la operación. Para obtener más información, vea Servicios de dominio.
En los métodos de actualización, inserción o eliminación, agregue código que especifique la lógica para procesar la solicitud.
Agregue los métodos adicionales que sean necesarios para cumplir el requisito de negocios. Marque con el atributo IgnoreAttribute si no desea que el método se exponga como un servicio.
En el ejemplo siguiente se muestra un método de inserción que asigna un vendedor si no hay uno asignado. El método
RetrieveSalesPersonForCompany
recupera el nombre del vendedor para una compañía si un cliente de esa compañía está en la base de datos. El método se marca con el atributo IgnoreAttribute para evitar que se invoque como un servicio desde el cliente.Public Sub InsertCustomer(ByVal customer As Customer) If (customer.SalesPerson = String.Empty) Then customer.SalesPerson = RetrieveSalesPersonForCompany(customer.CompanyName) End If If ((customer.EntityState = EntityState.Detached) _ = False) Then Me.ObjectContext.ObjectStateManager.ChangeObjectState(customer, EntityState.Added) Else Me.ObjectContext.Customers.AddObject(customer) End If End Sub <Ignore()> _ Public Function RetrieveSalesPersonForCompany(ByVal companyname As String) As String Dim salesPersonToAssign As String = "unassigned" Dim customers As List(Of Customer) customers = GetCustomers().Where(Function(c) c.CompanyName = companyname).ToList() If (customers.Count > 0) Then salesPersonToAssign = customers.First().SalesPerson End If Return salesPersonToAssign End Function
public void InsertCustomer(Customer customer) { if (customer.SalesPerson == String.Empty) { customer.SalesPerson = RetrieveSalesPersonForCompany(customer.CompanyName); } if ((customer.EntityState != EntityState.Detached)) { this.ObjectContext.ObjectStateManager.ChangeObjectState(customer, EntityState.Added); } else { this.ObjectContext.Customers.AddObject(customer); } } [Ignore] public string RetrieveSalesPersonForCompany(string companyname) { string salesPersonToAssign = "unassigned"; List<Customer> customers = GetCustomers().Where(c => c.CompanyName == companyname).ToList(); if (customers.Count > 0) { salesPersonToAssign = customers.First().SalesPerson; } return salesPersonToAssign; }
Para agregar un método de actualización con nombres
En la clase de servicio de dominio, agregue un método que coincida con la signatura esperada para un método de actualización con nombres.
El método se debe marcar con el atributo UpdateAttribute con la propiedad UsingCustomMethod establecida en true, o no devolverá un valor ni aceptará una entidad como primer parámetro.
En el ejemplo siguiente se muestra un método que permite a un usuario perteneciente al rol
CustomerRepresentative
restablecer la contraseña de un cliente.<RequiresRole("CustomerRepresentative")> _ Public Sub ResetPassword(ByVal customer As Customer) ' Implement logic to reset password End Sub
[RequiresRole("CustomerRepresentative")] public void ResetPassword(Customer customer) { // Implement logic to reset password }
Cuando se agrega un método de actualización con nombres, se generan dos métodos en el proyecto de cliente. Uno se genera en el contexto de dominio y el otro se genera en la entidad que se pasa como parámetro para el método de actualización con nombres. Este método de actualización con nombres se ejecuta desde el cliente llamando al método generado en el cliente de dominio o al método generado en la entidad. Después de llamar a cualquiera de los métodos, debe llamar al método SubmitChanges, como se muestra en el código siguiente.
selectedCustomer.ResetPassword() customerContext.SubmitChanges(AddressOf OnSubmitCompleted, Nothing)
selectedCustomer.ResetPassword(); customerContext.SubmitChanges(OnSubmitCompleted, null);
Para agregar una operación de invocación
En la clase de servicio de dominio, agregue un método marcado con el atributo InvokeAttribute.
En el ejemplo siguiente se muestra un método que recupera la temperatura local basándose en el código postal.
<Invoke()> _ Public Function GetLocalTemperature(ByVal postalcode As String) As Integer ' Implement logic to look up temperature End Function
[Invoke] public int GetLocalTemperature(string postalcode) { // Implement logic to look up temperature }
Puede llamar al método utilizando un objeto InvokeOperation, como se muestra en el código siguiente.
Dim invokeOp As InvokeOperation(Of Integer) invokeOp = customerContext.GetLocalTemperature(selectedPostalCode)
InvokeOperation<int> invokeOp = customerContext.GetLocalTemperature(selectedPostalCode);