Lead Manager: differenze tra le versioni
| Riga 71: | Riga 71: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Il secondo è <code>List()</code> | |||
<syntaxhighlight lang="c#"> | |||
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); | |||
} | |||
} | |||
</syntaxhighlight> | |||
che sta utilizzando una '''stored procedure''' <code>ConfigCompanyBudget_GetSelected_byCompany</code> che andremo a definire sul database. | |||
Versione delle 14:31, 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 : BaseEntityche definisca esattamente i campi della tabella come property - creare una nuova classe
NomeClasse_List : BaseEntityList<NomeClasse> - creare una nuova classe
NomeClasse_SearchParameters : BaseEntitySearchParameterscon 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
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.