Ouvrir un nouveau compte

Visual Studio .NET 2003

L'utilisateur configure un compte sur la page Open a New Account, accessible en sélectionnant l'option Open a New Account sur la page de connexion. L'utilisateur doit fournir des informations personnelles, telles que nom, prénom, mot de passe et adresse électronique.

Implémentation

La page Open a New Account utilise le fichier ASP.NET et les fichiers code-behind C# suivants :

Schéma

Vue d'ensemble du processus

Le processus d'ouverture d'un nouveau compte est lancé dans la couche USL (User Services Layer). L'utilisateur entre ses nom, prénom, mot de passe et adresse électronique. La couche USL valide les informations à l'aide des contrôles du validateur, puis les passe à la couche BLL (Business Logic Layer) via la méthode FMStocks7.BLL.Account.Add de l'objet Account. Enfin, la couche BLL passe ces informations à l'objet AccountAdd de la couche DAL (Data Access Layer). Celle-ci appelle alors la procédure stockée (SPROC) Account_Add de la base de données SQL Server. Si la procédure stockée (SPROC) se déroule avec succès, les informations sont ajoutées à la table des comptes. Dans le cas contraire, la page Open a New Account s'affiche de nouveau et le processus recommence. Lorsque le nouvel enregistrement a été ajouté avec succès à la base de données des comptes, l'objet GAM (Generic Accounting Module) crée en plus un compte avec un solde de caisse de US $ 10 000,00. Cette dernière opération s'effectue dans le cadre d'une transaction distribuée. L'utilisateur est alors redirigé vers la page de connexion et le champ E-Mail est complété.

Pour rechercher le code source s'appliquant à des couches spécifiques de cette rubrique, cliquez sur le lien approprié :

Code source BLL | Code source DAL | Procédure stockée

Code source USL

Par défaut, le code source USL se trouve dans le fichier suivant : [lettre du lecteur où Visual Studio .NET est installé]:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\FMStocks7\Web\NewAccount.aspx.cs.

int accountID;
Credentials credentials = new Credentials( email.Value.Trim(), password.Value.Trim() );
Account account         = new Account();
switch ( account.Add( credentials, firstName.Value.Trim(), lastName.Value.Trim(), out accountID ) )
   {
   case AccountAddStatus.Success:
      {    
      Redirect( "Login.aspx?NewAccount=1&login=" + Server.UrlEncode( credentials.Email ) );
      break;
      }
   case AccountAddStatus.DuplicateName:
      {
      ErrorMessage = NewAccount.DuplicateName;
      break;
      }
   case AccountAddStatus.InvalidPassword:
      {
      ErrorMessage = NewAccount.InvalidPassword;
      break;
      }
   }

Code source BLL

Par défaut, le code source de la méthode FMStocks7.BLL.Account.Add se trouve dans le fichier suivant : [lettre du lecteur où Visual Studio .NET est installé]:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\FMStocks7\BLL\Account.cs.

public AccountAddStatus Add( Credentials credentials, string firstName, string lastName, out int accountID )
   {
   DAL.AccountAdd account = new DAL.AccountAdd();

   try   {
      return account.Add( credentials, firstName, lastName, DefaultBalance, out accountID );
      }
   finally
      {
      ServicedComponent.DisposeObject( account );
      }
   }

Code source DAL

Par défaut, le code source de la méthode FMStocks7.DAL.Account.Add se trouve dans le fichier suivant : [lettre du lecteur où Visual Studio .NET est installé]:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\FMStocks7\DAL\Account.cs.

Points importants

La classe AccountAdd est définie avec des attributs pour utiliser une transaction dès l'appel d'une méthode sur l'objet.

[ Transaction( TransactionOption.Required ) ]
[ ComVisible( true ) ]                            
                  
   sealed public class AccountAdd : DAO
   

Méthode Add :

///   <summary>
///   Create an investment account with a given cash balance.
///
///   <param name='credentials'>
/// Email and password</param>
///
///   <param name='firstName'>
/// User's First Name</param>
///
///   <param name='lastName'>
/// User's Last Name</param>
///
///   <param name='cashBalance'>
/// Starting cash balance for the account</param>
///
///   <param name='accountID'>
/// The new accountID number (out)</param>
///
///   <returns>
/// AccountAddStatus value</returns>
///
///   </summary>
public AccountAddStatus Add( Credentials credentials, string firstName, string lastName, decimal cashBalance, out int accountID )
{
   Debug.Assert( sproc == null );

   AccountAddStatus status;

   try   {
      // Create parameter array

      SqlParameter[] parameters =
      {
         new SqlParameter( "@FirstName", SqlDbType.NVarChar, 30 ), // 0
         new SqlParameter( "@LastName",  SqlDbType.NVarChar, 30 ), // 1
         new SqlParameter( "@Password",  SqlDbType.Binary,   24 ), // 2
         new SqlParameter( "@Email",     SqlDbType.NVarChar, 50 ), // 3
         new SqlParameter( "@AccountID", SqlDbType.Int,       4 ), // 4
      };

      // create the salted password
      HashHelper hashHelper = new HashHelper();
      byte[] saltedPassword = hashHelper.CreateDbPassword(credentials.Password);

      // Set parameter values and directions

      parameters[ 0 ].Value     = firstName;
      parameters[ 1 ].Value     = lastName;
      parameters[ 2 ].Value     = saltedPassword;
      parameters[ 3 ].Value     = credentials.Email;
      parameters[ 4 ].Direction = ParameterDirection.Output;

      // Run the stored procedure

      sproc = new StoredProcedure( "Account_Add", parameters );
      sproc.Run();

      accountID = ( int )parameters[ 4 ].Value;
      IGAM gam = new FMStocks7.GAM.GAM();
      gam.AddAccountBalance( accountID, cashBalance );
      status = AccountAddStatus.Success;

      ContextUtil.SetComplete();
   }
   catch ( SqlException e )
   {
      ContextUtil.SetAbort();
         
      // Throw an exception if the SQL error is not a primary key violation (0xA43)

      if ( e.Errors[ 0 ].Number != 0xA43 )
         throw e;

      status = AccountAddStatus.DuplicateName;
      accountID = 0;
   }
   return status;
}

Procédure stockée

Par défaut, la procédure stockée SQL se trouve dans les fichiers suivants : [lettre du lecteur où Visual Studio .NET est installé]:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\FMStocks7\Database\SQLScripts\Sprocs.Sql et GAMSprocs.Sql.

Procédure stockée Account_Add de Sprocs.Sql :

---------------------------------------------------------------------------------
--
-- Name:     Account_Add
--
-- Purpose:  Add a new account.
--
-- Returns:  Value of @@ERROR.
--
-- Failures: 1) unique key violation (duplicate email name)
--
---------------------------------------------------------------------------------

create procedure Account_Add
   @FirstName     nvarchar( 30 ),
   @LastName      nvarchar( 30 ),
   @Password      binary( 24 ),
   @Email         nvarchar( 50 ),
   @AccountID     int output
as
   declare @LastError int

   insert into Accounts ( FirstName, LastName, Password, Email )
   values ( @FirstName, @LastName, @Password, @Email )

   select @LastError = @@ERROR

   if @LastError = 0xA43 -- unique key constraint violation
      select @AccountID = 0
   else
      select @AccountID = @@IDENTITY

   return @LastError
go

Procédure stockée AccountBalance_Add de GAMSprocs.Sql :

---------------------------------------------------------------------------------
-- Name:    AccountBalance_Add
--
-- Purpose: Ad d account balances for the new account IDs.
--
-- Returns: SQL error code.
---------------------------------------------------------------------------------

create procedure AccountBalance_Add
   @AccountID int,
   @Balance   money
as
   insert into AccountBalances( AccountID, Balance )
   values ( @AccountID, @Balance )

   return @@ERROR
go

Voir aussi

Behind the Scenes de Fitch and Mather 7.0 | Vue d'ensemble de l'architecture

Afficher: