Skip to content

Commit

Permalink
add job queue failed notification
Browse files Browse the repository at this point in the history
  • Loading branch information
StefanMaron committed Apr 17, 2024
1 parent 6a76b33 commit bbb4bdd
Show file tree
Hide file tree
Showing 13 changed files with 130 additions and 13 deletions.
6 changes: 5 additions & 1 deletion MSDyn365BC.Ntfy/src/EventTypes/ApprovalRequested.Codeunit.al
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,15 @@ codeunit 71179884 ApprovalRequestedNTSTM implements INtfyEventNTSTM
exit(true);
end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
procedure GetTitle(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[150]
begin
exit(StrSubstNo('%1 | Pending Approval [Go to Approval List](%2)', Params.Get('RecordID'), GetUrl(ClientType::Web, CompanyName, ObjectType::Page, Page::"Requests to Approve")));
end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
begin
end;

[EventSubscriber(ObjectType::Table, Database::"Approval Entry", OnAfterInsertEvent, '', false, false)]
local procedure SentNtfyOnAfterReopenSalesDoc(var Rec: Record "Approval Entry")
var
Expand Down
6 changes: 5 additions & 1 deletion MSDyn365BC.Ntfy/src/EventTypes/EmptyEvent.Codeunit.al
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ codeunit 71179876 EmptyEventNTSTM implements INtfyEventNTSTM

end;

procedure GetTitle(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[150]
begin

end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
begin

Expand All @@ -29,5 +34,4 @@ codeunit 71179876 EmptyEventNTSTM implements INtfyEventNTSTM
begin

end;

}
5 changes: 5 additions & 0 deletions MSDyn365BC.Ntfy/src/EventTypes/EventType.Enum.al
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,9 @@ enum 71179875 EventTypeNTSTM implements INtfyEventNTSTM
Caption = 'Approval requested';
Implementation = INtfyEventNTSTM = ApprovalRequestedNTSTM;
}
value(5; JobQueueFailed)
{
Caption = 'Job queue failed';
Implementation = INtfyEventNTSTM = JobQueueFailedNTSTM;
}
}
1 change: 1 addition & 0 deletions MSDyn365BC.Ntfy/src/EventTypes/INtfyEvent.Interface.al
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ interface INtfyEventNTSTM
procedure FilterNtfyEntriesBeforeBatchSend(var NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text])
procedure DoCallNtfyEvent(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Boolean
procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
procedure GetTitle(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[150]

}
65 changes: 65 additions & 0 deletions MSDyn365BC.Ntfy/src/EventTypes/JobQueueFailed.Codeunit.al
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
namespace StefanMaron.Ntfy;

using System.Automation;
using System.Threading;

codeunit 71179885 JobQueueFailedNTSTM implements INtfyEventNTSTM
{
InherentEntitlements = X;
InherentPermissions = X;

procedure SetSettings(NtfyEvent: Record NtfyEventNTSTM)
var
FilterPageBuilder: FilterPageBuilder;
begin
FilterPageBuilder.AddTable('Job Queue Entry', Database::"Job Queue Entry");
if NtfyEvent.FilterText <> '' then
FilterPageBuilder.SetView('Job Queue Entry', NtfyEvent.FilterText);
if FilterPageBuilder.RunModal() then begin
if not FilterPageBuilder.GetView('Job Queue Entry').Contains('WHERE') then
NtfyEvent.Validate(FilterText, '')
else
NtfyEvent.Validate(FilterText, FilterPageBuilder.GetView('Job Queue Entry'));
NtfyEvent.Modify(true);
end;
end;

procedure ResetSettings(NtfyEvent: Record NtfyEventNTSTM);
begin
NtfyEvent.Validate(FilterText, '');
NtfyEvent.Modify(true);
end;

procedure FilterNtfyEntriesBeforeBatchSend(var NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]);
begin
end;

procedure DoCallNtfyEvent(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Boolean
begin
exit(true);
end;

procedure GetTitle(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[150]
begin
exit(StrSubstNo('Job queue for %1 %2 failed', Params.Get('ObjectType'), Params.Get('ObjectID')));
end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
begin
exit(Params.Get('Error Message'));
end;

[EventSubscriber(ObjectType::Codeunit, Codeunit::"Job Queue Error Handler", OnAfterLogError, '', false, false)]
local procedure SentNtfyOnAfterReopenSalesDoc(var JobQueueEntry: Record "Job Queue Entry")
var
NtfyEvent: Record NtfyEventNTSTM;
Params: Dictionary of [Text, Text];
begin
if not (JobQueueEntry.Status in [JobQueueEntry.Status::Error]) then exit;

Params.Add('Error Message', JobQueueEntry."Error Message");
Params.Add('ObjectType', Format(JobQueueEntry."Object Type to Run"));
Params.Add('ObjectID', Format(JobQueueEntry."Object ID to Run"));
NtfyEvent.SendNotifications(NtfyEvent.EventType::JobQueueFailed, Params);
end;
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ codeunit 71179883 ReportFinishedProcessingNTSTM implements INtfyEventNTSTM
end;
end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]

procedure GetTitle(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[150]
var
AllObjWithCaption: Record AllObjWithCaption;
ReportCaption: Text[249];
Expand All @@ -61,7 +62,9 @@ codeunit 71179883 ReportFinishedProcessingNTSTM implements INtfyEventNTSTM
exit(StrSubstNo(ReportFinishedLbl, ReportCaption, Params.Get('ReportID')));
end;


procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
begin
end;

[EventSubscriber(ObjectType::Codeunit, Codeunit::ReportManagement, OnAfterDocumentReady, '', false, false)]
local procedure SentNtfyOnAfterReleaseSalesDoc(ObjectID: Integer; var Success: Boolean)
Expand Down
14 changes: 13 additions & 1 deletion MSDyn365BC.Ntfy/src/EventTypes/SalesDocumentReleased.Codeunit.al
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
namespace StefanMaron.Ntfy;
using Microsoft.Sales.Document;
using Microsoft.Utilities;

codeunit 71179877 SalesDocumentReleasedNTSTM implements INtfyEventNTSTM
{
Expand Down Expand Up @@ -46,11 +47,22 @@ codeunit 71179877 SalesDocumentReleasedNTSTM implements INtfyEventNTSTM
end;
end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
procedure GetTitle(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[150]
begin
exit(StrSubstNo('Sales %1 - %2 - has been released', Params.Get('DocumentType'), Params.Get('No')));
end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
var
SalesHeader: Record "Sales Header";
PageMgt: Codeunit "Page Management";
begin
if not SalesHeader.GetBySystemId(Params.Get('SystemID')) then
exit('Page Link could not be generated. Sales Header not found.');

exit(StrSubstNo('[Open Sales %1 - %2](%3)', Params.Get('DocumentType'), Params.Get('No'), GetUrl(ClientType::Web, CompanyName, ObjectType::Page, PageMgt.GetPageID(SalesHeader), SalesHeader, true)));
end;

[EventSubscriber(ObjectType::Codeunit, Codeunit::"Release Sales Document", OnAfterReleaseSalesDoc, '', false, false)]
local procedure SentNtfyOnAfterReleaseSalesDoc(var SalesHeader: Record "Sales Header")
var
Expand Down
14 changes: 13 additions & 1 deletion MSDyn365BC.Ntfy/src/EventTypes/SalesDocumentReopened.Codeunit.al
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
namespace StefanMaron.Ntfy;
using Microsoft.Sales.Document;
using Microsoft.Utilities;

codeunit 71179878 SalesDocumentReopenedNTSTM implements INtfyEventNTSTM
{
Expand Down Expand Up @@ -46,11 +47,22 @@ codeunit 71179878 SalesDocumentReopenedNTSTM implements INtfyEventNTSTM
end;
end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
procedure GetTitle(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[150]
begin
exit(StrSubstNo('Sales %1 - %2 - has been reopened', Params.Get('DocumentType'), Params.Get('No')));
end;

procedure GetMessage(NtfyEvent: Record NtfyEventNTSTM; Params: Dictionary of [Text, Text]) ReturnValue: Text[2048]
var
SalesHeader: Record "Sales Header";
PageMgt: Codeunit "Page Management";
begin
if not SalesHeader.GetBySystemId(Params.Get('SystemID')) then
exit('Page Link could not be generated. Sales Header not found.');

exit(StrSubstNo('[Open Sales %1 - %2](%3)', Params.Get('DocumentType'), Params.Get('No'), GetUrl(ClientType::Web, CompanyName, ObjectType::Page, PageMgt.GetPageID(SalesHeader), SalesHeader, true)));
end;

[EventSubscriber(ObjectType::Codeunit, Codeunit::"Release Sales Document", OnAfterReopenSalesDoc, '', false, false)]
local procedure SentNtfyOnAfterReopenSalesDoc(var SalesHeader: Record "Sales Header")
var
Expand Down
1 change: 1 addition & 0 deletions MSDyn365BC.Ntfy/src/foundation/BatchSendNtfys.Codeunit.al
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ codeunit 71179879 BatchSendNtfysNTSTM

if Rec.FindSet() then
repeat
IRestWrapper.SetDefaultRequestHeader('Title', Rec.NtfyTitle);
IRestWrapper.Post(StrSubstNo('https://ntfy.sh/%1', Rec.NtfyTopic), Body);
until Rec.Next() = 0;
end;
Expand Down
10 changes: 6 additions & 4 deletions MSDyn365BC.Ntfy/src/foundation/NtfyEvent.Table.al
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,12 @@ table 71179875 NtfyEventNTSTM
repeat
if INtfyEvent.DoCallNtfyEvent(Rec, Params) then begin
NtfyEventRequest.Init();
NtfyEventRequest.EntryNo += 1;
NtfyEventRequest.NtfyTopic := Rec.NtfyTopic;
// NtfyEventRequest.NtfyTitle := INtfyEvent.GetTitle(Params);
NtfyEventRequest.NtfyMessage := INtfyEvent.GetMessage(Rec, Params);
NtfyEventRequest.Validate(EntryNo, NtfyEventRequest.EntryNo + 1);
NtfyEventRequest.Validate(NtfyTopic, Rec.NtfyTopic);
NtfyEventRequest.Validate(NtfyTitle, INtfyEvent.GetTitle(Rec, Params));
NtfyEventRequest.Validate(NtfyMessage, INtfyEvent.GetMessage(Rec, Params));
if NtfyEventRequest.NtfyMessage = '' then
NtfyEventRequest.Validate(NtfyMessage, '<empty>');
NtfyEventRequest.Insert(true);
end;
until Rec.Next() = 0;
Expand Down
1 change: 1 addition & 0 deletions MSDyn365BC.Ntfy/src/foundation/NtfyEventRequest.Table.al
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ table 71179877 NtfyEventRequestNTSTM
var
TempSessionId: Integer;
begin
//TODO: Handle System app Web request allow for sandboxes
if not StartSession(TempSessionId, Codeunit::BatchSendNtfysNTSTM, CompanyName, Rec) then
Codeunit.Run(Codeunit::BatchSendNtfysNTSTM, Rec);
end;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
interface IRestWrapperNTSTM
{
procedure CreateBody(Content: Text): Codeunit "Http Content"
procedure SetDefaultRequestHeader(Name: Text; Value: Text)
procedure Post(RequestUri: Text; Content: Codeunit "Http Content") HttpResponseMessage: Codeunit "Http Response Message"
}
12 changes: 9 additions & 3 deletions MSDyn365BC.Ntfy/src/helperInterfaces/RestWrapper.Codeunit.al
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,22 @@ codeunit 71179880 RestWrapperNTSTM implements IRestWrapperNTSTM
InherentEntitlements = X;
InherentPermissions = X;

var
RestClient: Codeunit "Rest Client";

procedure CreateBody(Content: Text) HttpContent: Codeunit System.RestClient."Http Content"
begin
HttpContent.Create(Content);
end;

procedure SetDefaultRequestHeader(Name: Text; Value: Text)
begin
RestClient.SetDefaultRequestHeader(Name, Value);
end;

procedure Post(RequestUri: Text; Content: Codeunit System.RestClient."Http Content") HttpResponseMessage: Codeunit System.RestClient."Http Response Message"
var
RestClient: Codeunit "Rest Client";
begin
RestClient.SetDefaultRequestHeader('Markdown', 'yes');
SetDefaultRequestHeader('Markdown', 'yes');
exit(RestClient.Post(RequestUri, Content));
end;
}

0 comments on commit bbb4bdd

Please sign in to comment.