{"id":9458,"date":"2017-03-18T13:15:27","date_gmt":"2017-03-18T12:15:27","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=9458"},"modified":"2017-03-18T13:41:04","modified_gmt":"2017-03-18T12:41:04","slug":"seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/","title":{"rendered":"Seguridad en Microsoft Access. Control de usuarios y demo de una aplicaci\u00f3n."},"content":{"rendered":"<p>No cabe duda que uno de los productos m\u00e1s usados es la suite de <strong>Microsoft Office<\/strong>, varias de sus aplicaciones tales como Word, Excel, Powerpoint, Access llevan bastante tiempo con nosotros. A\u00fan existiendo alternativas gratuitas, son aplicaciones que consolidaron el \u00e9xito de Microsoft y se han convertido en herramientas extendidas y muy empleadas tanto en entornos profesionales como del hogar.<\/p>\n<p>Una de ellas, quiz\u00e1s la menos empleada de las anteriores mencionadas, posee grandes caracter\u00edsticas para poder crear desarrollos para peque\u00f1as y medianas necesidades.<\/p>\n<p>En esta entrada voy a escribir\u00a0sobre la seguridad en Microsoft Access, c\u00f3mo ha evolucionado y lo que podemos hacer con este gestor. Tambi\u00e9n os dejar\u00e9 un proyecto que he realizado para que pod\u00e1is analizar c\u00f3mo implementar una<strong> seguridad por usuarios basada en niveles<\/strong> y apoyada en dos bases de datos accdb (protegida con contrase\u00f1a, con formularios de gesti\u00f3n de usuarios), v\u00e1lidas a partir de la versi\u00f3n 2007. Tambi\u00e9n en el ejemplo, os muestro t\u00e9cnicas de uso con formularios, para crear interfaces de usuario, consultas param\u00e9tricas y ejemplos funcionales de recolecci\u00f3n y tratamiento de datos y encuestas, que os pueden dar una idea de sus posibles utilidades en otro tipo de \u00e1mbitos.<\/p>\n<p><!--more--><\/p>\n<p>Si bien es cierto que Access NO es un gestor relacional considerado puro, que sus caracter\u00edsticas y seguridad no son tan profesionales como otros productos m\u00e1s s\u00f3lidos (SQL Server, Oracle, Mysql&#8230;), nos puede proporcionar un <strong>entorno para crear aplicaciones de escritorio y para trabajo en red bastante funcional<\/strong>\u00a0y espec\u00edfico. Necesidades espec\u00edficas que otros programas ERP, CRM, etc no son capaces de recoger sin una costosa modificaci\u00f3n o parametrizaci\u00f3n. Podr\u00edamos dar soluci\u00f3n a necesidades empresariales(PYMES) y particulares especificas que de otra forma ser\u00edan m\u00e1s costosas por sus modificaciones tanto a nivel presupuestario como t\u00e9cnico.<\/p>\n<h3><strong>Sobre el ejemplo<\/strong><\/h3>\n<p>\u00bfQu\u00e9 paso en la seguridad de usuarios a partir de la versi\u00f3n 2007?<\/p>\n<p>Las Caracter\u00edsticas de seguridad por usuarios ya no est\u00e1n disponibles en aplicaciones web de Access, bases de datos web o bases de datos que usan uno de los nuevos formatos de archivo (.accdb, .accde, .accdc, .accdr). La base de datos que os suministro posee un formato moderno accdb. Tampoco existen como tal los proyectos ADP, que en ocasiones se usaron para conectar con gestores SQL Server.<\/p>\n<p>Desde la versi\u00f3n 2007 se puede continuar administrando la seguridad en los archivos de base de datos de escritorio de Access que usan un formato de archivo anterior de Access ( .mdb o ADE).<\/p>\n<p>Por lo que esta <strong>t\u00e9cnica<\/strong> que os comento, os puede <strong>resultar muy interesante<\/strong>, ya que<strong> no existe otra en local para nuevos formatos<\/strong>. Podr\u00edamos emplear seguridad basada en Sharepoint y Access, o emplear otro gestor de apoyo como SQL Server, pero requiere de servidores externos.<\/p>\n<p>El ejemplo suministrado esta formado por 2 bases de datos. Una de ellas posee una password y almacena los usuarios y sus accesos, tambi\u00e9n se establecen diversos <strong>niveles<\/strong> de acceso, siendo el nivel 2 el empleado por el administrador. Para poder gestionar los usuarios con los formularios creados, es necesario abrir la base de datos usando la contrase\u00f1a <strong>demo<\/strong>. \u00a0Posee un control de validaci\u00f3n y log de entrada a modo de tabla.<\/p>\n<p>Os he dejado el formato con el c\u00f3digo abierto <strong>accdb<\/strong>, os recuerdo que el c\u00f3digo se encuentra disponible, podr\u00edais establecer una password en el c\u00f3digo desde el editor de c\u00f3digo que incorpora Access, o compilar la base de datos a un formato <strong>accde<\/strong>, para que no se viera el c\u00f3digo, de tal forma que una vez que se han programado los formularios en los eventos de carga, comprobar su nivel y cargar o mostrar elementos en funci\u00f3n del nivel de seguridad establecido.<\/p>\n<p>El proyecto que os dejo, tambi\u00e9n muestra como <strong>desactivar ventanas<\/strong> para que luzca con una interfaz <strong>profesional<\/strong>, desactivar teclas <strong>f12<\/strong> que muestran objetos, carga de formularios, uso de <strong>calendario<\/strong> alternativo y el c\u00f3digo de como <strong>atacar mediante programaci\u00f3n a una base de datos de Access<\/strong> diferente, de forma siempre relativa. Este c\u00f3digo lo subir\u00e9 para que se pueda hacer lo mismo desde una hoja de c\u00e1lculo <strong>Excel<\/strong> (<strong>xlsx<\/strong>), que lea datos de una base Access, sin emplear <strong>DSN<\/strong> mediante cadena de conexi\u00f3n. Simplemente es necesario tener presente las referencias a objetos <strong>ADO<\/strong>.<\/p>\n<p>Tambi\u00e9n os muestro c\u00f3mo cargar <strong>Access sin mostrar su logo (personalizando el de la empresa)<\/strong>, o como se pueden leer <strong>im\u00e1genes desde el exterior<\/strong> (carpeta im\u00e1genes necesaria). Las ayudas son todas <strong>din\u00e1micas<\/strong> apoyadas en tablas, para poder cambiarlas sin tocar c\u00f3digo. Recordad que yo simplemente he establecido datos de la tabla usuarios de la otra base, pueden depositarse mas tablas si as\u00ed fuera necesario.<\/p>\n<div id=\"attachment_9461\" style=\"width: 673px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-2.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-9461\" class=\"size-full wp-image-9461\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-2.jpg\" alt=\"\" width=\"663\" height=\"437\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-2.jpg 663w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-2-300x198.jpg 300w\" sizes=\"auto, (max-width: 663px) 100vw, 663px\" \/><\/a><p id=\"caption-attachment-9461\" class=\"wp-caption-text\">Validaci\u00f3n de usuarios en otra base<\/p><\/div>\n<h3><strong>Seguridad alternativa<\/strong><\/h3>\n<p>Los mejores consejos para aplicar seguridad alternativa, es <strong>cifrar la base de datos o\u00a0<\/strong>\u00a0emplear un \u00a0<strong>servidor de bases de datos externo que administre datos y usuarios pero bajo el paraguas del gestor como SQL Server<\/strong>.<\/p>\n<p>Seguridad de usuarios proporcionada por <strong>Sharepoint Server<\/strong>, que posibilitan incluso el trabajo sin conexi\u00f3n.<\/p>\n<p>O finalizar con aplicaciones de Access que se ejecuten el en <strong>explorador web<\/strong>, usando la seguridad a nivel de servidor.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/software\/demo-usuarios.rar\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2874\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/12\/Descarga.png\" alt=\"\" width=\"300\" height=\"100\" \/><\/a><\/p>\n<h3>Archivos del fichero RAR<\/h3>\n<p>Recuerda&#8230; posee una password: <strong>demo<\/strong>, para acceder a la base de datos tienes que disponder como m\u00ednimo de Access 2007 y una estructura de archivos que dejo dentro del rar.<\/p>\n<p>El fichero rar contiene 2 bases de datos, la base de datos usuarios requiere una contrase\u00f1a para acceder (demo). La demo de formularios y todo el c\u00f3digo se encuentra disponible en demo.accdb.<\/p>\n<p>Es necesario <strong>dejar la carpeta im\u00e1genes al lado de las bases<\/strong>.<\/p>\n<h3>Demo de c\u00f3digo ACCDB<\/h3>\n<p>Recuerda que puedes compilar la base de datos en formato accde para nadie pueda ver el c\u00f3digo de seguridad por niveles.<\/p>\n<pre class=\"lang:vbnet decode:true \">Validamos si existe el usuario en la base de datos\r\n'Procedimiento acceso a la base de datos con contrase\u00f1a\r\nSet cnn = New ADODB.Connection\r\nruta_base = Left(CStr(Application.CurrentDb.Name), Len(CStr(Application.CurrentDb.Name)) - 11) + \"\\usuarios.accdb\"\r\n'ruta = Left(CStr(Application.CurrentDb.Name), Len(CStr(Application.CurrentDb.Name)) - 23) + \"\\logo.jpg\"\r\ncnn.Open \"Provider=Microsoft.ACE.OLEDB.12.0; \" &amp; _\r\n     \"Data Source=\" &amp; ruta_base &amp; \";\" &amp; _\r\n     \"Jet OLEDB:Database Password=demo\"\r\n\r\nSet registro = New ADODB.Recordset\r\nSet registro_log = New ADODB.Recordset\r\ncSQL = \"select count(*) as cuenta from usuarios where login ='\" &amp; LCase(login) &amp; \"' and password = '\" &amp; LCase(password) &amp; \"';\"\r\nregistro.Open cSQL, cnn, adOpenDynamic, adLockOptimistic\r\nregistro_log.CursorType = adOpenOptimistic\r\nregistro_log.LockType = adLockOptimistic\r\nregistro_log.Open \"log\", cnn\r\n'Nos preparamos para la gesti\u00f3n del log\r\nregistro_log.AddNew\r\nregistro_log!Fecha = Date\r\nregistro_log!hora = Time\r\nusuario = login\r\nregistro_log!login = login\r\n\r\nregistro_log!password = password\r\nIf registro!cuenta = 0 Then\r\nestado.Caption = \"Acceso no v\u00e1lido, compruebe sus credenciales. \"\r\nregistro_log!fallido = \"SI\"\r\nregistro_log.Update\r\nregistro_log.Close\r\nregistro.Close\r\ncnn.Close\r\nElse\r\n'Mostramos la barra de menus si se poseen los permisos adecuados\r\nregistro_log!fallido = \"NO\"\r\nregistro_log.Update\r\nregistro_log.Close\r\nregistro.Close\r\n\r\n\r\n\r\n'Establecemos las variables globales\r\nGlobal_usuario = LCase(usuario)\r\nGlobal_Password = LCase(password)\r\n\r\nSet registro = New ADODB.Recordset\r\ncSQL = \"select nivel from usuarios where login ='\" &amp; LCase(login) &amp; \"' and password = '\" &amp; LCase(password) &amp; \"';\"\r\nregistro.Open cSQL, cnn, adOpenDynamic, adLockOptimistic\r\n\r\n'Se establece el nivel de acceso a la entrada\r\nGlobal_nivel = registro!Nivel\r\nregistro.Close\r\ncnn.Close\r\nDoCmd.Close\r\n\r\nDoCmd.OpenForm \"principal\"\r\nForm_principal.usuario.Caption = usuario &amp; \" , nivel \" &amp; Global_nivel\r\n\r\nEnd If\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>V\u00eddeo<\/h3>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/2do48tFj52k\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h3><strong>Galer\u00eda fotogr\u00e1fica.<\/strong><\/h3>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 25%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-9458 gallery-columns-4 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/pantalla-1\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-1-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-9460\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-9460'>\n\t\t\t\tEntrada al programa\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/pantalla-2\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-2-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-9461\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-9461'>\n\t\t\t\tValidaci\u00f3n de usuarios en otra base\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/pantalla-3\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-3-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-9462\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-9462'>\n\t\t\t\tVentana principal\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/pantalla-4\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-4-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-9463\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-9463'>\n\t\t\t\tGesti\u00f3n de empresas\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/pantalla-5\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-5-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-9464\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-9464'>\n\t\t\t\tDemo de formularios\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/pantalla-6\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-6-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-9465\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-9465'>\n\t\t\t\tDemo de test y altas\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/pantalla-7\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-7-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-9466\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-9466'>\n\t\t\t\tDemo de consultas param\u00e9tricas\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/www.palentino.es\/blog\/seguridad-en-microsoft-access-control-de-usuarios-y-demo-de-una-aplicacion\/pantalla-8\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2017\/03\/pantalla-8-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-9467\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-9467'>\n\t\t\t\tDemo de control de niveles de acceso\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>No cabe duda que uno de los productos m\u00e1s usados es la suite de Microsoft Office, varias de sus aplicaciones tales como Word, Excel, Powerpoint, Access llevan bastante tiempo con nosotros. A\u00fan existiendo alternativas gratuitas, son aplicaciones que consolidaron el \u00e9xito de Microsoft y se han convertido en herramientas extendidas y muy empleadas tanto en entornos profesionales como del hogar. Una de ellas, quiz\u00e1s la menos empleada de las anteriores mencionadas, posee grandes caracter\u00edsticas para poder crear desarrollos para peque\u00f1as y medianas necesidades. En esta entrada voy a escribir\u00a0sobre la seguridad en Microsoft Access, c\u00f3mo ha evolucionado y lo que podemos hacer con este gestor. Tambi\u00e9n os dejar\u00e9 un proyecto que he realizado para que pod\u00e1is analizar c\u00f3mo implementar una seguridad por usuarios basada en niveles y apoyada en dos bases de datos accdb (protegida con contrase\u00f1a, con formularios de gesti\u00f3n de usuarios), v\u00e1lidas a partir de la versi\u00f3n 2007. Tambi\u00e9n en el ejemplo, os muestro t\u00e9cnicas de uso con formularios, para crear interfaces de usuario, consultas param\u00e9tricas y ejemplos funcionales de recolecci\u00f3n y tratamiento de datos y encuestas, que os pueden dar una idea de sus posibles utilidades en otro tipo de \u00e1mbitos.<\/p>\n","protected":false},"author":1,"featured_media":9438,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[612],"tags":[301,2172],"class_list":["post-9458","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-access","tag-experto","tag-microsoft-access"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/9458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=9458"}],"version-history":[{"count":21,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/9458\/revisions"}],"predecessor-version":[{"id":9489,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/9458\/revisions\/9489"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/9438"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=9458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=9458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=9458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}