RTF a Texto Plano

Siguiendo con mis batallas de integraciones de NAV con otros sistemas, me he topado con largas notas de texto, que una vez importadas en NAV, he visto que tenían una serie de metatags asociados. Indagando un poco he visto que se trataba de Rich Text Format. Por el momento NAV no tiene un editor nativo RTF y, aunque había visto que hay add-ons para 2009 he pensado que no era necesario llegar a tanto, dado que los datos solo son necesarios para consultas puntuales. Necesitaba el texto plano.

Es casi imposible que tantos planetas queden alienados, pero si andas buscando la forma de pasar de RTF a texto plano en NAV, la solución pasa por utilizar el dotNet System.Windows.Forms.RichTextBox. A continuación os dejo con el ejemplo en NAV 2013 R2:

GetPlainNoteText() : Text

l_txtComment := '';
CALCFIELDS(NoteText);
IF NOT NoteText.HASVALUE THEN BEGIN
  l_txtComment := '';
END ELSE BEGIN
  NoteText.CREATEINSTREAM(l_instStream);
  REPEAT
    l_instStream.READTEXT(l_txtComment250,250);
    l_txtComment += l_txtComment250;
  UNTIL l_instStream.EOS;

  l_dnetRichTextBox := l_dnetRichTextBox.RichTextBox();
  l_dnetRichTextBox.Rtf(l_txtComment);
  l_txtComment := l_dnetRichTextBox.Text;
END;

EXIT(l_txtComment);

Las variables utilizadas son:

l_txtComment Text  
l_instStream InStream  
l_txtComment250 Text 250
l_dnetRichTextBox DotNet System.Windows.Forms.RichTextBox.’System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089′

Aclararos que NoteText es un campo BLOB que tengo en la propia tabla donde se aloja la función y que contiene fragmentos RTF.

Como veis lo único que hago es asignar por la propiedad RTF y recoger por la propiedad Text. Tan sencillo como eso. El control se encarga de hacer todo lo necesario en background. Además ahora que por fin podemos crear variables text sin longitud máxima, no es necesario preocuparnos por lo largo que pueda ser el texto.