From 7492533c5a4f346ba30b64e716bc2bfa26dc865c Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 01:07:57 +0100 Subject: [PATCH 01/25] sendSubscription logged per email Fixes #57 --- PivotSubscriptions/Task.cls | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/PivotSubscriptions/Task.cls b/PivotSubscriptions/Task.cls index a250c4c..d8be41e 100644 --- a/PivotSubscriptions/Task.cls +++ b/PivotSubscriptions/Task.cls @@ -41,9 +41,6 @@ Method OnTask() As %Status ClassMethod SendSubscription(pID, pPivot As %String, pEmails As %String, pFormat As %String, pDayOfWeek, pHour, pMinute, pName) As %Status { Set tSC=$$$OK - - Set tSC=##class(PivotSubscriptions.EventLog).LogEvent("sendSubscription", $username, pPivot, pDayOfWeek, pHour, pMinute, pFormat, pEmails, pName, .pEvent) - If $$$ISERR(tSC) Quit tSC If pName="" { Set pName=$E(pPivot,1,*-6) @@ -54,9 +51,6 @@ ClassMethod SendSubscription(pID, pPivot As %String, pEmails As %String, pFormat } Catch ex { Set tSC=ex.AsStatus() } - // Update send event with status and end time - Set tSC=pEvent.LogUpdate(tSC) - If $$$ISERR(tSC) Quit tSC If '(##class(PivotSubscriptions.Utils).CheckTable(pName)) { Set tSC=##class(PivotSubscriptions.EventLog).LogEvent("tableError", $username, pPivot, pDayOfWeek, pHour, pMinute, pFormat, pEmails, pName) @@ -72,14 +66,17 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St Set tFilename="" Set mdx=##class(%DeepSee.Utils).%GetMDXFromPivot(pPivot,.tSC,0) + Set tSubscription=##class(PivotSubscriptions.Subscription).%OpenId(pID) // Iterate through all subscribers and send emails to each individually For count=1:1:$l(pEmails,",") { Set tEmail=$p(pEmails,",",count) + Set tSC=##class(PivotSubscriptions.EventLog).LogEvent("sendSubscription", $username, pPivot, tSubscription.DayOfWeek, tSubscription.Hour, tSubscription.Minute, tSubscription.Format, tEmail, pName, .pEvent) + If $$$ISERR(tSC) Quit tSC + Set tHasResults=0 - Set tSubscription=##class(PivotSubscriptions.Subscription).%OpenId(pID) Set tCustomFilter=tSubscription.CustomFilters.GetAt(tEmail) Set tSC=##class(PivotSubscriptions.Utils).ExecuteForSubscription(mdx,tCustomFilter,.tHasResults) @@ -142,8 +139,9 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St // Send email If tHasResults||$G(^PivotSubscriptions.Settings("SendNoData"),1) { Set tSC=server.Send(msg) + Set tSC=pEvent.LogUpdate(tSC) + If $$$ISERR(tSC) Quit tSC } - // TODO: Log individual send status? If tHasResults { // Delete file From b6dc9e3c89506e44fed8db3315421bfebef21d9f Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 01:25:18 +0100 Subject: [PATCH 02/25] More descriptive sendError email contents --- PivotSubscriptions/Task.cls | 5 +++-- PivotSubscriptions/Utils.cls | 10 ++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/PivotSubscriptions/Task.cls b/PivotSubscriptions/Task.cls index d8be41e..a206bc3 100644 --- a/PivotSubscriptions/Task.cls +++ b/PivotSubscriptions/Task.cls @@ -107,7 +107,6 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St Set msg.IsHTML=1 // Set IsHTML to 1 if email uses HTML If tHasResults { - // Add attachment Do ##class(PivotSubscriptions.Utils).WriteEmail(pName, msg, tableStatus) @@ -117,7 +116,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St } ElseIf 'tableStatus { // Check if both configuration settings for admin email is valid before sending error message If validAdminEmail { - Do ##class(PivotSubscriptions.Utils).SendErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName) + Do ##class(PivotSubscriptions.Utils).SendErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName,"TooLarge") } } @@ -131,6 +130,8 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St Do ##class(PivotSubscriptions.Utils).WriteEmailHeader(msg) Do msg.TextData.WriteLine($G(^PivotSubscriptions.Settings("NoDataMessage"),"No data for requested pivot.")) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(msg) + + Do ##class(PivotSubscriptions.Utils).SendErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName,"NoResults") } } diff --git a/PivotSubscriptions/Utils.cls b/PivotSubscriptions/Utils.cls index 6a501d0..8e5e563 100644 --- a/PivotSubscriptions/Utils.cls +++ b/PivotSubscriptions/Utils.cls @@ -158,7 +158,7 @@ ClassMethod WriteEmail(pName As %String, pMsg As %Net.MailMessage, pTableStatus) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(pMsg) } -ClassMethod SendErrorMessage(pPivot As %String, pEmail As %String, pName As %String) As %Status +ClassMethod SendErrorMessage(pPivot As %String, pEmail As %String, pName As %String, pReason As %String) As %Status { Set tLog=##class(PivotSubscriptions.EventLog).LogEvent("sendError",$username,pPivot,"","","","",pEmail,pName,.pEvent) @@ -177,7 +177,13 @@ ClassMethod SendErrorMessage(pPivot As %String, pEmail As %String, pName As %Str Set msg.IsHTML=1 // Set IsHTML to 1 if email uses HTML Do ##class(PivotSubscriptions.Utils).WriteEmailHeader(msg) - Do msg.TextData.WriteLine("There was an table error detected for "_pName_" based on "_$E(pPivot,1,*-6)_", either there being no data populated in the table or the pivot table being too large to be embedded or truncated in the PDF.

Please check the Subscription Manager.") + Do msg.TextData.WriteLine("There was an table error detected for "_pName_" based on "_$E(pPivot,1,*-6)_".") + If pReason="NoData" { + Do msg.TextData.WriteLine("No data populated for table/filters.
") + } ElseIf pReason="TooLarge" { + Do msg.TextData.WriteLine("The pivot table is too large to be embedded.
") + } + Do msg.TextData.WriteLine("
Please check the Subscription Manager.") Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(msg) // Set recipient of email From b850a99128e951c75656296638f9122b6c3ba13a Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 01:39:10 +0100 Subject: [PATCH 03/25] Fix email message for too big table --- PivotSubscriptions/Utils.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PivotSubscriptions/Utils.cls b/PivotSubscriptions/Utils.cls index 8e5e563..a9afef7 100644 --- a/PivotSubscriptions/Utils.cls +++ b/PivotSubscriptions/Utils.cls @@ -152,7 +152,7 @@ ClassMethod WriteEmail(pName As %String, pMsg As %Net.MailMessage, pTableStatus) } } Else { // custom error message - Do pMsg.TextData.WriteLine("Pivot table is unpopulated or too big. Please see Excel table.") + Do pMsg.TextData.WriteLine("Pivot table is too big to be embedded. Please see attachment.") } Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(pMsg) From 280fae4249b7fdb6883ec0faaf1998e60003eb2e Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 01:39:35 +0100 Subject: [PATCH 04/25] Fix NoResults sendError email condition --- PivotSubscriptions/Utils.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PivotSubscriptions/Utils.cls b/PivotSubscriptions/Utils.cls index a9afef7..189b48a 100644 --- a/PivotSubscriptions/Utils.cls +++ b/PivotSubscriptions/Utils.cls @@ -178,7 +178,7 @@ ClassMethod SendErrorMessage(pPivot As %String, pEmail As %String, pName As %Str Do ##class(PivotSubscriptions.Utils).WriteEmailHeader(msg) Do msg.TextData.WriteLine("There was an table error detected for "_pName_" based on "_$E(pPivot,1,*-6)_".") - If pReason="NoData" { + If pReason="NoResults" { Do msg.TextData.WriteLine("No data populated for table/filters.
") } ElseIf pReason="TooLarge" { Do msg.TextData.WriteLine("The pivot table is too large to be embedded.
") From da58dc7d2af9d7bd8e9695765cd2b83ff849d7e2 Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 01:47:07 +0100 Subject: [PATCH 05/25] Add reason as status to sendError Event Fixes #61 --- PivotSubscriptions/Utils.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PivotSubscriptions/Utils.cls b/PivotSubscriptions/Utils.cls index 189b48a..2aaaa52 100644 --- a/PivotSubscriptions/Utils.cls +++ b/PivotSubscriptions/Utils.cls @@ -191,7 +191,7 @@ ClassMethod SendErrorMessage(pPivot As %String, pEmail As %String, pName As %Str // Send email Set tSC=server.Send(msg) - Set tSC=pEvent.LogUpdate(tSC) + Set tSC=pEvent.LogUpdate($$$ERROR($$$GeneralError,pReason)) Quit tSC } From 81def18b1a03a8aa216128fa22f33e8d11f78264 Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 01:53:49 +0100 Subject: [PATCH 06/25] Refactor tableError and sendError Events These two events were redundant Merges these two errors into one event Single event is now tableError --- PivotSubscriptions/EventLog.cls | 12 ++---------- PivotSubscriptions/Task.cls | 9 ++------- PivotSubscriptions/Utils.cls | 4 ++-- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/PivotSubscriptions/EventLog.cls b/PivotSubscriptions/EventLog.cls index ed6b55b..e70b02e 100644 --- a/PivotSubscriptions/EventLog.cls +++ b/PivotSubscriptions/EventLog.cls @@ -2,11 +2,8 @@ Class PivotSubscriptions.EventLog Extends %Persistent { -/* - * Only possible values are creation, update, deletion, send, and tableError - */ -/// Event Type covers: creation, update, deletion and sent email subscriptions -Property EventType As %String(VALUELIST = ",create,update,delete,sendSubscription,sendError,tableError"); +/// Event Type covers: create, update, delete, sendSubscription, and tableError +Property EventType As %String(VALUELIST = ",create,update,delete,sendSubscription,tableError"); Property StartTime As %TimeStamp [ InitialExpression = {$zdt($h, 3, 1)} ]; @@ -48,11 +45,6 @@ ClassMethod LogEvent(pType, pUser, pPivot, pDayOfWeek, pHour, pMinute, pFormat, Set tEventLog.Format=pFormat Set tEventLog.Emails=pEmails - If pType="tableError" { - Set tEventLog.Status=$$$OK - Set tEventLog.EndTime=$zdt($h,3,1) - } - Set tSC=tEventLog.%Save() Set pEvent=tEventLog diff --git a/PivotSubscriptions/Task.cls b/PivotSubscriptions/Task.cls index a206bc3..e951fa1 100644 --- a/PivotSubscriptions/Task.cls +++ b/PivotSubscriptions/Task.cls @@ -52,11 +52,6 @@ ClassMethod SendSubscription(pID, pPivot As %String, pEmails As %String, pFormat Set tSC=ex.AsStatus() } - If '(##class(PivotSubscriptions.Utils).CheckTable(pName)) { - Set tSC=##class(PivotSubscriptions.EventLog).LogEvent("tableError", $username, pPivot, pDayOfWeek, pHour, pMinute, pFormat, pEmails, pName) - If $$$ISERR(tSC) Quit tSC - } - Quit tSC } @@ -116,7 +111,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St } ElseIf 'tableStatus { // Check if both configuration settings for admin email is valid before sending error message If validAdminEmail { - Do ##class(PivotSubscriptions.Utils).SendErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName,"TooLarge") + Do ##class(PivotSubscriptions.Utils).TableErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName,"TooLarge") } } @@ -131,7 +126,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St Do msg.TextData.WriteLine($G(^PivotSubscriptions.Settings("NoDataMessage"),"No data for requested pivot.")) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(msg) - Do ##class(PivotSubscriptions.Utils).SendErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName,"NoResults") + Do ##class(PivotSubscriptions.Utils).TableErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName,"NoResults") } } diff --git a/PivotSubscriptions/Utils.cls b/PivotSubscriptions/Utils.cls index 2aaaa52..df89bf6 100644 --- a/PivotSubscriptions/Utils.cls +++ b/PivotSubscriptions/Utils.cls @@ -158,9 +158,9 @@ ClassMethod WriteEmail(pName As %String, pMsg As %Net.MailMessage, pTableStatus) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(pMsg) } -ClassMethod SendErrorMessage(pPivot As %String, pEmail As %String, pName As %String, pReason As %String) As %Status +ClassMethod TableErrorMessage(pPivot As %String, pEmail As %String, pName As %String, pReason As %String) As %Status { - Set tLog=##class(PivotSubscriptions.EventLog).LogEvent("sendError",$username,pPivot,"","","","",pEmail,pName,.pEvent) + Set tLog=##class(PivotSubscriptions.EventLog).LogEvent("tableError",$username,pPivot,"","","","",pEmail,pName,.pEvent) If $$$ISERR(tLog) Quit tLog From 2d2fd76cfb8c0c836756fa762128402f20f41079 Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 10:45:19 +0100 Subject: [PATCH 07/25] Update tableError logging --- PivotSubscriptions/Task.cls | 4 ++-- PivotSubscriptions/Utils.cls | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/PivotSubscriptions/Task.cls b/PivotSubscriptions/Task.cls index e951fa1..7adea1c 100644 --- a/PivotSubscriptions/Task.cls +++ b/PivotSubscriptions/Task.cls @@ -111,7 +111,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St } ElseIf 'tableStatus { // Check if both configuration settings for admin email is valid before sending error message If validAdminEmail { - Do ##class(PivotSubscriptions.Utils).TableErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName,"TooLarge") + Do ##class(PivotSubscriptions.Utils).TableErrorMessage(tSubscription,tEmail,pName,"TooLarge") } } @@ -126,7 +126,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St Do msg.TextData.WriteLine($G(^PivotSubscriptions.Settings("NoDataMessage"),"No data for requested pivot.")) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(msg) - Do ##class(PivotSubscriptions.Utils).TableErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName,"NoResults") + Do ##class(PivotSubscriptions.Utils).TableErrorMessage(tSubscription,tEmail,pName,"NoResults") } } diff --git a/PivotSubscriptions/Utils.cls b/PivotSubscriptions/Utils.cls index df89bf6..16c3b6a 100644 --- a/PivotSubscriptions/Utils.cls +++ b/PivotSubscriptions/Utils.cls @@ -158,10 +158,9 @@ ClassMethod WriteEmail(pName As %String, pMsg As %Net.MailMessage, pTableStatus) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(pMsg) } -ClassMethod TableErrorMessage(pPivot As %String, pEmail As %String, pName As %String, pReason As %String) As %Status +ClassMethod TableErrorMessage(pSubscription As PivotSubscriptions.Subscription, pEmail As %String, pName As %String, pReason As %String) As %Status { - Set tLog=##class(PivotSubscriptions.EventLog).LogEvent("tableError",$username,pPivot,"","","","",pEmail,pName,.pEvent) - + Set tLog=##class(PivotSubscriptions.EventLog).LogEvent("tableError",$username,pSubscription.Pivot,pSubscription.DayOfWeek,pSubscription.Hour,pSubscription.Minute,pSubscription.Format,pEmail,pName,.pEvent) If $$$ISERR(tLog) Quit tLog // Generate email @@ -177,7 +176,7 @@ ClassMethod TableErrorMessage(pPivot As %String, pEmail As %String, pName As %St Set msg.IsHTML=1 // Set IsHTML to 1 if email uses HTML Do ##class(PivotSubscriptions.Utils).WriteEmailHeader(msg) - Do msg.TextData.WriteLine("There was an table error detected for "_pName_" based on "_$E(pPivot,1,*-6)_".") + Do msg.TextData.WriteLine("There was an table error detected for "_pName_" based on "_$E(pSubscription.Pivot,1,*-6)_".") If pReason="NoResults" { Do msg.TextData.WriteLine("No data populated for table/filters.
") } ElseIf pReason="TooLarge" { @@ -187,8 +186,8 @@ ClassMethod TableErrorMessage(pPivot As %String, pEmail As %String, pName As %St Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(msg) // Set recipient of email - Do msg.To.SetAt(pEmail,1) - + Do msg.To.SetAt(^PivotSubscriptions.Settings("AdminEmail"),1) + // Send email Set tSC=server.Send(msg) Set tSC=pEvent.LogUpdate($$$ERROR($$$GeneralError,pReason)) From 2061eb16b67e7ed1ed885f333a281286149617ef Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 11:03:48 +0100 Subject: [PATCH 08/25] Add New GetSettings Method Remove direct global references to ^PivotSubscriptsions.Settings Point to PivotSubscriptions.Utils:GetSettings() --- PivotSubscriptions/Task.cls | 10 ++++---- PivotSubscriptions/UI/ConfigurationPage.cls | 24 +++++++++---------- PivotSubscriptions/UI/SubscriptionManager.cls | 8 +------ PivotSubscriptions/Utils.cls | 15 ++++++++---- 4 files changed, 28 insertions(+), 29 deletions(-) diff --git a/PivotSubscriptions/Task.cls b/PivotSubscriptions/Task.cls index d8be41e..bd1fade 100644 --- a/PivotSubscriptions/Task.cls +++ b/PivotSubscriptions/Task.cls @@ -12,7 +12,7 @@ Method OnTask() As %Status Set tHour=$PIECE($ZTIME($PIECE($HOROLOG,",",2),2),":",1) Set tMinute=$PIECE($ZTIME($PIECE($HOROLOG,",",2),2),":",2) - If $G(^PivotSubscriptions.Settings("TestEnv")) { + If ##class(PivotSubscriptions.Utils).GetSettings("TestEnv",0) { // Ignore minute for testing purposes // This will allow the task to be run on demand and send emails immediately // Leaving DayOfWeek and Hour so the scheduled task does not spam emails @@ -98,7 +98,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St Set validAdminEmail=##class(PivotSubscriptions.Utils).CheckConfigurationGlobal("AdminEmail") If validAdminEmail { - Set msg.ReplyTo=^PivotSubscriptions.Settings("AdminEmail") + Set msg.ReplyTo=##class(PivotSubscriptions.Utils).GetSettings("AdminEmail") } // Remove ".pivot" extension for subject @@ -117,7 +117,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St } ElseIf 'tableStatus { // Check if both configuration settings for admin email is valid before sending error message If validAdminEmail { - Do ##class(PivotSubscriptions.Utils).SendErrorMessage(pPivot,^PivotSubscriptions.Settings("AdminEmail"),pName) + Do ##class(PivotSubscriptions.Utils).SendErrorMessage(pPivot,##class(PivotSubscriptions.Utils).GetSettings("AdminEmail"),pName) } } @@ -129,7 +129,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St } } Else { Do ##class(PivotSubscriptions.Utils).WriteEmailHeader(msg) - Do msg.TextData.WriteLine($G(^PivotSubscriptions.Settings("NoDataMessage"),"No data for requested pivot.")) + Do msg.TextData.WriteLine(##class(PivotSubscriptions.Utils).GetSettings("NoDataMessage","No data for requested pivot.")) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(msg) } } @@ -137,7 +137,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St Do msg.To.SetAt(tEmail,1) // Send email - If tHasResults||$G(^PivotSubscriptions.Settings("SendNoData"),1) { + If tHasResults||##class(PivotSubscriptions.Utils).GetSettings("SendNoData",1) { Set tSC=server.Send(msg) Set tSC=pEvent.LogUpdate(tSC) If $$$ISERR(tSC) Quit tSC diff --git a/PivotSubscriptions/UI/ConfigurationPage.cls b/PivotSubscriptions/UI/ConfigurationPage.cls index 0720bbe..63a18e7 100644 --- a/PivotSubscriptions/UI/ConfigurationPage.cls +++ b/PivotSubscriptions/UI/ConfigurationPage.cls @@ -52,23 +52,23 @@ Method %OnGetProductName() As %String [ Internal ] Method %OnAfterCreatePage() As %Status { // check if each global is instantiated and set only if they aren't empty or nonexsistent - If $G(^PivotSubscriptions.Settings("AdminEmail"))'="" { - Set ..%GetComponentById("AdminEmailText").value=^PivotSubscriptions.Settings("AdminEmail") + If ##class(PivotSubscriptions.Utils).GetSettings("AdminEmail")'="" { + Set ..%GetComponentById("AdminEmailText").value=##class(PivotSubscriptions.Utils).GetSettings("AdminEmail") } - If $G(^PivotSubscriptions.Settings("Http"))'="" { - Set ..%GetComponentById("HTTPButton").value=^PivotSubscriptions.Settings("Http") + If ##class(PivotSubscriptions.Utils).GetSettings("Http")'="" { + Set ..%GetComponentById("HTTPButton").value=##class(PivotSubscriptions.Utils).GetSettings("Http") } - If $G(^PivotSubscriptions.Settings("Server"))'="" { - Set ..%GetComponentById("ServerText").value=^PivotSubscriptions.Settings("Server") + If ##class(PivotSubscriptions.Utils).GetSettings("Server")'="" { + Set ..%GetComponentById("ServerText").value=##class(PivotSubscriptions.Utils).GetSettings("Server") } - If $G(^PivotSubscriptions.Settings("Port"))'="" { - Set ..%GetComponentById("PortText").value=^PivotSubscriptions.Settings("Port") + If ##class(PivotSubscriptions.Utils).GetSettings("Port")'="" { + Set ..%GetComponentById("PortText").value=##class(PivotSubscriptions.Utils).GetSettings("Port") } - If $G(^PivotSubscriptions.Settings("SendNoData"))'="" { - Set ..%GetComponentById("NoDataEmail").value=^PivotSubscriptions.Settings("SendNoData") + If ##class(PivotSubscriptions.Utils).GetSettings("SendNoData")'="" { + Set ..%GetComponentById("NoDataEmail").value=##class(PivotSubscriptions.Utils).GetSettings("SendNoData") } - If $G(^PivotSubscriptions.Settings("NoDataMessage"))'="" { - Set ..%GetComponentById("NoDataMessage").value=^PivotSubscriptions.Settings("NoDataMessage") + If ##class(PivotSubscriptions.Utils).GetSettings("NoDataMessage")'="" { + Set ..%GetComponentById("NoDataMessage").value=##class(PivotSubscriptions.Utils).GetSettings("NoDataMessage") } Quit $$$OK diff --git a/PivotSubscriptions/UI/SubscriptionManager.cls b/PivotSubscriptions/UI/SubscriptionManager.cls index b14e373..8f37ea2 100644 --- a/PivotSubscriptions/UI/SubscriptionManager.cls +++ b/PivotSubscriptions/UI/SubscriptionManager.cls @@ -165,13 +165,7 @@ Method SendNow(pId, pPivot, pEmail As %String) As %String [ ZenMethod ] Method GetManagerEmail() As %String [ ZenMethod ] { - Set tSC=##class(PivotSubscriptions.Utils).CheckConfigurationGlobal("AdminEmail") - - If tSC { - Quit ^PivotSubscriptions.Settings("AdminEmail") - } - - Quit "" + Quit ##class(PivotSubscriptions.Utils).GetSettings("AdminEmail") } /// Query to get subscriptions for Subscription Manager display table. diff --git a/PivotSubscriptions/Utils.cls b/PivotSubscriptions/Utils.cls index 6a501d0..57cab00 100644 --- a/PivotSubscriptions/Utils.cls +++ b/PivotSubscriptions/Utils.cls @@ -22,7 +22,7 @@ ClassMethod ConfigureSettings(pAdminEmail, pHttp, pServer, pPort, pNoDataEmail, ClassMethod CheckConfigurationGlobal(pConfigurationOptionName As %String) { If ((pConfigurationOptionName'="") && $DATA(^PivotSubscriptions.Settings(pConfigurationOptionName))) { - If (^PivotSubscriptions.Settings(pConfigurationOptionName)'="") { + If ##class(PivotSubscriptions.Utils).GetSettings(pConfigurationOptionName)'="" { Quit 1 } } @@ -30,6 +30,11 @@ ClassMethod CheckConfigurationGlobal(pConfigurationOptionName As %String) Quit 0 } +ClassMethod GetSettings(pSetting As %String, pDefaultValue As %String = "") As %String +{ + Quit $G(^PivotSubscriptions.Settings(pSetting),pDefaultValue) +} + ClassMethod GenerateLink(ByRef link As %String) As %Status { Set tSC=$$$OK @@ -38,19 +43,19 @@ ClassMethod GenerateLink(ByRef link As %String) As %Status If $$$ISERR(tSC) Quit tSC If ..CheckConfigurationGlobal("Http") { - Set tWebServerPortUrl=^PivotSubscriptions.Settings("Http") + Set tWebServerPortUrl=##class(PivotSubscriptions.Utils).GetSettings("Http") } Else { Set tWebServerPortUrl="http://" } If ..CheckConfigurationGlobal("Server") { - Set tWebServerPortUrl=tWebServerPortUrl_^PivotSubscriptions.Settings("Server") + Set tWebServerPortUrl=tWebServerPortUrl_##class(PivotSubscriptions.Utils).GetSettings("Server") } Else { Set tWebServerPortUrl=tWebServerPortUrl_h } If ..CheckConfigurationGlobal("Port") { - Set tWebServerPortUrl=tWebServerPortUrl_":"_^PivotSubscriptions.Settings("Port") + Set tWebServerPortUrl=tWebServerPortUrl_":"_##class(PivotSubscriptions.Utils).GetSettings("Port") } Else { If '..CheckConfigurationGlobal("Server") { Set tWebServerPortUrl=tWebServerPortUrl_":"_p @@ -169,7 +174,7 @@ ClassMethod SendErrorMessage(pPivot As %String, pEmail As %String, pName As %Str Set server.smtpserver = ##class(%SYS.Task.Config).GetData("MailServer") Set msg=##class(%Net.MailMessage).%New() Set msg.From="PivotSubscriptions" - Set msg.ReplyTo=^PivotSubscriptions.Settings("AdminEmail") // replace with admin email + Set msg.ReplyTo=##class(PivotSubscriptions.Utils).GetSettings("AdminEmail") // replace with admin email // Remove ".pivot" extension for subject Set msg.Subject="Table Error detected for "_pName From 087be1fa10aa500679002d153e44d7e3d8a87d92 Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 11:31:30 +0100 Subject: [PATCH 09/25] Add WriteUnsubscribe Method WriteEmailFooter split into two methods --- PivotSubscriptions/Task.cls | 1 + PivotSubscriptions/Utils.cls | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/PivotSubscriptions/Task.cls b/PivotSubscriptions/Task.cls index d8be41e..c1a56d8 100644 --- a/PivotSubscriptions/Task.cls +++ b/PivotSubscriptions/Task.cls @@ -130,6 +130,7 @@ ClassMethod SendEmail(pID, pPivot As %String, pEmails As %String, pFormat As %St } Else { Do ##class(PivotSubscriptions.Utils).WriteEmailHeader(msg) Do msg.TextData.WriteLine($G(^PivotSubscriptions.Settings("NoDataMessage"),"No data for requested pivot.")) + Do ##class(PivotSubscriptions.Utils).WriteUnsubscribe(msg) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(msg) } } diff --git a/PivotSubscriptions/Utils.cls b/PivotSubscriptions/Utils.cls index 6a501d0..a8837ce 100644 --- a/PivotSubscriptions/Utils.cls +++ b/PivotSubscriptions/Utils.cls @@ -109,14 +109,18 @@ ClassMethod WriteEmailHeader(pMsg As %Net.MailMessage) Do pMsg.TextData.WriteLine("

") } -/// Write footer for any email, including link generation -ClassMethod WriteEmailFooter(pMsg As %Net.MailMessage) +ClassMethod WriteUnsubscribe(pMsg As %Net.MailMessage) { Do ##class(PivotSubscriptions.Utils).GenerateLink(.link) - + Do pMsg.TextData.WriteLine("

") Do pMsg.TextData.WriteLine("") Do pMsg.TextData.WriteLine("
 
 
You can manage your subscriptions here.
You can edit days of the week/time/format/recipients and delete in the Subscriptions Manager portal.
 
") +} + +/// Write footer for any email, including link generation +ClassMethod WriteEmailFooter(pMsg As %Net.MailMessage) +{ Do pMsg.TextData.WriteLine("") Do pMsg.TextData.WriteLine("
 

Pivot Subscriptions by DeepSee

2019 InterSystems Corporation

One Memorial Drive, Cambridge, MA 02142

 
") } @@ -155,6 +159,7 @@ ClassMethod WriteEmail(pName As %String, pMsg As %Net.MailMessage, pTableStatus) Do pMsg.TextData.WriteLine("Pivot table is unpopulated or too big. Please see Excel table.") } + Do ##class(PivotSubscriptions.Utils).WriteUnsubscribe(pMsg) Do ##class(PivotSubscriptions.Utils).WriteEmailFooter(pMsg) } From 50acda58cb5ec5d0ed364c575d44639c7acfb089 Mon Sep 17 00:00:00 2001 From: psteiwer Date: Thu, 27 Feb 2020 11:37:02 +0100 Subject: [PATCH 10/25] Config Page has Custom Footer options --- PivotSubscriptions/UI/ConfigurationPage.cls | 17 ++++++++++++++--- PivotSubscriptions/Utils.cls | 4 +++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/PivotSubscriptions/UI/ConfigurationPage.cls b/PivotSubscriptions/UI/ConfigurationPage.cls index 0720bbe..354d508 100644 --- a/PivotSubscriptions/UI/ConfigurationPage.cls +++ b/PivotSubscriptions/UI/ConfigurationPage.cls @@ -22,6 +22,9 @@ XData contentPane [ XMLNamespace = "http://www.intersystems.com/zen" ]