L' obiettivo di questo modello è rendere disponibile una semplice gestione di Memo/Messaggi (ovviamente questa funzionalità può essere implementata) che può tornare utile a chi utilizza l' applicazione per:
Come archivio per la memorizzazione dei Memo/Messaggi utilizziamo SQL in quanto il 90% delle applicazioni di fatto lo utilizzano come struttura DB.
Altre considerazioni generali:
Vediamo le info di dettaglio associate ad ogni singola occorrenza Memo/Messaggio:
Queste info sono le colonne che definiscono l' oggetto List DD_MemoMessageDetail che ritroviamo all' interno del Sheet.
Segue lo script SQL utile per la creazione della tabella DD_MemoMessageDetail sul DB-SQL a cui si appoggia l' applicazione:
drop table MM_DetailData;
create table MM_DetailData([Key] varchar(60) not null,
DD_IdCreator varchar(60),
DD_MemoOrMessage varchar(16),
DD_CreationDate date,
DD_ExpirationDate date,
DD_Text varchar(MAX),
constraint [PK_Key] primary key clustered ([Key] ASC))
Vediamo le funzionalità che sono implementate.
Creazione del Memo/Messaggio
Per questa funzionalità si rende disponibile un frame che può essere attivato da un qualunque punto dell' applicazione.
Tutti gli elementi riportati sulla pagina sono definiti all' interno del sheet in oggetto.
Segue la regola che attiva il frame in oggetto:
MM_ActivateFrameToCreateMemoMessage
Valorizza i parametri utili al metodo std GU_CreateFrame e lancia il metodo stesso per attivare il Frame che consente di operare sui Memo/Message.
GU_ContainerPageName
Node type: Assign
Assign value to / type: GU_ContainerPageName / String
Description (GU_ContainerPageName) : Contiene il nome del Frame da visualizzare
Value assigned: MM_CreateMemoMessageFrame
GU_ContainerTitle
Node type: Assign
Assign value to / type: GU_ContainerTitle / String
Description (GU_ContainerTitle) : Contiene il titolo da riportare sulla testata del Frame
Value assigned: Memo / Message Frame
GU_ContainerIcon
Node type: Assign
Assign value to / type: GU_ContainerIcon / String
Description (GU_ContainerIcon) : Contiene l' icona che viene riportata sulla testata del Frame
Value assigned: fas fa-grimace
GU_ContainerCloseMethod
Node type: Assign
Assign value to / type: GU_ContainerCloseMethod / String
Description (GU_ContainerCloseMethod) : Contiene il nome del Metodo che deve essere attivato alla chiusura del Frame
Value assigned:
GU_ContainerWidth
Node type: Assign
Assign value to / type: GU_ContainerWidth / String
Description (GU_ContainerWidth) : Definisce la dimensione in % del Frame rispetto alla pagina che lo attiva
Value assigned: 70%
GU_CreateFrame
Node type: Method
Procedure name: BBP_CreateFrame
Description: Crea il Frame indicato dai parametri
Param name / type / value: containerPageName / String / GU_ContainerPageName
Param name / type / value: containerIcon / String / GU_ContainerIcon
Param name / type / value: containerTitle / String / GU_ContainerTitle
Param name / type / value: containerCloseMethod / String / GU_ContainerCloseMethod
Param name / type / value: containerWidth / String / GU_ContainerWidth
Descriviamo velocemente le funzioni associate al frame:
When Init | La regola che segue viene attivata quando scatta l' evento indicato, cioè quando viene attivato il frame in oggetto. |
MM_InitFrameToCreateMemoMessage
GU_RtnToDayDate
DD_CreationDate
DD_ExpirationDate
MM_ResetDetailData
MM_ReadDataMemoMessageNotExpired | |
MM_SetExpiredDate_yyyyMMdd
GU_SqlWhereTmpl
GU_CompileWhereSql
MM_ReadMemoMessageNotExpired
| |
Nuovo | La regola che segue crea un nuovo Memo/Message: viene attivata quando si clicca il command button indicato. |
MM_CreateMemoMessage
MM_CheckFieldsForCreateMemoMessage
StatusOfCall
MM_CreateMemoMessage
GU_MessageText
GU_ViewWarningMessage
MM_CheckFieldsForCreateMemoMessage
GU_ContainerObjectName
GU_ObjectIsDefined
StatusOfCall
GU_ContainerObjectName
GU_MessageText
GU_ViewWarningMessage
DD_ExpirationDate
StatusOfCall | |
Grid OnChange | Quando si seleziona un Memo/Message, viene attivato questo evento che, a sua volta, attiva il metodo che segue. |
MM_ReadSelectedMemoMessageFromGrid Riporta sul dettaglio i dati del Memo/Message selezionati sulla Grid | |
Modifica | Il command button attiva una regola che aggiorna il Memo/Message selezionato, i cui dettagli sono stati modificati. Segue la regola |
MM_UpdateMemoMessage
GU_ContainerObjectName
GU_ObjectIsDefined
StatusOfCall
MM_UpdateSelectedMemoMessage
StatusOfCall
GU_MessageText
GU_ViewWarningMessage
GU_MessageText
GU_ViewWarningMessage
| |
Elimina | Il command button attiva una regola che elimina il Memo/Message selezionatosia dalla grid che dal DB-SQL. Segue la regola |
MM_RemoveMemoMessage
GU_ContainerObjectName
GU_ObjectIsDefined
StatusOfCall
MM_RemoveSelectedMemoMessage
StatusOfCall
GU_MessageText
GU_ViewWarningMessage
GU_MessageText
GU_ViewWarningMessage
|
Segnalazione di Memo / Message da visualizzare
La regola che segue può essere inserita in qualunque punto dell' applicazione: obiettivo della regola è avvertire l' utente se sono presenti memo non scaduti e visualizzare i messaggi non scaduti.
MM_WarnIfMemoAndViewMessage
Avverte l' utente della presenza di MEMO: inoltre visualizza i messaggi non scaduti.
GU_RtnToDayDate
Node type: Method
Procedure name: BBP_RtnToDayDate
Description: Valorizza il parametro di [output] alla data del giorno
Param name / type / value: [output] / Date / GU_ToDayDate
DD_ExpirationDate
Node type: Assign
Assign value to / type: DD_ExpirationDate / Date
Description (DD_ExpirationDate) : Data di scadenza del Memo/Message
Value assigned: GU_ToDayDate
MM_SetExpiredDate_yyyyMMdd
Node type: Method
Procedure name: BBP_RtnDateIn_yyyymmdd
Description: Ritorna la data di scadenza nel formato yyyyMMdd utie per where sql
Param name / type / value: refDate / String / DD_ExpirationDate
Param name / type / value: [Output] / String / MM_ExpiredDate_yyyyMMdd
GU_SqlWhereTmpl
Node type: Assign
Assign value to / type: GU_SqlWhereTmpl / String
Description (GU_SqlWhereTmpl) : Stringa contenente il template utile per costruire la Where Sql utilizzata per leggere da DB-SQL
Value assigned: select count(*) from MM_DetailData where DD_ExpirationDate >= '{MM_ExpiredDate_yyyyMMdd}' and DD_MemoOrMessage = 'MEMO'
GU_CompileWhereSql
Node type: Method
Procedure name: BBP_ElaborateString
Description: Compila l where sql da utilizzare in lettura su DB-SQL
Param name / type / value: whereSqlTempl / String / GU_SqlWhereTmpl
Param name / type / value: whereSql / String / GU_SqlWhere
MM_MemoInDB
Node type: Method
Procedure name: BBP_ExecuteSqlCommand
Description: Ritorna il numero di Memo presenti sul DB
Param name / type / value: rtnValue / String / MM_MemoMessageNotExpiredInDB
Param name / type / value: [Output] / String / GU_MessageText
Param name / type / value: sqlCommand / String / GU_SqlWhere
StatusOfCall
Node type: Element
Element name / type: StatusOfCall / Boolean
Description: Stato di ritorno dalle chiamate SQL
MM_MemoMessageNotExpiredInDB
Node type: Element
Element name / type: MM_MemoMessageNotExpiredInDB / Number
Description: Numero dei Memo/Messaggi definiti su DB non ancora scaduti
GU_MessageText
Node type: Assign
Assign value to / type: GU_MessageText / String
Description (GU_MessageText) : Testo del messaggio
Value assigned: Sono presenti MEMO da leggere
MM_DisplayAreMemoDefined
Node type: Method
Procedure name: BBP_MakeInfoToast
Description: Avverte l' utente che sono presenti MEMO
Param name / type / value: Message / String / GU_MessageText
MM_VerifyAndViewMessages
Node type: Rule
Description: Verifica se sono presenti messaggi e, se sì, livisualizza
GU_ViewWarningMessage
Node type: Method
Procedure name: ViewMessage
Description: Visualizza un messaggio di avvertimento/errore
Param name / type / value: messageName / String / GU_WarningMessage
Param name / type / value: messageText / String / GU_MessageText
MM_VerifyAndViewMessages
Verifica se sono presenti messaggi e, se sì, livisualizza
MM_DispayMessagesNotExpired
Node type: Method
Procedure name: MM_DispayMessagesNotExpired
Description: Visualizza tutti i messaggi definiti non ancora scaduti
Codice:
var status = _blackBox["StatusOfCall"].ToBBBooleanElement();
DateTime toDay = DateTime.UtcNow.Date;
string sqlCommand = "select DD_Text from MM_DetailData where DD_ExpirationDate >= '" + toDay.ToString("yyyyMMdd") + "' and " +
"DD_MemoOrMessage = 'MESS'";
var resultSQL = SQLconnector.ExecuteSQLCommand(sqlCommand, "");
if (resultSQL.TableName == "EKS_SQL_Central_ERRORTABLE")
{
status.Value = false;
throw new Exception("SQL Read error: " + sqlCommand);
}
if (resultSQL.Rows.Count > 0)
{
for(int ic = 0; ic < resultSQL.Rows.Count; ic++)
{
_blackBox.MakeToast(resultSQL.Rows[ic][0].ToString(), "Info", BBTRulesEngine.Types.Toast.BlackBoxToastType.Info,
BBTRulesEngine.Types.Toast.BlackBoxToastPosition.toast_top_center, 10000);
}
}
Consultazione dei Memo non scaduti
Per questa funzionalità si rende disponibile un Frame che può essere attivato da un qualunque punto dell' applicazione.
Tutti gli elementi riportati sulla pagina sono definiti all' interno del sheet in oggetto.
Segue la regola che attiva il frame in oggetto:
MM_ActivateFrameToViewMemoMessage
Valorizza i parametri utili al metodo std GU_CreateFrame e lancia il metodo stesso per attivare il Frame che consente di visualizzare i Memo non ancora scaduti.
GU_ContainerPageName
Node type: Assign
Assign value to / type: GU_ContainerPageName / String
Description (GU_ContainerPageName) : Contiene il nome del Frame da visualizzare
Value assigned: MM_ViewMemoMessageFrame
GU_ContainerTitle
Node type: Assign
Assign value to / type: GU_ContainerTitle / String
Description (GU_ContainerTitle) : Contiene il titolo da riportare sulla testata del Frame
Value assigned: Memo / Message Frame
GU_ContainerIcon
Node type: Assign
Assign value to / type: GU_ContainerIcon / String
Description (GU_ContainerIcon) : Contiene l' icona che viene riportata sulla testata del Frame
Value assigned: fas fa-grimace
GU_ContainerCloseMethod
Node type: Assign
Assign value to / type: GU_ContainerCloseMethod / String
Description (GU_ContainerCloseMethod) : Contiene il nome del Metodo che deve essere attivato alla chiusura del Frame
Value assigned:
GU_ContainerWidth
Node type: Assign
Assign value to / type: GU_ContainerWidth / String
Description (GU_ContainerWidth) : Definisce la dimensione in % del Frame rispetto alla pagina che lo attiva
Value assigned: 70%
GU_CreateFrame
Node type: Method
Procedure name: BBP_CreateFrame
Description: Crea il Frame indicato dai parametri
Param name / type / value: containerPageName / String / GU_ContainerPageName
Param name / type / value: containerIcon / String / GU_ContainerIcon
Param name / type / value: containerTitle / String / GU_ContainerTitle
Param name / type / value: containerCloseMethod / String / GU_ContainerCloseMethod
Param name / type / value: containerWidth / String / GU_ContainerWidth
Segue la regola associata all' evento di Exec Init associato alla visualizzazione del Frame:
MM_ReadDataMemoNotExpired
Legge i Memo che ancora non sono scaduti
MM_SetExpiredDate_yyyyMMdd
Node type: Method
Procedure name: BBP_RtnDateIn_yyyymmdd
Description: Ritorna la data di scadenza nel formato yyyyMMdd utie per where sql
Param name / type / value: refDate / String / DD_ExpirationDate
Param name / type / value: [Output] / String / MM_ExpiredDate_yyyyMMdd
GU_SqlWhereTmpl
Node type: Assign
Assign value to / type: GU_SqlWhereTmpl / String
Description (GU_SqlWhereTmpl) : Stringa contenente il template utile per costruire la Where Sql utilizzata per leggere da DB-SQL
Value assigned: DD_ExpirationDate >= '{MM_ExpiredDate_yyyyMMdd}' and DD_memoOrMessage = 'MEMO' order by DD_ExpirationDate DESC
GU_CompileWhereSql
Node type: Method
Procedure name: BBP_ElaborateString
Description: Compila l where sql da utilizzare in lettura su DB-SQL
Param name / type / value: whereSqlTempl / String / GU_SqlWhereTmpl
Param name / type / value: whereSql / String / GU_SqlWhere
MM_ReadMemoMessageNotExpired
Node type: Method
Procedure name: BBP_FillGridFromSqlTable
Description: Legge i Memo/Message non scaduti dal DB-SQL e li riporta sula Grid MM_DetailData
Param name / type / value: containerSqlWhere / String / GU_SqlWhere
Param name / type / value: gridName / String / MM_DetailData