0

也许有人知道我的问题的简单解决方案。我不知道文件的条目,所以它不是静态值。它可以通过 BizTalk gui 进行更改,并且我们有一个通过接收端口的 URI。但我不相信它是那么容易访问的。我想要做的是写出完整路径作为文件名。它适用于为文件指定特定文件路径名称的 messageID。但是文件被删除的路径名不能很好地工作。我不断收到此错误:

消息:对象引用未设置为对象的实例。

消息资源存在,但在字符串/消息表中未找到消息 - 没说太多

下面你可以从我的代码中看到一个片段

internal static string UpdateMacroPathProperty(IBaseMessage baseMessage, string macroPathProperty, string macroDefsFile)
{
   if (macroName == "MessageID")
   {
      contextPropertyValue = baseMessage.MessageID.ToString();
   }
   else if (macroName == "SourceFileName")
   {               
      contextPropertyValue = Directory.GetCurrentDirectory();
   }
}

这是一个特定的创建管道。有没有人遇到过这个问题或者可以以正确的方式指出我。

我知道 BizTalk 有一个内置函数,BizTalk Server: List of Macros as the,%SourceFileName%但我试图将其保存为特定映射结构中的日志,以便它不会被处理。

4

1 回答 1

1

它取决于适配器;一些适配器将使用FILE适配器的命名空间,即使它们不是文件适配器,但这是我过去为此使用的逻辑:

string adapterType = (string)pInMsg.Context.Read("InboundTransportType",
    "http://schemas.microsoft.com/BizTalk/2003/system-properties");
string filePath = null;

if (adapterType != null)
{
    if (adapterType == "FILE")
    {
        filePath = (string)pInMsg.Context.Read("ReceivedFileName",
            "http://schemas.microsoft.com/BizTalk/2003/file-properties");
    }
    else if (adapterType.Contians("SFTP") && !adapterType.Contains("nsoftware")) 
    // nsoftware uses the FTP schema
    {
        filePath = (string)pInMsg.Context.Read("ReceivedFileName",
            "http://schemas.microsoft.com/BizTalk/2012/Adapter/sftp-properties");
    }
    else if (adapterType.Contains("FTP"))
    {
        filePath = (string)pInMsg.Context.Read("ReceivedFileName",
            "http://schemas.microsoft.com/BizTalk/2003/ftp-properties");
    }
}

MessageID然后,如果您无法从其中任何一个中获取文件路径,则可以退回到。

于 2017-03-15T13:19:06.473 回答