Полный путь как имя файла
Может кто знает простое решение моей проблемы. Я не знаю запись в файле, так что это не статическое значение. Его можно изменить через графический интерфейс BizTalk, а там у нас есть 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: список макросов как %SourceFileName%
но я пытаюсь сохранить это как логи в определенной структуре карты, чтобы она не обрабатывалась.
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
если вы не можете получить путь к файлу из любого из них.