Lead Manager: differenze tra le versioni

Da Webmobili Wiki.
Riga 111: Riga 111:
che restituisca tutte le configurazioni budget della company selezionata<br/>
che restituisca tutte le configurazioni budget della company selezionata<br/>
nel formato della classe <code>ConfigCompanyBudget_List</code>.
nel formato della classe <code>ConfigCompanyBudget_List</code>.
Creare la nuova '''store procedure''' <code>ConfigCompanyBudget_Delete_byCompany</code><br/>


==== Livello Biz ====
==== Livello Biz ====

Versione delle 15:41, 4 set 2024

Progetto che prevede API e Frontend,
il primo sviluppato in MVC e il secondo in Web Forms.

Struttura

Il Frontend utilizza due livelli di astrazione: biz e dal.

  • biz : La logica applicativa, mette a disposizione i modelli e quando deve recuperare informazioni dal database si affida al livello inferiore dal
  • dal : Il livello basso, nel quale vengono chiamate le vere e proprie stored procedure.
  • entity: Definizione delle entità tabelle usato da dal

biz e dal sono veri e propri progetti nella soluzione.

Esempio di implementazione

Dovendo implementare la nuova configurazione che permette ai negozi di filtrare le richieste in base al budget,
vogliamo costruire da zero i livelli dal e biz seguendo la struttura del progetto.

Livello Entity

Nel progetto LeadManager.Entities creare un file NomeClasse.cs nel quale

  • creare una nuova classe NomeClasse : BaseEntity che definisca esattamente i campi della tabella come property
  • creare una nuova classe NomeClasse_List : BaseEntityList<NomeClasse>
  • creare una nuova classe NomeClasse_SearchParameters : BaseEntitySearchParameters con i filtri necessari per avere una get delle opzioni budget di una company
  • creare una nuova classe NomeClasse_ActionParameters : BaseEntityActionParameters
  • aggiungere la definizione delle enum che definiscono il tipo di filtro

Avendo NomeClasse come ConfigCompanyBudget:

public class ConfigCompanyBudget : BaseEntity {
	public int config_company_budgetID { get; set; }
	public int companyID { get; set; }
	public int? budgetID { get; set; }
}

public class ConfigCompanyBudget_List : BaseEntityList<ConfigCompanyBudget> {}

public class ConfigCompanyBudget_SearchParameters : BaseEntitySearchParameters {
	public int companyID { get; set; }
}

public class ConfigCompanyBudget_ActionParameters : BaseEntityActionParameters {}

public enum ConfigCompanyBudget_SearchType {
  CompleteSearch = 0,
  ListSelected_by_CompanyId = 1
}

public enum ConfigCompanyBudget_ActionType {}

Livello DAL

Nel progetto LeadManager.Dal.sql
creare una classe che estenda tutte quelle appena definite nel livello entity.

public class ConfigCompanyBudgetDal : BaseDal<ConfigCompanyBudget>, IDataLayer<ConfigCompanyBudget, ConfigCompanyBudget_List,int,ConfigCompanyBudget_SearchParameters, ConfigCompanyBudget_ActionParameters>

col compilatore di VS implementare tutti i metodi astratti e di interfaccia con il default NotImplemented.

Il primo metodo da implementare è RecordToEntity()

protected override ConfigCompanyBudget RecordToEntity(SqlDataReader result, Hashtable MyOrdinals) {
	try {
		ConfigCompanyBudget MyEntity = new ConfigCompanyBudget {
			config_company_budgetID = ReadField_Integer(ref result, (int?)MyOrdinals["config_company_budgetID"]),
			companyID = ReadField_Integer(ref result, (int?)MyOrdinals["companyID"]),
			budgetID = ReadField_Integer(ref result, (int?)MyOrdinals["budgetID"])					
		};

		return MyEntity;
	}
	catch (Exception ex) {
		throw new Exceptions.LeadManager_DAL_Exception("Errore in " + global::System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
	}
}

Il secondo è List()

public ConfigCompanyBudget_List List(ConfigCompanyBudget_SearchParameters MySearchCriteria, int PageIndex = 0, int PageSize = 100000) {
	string StoredProcedureName = "";
	SqlParameter[] MyParameters = null;

	switch (MySearchCriteria.SearchType) {
		case (int)ConfigCompanyBudget_SearchType.ListSelected_by_CompanyId:
			MyParameters = new SqlParameter[] {
				new SqlParameter("@companyid", SqlDbType.Int,4)  {Value = MySearchCriteria.companyID}
			};
			StoredProcedureName = "ConfigCompanyBudget_GetSelected_byCompany";
			break;
	}

	try {
		using (SqlDataReader result = SqlHelper.ExecSPForReader(ConnectionString, StoredProcedureName, MyParameters)) {
			ConfigCompanyBudget_List arrayoggetti = new ConfigCompanyBudget_List();
			Hashtable MyOrdinals = ReadOrdinals(result);
			while (result.Read()) {
				arrayoggetti.Add(RecordToEntity(result, MyOrdinals));
			}
			return arrayoggetti;
		}
	}
	catch (Exception ex) {
		throw new Exceptions.LeadManager_DAL_Exception("Errore in " + global::System.Reflection.MethodBase.GetCurrentMethod().Name + "- Stored Procedure: " + StoredProcedureName, ex);
	}
}

che sta utilizzando una stored procedure ConfigCompanyBudget_GetSelected_byCompany che andremo a definire sul database.

Database

Creare la nuova store procedure ConfigCompanyBudget_GetSelected_byCompany
che prenda come parametro @companyID
anche definito in ConfigCompanyBudget_SearchParameters
che restituisca tutte le configurazioni budget della company selezionata
nel formato della classe ConfigCompanyBudget_List.

Creare la nuova store procedure ConfigCompanyBudget_Delete_byCompany

Livello Biz

Progetto LeadManager.BIZ
Questo livello fa da tramite tra l'applicazione e il dal.

Creare una classe ConfigCompanyBudgetBiz che estenda BaseBiz come questa:

public class ConfigCompanyBudgetBiz : BaseBiz<ConfigCompanyBudget,ConfigCompanyBudget_List,int,ConfigCompanyBudget_SearchParameters,ConfigCompanyBudget_ActionParameters>

la quale può implementare qualsiasi metodo andando ad attingere al livello dal per quanto riguarda le query.