2017-03-13 9 views
0

誰かが私の問題の簡単な解決策を知っているかもしれません。 ファイルのエントリがわからないので、静的な値ではありません。 これはBizTalk guiを通じて変更することができ、そこには受信ポートを通じてURIがあります。しかし、私はそれが簡単にアクセス可能だとは思わない。私がしたいのは、フルパスをファイル名として書き出すことです。これは、ファイルに特定のファイルパス名が与えられているmessageIDとうまく機能します。しかし、ファイルがドロップされたPath-Nameはうまく機能しません。 このエラーが発生し続ける:フルパスでファイル名

メッセージ: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

メッセージリソースが存在していますが、これは私のコードから

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

をスニップを見ることができます以下のようなメッセージが文字列/メッセージテーブルに見つからない -Doesがはるかに

を私に言っていません特定の作成されたパイプライン誰かがこの問題に遭遇したか、正しい方法で私を指し示すことができますか?

私は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に転送してください。

関連する問題