完整路径作为文件名

时间:2017-03-13 10:35:30

标签: c# biztalk biztalk-pipelines

也许有人知道我的问题的简单解决方案。 我不知道文件的条目,所以它不是静态值。 它可以通过BizTalk gui进行更改,我们通过receiveport有一个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作为%SourceFileName%,但我试图将其保存为特定地图结构中的日志,以便不进行处理。

1 个答案:

答案 0 :(得分: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