0

I have 50 Biztalk packages and I need to log in a separate table when the package executes.

I am very aware that Biztalk database keeps a log, therefore don't provide that as a solution.

My table definition:

CREATE TABLE [dbo].[BiztalkLog]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [BiztalkPackageID] [int] NULL,
    [RunDate] [datetime] NULL,

    CONSTRAINT [PK_BiztalkLog] 
       PRIMARY KEY CLUSTERED ([ID] ASC)
           WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, 
                 IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, 
                 ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

My stored procedure:

CREATE PROCEDURE [dbo].[InsertBiztalkLog]
    @BiztalkPackageID AS INT
AS 
    INSERT INTO dbo.BiztalkLog(BiztalkPackageID)
        SELECT @BiztalkPackageID
GO

Questions:

  1. How do I hard code the BiztalkPackageID value inside the orchestration? So when the stored procedure executes once, it will know which value to pass.

  2. How do you execute a stored procedure only once inside an orchestration?

4

2 回答 2

1

创建存储过程调用 XML 消息的实例;因为这是一条非常小而简单的消息,所以我将它设置为一个模板,就像在 C# 帮助器类中一样:

public static string biztalkLogTemplate = @"<ns0:BiztalkLog xmlns:ns0=""http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo"">
  <ns0:BizTalkPackageID>{0}</ns0:BizTalkPackageID>
</ns0:BiztalkLog>";

public static XmlDocument GetBiztalkLog(int packageId)
{
   XmlDocument xdoc = new XmlDocument();
   xdoc.LoadXml(string.Format(biztalkLogTemplate, packageId));
}

然后,在编排中添加一个消息 ( msgLogProc) 集以使用存储过程的架构,并在构造消息表达式中:

msgLogProc = GetBiztalkLog(1); // whatever ID this orchestration is supposed to use.

然后,您可以在编排中设置一个端口并将其(直接或静态)绑定到您的 SQL 过程的发送端口。使用Send形状将其发送msgLogProc到该端口。如果您在循环形状之前执行此发送一次,则该过程只会在每次编排执行时被调用一次。如果您需要按照某些不同的标准执行一次(仅一天或一批的第一次执行?),您需要不同的模式。不过,您可能希望在 SQL 端处理此问题,无论编排是否已经为该特定批次记录了某些内容(可能使用反连接,即INSERT ... WHERE NOT EXISTS (...).

还有其他几种在编排中构造消息的方法,但我发现对于像这样的小场景来说,这是最直接的处理方式。

于 2016-01-07T13:37:52.107 回答
0

好吧,这些问题没有多大意义。您可能需要提供更多详细信息。

  1. 好吧,你就这么做。你是如何制作请求消息的?

  2. 只需调用一次即可。为什么会出现可以多次调用它的情况。

抱歉,我必须提醒您,查询 Tracking 数据库更容易。另外,您是否考虑过在内部记录每个存储过程?我会考虑更正确的解决方案。

于 2016-01-05T20:31:32.940 回答