8 octobre 2009

INFOPATH : Nom de la pièce jointe

Aujourd'hui, voici une petite astuce sympathique permettant de récupérer le nom d'une pièce jointe d'infopath.

Problématique:
Au première abord on pourrait croire cette tache très simple à réaliser...Et on aurait bien tort.
Comme chacun sait, les pièces jointes infopath sont encodées et stockées dans le xml en binary64 afin d'optimiser les performances et le traitement du xml...
Donc vous imaginez bien qu'obtenir le nom de la pièce jointe dans une chaine encodée n'est pas une action qui se fait toute seule...

Résolution:
Il suffit en fait de mettre en place le code suivant:

BinaryReader theReader = null;
using (MemoryStream ms = new MemoryStream(byte_PJ))
{
      theReader = new BinaryReader(ms);
      byte[] headerData = new byte[16];
      headerData = theReader.ReadBytes(headerData.Length);
      int fileSize = (int)theReader.ReadUInt32();
      int attachmentNameLength = (int)theReader.ReadUInt32() * 2;
      byte[] fileNameBytes = theReader.ReadBytes(attachmentNameLength);
      Encoding enc = Encoding.Unicode;
      attachmentName = enc.GetString(fileNameBytes, 0, attachmentNameLength - 2);
}
 
ou "bytePJ" correspond au tableau de byte de votre pièce jointe. Il es tobtenu en appliquant la fonction Convert.FromBase64String(strPiecejointe).

Aucun commentaire:

Enregistrer un commentaire