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