{"id":16448,"date":"2024-02-26T09:34:00","date_gmt":"2024-02-26T15:34:00","guid":{"rendered":"https:\/\/sada.services\/?p=16448"},"modified":"2024-02-26T09:34:00","modified_gmt":"2024-02-26T15:34:00","slug":"sigesa-ordenamiento-listfom","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=16448","title":{"rendered":"SIGESA: Ordenamiento ListFom"},"content":{"rendered":"\n<ul class=\"wp-block-list\">\n<li>Por defecto en SIGESA el ordenamiento de un ListForm se da por el \u00abID\u00bb del registro de forma \u00abDESC\u00bb (desendente), esto se da en el SDKUNA en el EntityLazy  <\/li>\n\n\n\n<li>Por lo que si desea ordenar por una columna diferente los puede hacer as\u00ed<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ordenamiento por otra columna<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para ordenar por otra columna pueda agregar al noEditTable la siguientes lineas<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>sortField=\"nombre_columna\"\nsortDirection=\"ASC\"<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Por ejemplo<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->\n        &lt;!--++++++++++++++++++++++++++++++++++   NOEDITTABLE  ++++++++++++++++++++++++++++++++++++++++++-->\n        &lt;!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--> \n        &lt;components:noEditTable id=\"noEditTable\"\n                                header=\"#{i18n.planOperativo_list_form_table_header}\"\n                                bean=\"#{planOperativoBean}\"\n                                showEditButton=\"#{!planOperativoBean.deshabilitarEdicion(row)}\"\n                                i18nKey=\"planOperativo_list_form_table_header\"\n                                additionalButtonsBean=\"#{planOperativoListBeanButtons}\"\n                                editForm=\"planOperativoEditForm\"\n                                methodName=\"establecerOrdenPlanOperativo\"\n                                sortField=\"ninguna\"\n                                sortDirection=\"ASC\"\/><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Ordenamiento por multiples columnas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Adem\u00e1s si se requiere ordenar por m\u00faltiples columnas se puede hacer con <\/li>\n\n\n\n<li>Pendiente de ejemplo<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cambiar funcion de lista defecto y ordenar por Page o Por BD, ordenamiento especificaci\u00f3n<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si desea cambiar la funci\u00f3n que lista los registros por otra que por ejemplo modifique el orden puede aplicar la siguiente propiedad<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>methodName=\"establecerOrdenPlanOperativo\"<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Por ejemplo<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->\n        &lt;!--++++++++++++++++++++++++++++++++++   NOEDITTABLE  ++++++++++++++++++++++++++++++++++++++++++-->\n        &lt;!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--> \n        &lt;components:noEditTable id=\"noEditTable\"\n                                header=\"#{i18n.planOperativo_list_form_table_header}\"\n                                bean=\"#{planOperativoBean}\"\n                                showEditButton=\"#{!planOperativoBean.deshabilitarEdicion(row)}\"\n                                i18nKey=\"planOperativo_list_form_table_header\"\n                                additionalButtonsBean=\"#{planOperativoListBeanButtons}\"\n                                editForm=\"planOperativoEditForm\"\n                                methodName=\"establecerOrdenPlanOperativo\"\n                                sortField=\"ninguna\"\n                                sortDirection=\"ASC\"\/><\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>NOTA: el ListForm funciona con PAGE y estas tienen en sus parametros los siguientes 3 parametros<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>System.out.println(\"N\u00famero de p\u00e1gina: \" + pageable.getPageNumber());\nSystem.out.println(\"Tama\u00f1o de la p\u00e1gina: \" + pageable.getPageSize());\nSystem.out.println(\"Ordenamiento: \" + pageable.getSort());<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Como vemos el tercer parametro es el ordenamiento de la pagina <\/li>\n\n\n\n<li>Por lo que si desea modificar el ordenamiento puede hacerlo con <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Obtener el objeto Sort del Pageable actual\n        Sort sort = pageable.getSort();\n        \n        \/\/ Crear un nuevo objeto Sort con el ordenamiento deseado\n        Sort newSort = Sort.by(Sort.Direction.ASC, \"nombre\"); \/\/ Cambiar a \"DESC\" si deseas orden descendente\n        \n        \/\/ Aplicar el nuevo ordenamiento al Pageable\n        Pageable newPageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), newSort);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>  Y se puede hacer combinaci\u00f3n de mas de un ordenamiento<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>tutorialRepository.findAll(Sort.by(\"published\").descending().and(Sort.by(\"title\")));<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ahora si lo que requiere es aplicar una ordenamiento desde la BD por que es por ejemplo un selectcase puede hacer una especificaci\u00f3n que aplique el ordenamiento deseado<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * Especificaci\u00f3n que establece el orden del listado de los planes Operativos\n     *\n     * @author Gustavo Matamoros Gonz\u00e1lez\n     * @fechaCreacion: 23\/02\/2024\n     * @Version: 1.0.0\n     * @modulo: PPI-PPO\n     * @issue: BTPPI-374\n     * @return Specification&lt;PlanOperativo>\n     *\/\n    public static Specification&lt;PlanOperativo> establecerOrdenPlanOperativo() {\n        return new Specification&lt;PlanOperativo>() {\n            @Override\n            public Predicate toPredicate(Root&lt;PlanOperativo> root, CriteriaQuery&lt;?> cq, CriteriaBuilder cb) {\n\n                \/\/ A\u00f1o del Plan OPerativo\n                Expression&lt;Integer> annoPlanOperativo = root.join(\"etapaPlan\").join(\"periodoAnual\").get(\"ano\");\n\n                \/\/ Obtener A\u00f1o actual\n                LocalDate fechaHoy = LocalDate.now();\n                Integer annoActual = fechaHoy.getYear();\n\n                \/\/ Establecer el orden\n                cq.orderBy(\n                    cb.asc(\n                        cb.selectCase()\n                        .when(\n                            cb.equal(annoPlanOperativo,annoActual ),\n                            1\n                        )\n                        .when(\n                            cb.greaterThan(annoPlanOperativo, annoActual),\n                            2\n                        )\n                        .otherwise(3)\n                        )\n                );\n\n                return null;\n            }\n        };\n    }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Y para que no aplique el ordenamiento de la Page debe modificar el page para que en el tercer parametro no tenga valor <\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>if (pageable.getSort().isSorted() &amp;&amp; pageable.getSort().getOrderFor(\"ninguna\") != null) {\n            paging = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize());\n        }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un ejemplo ser\u00eda<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n     * M\u00e9todo que establece el orden del listado de los planes Operativos\n     *\n     * @param filterSpecifications\n     * @param pageable\n     * @param filterParams\n     * @author Gustavo Matamoros Gonz\u00e1lez\n     * @fechaCreacion: 23\/02\/2024\n     * @Version: 1.0.0\n     * @modulo: PPI-PPO\n     * @issue: BTPPI-374\n     * @return Page&lt;PlanOperativo> \n     *\/\n    @Override\n    public Page&lt;PlanOperativo> establecerOrdenPlanOperativo(ArrayList&lt;FilterSpecification> filterSpecifications, Pageable pageable, Map&lt;String, Object> filterParams){\n\n        \/\/ Mantener el filtro aplicado por el usuario\n        this.setFilterSpecifications(filterSpecifications);\n\n        Specification&lt;PlanOperativo> specFinal;\n\n        \/\/ Para aplicar el ordenamiento desde la consulta de la BD cuando el usuario ingresa por primera vez se envia en el ListForm  \n        \/\/ methodName=\"establecerOrdenPlanOperativo\"\n        \/\/ sortField=\"ninguna\" (indicando que ordene por la columna ficticia \"ninguna\" cuando es la primera vez )\n        \/\/ sortDirection=\"ASC\"\n        Pageable paging = pageable;\n\n        if (pageable.getSort().isSorted() &amp;&amp; pageable.getSort().getOrderFor(\"ninguna\") != null) {\n            paging = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize());\n        }\n        \n        \/\/ Especificacion que ordena \n        Specification specEstablecerOrdenPlanOperativo = PlanOperativoSpecs.establecerOrdenPlanOperativo();\n\n        specFinal = Specification.where(this).and(specEstablecerOrdenPlanOperativo);\n\n        return repository.findAll(specFinal,paging);\n    }<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Ordenamiento por otra columna Ordenamiento por multiples columnas Cambiar funcion de lista defecto y ordenar por Page o Por BD, ordenamiento especificaci\u00f3n<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[443],"tags":[609,444],"class_list":["post-16448","post","type-post","status-publish","format-standard","hentry","category-sigesa","tag-ordenamiento","tag-sigesa"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/16448","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16448"}],"version-history":[{"count":2,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/16448\/revisions"}],"predecessor-version":[{"id":16450,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/16448\/revisions\/16450"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}