Полный путь как имя файла

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

Другие вопросы по тегам