2017-03-13 3 views
0

Peut-être que quelqu'un connaît une solution simple à mon problème. Je ne connais pas l'entrée du fichier, donc ce n'est pas une valeur statique. Il peut être changé via le BizTalk gui et là nous avons un URI à travers le receiveport. Mais je ne crois pas que ce soit accessible aussi facilement. Ce que je veux faire est d'écrire le chemin complet en tant que nom de fichier. Cela fonctionne bien avec le messageID où le fichier reçoit un nom de chemin de fichier spécifique. Mais le nom du chemin où le fichier a été déposé ne fonctionne pas très bien. Je continue d'obtenir cette erreur:chemin complet comme nom de fichier

Message: La référence d'objet n'est pas définie sur une instance d'un objet.

la ressource de message est présent mais le message ne se trouve pas dans la chaîne/message tableau -Ne me dire beaucoup

Ci-dessous vous pouvez voir un petit bout de mon code

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

C'est un pipeline créé spécifique. Quelqu'un at-il rencontré ce problème ou peut me pointer de la bonne façon.

Je sais que BizTalk a une fonction intégrée pour cela, BizTalk Server: List of Macros en tant que %SourceFileName% mais j'essaye de sauvegarder ceci comme des logs dans une structure de carte spécifique afin qu'elle ne soit pas traitée.

+0

Qu'essayez-vous exactement de faire? –

Répondre

1

Il dépend de l'adaptateur; certains adaptateurs utiliseront l'espace de nom de l'adaptateur FILE même si elles ne sont pas l'adaptateur de fichier, mais c'est le genre de logique que je l'ai utilisé dans le passé pour cela:

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"); 
    } 
} 

Et puis vous pouvez simplement se replier au MessageID si vous ne pouvez pas obtenir le chemin d'accès à ces fichiers.