The type or method 'Read' cannot be used for 'Extension' development.

Cursos de Navision 100% online Foros Foro Dynamics NAV y Business Central The type or method 'Read' cannot be used for 'Extension' development.

Etiquetado: 

Este debate contiene 2 respuestas, tiene 2 mensajes y lo actualizó  Jaume Escribà hace 3 meses.

Viendo 3 publicaciones - del 1 al 3 (de un total de 3)
  • Autor
    Publicaciones
  • #7868

    Jaume Escribà
    Participante

    Trabajando con extensiones con BC, he creado un proceso para importar datos desde un fichero plano.

    Tengo la variable

    var
    Fichero: File;

    Al usar la variable con diferentes métodos como por ejemplo

    while (Fichero.Read(Texte) <> 0) do begin

    me da este error

    The type or method ‘Read’ cannot be used for ‘Extension’ development.

    Lo curioso es que si uso el inteligent, me propone los métodos que después da error.

    Es un error del sistema o no se puede utilizar y debo utilizar otro tipo de variables

    Gracias

     

    #7872

    Cristina Nicolàs
    Jefe de claves

    Hola Jaume,

    En este caso el problema es que la función que utilizas está marca como Interna. De ahí que te diga que no se puede utilizar en el desarrollo de extensiones.

    Si tu desarrollo es para una instalación on-premise, puedes poner en el app.json el parámetro target:”internal” y asegurarte que el servicio tiene también esta opción seleccionada y entonces ya podrás utilizar estas opciones.

    O puedes hacer el desarrollo distinto para no tener que utilizar funciones que están marcadas como internas.

    Yo recientemente he hecho un desarrollo de extensión en el que tenía que leer un fichero plano desde el cliente web y desde el cloud. Empecé igual que tu, utilizando una variable de tipo File, y fui probando varias cosas hasta que di con la forma de hacerlo.

    Y al final acabo utilizando una variable de tipo InStream

    var
    FileDialogTitleTxt: Label ‘Import Presto .bc3 file’, Comment = ‘ESP=Importar archivo Presto .bc3’;
    PrestoFileExtensionTok: Label ‘Presto Files (*.bc3)|*.bc3’, Comment = ‘ESP=Archivos Presto (*.bc3)|*.bc3’;
    FilePath: Text;
    FileUploadErrorTxt: Label ‘The file could not be uploaded’, Comment = ‘ESP=No se ha podido cargar el archivo’;
    UploadResult: Boolean;
    PrestoInStream: InStream;
    begin
    UploadResult := UploadIntoStream(FileDialogTitleTxt, ”, PrestoFileExtensionTok, FilePath, PrestoInStream);

    if not UploadResult then
    Error(FileUploadErrorTxt);

    BC3Buffer.LoadDataFromStream(PrestoInStream);

    Con este primer código se le solicita al usuario que seleccione un fichero y éste se carga en la variable PrestoInStream.

    Y después con esta función leo el InStream y voy insertando cada línea que leo en una tabla temporal que me he creado (BC3Buffer es una tabla que he creado yo):

    procedure LoadDataFromStream(BC3InStream: InStream);
    var
    EncodingConverter: Codeunit “Encoding Converter”;
    LineContent: Text;
    CurrentLineNo: Integer;
    begin
    DeleteAll();
    while not BC3InStream.EOS() do begin
    BC3InStream.ReadText(LineContent);
    LineContent := EncodingConverter.ChangeInImport(LineContent);

    CurrentLineNo += 1;
    Init();
    “Line No.” := CurrentLineNo;
    SetLineContent(LineContent);
    Insert();
    end;
    end;

    Lo de EncodingConverter.ChangeInImport es la típica función Ascii2Ansi y Ansi2Ascii, a las que les cambié el nombre en un momento dado porque nunca soy capaz de recordar cual es la que se utiliza al importar y cual al exportar.

    Y la función SetLineContent es porque en mi tabla, en lugar de tener un campo de Texto de 250 donde guardar la lectura de cada línea, tengo un campo de tipo Blob. Lo he tenido que hacer así porque en el archivo que importo hay líneas de más de 250 caracteres.

    Una vez lo tengo todo importado en tabla temporal, después recorro la tabla temporal para procesarla.

    Otra opción que utilicé al principio es la de cargar los datos en una tabla del estándar llamada “CSV Buffer”, que ya implementa esta función LoadDataFromStream y que además ya hace un Split de las líneas leídas en función del caracter separador que le dices que tiene que utilizar.
    Al final no me sirvió porqué también tengo en el fichero columnas más largas que los campos de CSV Buffer, y no quería que me las cortase.

    Espero que te sirva la información.

    Un saludo,
    Cristina Nicolàs

    Curso presencial. Conviértete en un Experto en Business Central.

    Curso organizado como un máster.
    Las inscripciones anticipadas terminan el 28 de febrero.
    Inicio del curso: 26 de Abril
    Más información

    #7874

    Jaume Escribà
    Participante

    Gracias, me funciona correctamente utilizando la tabla “CSV Buffer”.

Viendo 3 publicaciones - del 1 al 3 (de un total de 3)

Debes estar registrado para responder a este debate.

Members Currently Active: 0
No users are currently active
Keymaster | Moderator | Participant | Spectator | Blocked
Additional Forum Statistics
Threads: 722, Posts: 2.395, Members: 809
Welcome to our newest member, Carlos Lopez
Most users ever online was 15 on 5 April, 2019 9:31 am