{"id":677,"date":"2026-05-14T09:49:59","date_gmt":"2026-05-14T12:49:59","guid":{"rendered":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/?p=677"},"modified":"2026-05-18T08:55:35","modified_gmt":"2026-05-18T11:55:35","slug":"obtener-y-descargar-archivos-blob-getblob-descargablob","status":"publish","type":"post","link":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/?p=677","title":{"rendered":"Nuevos Procedimientos para Obtener y descargar archivos BLOB (GetBlob &#038; DescargaBlob)"},"content":{"rendered":"<div class=\"header\">\n<h1>\ud83d\udce6 GetBlob &amp; DescargaBlob<\/h1>\n<p>Procedimientos reutilizables GeneXus \u2014 Obtener y descargar archivos BLOB de la base de datos<\/p>\n<\/div>\n<div class=\"section\">\n<h2><span class=\"emoji\">\ud83d\udd0d<\/span>\u00a0<u>Procedimiento: GetBlob<\/u><\/h2>\n<p><b>\u00bfQu\u00e9 hace?<\/b>\u00a0Busca una plantilla en la BD por su c\u00f3digo, recupera el archivo BLOB y lo deja en una\u00a0<b>ruta temporal<\/b>\u00a0del servidor para poder usarlo.<\/p>\n<h3>Par\u00e1metros<\/h3>\n<table>\n<tbody>\n<tr>\n<th>Variable<\/th>\n<th>I\/O<\/th>\n<th>Descripci\u00f3n<\/th>\n<\/tr>\n<tr>\n<td><code>&amp;placod<\/code><\/td>\n<td><span class=\"tag in\">IN<\/span><\/td>\n<td>C\u00f3digo num\u00e9rico de la plantilla<\/td>\n<\/tr>\n<tr>\n<td><code>&amp;nuevoarchivo<\/code><\/td>\n<td><span class=\"tag out\">OUT<\/span><\/td>\n<td>Ruta del archivo temporal generado<\/td>\n<\/tr>\n<tr>\n<td><code>&amp;PlaNom<\/code><\/td>\n<td><span class=\"tag out\">OUT<\/span><\/td>\n<td>Nombre de la plantilla<\/td>\n<\/tr>\n<tr>\n<td><code>&amp;PlaExtArc<\/code><\/td>\n<td><span class=\"tag out\">OUT<\/span><\/td>\n<td>Extensi\u00f3n del archivo (xls, docx, pdf\u2026)<\/td>\n<\/tr>\n<tr>\n<td><code>&amp;mensaje<\/code><\/td>\n<td><span class=\"tag out\">OUT<\/span><\/td>\n<td>Mensaje de error (si lo hubo)<\/td>\n<\/tr>\n<tr>\n<td><code>&amp;Ok<\/code><\/td>\n<td><span class=\"tag out\">OUT<\/span><\/td>\n<td><b>&#8216;S&#8217;<\/b>\u00a0= \u00e9xito \u00a0\/\u00a0\u00a0<b>&#8216;N&#8217;<\/b>\u00a0= error<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>\u00a0<\/h3>\n<\/div>\n<div class=\"section green\">\n<h2><span class=\"emoji\">\u2b07\ufe0f<\/span>\u00a0<u>Procedimiento: DescargaBlob (DownloadBlob)<\/u><\/h2>\n<p><b>\u00bfQu\u00e9 hace?<\/b>\u00a0Toma un archivo de la ruta temporal del servidor y\u00a0<b>fuerza su descarga<\/b>\u00a0al navegador del usuario, armando un nombre \u00fanico con fecha\/hora.<\/p>\n<div class=\"alert warning\">\u26a0\ufe0f\u00a0<u>SIEMPRE<\/u>\u00a0llamar con\u00a0<code>.link<\/code>, nunca con\u00a0<code>.Call<\/code>. Si us\u00e1s .Call la descarga no va a funcionar.<\/div>\n<h3>Par\u00e1metros<\/h3>\n<table>\n<tbody>\n<tr>\n<th>Variable<\/th>\n<th>I\/O<\/th>\n<th>Descripci\u00f3n<\/th>\n<th>Si viene de GetBlob<\/th>\n<\/tr>\n<tr>\n<td><code>&amp;TipArc<\/code><\/td>\n<td><span class=\"tag in\">IN<\/span><\/td>\n<td>Extensi\u00f3n sin el punto<\/td>\n<td>Usar\u00a0<code>&amp;PlaExtArc<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>&amp;Nombre<\/code><\/td>\n<td><span class=\"tag in\">IN<\/span><\/td>\n<td>Nombre base del archivo<\/td>\n<td>Usar\u00a0<code>&amp;PlaNom<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>&amp;NuevoArchivo<\/code><\/td>\n<td><span class=\"tag in\">IN<\/span><\/td>\n<td>Ruta temporal del archivo<\/td>\n<td>Usar\u00a0<code>&amp;NuevoArchivo<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Tipos de archivo soportados<\/h3>\n<table>\n<tbody>\n<tr>\n<th>Extensi\u00f3n<\/th>\n<th>Content-Type<\/th>\n<\/tr>\n<tr>\n<td><code>xls<\/code>\u00a0\/\u00a0<code>xlt<\/code><\/td>\n<td>application\/vnd.ms-excel<\/td>\n<\/tr>\n<tr>\n<td><code>xlsx<\/code><\/td>\n<td>application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet<\/td>\n<\/tr>\n<tr>\n<td><code>doc<\/code><\/td>\n<td>application\/msword<\/td>\n<\/tr>\n<tr>\n<td><code>docx<\/code><\/td>\n<td>application\/vnd.openxmlformats-officedocument.wordprocessingml.document<\/td>\n<\/tr>\n<tr>\n<td><code>pdf<\/code><\/td>\n<td>application\/pdf<\/td>\n<\/tr>\n<tr>\n<td><code>zip<\/code><\/td>\n<td>application\/x-zip-compressed<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"muted\">Para agregar otro tipo, a\u00f1adir un nuevo\u00a0<code>case<\/code>\u00a0en el Do Case con su Content-Type.<\/p>\n<\/div>\n<div class=\"section orange\">\n<h2><span class=\"emoji\">\ud83d\udca1<\/span>\u00a0<u>Ejemplo: Descargar un Excel desde la BD<\/u><\/h2>\n<pre><code><span class=\"comment\">\/\/ 1. Obtener el BLOB (plantilla c\u00f3digo 61)<\/span>\r\n<span class=\"var\">GetBlob<\/span>.Call(<span class=\"string\">61<\/span>, &amp;NuevoArchivo, &amp;PlaNom, &amp;PlaExtArc, &amp;mensaje, &amp;Ok)\r\n\r\n<span class=\"comment\">\/\/ 2. (Opcional) Modificar el Excel<\/span>\r\n&amp;exceldocument.Open(&amp;NuevoArchivo)\r\n<span class=\"comment\">\/\/ modificar celdas ac\u00e1 si es necesario...<\/span>\r\n&amp;exceldocument.Save()\r\n&amp;exceldocument.Close()\r\n\r\n<span class=\"comment\">\/\/ 3. Descargar al navegador (\u00a1con .link!)<\/span>\r\n<span class=\"var\">DownloadBlob<\/span>.link(&amp;PlaExtArc, &amp;PlaNom, &amp;NuevoArchivo)<\/code><\/pre>\n<div class=\"alert info\">\u2139\ufe0f Si no necesit\u00e1s modificar el archivo, salte\u00e1 el paso 2 y pas\u00e1 directo del 1 al 3.<\/div>\n<\/div>\n<div class=\"section purple\">\n<h2><span class=\"emoji\">\ud83d\udcc2<\/span>\u00a0<u>\u00bfD\u00f3nde se cargan las plantillas?<\/u><\/h2>\n<p>Desde la\u00a0<b>Master Page<\/b>\u00a0\u2192 men\u00fa lateral \u2192\u00a0<b>Par\u00e1metros Generales<\/b>\u00a0\u2192 bot\u00f3n\u00a0<b>&#8220;Plantillas&#8221;<\/b>.<\/p>\n<p>Ah\u00ed se pueden\u00a0<b>cargar<\/b>,\u00a0<b>ver<\/b>\u00a0y\u00a0<b>modificar<\/b>\u00a0las plantillas BLOB. Cada una tiene un\u00a0<code>PLACOD<\/code>\u00a0\u00fanico que es el c\u00f3digo que se pasa a GetBlob.<\/p>\n<\/div>\n<div class=\"section red\">\n<h2><span class=\"emoji\">\ud83d\udccc<\/span>\u00a0<u>Notas importantes<\/u><\/h2>\n<table>\n<tbody>\n<tr>\n<td><b>GetBlob<\/b>\u00a0se llama con\u00a0<code>.Call<\/code><\/td>\n<td><b>DownloadBlob<\/b>\u00a0se llama con\u00a0<code>.link<\/code><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">Los archivos temporales se guardan en\u00a0<b>PublicTempStorage<\/b>\u00a0y se eliminan autom\u00e1ticamente.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">El nombre del archivo descargado incluye\u00a0<b>fecha y hora<\/b>\u00a0para evitar duplicados.<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\">Estos procedimientos son\u00a0<b>gen\u00e9ricos<\/b>: sirven para cualquier tipo de archivo soportado.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>\/\/PUEDE SER QUE ALGUNOS NECESITAN ESTAS DEPENDENCIAS SI LES DA ERROR AL INTENTAR MANIPULAR EXCEL O DOCS:<\/strong><br \/>https:\/\/drive.google.com\/drive\/folders\/1_ie8b7rhro5YgxgklXhFgEzwFWFrVfT9?usp=sharing<\/p>\n<p><strong>\/\/LAS RUTAS DONDE LAS DEBERAN INSERTAR SON:<\/strong><br \/>d:\\Proyectos\\GX18\\GX18_GesRec_PrdFuncional\\JavaDB2iSeries002\\Web\\lib\\<br \/>d:\\Proyectos\\GX18\\GX18_GesRec_PrdFuncional\\JavaDB2iSeries002\\Web\\WEB-INF\\lib\\<br \/>c:\\Program Files\\Apache Software Foundation\\Tomcat 10.1\\webapps\\GX18_GesRec_DSRDesarrollo\\WEB-INF\\lib\\<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udce6 GetBlob &amp; DescargaBlob Procedimientos reutilizables GeneXus \u2014 Obtener y descargar archivos BLOB de la base de datos \ud83d\udd0d\u00a0Procedimiento: GetBlob \u00bfQu\u00e9 hace?\u00a0Busca una plantilla en la BD por su c\u00f3digo, recupera el archivo BLOB y lo deja en una\u00a0ruta temporal\u00a0del servidor para poder usarlo. Par\u00e1metros Variable I\/O Descripci\u00f3n &amp;placod IN C\u00f3digo num\u00e9rico de la plantilla [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":678,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-677","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docs"],"_links":{"self":[{"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=\/wp\/v2\/posts\/677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=677"}],"version-history":[{"count":2,"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=\/wp\/v2\/posts\/677\/revisions"}],"predecessor-version":[{"id":684,"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=\/wp\/v2\/posts\/677\/revisions\/684"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=\/wp\/v2\/media\/678"}],"wp:attachment":[{"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wiki.gobiernoriocuarto.gob.ar\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}