Sheet: MemoManagement

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:

  • Crearsi dei Memo relativi ad attività da farsi o da completare o da ...;
  • Inviare messaggi agli altri utenti dell' applicazione;
  • Condividere attività con gli altri utenti dell' applicazione;
  • Condividere informazioni con gli altri utenti dell' applicazione;

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:

  • Ogni Memo/Messaggio avrà una data di scadenza oltre la quale non verrà più presentato a meno di una richiesta forzata;
  • I Messaggi verranno visualizzati utilizzando i Toast, all' apertura dell' applicazione;
  • I Memo avranno una loro specifica funzione di visualizzazione: se presenti Memo, all' apertura dell' applicazione l' utente sarà avvertito e sarà sua volontà visualizzare o meno il contenuto dei Memo;

Vediamo le info di dettaglio associate ad ogni singola occorrenza Memo/Messaggio:

  • Key (Guid): identificativo della singola occorrenza;
  • DD_IdCreator(Guid): identificativo dello user che ha creato l' occorrenza;
  • DD_MemoOrMessage(String): vale MEMO se Memo, MESS se Message;
  • DD_CreationDate(Date): data di creazione dell' occorrenza;
  • DD_ExpirationDate(Date): data in cui scade il Memo/Message;
  • DD_Text(String): testo del Memo/Message;

 

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
Predispone il frame utilizzato per la creazione del Memo/Message: inizializza le date, azzera il contenuto della grid dati e riporta sulla grid stessa tutti i Memo/Message non ancora 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_CreationDate
Node type: Assign
Assign value to / type: DD_CreationDate / Date
Description (DD_CreationDate) : Data di creazione del Memo/Message
Value assigned: 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_ResetDetailData
Node type: Method
Procedure name: BBP_ResetElement
Description: Resetta il contenuto della grid MM_DetailData
Param name / type / value: elementName / String / MM_DetailData

 

MM_ReadDataMemoMessageNotExpired
Node type: Rule
Description: Legge i Memo/Messaggi 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}' 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

 

Nuovo La regola che segue crea un nuovo Memo/Message: viene attivata quando si clicca il command button indicato.
 

MM_CreateMemoMessage
Crea un nuovo Memo/Message

 

 

MM_CheckFieldsForCreateMemoMessage
Node type: Rule
Description: Controlla la validità dei campi prima di creare un nuovo Memo/Message

 

StatusOfCall
Node type: Element
Element name / type: StatusOfCall / Boolean
Description: Stato di ritorno dalle chiamate SQL

 

MM_CreateMemoMessage
Node type: Method
Procedure name: BBP_InsertRowInGridAndInSql
Description: Crea un nuovo Memo/Message
Param name / type / value: gridName / String / MM_DetailData

 

GU_MessageText
Node type: Assign
Assign value to / type: GU_MessageText / String
Description (GU_MessageText) : Testo del messaggio
Value assigned: Errori in INSERT INTO DB-SQL !

 

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_CheckFieldsForCreateMemoMessage
Controlla la validità dei campi prima di creare un nuovo Memo/Message: deve essere definito il tipo di Memo/Message, il suo testo e la data di scadenza deve essere >= alla data del giorno;

 

 

GU_ContainerObjectName
Node type: Assign
Assign value to / type: GU_ContainerObjectName / String
Description (GU_ContainerObjectName) : Contiene il nome identificativo dell' oggetto su cui si vuole operare
Value assigned: DD_MemoOrMessage

 

GU_ObjectIsDefined
Node type: Method
Procedure name: BBP_ObjectIsDefined
Description: Verifica se l' oggetto indicato dal parametro è definito o meno: se definito StatusOfCall=true altrimenti StatusOfCall=false
Param name / type / value: containerOfObjectName / String / GU_ContainerObjectName

 

StatusOfCall
Node type: Element
Element name / type: StatusOfCall / Boolean
Description: Stato di ritorno dalle chiamate SQL

 

GU_ContainerObjectName
Node type: Assign
Assign value to / type: GU_ContainerObjectName / String
Description (GU_ContainerObjectName) : Contiene il nome identificativo dell' oggetto su cui si vuole operare
Value assigned: DD_Text

 

 

GU_MessageText
Node type: Assign
Assign value to / type: GU_MessageText / String
Description (GU_MessageText) : Testo del messaggio
Value assigned: Definisci il Testo del Memo/Messaggio !

 

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

 

DD_ExpirationDate
Node type: Element
Element name / type: DD_ExpirationDate / Date
Description: Data di scadenza del Memo/Message

 

StatusOfCall
Node type: Assign
Assign value to / type: StatusOfCall / Boolean
Description (StatusOfCall) : Stato di ritorno dalle chiamate SQL
Value assigned: false

Grid OnChangeQuando 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
Procedure name: BBP_ReadSelectedRowFromGrid
Param name / type / value: gridElement / String / MM_DetailData

Modifica Il command button attiva una regola che aggiorna il Memo/Message selezionato, i cui dettagli sono stati modificati. Segue la regola
 

MM_UpdateMemoMessage
Aggiorna il Memo/Message selezionato

 

 

GU_ContainerObjectName
Node type: Assign
Assign value to / type: GU_ContainerObjectName / String
Description (GU_ContainerObjectName) : Contiene il nome identificativo dell' oggetto su cui si vuole operare
Value assigned: MM_DetailData

 

GU_ObjectIsDefined
Node type: Method
Procedure name: BBP_ObjectIsDefined
Description: Verifica se l' oggetto indicato dal parametro è definito o meno: se definito StatusOfCall=true altrimenti StatusOfCall=false
Param name / type / value: containerOfObjectName / String / GU_ContainerObjectName

 

StatusOfCall
Node type: Element
Element name / type: StatusOfCall / Boolean
Description: Stato di ritorno dalle chiamate SQL

 

MM_UpdateSelectedMemoMessage
Node type: Method
Procedure name: BBP_UpdateRowInGridAndInSql
Description: Aggiorna il Memo/Message selezionato
Param name / type / value: gridName / String / MM_DetailData

 

StatusOfCall
Node type: Element
Element name / type: StatusOfCall / Boolean
Description: Stato di ritorno dalle chiamate SQL

 

 

GU_MessageText
Node type: Assign
Assign value to / type: GU_MessageText / String
Description (GU_MessageText) : Testo del messaggio
Value assigned: Errore in aggiornamento SQL

 

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

 

GU_MessageText
Node type: Assign
Assign value to / type: GU_MessageText / String
Description (GU_MessageText) : Testo del messaggio
Value assigned: Selezionare la riga da aggiornare

 

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

 

Elimina  Il command button attiva una regola che elimina il Memo/Message selezionatosia dalla grid che dal DB-SQL. Segue la regola
 

MM_RemoveMemoMessage
Elimina il Memo/Message selezionato

 

 

GU_ContainerObjectName
Node type: Assign
Assign value to / type: GU_ContainerObjectName / String
Description (GU_ContainerObjectName) : Contiene il nome identificativo dell' oggetto su cui si vuole operare
Value assigned: MM_DetailData

 

GU_ObjectIsDefined
Node type: Method
Procedure name: BBP_ObjectIsDefined
Description: Verifica se l' oggetto indicato dal parametro è definito o meno: se definito StatusOfCall=true altrimenti StatusOfCall=false
Param name / type / value: containerOfObjectName / String / GU_ContainerObjectName

 

StatusOfCall
Node type: Element
Element name / type: StatusOfCall / Boolean
Description: Stato di ritorno dalle chiamate SQL

 

MM_RemoveSelectedMemoMessage
Node type: Method
Procedure name: BBP_RemoveSelectedRowGridInSql
Description: Rimuove il Memo/Message selezionato sia dalla Grid che dal DB-SQL
Param name / type / value: gridName / String / MM_DetailData

 

StatusOfCall
Node type: Element
Element name / type: StatusOfCall / Boolean
Description: Stato di ritorno dalle chiamate SQL

 

GU_MessageText
Node type: Assign
Assign value to / type: GU_MessageText / String
Description (GU_MessageText) : Testo del messaggio
Value assigned: Errore in aggiornamento SQL

 

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

 

GU_MessageText
Node type: Assign
Assign value to / type: GU_MessageText / String
Description (GU_MessageText) : Testo del messaggio
Value assigned: Selezionare la riga da eliminare

 

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

 

 

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