Procédure : Ajouter une logique métier au service de domaine
Dans cette rubrique, vous allez apprendre comment ajouter une logique métier à un service de domaine dans une application Services RIA . Un service de domaine Services RIA contient des méthodes par défaut de mise à jour, d'insertion et de suppression, mais vous devez souvent ajouter une logique métier supplémentaire qui modifie les données. Vous devrez peut-être aussi ajouter des méthodes qui effectuent des opérations différentes des méthodes traditionnelles de requête, mise à jour, insertion ou suppression. Dans cette rubrique, vous allez apprendre comment modifier des opérations de données pour satisfaire les besoins métier. Vous apprendrez également comment ajouter une méthode de mise à jour personnalisée et une opération d'appel.
Pour ajouter une logique métier aux méthodes de modification de données
Créez les méthodes de mise à jour, d'insertion ou de suppression dont vous avez besoin dans votre application.
Vous créez ces méthodes soit en sélectionnant Activer la modification lors de la génération du service de domaine dans la boîte de dialogue Ajouter une nouvelle classe de service de domaine, soit en ajoutant les méthodes correspondant à la signature attendue pour l'opération. Pour plus d'informations, consultez Services de domaine.
Dans les méthodes de mise à jour, d'insertion ou de suppression, ajoutez un code qui spécifie la logique de traitement de la demande.
Ajoutez toutes les méthodes supplémentaires nécessaires pour satisfaire les besoins métier. Marquez la méthode avec l'attribut IgnoreAttribute si vous ne voulez pas qu'elle soit exposée en tant que service.
L'exemple suivant montre une méthode d'insertion qui affecte un vendeur si aucun n'est affecté. La méthode
RetrieveSalesPersonForCompany
récupère le nom du vendeur d'une société si un client provenant de cette société se trouve dans la base de données. La méthode est marquée avec l'attribut IgnoreAttribute pour empêcher la méthode d'être appelée comme un service à partir du client.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; }
Pour ajouter une méthode de mise à jour personnalisée
Dans la classe DomainService, ajoutez une méthode qui correspond à la signature attendue pour une méthode de mise à jour personnalisée.
La méthode doit soit être marquée avec l'attribut UpdateAttribute avec la propriété UsingCustomMethod définie avec la valeur true, soit ne pas retourner de valeur et accepter une entité comme premier paramètre.
L'exemple suivant montre une méthode qui permet à un utilisateur du rôle
CustomerRepresentative
de réinitialiser le mot de passe d'un client.<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 }
Quand vous ajoutez une méthode de mise à jour personnalisée, deux méthodes sont générées dans le projet client. Une méthode est générée sur le contexte de domaine et une autre sur l'entité transmise sous forme de paramètre pour la méthode de mise à jour personnalisée. Vous exécutez cette méthode de mise à jour personnalisée à partir du client en appelant soit la méthode générée sur le client du domaine, soit la méthode générée sur l'entité. Après avoir appelé l'une des méthodes, vous devez appeler la méthode SubmitChanges, comme indiqué dans le code suivant.
selectedCustomer.ResetPassword() customerContext.SubmitChanges(AddressOf OnSubmitCompleted, Nothing)
selectedCustomer.ResetPassword(); customerContext.SubmitChanges(OnSubmitCompleted, null);
Pour ajouter une opération d'appel
Dans la classe DomainService, ajoutez une méthode marquée avec l'attribut InvokeAttribute.
L'exemple suivant montre une méthode qui récupère la température locale en fonction du code 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 }
Vous appelez la méthode à l'aide d'un objet InvokeOperation, comme indiqué dans le code suivant.
Dim invokeOp As InvokeOperation(Of Integer) invokeOp = customerContext.GetLocalTemperature(selectedPostalCode)
InvokeOperation<int> invokeOp = customerContext.GetLocalTemperature(selectedPostalCode);