我有一个文件接收位置,计划在一天中的特定时间运行。如果接收位置无法在该位置找到任何文件,我需要触发警报或邮件。
我知道我可以创建自定义组件,或者我可以使用BizTalk 360这样做。但我正在寻找一些开箱即用的BizTalk功能。
答案 0 :(得分:3)
BizTalk不擅长触发非事件。非事件是没有发生的事情,但仍然代表某种情况。
你能做的是:
还要考虑清理:该方法将要求您删除任何现有记录。
另一个选项可能是使用自定义c#程序的计划任务,只有在没有输入文件等情况下才能创建文件...
答案 1 :(得分:3)
顺序车队解决方案应该有效,但我会关注一些事情:
我喜欢彼得的建议,但我会稍微扩展一下:
创建一个表格,如下所示:
CREATE TABLE tFileEventNotify
(
ReceiveLocationName VARCHAR(255) NOT NULL primary key,
LastPickupDate DATETIME NOT NULL,
NextExpectedDate DATETIME NOT NULL,
NotificationSent bit null,
CONSTRAINT CK_FileEventNotify_Dates CHECK(NextExpectedDate > LastPickupDate)
);
您还可以为此创建一个过程,每次在该位置(从自定义管道或业务流程)接收文件时都应调用该过程,例如
CREATE PROCEDURE usp_Mrg_FileEventNotify
(
@rlocName varchar(255),
@LastPickupDate DATETIME,
@NextPickupDate DATETIME
)
AS
BEGIN
IF EXISTS(SELECT 1 FROM tFileEventNotify WHERE ReceiveLocationName = @rlocName)
BEGIN
UPDATE tFileEventNotify SET LastPickupDate = @LastPickupDate, NextPickupDate = @NextPickupDate WHERE ReceiveLocationName = @rlocName;
END
ELSE
BEGIN
INSERT tFileEventNotify (ReceiveLocationName, LastPickupDate, NextPickupDate) VALUES (@rlocName, @LastPickupDate, @NextPickupDate);
END
END
然后您可以创建一个具有以下Polling Data Available
语句的轮询端口:
SELECT 1 FROM tFileEventNotify WHERE NextPickupDate < GETDATE() AND NotificationSent <> 1
并编写一个程序,从该表生成一条消息,然后您可以映射到通过SMTP端口发送的电子邮件(或您想要使用的任何其他通知机制)。您甚至可以在tFileEventNotify
或EmailAddress
等SubjectLine
添加列。您可能需要在表格中添加一个字段,以指示是否已发送通知,具体取决于方式大,你做轮询间隔。如果你想在每次忽略那部分时发送它。
答案 2 :(得分:2)
这是一个开箱即用的解决方案: BizTalk Server: Detecting a Missing Message
基本上,它是一个Orchestration,它侦听来自该接收端口的任何消息并重置计时器。如果计时器到期,它可以做一些事情。
答案 3 :(得分:2)
一种选择是设置BAM警报,以便在白天没有收到文件时触发。