<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.idempiere.org/w-en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CarlosRuiz</id>
	<title>iDempiere en - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.idempiere.org/w-en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CarlosRuiz"/>
	<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/en/Special:Contributions/CarlosRuiz"/>
	<updated>2026-09-30T00:54:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24079</id>
		<title>IDempiere workshop 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24079"/>
		<updated>2026-09-21T21:05:16Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Excel export has problems with number */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Brainstorming =&lt;br /&gt;
&lt;br /&gt;
At the beginning of the workshop we did a brainstorming about things to talk about in the workshop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AI: ==&lt;br /&gt;
* AI for users&lt;br /&gt;
* Security&lt;br /&gt;
* Guardrails&lt;br /&gt;
* Skills/MCP for documentation&lt;br /&gt;
&lt;br /&gt;
== Howto ==&lt;br /&gt;
* write documentation (with ai)&lt;br /&gt;
* write unit tests&lt;br /&gt;
* monitor state of sql queries, processes, database&lt;br /&gt;
* load tests&lt;br /&gt;
* fitnesse/playwright (zk fixed ids?)&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
* integrate zk into iDempiere&lt;br /&gt;
* better theme support&lt;br /&gt;
* Marble theme&lt;br /&gt;
* free new components&lt;br /&gt;
* Murilo’s improvements to his UI&lt;br /&gt;
&lt;br /&gt;
== POS interest group ==&lt;br /&gt;
&lt;br /&gt;
== BI ==&lt;br /&gt;
* semantic layer for reporting&lt;br /&gt;
* HTML support in a PrintFormat (Murilo advises his FreeMarker solution for that)&lt;br /&gt;
* Pivot print persists&lt;br /&gt;
* XLS export as numbers (instead of formula)&lt;br /&gt;
* internal/external MCP&lt;br /&gt;
&lt;br /&gt;
== functional ==&lt;br /&gt;
* MFG II manufacturing - capacity planning&lt;br /&gt;
* iDempiere as a framework&lt;br /&gt;
* close orders/documents as a process or in a info window&lt;br /&gt;
* plugin versus core&lt;br /&gt;
&lt;br /&gt;
== marketing ==&lt;br /&gt;
* iDempiere fast track - demystification [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post]&lt;br /&gt;
* product versus project&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= workshop day 1 =&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
&lt;br /&gt;
What do we need to do to implement marble or other themes?&lt;br /&gt;
&lt;br /&gt;
Carlos: We mixed css inside java. Murilo has done work in this area. Norbert wants to define ui in json. He has an example where he uses badges or other zk view components. We discussed if there is a way and if it is useful to mix the application and and json. What Carlos takes out is that he wants a field not shown as one of our fixed  components (e.g. a number as a text field) but in another way (as a progress bar or so). Thomas example of the cards in his logistics board is similiar and already can be done using the html field. For Norberts case we want a json typ field attached to a json schema ([https://idempiere.atlassian.net/browse/IDEMPIERE-6059 IDEMPIERE-6059]).&lt;br /&gt;
&lt;br /&gt;
Norbert also likes to improve the tag (label) functionality. tags are not shown in the normal data window. Carlos said the same is true for PostIts.&lt;br /&gt;
&lt;br /&gt;
Carlos says the first step is to enable to use themes (css). ([https://idempiere.atlassian.net/browse/IDEMPIERE-7105 IDEMPIERE-7105]) clean up the code. Norbert thinks that can be automated by ai.&lt;br /&gt;
&lt;br /&gt;
Second step is: How can we enable easily layout changes in the UI. (zul) (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Try to cover the components zk gives us.&lt;br /&gt;
&lt;br /&gt;
Mohamed asked what is the goal of this work - the goal is to empower users in a ux group to have the flexibility to change the ui and ux as they like.&lt;br /&gt;
&lt;br /&gt;
Murilo did a demonstration of the UI/UX of an implementation he did. Most of his work was done as forms and so can not be used for all windows or for community but it showed nicely what is possible.&lt;br /&gt;
&lt;br /&gt;
He also showed his [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates]. It is an easy way to create very nice reports in html and pdf.&lt;br /&gt;
&lt;br /&gt;
(btw... Thomas did something similar [https://github.com/ThomasBayen/de.bxservice.bxjasperbridge using JasperReports] but what Murilo did seems more matured and at the end more powerful. If you prefer to work with JapserReports to be able to edit the reports in Jasper Studio you can have a look at it.)&lt;br /&gt;
&lt;br /&gt;
He also showed a nice workflow to create freemarker forms using ai. Murilo wanted to add an ai interface later to do that automatically. Markus Bozem said we need an plugin to provide an ai interface. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Mahmuda (from Sysnova) started a discussion to create an UI/UX user group and a mattermost channel for it. She wants to lead this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/uiux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== small issues before the break ==&lt;br /&gt;
&lt;br /&gt;
We talked about some small things from the list:&lt;br /&gt;
&lt;br /&gt;
=== manufacturing ===&lt;br /&gt;
* Manufacturing: Deepak, Zuri, Peter had a kind of group to be in charge of libero manufacturing. They have to create one single joined version and make it compatible with vanilla iDempiere. Mahmuda wants to join this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/mfg&lt;br /&gt;
&lt;br /&gt;
=== POS group ===&lt;br /&gt;
* a POS group can be build separately because in this workshop most people are not interested in this theme. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/pos&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
Hengsin asked to enable developers to use Vibe Coding to create code. We discussed about the definition of vibe coding. &lt;br /&gt;
&lt;br /&gt;
Hengsin builded a small number of developer skills in the past. https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
Markus Bozem wants to create skills and write all informations about idempiere conventions in coding. Norbert added that we need also mcp files that may be based on skills.&lt;br /&gt;
&lt;br /&gt;
For example an skill that creates a new column can get a description to look into the database to identify patterns to create new columns.&lt;br /&gt;
&lt;br /&gt;
Mahmuda did a picture to show us a possible layaered approach to get skills.&lt;br /&gt;
&lt;br /&gt;
* An MCP Layer&lt;br /&gt;
* idempiere core knowlwedge&lt;br /&gt;
* Vibe Coding Chats, including user skills&lt;br /&gt;
* a human in the loop&lt;br /&gt;
* published&lt;br /&gt;
inbetween each layer we need security.&lt;br /&gt;
&lt;br /&gt;
Murilo talked about someone who uses a separate webservice to access iDempiere through rest interfaces that uses like skills.&lt;br /&gt;
&lt;br /&gt;
Mahmuda explains how generic AI and agentic AI can work here. The agenticv AI get information from *.md files, RAG (rules, knowledge database) and a data repository. You can have several LLMs using that like hiring employees. Then you need an &amp;quot;HR-UI&amp;quot; that gives guard rails to the agents and looks over them.&lt;br /&gt;
&lt;br /&gt;
We should care to see where we need an mcp and where skills.&lt;br /&gt;
&lt;br /&gt;
We do need a common repository with skills and mcps.&lt;br /&gt;
&lt;br /&gt;
Carlos wanted to talk about migration scripts. They are very hard to review. An idea is if coderabbit can summarize the migration scripts to help.&lt;br /&gt;
&lt;br /&gt;
We also have to analyze 2packs. We havo to know what to check in the 2Pack and in the SQL. (E.g. validations that lead to a password table or such.)&lt;br /&gt;
&lt;br /&gt;
We have to think how an mcp takes centralized ids. Norbert proposed to have a dry-run before you really take the ids for your public code.&lt;br /&gt;
&lt;br /&gt;
=== centralized IDs / 2Pack ===&lt;br /&gt;
&lt;br /&gt;
Thomas asked why we do not use 2Pack instead of migration scripts. Carlos wants to talk about that in the friday meeting with Hengsin and Deepak.&lt;br /&gt;
&lt;br /&gt;
Do we want to stop using centralized ids. Hengsin said on matterpost that it may be possible to use uuids in a 2pack to not need centralized ids any more. That needs a ticket to analyze (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
We may change from 2Pack in *.xml to *.yaml. Care about PostgreSQL/Oracle code. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Nicolas says that we have to implement a test to assure that when we change 2Pack that it works in all old versions of iDempiere.&lt;br /&gt;
&lt;br /&gt;
== UI again: json defined  ==&lt;br /&gt;
&lt;br /&gt;
Murilo showed a PoC to use JSON files and a predefined UI definition to automatically create new fields and new UI elements in an iDempiere window. As it is based on json it is very flexible. That was very niced and showed interesting ideas.&lt;br /&gt;
&lt;br /&gt;
Carlos said this is a tool that could replace or mimic the Attribute Set Editor.&lt;br /&gt;
&lt;br /&gt;
We had concerns about performance. Deepak has concerned about search and reports. Carlos says he has concerns about rest filters (they also do not use json fields). json fields have to be searchable because users expect that.&lt;br /&gt;
&lt;br /&gt;
Carlos says that we can use Attribute Set Instance to implement that. That is another approach.&lt;br /&gt;
&lt;br /&gt;
Nicolas talked about where the definitions can be and if they can be overridden. If the schema is defined in column we can override it in field and in customization. We can have a table to define the schemas. We may create schemas based on context. We can create a detail table for this data. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
== AI for business users ==&lt;br /&gt;
&lt;br /&gt;
Thomas wanted to talk about how to use AI for business cases. Evan has the example that they read their supplier's price lists and read the data into the erp. Thomas uses AI to read incoming order emails.&lt;br /&gt;
&lt;br /&gt;
Another kind of usage is to have an end user interface to gather information and reporting. This can work like a chat window. Thomas has a PoC for a reporting window and Norbert has also a nice working solution in the quickinfo panel.&lt;br /&gt;
&lt;br /&gt;
Up to now there is no common community approach for these things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= workshop day 2 =&lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
&lt;br /&gt;
We talked about if we want to enforce tickets to be documented. Carlos explains he tend to balance benefit/cost when allowing to move ahead a pull request without documentation.&lt;br /&gt;
&lt;br /&gt;
The documentation is now moved from the wiki to docusaurus. Diego explained that we need to strenghten docusaurus because AI likes to read these .md files and it can be our authorative doc for the project. Carlos likes to have a space where users can add things very fast and easy. IT also can be a playfield for not-finished documentation.&lt;br /&gt;
&lt;br /&gt;
Marco and others like the recent changes list shown in the wiki, which is missing in docusaurus.&lt;br /&gt;
&lt;br /&gt;
Carlos says that google docs may be a better tool for that.&lt;br /&gt;
&lt;br /&gt;
Actions to be taken:&lt;br /&gt;
* We need to discuss to create subfolder in the docusaurus and how to create categories.&lt;br /&gt;
* improve rules for documentation&lt;br /&gt;
&lt;br /&gt;
== related records ==&lt;br /&gt;
&lt;br /&gt;
This feature is about the detail zoom button.&lt;br /&gt;
&lt;br /&gt;
Norbert has a solution that materializes the lists of related records.&lt;br /&gt;
&lt;br /&gt;
Deepak has a ticket to filter which tables can be zoomed.&lt;br /&gt;
&lt;br /&gt;
Thomas want to filter the list, e.g. to see only orders of the last two years.&lt;br /&gt;
&lt;br /&gt;
We want to open a ticket IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
== pivot print / reporting ==&lt;br /&gt;
&lt;br /&gt;
Deepak has an idea to save the settings of pivot table output. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
He also likes to allow excel templates to define how excel reports look like. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Here we mentioned also the [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates] from Murilo.&lt;br /&gt;
&lt;br /&gt;
== iDempiere fast track ==&lt;br /&gt;
&lt;br /&gt;
Mohamed talked about his first impressions and we discussed how to explain what iDempiere is and how to start working with it. Carlos showed [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post] and talked about what it means.&lt;br /&gt;
&lt;br /&gt;
Mohamed gave the example to show an example of a kanban of requests to show iDempiere as an crm.&lt;br /&gt;
&lt;br /&gt;
One solution is that we want to improve the test data in garden world. (IDEMPIERE-4297 already closed - create a new ticket?) Our ideas were:&lt;br /&gt;
* more data&lt;br /&gt;
* more historic documents to allow reporting&lt;br /&gt;
* print formats are ugly&lt;br /&gt;
* show a logo in reports&lt;br /&gt;
&lt;br /&gt;
Norbert has a script to create random sales and purchase orders.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos wants to contribute data into a seed server but he is not experienced in creating 2packs.&lt;br /&gt;
&lt;br /&gt;
Diego and Rifat offered to find out how we can do that technically. we want to export it as 2pack. Carlos says it can be possible to take the 2pack and create migration scripts later to bring it into seed.&lt;br /&gt;
&lt;br /&gt;
Diego says that iDempiere out of the box is overwhelming for new users.&lt;br /&gt;
&lt;br /&gt;
More test data for all functionality is also demanded for unit tests and to help with bug reporter's test cases. In Compiere theg Garden World data was meant to show every single function in the ERP.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos reminds of his ticket to add more columns for reporting of dimensions like brand, product class, etc. (IDENMPIERE-xxxx ???)&lt;br /&gt;
&lt;br /&gt;
== dynamic validation ==&lt;br /&gt;
&lt;br /&gt;
Evan talked about that his customers can see their invoices through REST and now it can be filtered by an sql term so they can only see their own data.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos sais that in Compiere it is possible to do a list of access tables for customers. He may find documantation about that and create a proposal.&lt;br /&gt;
&lt;br /&gt;
== monitor resource intensive SQL/Process ==&lt;br /&gt;
&lt;br /&gt;
Nicolas proposed that. Now we can use debug to see all queries in the log file. This is hard to work with.&lt;br /&gt;
&lt;br /&gt;
Carlos has increased the log level of postgres to see all queries and its time. That fills your disk very quickly.&lt;br /&gt;
&lt;br /&gt;
Deepak used [https://github.com/darold/pgbadger PgBadger]. This is a good tool.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos has the idea to add a comment in iDempiere with the process id or more data. That may help to find the process that created the sql that you see in Postgres logs.&lt;br /&gt;
&lt;br /&gt;
Carlos sometimes uses a breakpoint in the convert class to find out where in the code a single sql query is done.&lt;br /&gt;
&lt;br /&gt;
In the OSGI console you can set the debug property in iDempiere even in a running production system.&lt;br /&gt;
&lt;br /&gt;
== Load Test ==&lt;br /&gt;
&lt;br /&gt;
Mahmuda says that at Sysnova they have installations with a very big number of concurrent users and they use load balancers. They do load tests and she wants to talk about that.&lt;br /&gt;
&lt;br /&gt;
We can use REST to do mass documents.&lt;br /&gt;
&lt;br /&gt;
to use JMeter you have to start the server so that it creates fixed ids. There is a jvm variable to switch that on.&lt;br /&gt;
&lt;br /&gt;
Carlos says there is a problem with a sequences lock. If you create too many documents cuncurrently it breaks after 2 minutes. A solution for that is to use uuid as document numbers. There is already an open ticket for that (IDEMPIERE-xxxx ???).&lt;br /&gt;
&lt;br /&gt;
== playwright ==&lt;br /&gt;
&lt;br /&gt;
https://playwright.dev/ works similar like selenium.&lt;br /&gt;
&lt;br /&gt;
With fixed ids in zk it works much faster. When Thomas aked why these are not used by default Carlos explains two reasons: zk is slower because it has to call a function in iDempiere's model to create the id. And second there may be collisions when two components accidentally create the same id. If this happens it is a bug but not all of them are solved.&lt;br /&gt;
&lt;br /&gt;
Murilo showed his screenshot runner: https://github.com/muriloht/idempiere-screenshot-runner&lt;br /&gt;
&lt;br /&gt;
Diego uses PlayWright a lot. He proposes to move all test cases to playwright. We can try that on a test server with fixed zk ids. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Noone wants to use fitnesse any more.&lt;br /&gt;
&lt;br /&gt;
== semantic layer ==&lt;br /&gt;
&lt;br /&gt;
Thomas and Norbert did talks in the conference about a similar concept. Mahmuda also likes that.&lt;br /&gt;
&lt;br /&gt;
Thomas said that it will be good to agree on a set of dimensions and facts to work with. That helps to unify reporting and also helps AI when we add that to the official documentation.&lt;br /&gt;
&lt;br /&gt;
We like to add materialized views IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Juan Carlos wants to add the possibility to create a &amp;quot;materialized&amp;quot; table on another postgres server.&lt;br /&gt;
&lt;br /&gt;
== MCP ==&lt;br /&gt;
&lt;br /&gt;
There are projects for mcp for developers and for users. internal/external. We do not like this naming.&lt;br /&gt;
&lt;br /&gt;
== framework ==&lt;br /&gt;
&lt;br /&gt;
What is the idempiere framework and what not?&lt;br /&gt;
&lt;br /&gt;
Carlos explained which work has to be done to take more things out of core. There is still a lot of work to do. For example we need different installers (using for example profiles). It will also make contributions harder if we split the codebase into several repositories.&lt;br /&gt;
&lt;br /&gt;
Diego showed some work he did in a group of people based on starting ideas from Murilo to define the things that belong to a framework.&lt;br /&gt;
&lt;br /&gt;
Carlos counted which tables are part of the framework like users, countries, sessions, etc. It is hard to split columns inside tables.&lt;br /&gt;
&lt;br /&gt;
Simpler is to extract is jasperreports or the report engine.&lt;br /&gt;
&lt;br /&gt;
=== Marketing ===&lt;br /&gt;
&lt;br /&gt;
At some point we should find a better name for iDempiere as a framework.&lt;br /&gt;
  &lt;br /&gt;
== Excel export has problems with number ==&lt;br /&gt;
&lt;br /&gt;
There is a bug in the excel export so that it does not create numbers in the number format but as text.&lt;br /&gt;
&lt;br /&gt;
Mahmuda reported this bug and Thomas had also seen it. We could not reproduce it here in the workshop. So we think it must be solved already and the bug was in iDempiere 11 and vefore.&lt;br /&gt;
&lt;br /&gt;
We use [https://keikai.io/ Keikai] for our internal spreadsheet report. We realized that in the actual version the reports in KeiKai (the included spreadsheet in the report window) are read-only. Diego says according to the ticket from Hengsin this is by intention. The spreadsheet inside InfoWindows is writable. Carlos idea is to make that configurable (IDEMPIERE-XXXX).&lt;br /&gt;
&lt;br /&gt;
== closing orders in batch ==&lt;br /&gt;
&lt;br /&gt;
Mahmuda asked how we do that. We showed the process &amp;quot;order batch process&amp;quot; that can get parameters to filter documents and close them. As an alternative we showed an InfoWindow that allows to filter documents manually and then runs a process to close.&lt;br /&gt;
&lt;br /&gt;
== consignment ==&lt;br /&gt;
&lt;br /&gt;
== How to get help from the community ==&lt;br /&gt;
&lt;br /&gt;
Carlos talked about how to ask questions in mattermost and forums.&lt;br /&gt;
&lt;br /&gt;
https://www.catb.org/~esr/faqs/smart-questions.html&lt;br /&gt;
&lt;br /&gt;
== Widgets and Quick Info ==&lt;br /&gt;
&lt;br /&gt;
Diego did a place in Docusaurus with a list of 2Packs. These widgets are a smart way to do some things and here we can share them.&lt;br /&gt;
&lt;br /&gt;
https://docs.idempiere.org/docs/category/widgets--quick-info&lt;br /&gt;
&lt;br /&gt;
== MFG 2 ==&lt;br /&gt;
&lt;br /&gt;
Some people of the community plan to work on manufacturing 2. They are in a mattermost channel.&lt;br /&gt;
&lt;br /&gt;
== BI mattermost channel ==&lt;br /&gt;
&lt;br /&gt;
There is a new channel for the BI interest group.&lt;br /&gt;
&lt;br /&gt;
== How to use Skills / How to work with claude code ==&lt;br /&gt;
&lt;br /&gt;
Markus did a demonstration for Carlos and us how he uses ai skills.&lt;br /&gt;
&lt;br /&gt;
There is a starting point for skills to work with iDempiere from hengsin: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
There is also an mcp server to access data from an iDempiere Server: https://github.com/hengsin/idempiere-mcp/&lt;br /&gt;
&lt;br /&gt;
Carlos and Thomas were interested how to set up guardrails for AI.&lt;br /&gt;
&lt;br /&gt;
Diego showed us how the skills work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;br /&gt;
[[Category:Meetings 2026]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24078</id>
		<title>IDempiere workshop 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24078"/>
		<updated>2026-09-21T20:43:58Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Brainstorming =&lt;br /&gt;
&lt;br /&gt;
At the beginning of the workshop we did a brainstorming about things to talk about in the workshop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AI: ==&lt;br /&gt;
* AI for users&lt;br /&gt;
* Security&lt;br /&gt;
* Guardrails&lt;br /&gt;
* Skills/MCP for documentation&lt;br /&gt;
&lt;br /&gt;
== Howto ==&lt;br /&gt;
* write documentation (with ai)&lt;br /&gt;
* write unit tests&lt;br /&gt;
* monitor state of sql queries, processes, database&lt;br /&gt;
* load tests&lt;br /&gt;
* fitnesse/playwright (zk fixed ids?)&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
* integrate zk into iDempiere&lt;br /&gt;
* better theme support&lt;br /&gt;
* Marble theme&lt;br /&gt;
* free new components&lt;br /&gt;
* Murilo’s improvements to his UI&lt;br /&gt;
&lt;br /&gt;
== POS interest group ==&lt;br /&gt;
&lt;br /&gt;
== BI ==&lt;br /&gt;
* semantic layer for reporting&lt;br /&gt;
* HTML support in a PrintFormat (Murilo advises his FreeMarker solution for that)&lt;br /&gt;
* Pivot print persists&lt;br /&gt;
* XLS export as numbers (instead of formula)&lt;br /&gt;
* internal/external MCP&lt;br /&gt;
&lt;br /&gt;
== functional ==&lt;br /&gt;
* MFG II manufacturing - capacity planning&lt;br /&gt;
* iDempiere as a framework&lt;br /&gt;
* close orders/documents as a process or in a info window&lt;br /&gt;
* plugin versus core&lt;br /&gt;
&lt;br /&gt;
== marketing ==&lt;br /&gt;
* iDempiere fast track - demystification [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post]&lt;br /&gt;
* product versus project&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= workshop day 1 =&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
&lt;br /&gt;
What do we need to do to implement marble or other themes?&lt;br /&gt;
&lt;br /&gt;
Carlos: We mixed css inside java. Murilo has done work in this area. Norbert wants to define ui in json. He has an example where he uses badges or other zk view components. We discussed if there is a way and if it is useful to mix the application and and json. What Carlos takes out is that he wants a field not shown as one of our fixed  components (e.g. a number as a text field) but in another way (as a progress bar or so). Thomas example of the cards in his logistics board is similiar and already can be done using the html field. For Norberts case we want a json typ field attached to a json schema ([https://idempiere.atlassian.net/browse/IDEMPIERE-6059 IDEMPIERE-6059]).&lt;br /&gt;
&lt;br /&gt;
Norbert also likes to improve the tag (label) functionality. tags are not shown in the normal data window. Carlos said the same is true for PostIts.&lt;br /&gt;
&lt;br /&gt;
Carlos says the first step is to enable to use themes (css). ([https://idempiere.atlassian.net/browse/IDEMPIERE-7105 IDEMPIERE-7105]) clean up the code. Norbert thinks that can be automated by ai.&lt;br /&gt;
&lt;br /&gt;
Second step is: How can we enable easily layout changes in the UI. (zul) (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Try to cover the components zk gives us.&lt;br /&gt;
&lt;br /&gt;
Mohamed asked what is the goal of this work - the goal is to empower users in a ux group to have the flexibility to change the ui and ux as they like.&lt;br /&gt;
&lt;br /&gt;
Murilo did a demonstration of the UI/UX of an implementation he did. Most of his work was done as forms and so can not be used for all windows or for community but it showed nicely what is possible.&lt;br /&gt;
&lt;br /&gt;
He also showed his [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates]. It is an easy way to create very nice reports in html and pdf.&lt;br /&gt;
&lt;br /&gt;
(btw... Thomas did something similar [https://github.com/ThomasBayen/de.bxservice.bxjasperbridge using JasperReports] but what Murilo did seems more matured and at the end more powerful. If you prefer to work with JapserReports to be able to edit the reports in Jasper Studio you can have a look at it.)&lt;br /&gt;
&lt;br /&gt;
He also showed a nice workflow to create freemarker forms using ai. Murilo wanted to add an ai interface later to do that automatically. Markus Bozem said we need an plugin to provide an ai interface. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Mahmuda (from Sysnova) started a discussion to create an UI/UX user group and a mattermost channel for it. She wants to lead this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/uiux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== small issues before the break ==&lt;br /&gt;
&lt;br /&gt;
We talked about some small things from the list:&lt;br /&gt;
&lt;br /&gt;
=== manufacturing ===&lt;br /&gt;
* Manufacturing: Deepak, Zuri, Peter had a kind of group to be in charge of libero manufacturing. They have to create one single joined version and make it compatible with vanilla iDempiere. Mahmuda wants to join this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/mfg&lt;br /&gt;
&lt;br /&gt;
=== POS group ===&lt;br /&gt;
* a POS group can be build separately because in this workshop most people are not interested in this theme. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/pos&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
Hengsin asked to enable developers to use Vibe Coding to create code. We discussed about the definition of vibe coding. &lt;br /&gt;
&lt;br /&gt;
Hengsin builded a small number of developer skills in the past. https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
Markus Bozem wants to create skills and write all informations about idempiere conventions in coding. Norbert added that we need also mcp files that may be based on skills.&lt;br /&gt;
&lt;br /&gt;
For example an skill that creates a new column can get a description to look into the database to identify patterns to create new columns.&lt;br /&gt;
&lt;br /&gt;
Mahmuda did a picture to show us a possible layaered approach to get skills.&lt;br /&gt;
&lt;br /&gt;
* An MCP Layer&lt;br /&gt;
* idempiere core knowlwedge&lt;br /&gt;
* Vibe Coding Chats, including user skills&lt;br /&gt;
* a human in the loop&lt;br /&gt;
* published&lt;br /&gt;
inbetween each layer we need security.&lt;br /&gt;
&lt;br /&gt;
Murilo talked about someone who uses a separate webservice to access iDempiere through rest interfaces that uses like skills.&lt;br /&gt;
&lt;br /&gt;
Mahmuda explains how generic AI and agentic AI can work here. The agenticv AI get information from *.md files, RAG (rules, knowledge database) and a data repository. You can have several LLMs using that like hiring employees. Then you need an &amp;quot;HR-UI&amp;quot; that gives guard rails to the agents and looks over them.&lt;br /&gt;
&lt;br /&gt;
We should care to see where we need an mcp and where skills.&lt;br /&gt;
&lt;br /&gt;
We do need a common repository with skills and mcps.&lt;br /&gt;
&lt;br /&gt;
Carlos wanted to talk about migration scripts. They are very hard to review. An idea is if coderabbit can summarize the migration scripts to help.&lt;br /&gt;
&lt;br /&gt;
We also have to analyze 2packs. We havo to know what to check in the 2Pack and in the SQL. (E.g. validations that lead to a password table or such.)&lt;br /&gt;
&lt;br /&gt;
We have to think how an mcp takes centralized ids. Norbert proposed to have a dry-run before you really take the ids for your public code.&lt;br /&gt;
&lt;br /&gt;
=== centralized IDs / 2Pack ===&lt;br /&gt;
&lt;br /&gt;
Thomas asked why we do not use 2Pack instead of migration scripts. Carlos wants to talk about that in the friday meeting with Hengsin and Deepak.&lt;br /&gt;
&lt;br /&gt;
Do we want to stop using centralized ids. Hengsin said on matterpost that it may be possible to use uuids in a 2pack to not need centralized ids any more. That needs a ticket to analyze (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
We may change from 2Pack in *.xml to *.yaml. Care about PostgreSQL/Oracle code. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Nicolas says that we have to implement a test to assure that when we change 2Pack that it works in all old versions of iDempiere.&lt;br /&gt;
&lt;br /&gt;
== UI again: json defined  ==&lt;br /&gt;
&lt;br /&gt;
Murilo showed a PoC to use JSON files and a predefined UI definition to automatically create new fields and new UI elements in an iDempiere window. As it is based on json it is very flexible. That was very niced and showed interesting ideas.&lt;br /&gt;
&lt;br /&gt;
Carlos said this is a tool that could replace or mimic the Attribute Set Editor.&lt;br /&gt;
&lt;br /&gt;
We had concerns about performance. Deepak has concerned about search and reports. Carlos says he has concerns about rest filters (they also do not use json fields). json fields have to be searchable because users expect that.&lt;br /&gt;
&lt;br /&gt;
Carlos says that we can use Attribute Set Instance to implement that. That is another approach.&lt;br /&gt;
&lt;br /&gt;
Nicolas talked about where the definitions can be and if they can be overridden. If the schema is defined in column we can override it in field and in customization. We can have a table to define the schemas. We may create schemas based on context. We can create a detail table for this data. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
== AI for business users ==&lt;br /&gt;
&lt;br /&gt;
Thomas wanted to talk about how to use AI for business cases. Evan has the example that they read their supplier's price lists and read the data into the erp. Thomas uses AI to read incoming order emails.&lt;br /&gt;
&lt;br /&gt;
Another kind of usage is to have an end user interface to gather information and reporting. This can work like a chat window. Thomas has a PoC for a reporting window and Norbert has also a nice working solution in the quickinfo panel.&lt;br /&gt;
&lt;br /&gt;
Up to now there is no common community approach for these things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= workshop day 2 =&lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
&lt;br /&gt;
We talked about if we want to enforce tickets to be documented. Carlos explains he tend to balance benefit/cost when allowing to move ahead a pull request without documentation.&lt;br /&gt;
&lt;br /&gt;
The documentation is now moved from the wiki to docusaurus. Diego explained that we need to strenghten docusaurus because AI likes to read these .md files and it can be our authorative doc for the project. Carlos likes to have a space where users can add things very fast and easy. IT also can be a playfield for not-finished documentation.&lt;br /&gt;
&lt;br /&gt;
Marco and others like the recent changes list shown in the wiki, which is missing in docusaurus.&lt;br /&gt;
&lt;br /&gt;
Carlos says that google docs may be a better tool for that.&lt;br /&gt;
&lt;br /&gt;
Actions to be taken:&lt;br /&gt;
* We need to discuss to create subfolder in the docusaurus and how to create categories.&lt;br /&gt;
* improve rules for documentation&lt;br /&gt;
&lt;br /&gt;
== related records ==&lt;br /&gt;
&lt;br /&gt;
This feature is about the detail zoom button.&lt;br /&gt;
&lt;br /&gt;
Norbert has a solution that materializes the lists of related records.&lt;br /&gt;
&lt;br /&gt;
Deepak has a ticket to filter which tables can be zoomed.&lt;br /&gt;
&lt;br /&gt;
Thomas want to filter the list, e.g. to see only orders of the last two years.&lt;br /&gt;
&lt;br /&gt;
We want to open a ticket IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
== pivot print / reporting ==&lt;br /&gt;
&lt;br /&gt;
Deepak has an idea to save the settings of pivot table output. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
He also likes to allow excel templates to define how excel reports look like. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Here we mentioned also the [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates] from Murilo.&lt;br /&gt;
&lt;br /&gt;
== iDempiere fast track ==&lt;br /&gt;
&lt;br /&gt;
Mohamed talked about his first impressions and we discussed how to explain what iDempiere is and how to start working with it. Carlos showed [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post] and talked about what it means.&lt;br /&gt;
&lt;br /&gt;
Mohamed gave the example to show an example of a kanban of requests to show iDempiere as an crm.&lt;br /&gt;
&lt;br /&gt;
One solution is that we want to improve the test data in garden world. (IDEMPIERE-4297 already closed - create a new ticket?) Our ideas were:&lt;br /&gt;
* more data&lt;br /&gt;
* more historic documents to allow reporting&lt;br /&gt;
* print formats are ugly&lt;br /&gt;
* show a logo in reports&lt;br /&gt;
&lt;br /&gt;
Norbert has a script to create random sales and purchase orders.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos wants to contribute data into a seed server but he is not experienced in creating 2packs.&lt;br /&gt;
&lt;br /&gt;
Diego and Rifat offered to find out how we can do that technically. we want to export it as 2pack. Carlos says it can be possible to take the 2pack and create migration scripts later to bring it into seed.&lt;br /&gt;
&lt;br /&gt;
Diego says that iDempiere out of the box is overwhelming for new users.&lt;br /&gt;
&lt;br /&gt;
More test data for all functionality is also demanded for unit tests and to help with bug reporter's test cases. In Compiere theg Garden World data was meant to show every single function in the ERP.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos reminds of his ticket to add more columns for reporting of dimensions like brand, product class, etc. (IDENMPIERE-xxxx ???)&lt;br /&gt;
&lt;br /&gt;
== dynamic validation ==&lt;br /&gt;
&lt;br /&gt;
Evan talked about that his customers can see their invoices through REST and now it can be filtered by an sql term so they can only see their own data.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos sais that in Compiere it is possible to do a list of access tables for customers. He may find documantation about that and create a proposal.&lt;br /&gt;
&lt;br /&gt;
== monitor resource intensive SQL/Process ==&lt;br /&gt;
&lt;br /&gt;
Nicolas proposed that. Now we can use debug to see all queries in the log file. This is hard to work with.&lt;br /&gt;
&lt;br /&gt;
Carlos has increased the log level of postgres to see all queries and its time. That fills your disk very quickly.&lt;br /&gt;
&lt;br /&gt;
Deepak used [https://github.com/darold/pgbadger PgBadger]. This is a good tool.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos has the idea to add a comment in iDempiere with the process id or more data. That may help to find the process that created the sql that you see in Postgres logs.&lt;br /&gt;
&lt;br /&gt;
Carlos sometimes uses a breakpoint in the convert class to find out where in the code a single sql query is done.&lt;br /&gt;
&lt;br /&gt;
In the OSGI console you can set the debug property in iDempiere even in a running production system.&lt;br /&gt;
&lt;br /&gt;
== Load Test ==&lt;br /&gt;
&lt;br /&gt;
Mahmuda says that at Sysnova they have installations with a very big number of concurrent users and they use load balancers. They do load tests and she wants to talk about that.&lt;br /&gt;
&lt;br /&gt;
We can use REST to do mass documents.&lt;br /&gt;
&lt;br /&gt;
to use JMeter you have to start the server so that it creates fixed ids. There is a jvm variable to switch that on.&lt;br /&gt;
&lt;br /&gt;
Carlos says there is a problem with a sequences lock. If you create too many documents cuncurrently it breaks after 2 minutes. A solution for that is to use uuid as document numbers. There is already an open ticket for that (IDEMPIERE-xxxx ???).&lt;br /&gt;
&lt;br /&gt;
== playwright ==&lt;br /&gt;
&lt;br /&gt;
https://playwright.dev/ works similar like selenium.&lt;br /&gt;
&lt;br /&gt;
With fixed ids in zk it works much faster. When Thomas aked why these are not used by default Carlos explains two reasons: zk is slower because it has to call a function in iDempiere's model to create the id. And second there may be collisions when two components accidentally create the same id. If this happens it is a bug but not all of them are solved.&lt;br /&gt;
&lt;br /&gt;
Murilo showed his screenshot runner: https://github.com/muriloht/idempiere-screenshot-runner&lt;br /&gt;
&lt;br /&gt;
Diego uses PlayWright a lot. He proposes to move all test cases to playwright. We can try that on a test server with fixed zk ids. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Noone wants to use fitnesse any more.&lt;br /&gt;
&lt;br /&gt;
== semantic layer ==&lt;br /&gt;
&lt;br /&gt;
Thomas and Norbert did talks in the conference about a similar concept. Mahmuda also likes that.&lt;br /&gt;
&lt;br /&gt;
Thomas said that it will be good to agree on a set of dimensions and facts to work with. That helps to unify reporting and also helps AI when we add that to the official documentation.&lt;br /&gt;
&lt;br /&gt;
We like to add materialized views IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Juan Carlos wants to add the possibility to create a &amp;quot;materialized&amp;quot; table on another postgres server.&lt;br /&gt;
&lt;br /&gt;
== MCP ==&lt;br /&gt;
&lt;br /&gt;
There are projects for mcp for developers and for users. internal/external. We do not like this naming.&lt;br /&gt;
&lt;br /&gt;
== framework ==&lt;br /&gt;
&lt;br /&gt;
What is the idempiere framework and what not?&lt;br /&gt;
&lt;br /&gt;
Carlos explained which work has to be done to take more things out of core. There is still a lot of work to do. For example we need different installers (using for example profiles). It will also make contributions harder if we split the codebase into several repositories.&lt;br /&gt;
&lt;br /&gt;
Diego showed some work he did in a group of people based on starting ideas from Murilo to define the things that belong to a framework.&lt;br /&gt;
&lt;br /&gt;
Carlos counted which tables are part of the framework like users, countries, sessions, etc. It is hard to split columns inside tables.&lt;br /&gt;
&lt;br /&gt;
Simpler is to extract is jasperreports or the report engine.&lt;br /&gt;
&lt;br /&gt;
=== Marketing ===&lt;br /&gt;
&lt;br /&gt;
At some point we should find a better name for iDempiere as a framework.&lt;br /&gt;
  &lt;br /&gt;
== Excel export has problems with number ==&lt;br /&gt;
&lt;br /&gt;
There is a bug in the excel export so that it does not create numbers in the number format but as text.&lt;br /&gt;
&lt;br /&gt;
Mahmuda reported this bug and Thomas had also seen it. We could not reproduce it here in the workshop. So we think it must be solved already and the bug was in iDempiere 11 and vefore.&lt;br /&gt;
&lt;br /&gt;
We use [https://keikai.io/ Keikai] for our internal spreadsheet report. We realized that in the actual version the reports in KeiKai (the included spreadsheet in the report window) are read-only. Diego says according to the ticket from Hengsin this is by intention. The spreadsheet inside InfoWindows is writable. Carlos idea is to make that configurable.&lt;br /&gt;
&lt;br /&gt;
== closing orders in batch ==&lt;br /&gt;
&lt;br /&gt;
Mahmuda asked how we do that. We showed the process &amp;quot;order batch process&amp;quot; that can get parameters to filter documents and close them. As an alternative we showed an InfoWindow that allows to filter documents manually and then runs a process to close.&lt;br /&gt;
&lt;br /&gt;
== consignment ==&lt;br /&gt;
&lt;br /&gt;
== How to get help from the community ==&lt;br /&gt;
&lt;br /&gt;
Carlos talked about how to ask questions in mattermost and forums.&lt;br /&gt;
&lt;br /&gt;
https://www.catb.org/~esr/faqs/smart-questions.html&lt;br /&gt;
&lt;br /&gt;
== Widgets and Quick Info ==&lt;br /&gt;
&lt;br /&gt;
Diego did a place in Docusaurus with a list of 2Packs. These widgets are a smart way to do some things and here we can share them.&lt;br /&gt;
&lt;br /&gt;
https://docs.idempiere.org/docs/category/widgets--quick-info&lt;br /&gt;
&lt;br /&gt;
== MFG 2 ==&lt;br /&gt;
&lt;br /&gt;
Some people of the community plan to work on manufacturing 2. They are in a mattermost channel.&lt;br /&gt;
&lt;br /&gt;
== BI mattermost channel ==&lt;br /&gt;
&lt;br /&gt;
There is a new channel for the BI interest group.&lt;br /&gt;
&lt;br /&gt;
== How to use Skills / How to work with claude code ==&lt;br /&gt;
&lt;br /&gt;
Markus did a demonstration for Carlos and us how he uses ai skills.&lt;br /&gt;
&lt;br /&gt;
There is a starting point for skills to work with iDempiere from hengsin: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
There is also an mcp server to access data from an iDempiere Server: https://github.com/hengsin/idempiere-mcp/&lt;br /&gt;
&lt;br /&gt;
Carlos and Thomas were interested how to set up guardrails for AI.&lt;br /&gt;
&lt;br /&gt;
Diego showed us how the skills work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;br /&gt;
[[Category:Meetings 2026]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24077</id>
		<title>IDempiere workshop 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24077"/>
		<updated>2026-09-21T20:42:11Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* UI again: json defined */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Brainstorming =&lt;br /&gt;
&lt;br /&gt;
At the beginning of the workshop we did a brainstorming about things to talk about in the workshop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AI: ==&lt;br /&gt;
* AI for users&lt;br /&gt;
* Security&lt;br /&gt;
* Guardrails&lt;br /&gt;
* Skills/MCP for documentation&lt;br /&gt;
&lt;br /&gt;
== Howto ==&lt;br /&gt;
* write documentation (with ai)&lt;br /&gt;
* write unit tests&lt;br /&gt;
* monitor state of sql queries, processes, database&lt;br /&gt;
* load tests&lt;br /&gt;
* fitnesse/playwright (zk fixed ids?)&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
* integrate zk into iDempiere&lt;br /&gt;
* better theme support&lt;br /&gt;
* Marble theme&lt;br /&gt;
* free new components&lt;br /&gt;
* Murilo’s improvements to his UI&lt;br /&gt;
&lt;br /&gt;
== POS interest group ==&lt;br /&gt;
&lt;br /&gt;
== BI ==&lt;br /&gt;
* semantic layer for reporting&lt;br /&gt;
* HTML support in a PrintFormat (Murilo advises his FreeMarker solution for that)&lt;br /&gt;
* Pivot print persists&lt;br /&gt;
* XLS export as numbers (instead of formula)&lt;br /&gt;
* internal/external MCP&lt;br /&gt;
&lt;br /&gt;
== functional ==&lt;br /&gt;
* MFG II manufacturing - capacity planning&lt;br /&gt;
* iDempiere as a framework&lt;br /&gt;
* close orders/documents as a process or in a info window&lt;br /&gt;
* plugin versus core&lt;br /&gt;
&lt;br /&gt;
== marketing ==&lt;br /&gt;
* iDempiere fast track - demystification [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post]&lt;br /&gt;
* product versus project&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= workshop day 1 =&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
&lt;br /&gt;
What do we need to do to implement marble or other themes?&lt;br /&gt;
&lt;br /&gt;
Carlos: We mixed css inside java. Murilo has done work in this area. Norbert wants to define ui in json. He has an example where he uses badges or other zk view components. We discussed if there is a way and if it is useful to mix the application and and json. What Carlos takes out is that he wants a field not shown as one of our fixed  components (e.g. a number as a text field) but in another way (as a progress bar or so). Thomas example of the cards in his logistics board is similiar and already can be done using the html field. For Norberts case we want a json typ field attached to a json schema ([https://idempiere.atlassian.net/browse/IDEMPIERE-6059 IDEMPIERE-6059]).&lt;br /&gt;
&lt;br /&gt;
Norbert also likes to improve the tag (label) functionality. tags are not shown in the normal data window. Carlos said the same is true for PostIts.&lt;br /&gt;
&lt;br /&gt;
Carlos says the first step is to enable to use themes (css). ([https://idempiere.atlassian.net/browse/IDEMPIERE-7105 IDEMPIERE-7105]) clean up the code. Norbert thinks that can be automated by ai.&lt;br /&gt;
&lt;br /&gt;
Second step is: How can we enable easily layout changes in the UI. (zul) (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Try to cover the components zk gives us.&lt;br /&gt;
&lt;br /&gt;
Mohamed asked what is the goal of this work - the goal is to empower users in a ux group to have the flexibility to change the ui and ux as they like.&lt;br /&gt;
&lt;br /&gt;
Murilo did a demonstration of the UI/UX of an implementation he did. Most of his work was done as forms and so can not be used for all windows or for community but it showed nicely what is possible.&lt;br /&gt;
&lt;br /&gt;
He also showed his [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates]. It is an easy way to create very nice reports in html and pdf.&lt;br /&gt;
&lt;br /&gt;
(btw... Thomas did something similar [https://github.com/ThomasBayen/de.bxservice.bxjasperbridge using JasperReports] but what Murilo did seems more matured and at the end more powerful. If you prefer to work with JapserReports to be able to edit the reports in Jasper Studio you can have a look at it.)&lt;br /&gt;
&lt;br /&gt;
He also showed a nice workflow to create freemarker forms using ai. Murilo wanted to add an ai interface later to do that automatically. Markus Bozem said we need an plugin to provide an ai interface. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Mahmuda (from Sysnova) started a discussion to create an UI/UX user group and a mattermost channel for it. She wants to lead this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/uiux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== small issues before the break ==&lt;br /&gt;
&lt;br /&gt;
We talked about some small things from the list:&lt;br /&gt;
&lt;br /&gt;
=== manufacturing ===&lt;br /&gt;
* Manufacturing: Deepak, Zuri, Peter had a kind of group to be in charge of libero manufacturing. They have to create one single joined version and make it compatible with vanilla iDempiere. Mahmuda wants to join this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/mfg&lt;br /&gt;
&lt;br /&gt;
=== POS group ===&lt;br /&gt;
* a POS group can be build separately because in this workshop most people are not interested in this theme. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/pos&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
Hengsin asked to enable developers to use Vibe Coding to create code. We discussed about the definition of vibe coding. &lt;br /&gt;
&lt;br /&gt;
Hengsin builded a small number of developer skills in the past. https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
Markus Bozem wants to create skills and write all informations about idempiere conventions in coding. Norbert added that we need also mcp files that may be based on skills.&lt;br /&gt;
&lt;br /&gt;
For example an skill that creates a new column can get a description to look into the database to identify patterns to create new columns.&lt;br /&gt;
&lt;br /&gt;
Mahmuda did a picture to show us a possible layaered approach to get skills.&lt;br /&gt;
&lt;br /&gt;
* An MCP Layer&lt;br /&gt;
* idempiere core knowlwedge&lt;br /&gt;
* Vibe Coding Chats, including user skills&lt;br /&gt;
* a human in the loop&lt;br /&gt;
* published&lt;br /&gt;
inbetween each layer we need security.&lt;br /&gt;
&lt;br /&gt;
Murilo talked about someone who uses a separate webservice to access iDempiere through rest interfaces that uses like skills.&lt;br /&gt;
&lt;br /&gt;
Mahmuda explains how generic AI and agentic AI can work here. The agenticv AI get information from *.md files, RAG (rules, knowledge database) and a data repository. You can have several LLMs using that like hiring employees. Then you need an &amp;quot;HR-UI&amp;quot; that gives guard rails to the agents and looks over them.&lt;br /&gt;
&lt;br /&gt;
We should care to see where we need an mcp and where skills.&lt;br /&gt;
&lt;br /&gt;
We do need a common repository with skills and mcps.&lt;br /&gt;
&lt;br /&gt;
Carlos wanted to talk about migration scripts. They are very hard to review. An idea is if coderabbit can summarize the migration scripts to help.&lt;br /&gt;
&lt;br /&gt;
We also have to analyze 2packs. We havo to know what to check in the 2Pack and in the SQL. (E.g. validations that lead to a password table or such.)&lt;br /&gt;
&lt;br /&gt;
We have to think how an mcp takes centralized ids. Norbert proposed to have a dry-run before you really take the ids for your public code.&lt;br /&gt;
&lt;br /&gt;
=== centralized IDs / 2Pack ===&lt;br /&gt;
&lt;br /&gt;
Thomas asked why we do not use 2Pack instead of migration scripts. Carlos wants to talk about that in the friday meeting with Hengsin and Deepak.&lt;br /&gt;
&lt;br /&gt;
Do we want to stop using centralized ids. Hengsin said on matterpost that it may be possible to use uuids in a 2pack to not need centralized ids any more. That needs a ticket to analyze (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
We may change from 2Pack in *.xml to *.yaml. Care about PostgreSQL/Oracle code. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Nicolas says that we have to implement a test to assure that when we change 2Pack that it works in all old versions of iDempiere.&lt;br /&gt;
&lt;br /&gt;
== UI again: json defined  ==&lt;br /&gt;
&lt;br /&gt;
Murilo showed a PoC to use JSON files and a predefined UI definition to automatically create new fields and new UI elements in an iDempiere window. As it is based on json it is very flexible. That was very niced and showed interesting ideas.&lt;br /&gt;
&lt;br /&gt;
Carlos said this is a tool that could replace or mimic the Attribute Set Editor.&lt;br /&gt;
&lt;br /&gt;
We had concerns about performance. Deepak has concerned about search and reports. Carlos says he has concerns about rest filters (they also do not use json fields). json fields have to be searchable because users expect that.&lt;br /&gt;
&lt;br /&gt;
Carlos says that we can use Attribute Set Instance to implement that. That is another approach.&lt;br /&gt;
&lt;br /&gt;
Nicolas talked about where the definitions can be and if they can be overridden. If the schema is defined in column we can override it in field and in customization. We can have a table to define the schemas. We may create schemas based on context. We can create a detail table for this data. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
== AI for business users ==&lt;br /&gt;
&lt;br /&gt;
Thomas wanted to talk about how to use AI for business cases. Evan has the example that they read their supplier's price lists and read the data into the erp. Thomas uses AI to read incoming order emails.&lt;br /&gt;
&lt;br /&gt;
Another kind of usage is to have an end user interface to gather information and reporting. This can work like a chat window. Thomas has a PoC for a reporting window and Norbert has also a nice working solution in the quickinfo panel.&lt;br /&gt;
&lt;br /&gt;
Up to now there is no common community approach for these things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= workshop day 2 =&lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
&lt;br /&gt;
We talked about if we want to enforce tickets to be documented. Carlos does not like this idea.&lt;br /&gt;
&lt;br /&gt;
The documentation is now moved from the wiki to docusaurus. Diego explained that we need to strenghten docusaurus because AI likes to read these .md files and it can be our authorative doc for the project. Carlos likes to have a space where users can add things very fast and easy. IT also can be a playfield for not-finished documentation.&lt;br /&gt;
&lt;br /&gt;
Marco and others like the recent changes list shown in the wiki.&lt;br /&gt;
&lt;br /&gt;
Carlos says that google drive may be a better tool for that.&lt;br /&gt;
&lt;br /&gt;
Actions to be taken:&lt;br /&gt;
* We need to discuss to create subfolder in the docusaurus and how to create categories.&lt;br /&gt;
* improve rules for documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== related records ==&lt;br /&gt;
&lt;br /&gt;
This feature is about the detail zoom button.&lt;br /&gt;
&lt;br /&gt;
Norbert has a solution that materializes the lists of related records.&lt;br /&gt;
&lt;br /&gt;
Deepak has a ticket to filter which tables can be zoomed.&lt;br /&gt;
&lt;br /&gt;
Thomas want to filter the list, e.g. to see only orders of the last two years.&lt;br /&gt;
&lt;br /&gt;
We want to open a ticket IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
== pivot print / reporting ==&lt;br /&gt;
&lt;br /&gt;
Deepak has an idea to save the settings of pivot table output. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
He also likes to allow excel templates to define how excel reports look like. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Here we mentioned also the [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates] from Murilo.&lt;br /&gt;
&lt;br /&gt;
== iDempiere fast track ==&lt;br /&gt;
&lt;br /&gt;
Mohamed talked about his first impressions and we discussed how to explain what iDempiere is and how to start working with it. Carlos showed [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post] and talked about what it means.&lt;br /&gt;
&lt;br /&gt;
Mohamed gave the example to show an example of a kanban of requests to show iDempiere as an crm.&lt;br /&gt;
&lt;br /&gt;
One solution is that we want to improve the test data in garden world. (IDEMPIERE-4297 already closed - create a new ticket?) Our ideas were:&lt;br /&gt;
* more data&lt;br /&gt;
* more historic documents to allow reporting&lt;br /&gt;
* print formats are ugly&lt;br /&gt;
* show a logo in reports&lt;br /&gt;
&lt;br /&gt;
Norbert has a script to create random sales and purchase orders.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos wants to contribute data into a seed server but he is not experienced in creating 2packs.&lt;br /&gt;
&lt;br /&gt;
Diego and Rifat offered to find out how we can do that technically. we want to export it as 2pack. Carlos says it can be possible to take the 2pack and create migration scripts later to bring it into seed.&lt;br /&gt;
&lt;br /&gt;
Diego says that iDempiere out of the box is overwhelming for new users.&lt;br /&gt;
&lt;br /&gt;
More test data for all functionality is also demanded for unit tests and to help with bug reporter's test cases. In Compiere theg Garden World data was meant to show every single function in the ERP.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos reminds of his ticket to add more columns for reporting of dimensions like brand, product class, etc. (IDENMPIERE-xxxx ???)&lt;br /&gt;
&lt;br /&gt;
== dynamic validation ==&lt;br /&gt;
&lt;br /&gt;
Evan talked about that his customers can see their invoices through REST and now it can be filtered by an sql term so they can only see their own data.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos sais that in Compiere it is possible to do a list of access tables for customers. He may find documantation about that and create a proposal.&lt;br /&gt;
&lt;br /&gt;
== monitor resource intensive SQL/Process ==&lt;br /&gt;
&lt;br /&gt;
Nicolas proposed that. Now we can use debug to see all queries in the log file. This is hard to work with.&lt;br /&gt;
&lt;br /&gt;
Carlos has increased the log level of postgres to see all queries and its time. That fills your disk very quickly.&lt;br /&gt;
&lt;br /&gt;
Deepak used [https://github.com/darold/pgbadger PgBadger]. This is a good tool.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos has the idea to add a comment in iDempiere with the process id or more data. That may help to find the process that created the sql that you see in Postgres logs.&lt;br /&gt;
&lt;br /&gt;
Carlos sometimes uses a breakpoint in the convert class to find out where in the code a single sql query is done.&lt;br /&gt;
&lt;br /&gt;
In the OSGI console you can set the debug property in iDempiere even in a running production system.&lt;br /&gt;
&lt;br /&gt;
== Load Test ==&lt;br /&gt;
&lt;br /&gt;
Mahmuda says that at Sysnova they have installations with a very big number of concurrent users and they use load balancers. They do load tests and she wants to talk about that.&lt;br /&gt;
&lt;br /&gt;
We can use REST to do mass documents.&lt;br /&gt;
&lt;br /&gt;
to use JMeter you have to start the server so that it creates fixed ids. There is a jvm variable to switch that on.&lt;br /&gt;
&lt;br /&gt;
Carlos says there is a problem with a sequences lock. If you create too many documents cuncurrently it breaks after 2 minutes. A solution for that is to use uuid as document numbers. There is already an open ticket for that (IDEMPIERE-xxxx ???).&lt;br /&gt;
&lt;br /&gt;
== playwright ==&lt;br /&gt;
&lt;br /&gt;
https://playwright.dev/ works similar like selenium.&lt;br /&gt;
&lt;br /&gt;
With fixed ids in zk it works much faster. When Thomas aked why these are not used by default Carlos explains two reasons: zk is slower because it has to call a function in iDempiere's model to create the id. And second there may be collisions when two components accidentally create the same id. If this happens it is a bug but not all of them are solved.&lt;br /&gt;
&lt;br /&gt;
Murilo showed his screenshot runner: https://github.com/muriloht/idempiere-screenshot-runner&lt;br /&gt;
&lt;br /&gt;
Diego uses PlayWright a lot. He proposes to move all test cases to playwright. We can try that on a test server with fixed zk ids. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Noone wants to use fitnesse any more.&lt;br /&gt;
&lt;br /&gt;
== semantic layer ==&lt;br /&gt;
&lt;br /&gt;
Thomas and Norbert did talks in the conference about a similar concept. Mahmuda also likes that.&lt;br /&gt;
&lt;br /&gt;
Thomas said that it will be good to agree on a set of dimensions and facts to work with. That helps to unify reporting and also helps AI when we add that to the official documentation.&lt;br /&gt;
&lt;br /&gt;
We like to add materialized views IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Juan Carlos wants to add the possibility to create a &amp;quot;materialized&amp;quot; table on another postgres server.&lt;br /&gt;
&lt;br /&gt;
== MCP ==&lt;br /&gt;
&lt;br /&gt;
There are projects for mcp for developers and for users. internal/external. We do not like this naming.&lt;br /&gt;
&lt;br /&gt;
== framework ==&lt;br /&gt;
&lt;br /&gt;
What is the idempiere framework and what not?&lt;br /&gt;
&lt;br /&gt;
Carlos explained which work has to be done to take more things out of core. There is still a lot of work to do. For example we need different installers (using for example profiles). It will also make contributions harder if we split the codebase into several repositories.&lt;br /&gt;
&lt;br /&gt;
Diego showed some work he did in a group of people based on starting ideas from Murilo to define the things that belong to a framework.&lt;br /&gt;
&lt;br /&gt;
Carlos counted which tables are part of the framework like users, countries, sessions, etc. It is hard to split columns inside tables.&lt;br /&gt;
&lt;br /&gt;
Simpler is to extract is jasperreports or the report engine.&lt;br /&gt;
&lt;br /&gt;
=== Marketing ===&lt;br /&gt;
&lt;br /&gt;
At some point we should find a better name for iDempiere as a framework.&lt;br /&gt;
  &lt;br /&gt;
== Excel export has problems with number ==&lt;br /&gt;
&lt;br /&gt;
There is a bug in the excel export so that it does not create numbers in the number format but as text.&lt;br /&gt;
&lt;br /&gt;
Mahmuda reported this bug and Thomas had also seen it. We could not reproduce it here in the workshop. So we think it must be solved already and the bug was in iDempiere 11 and vefore.&lt;br /&gt;
&lt;br /&gt;
We use [https://keikai.io/ Keikai] for our internal spreadsheet report. We realized that in the actual version the reports in KeiKai (the included spreadsheet in the report window) are read-only. Diego says according to the ticket from Hengsin this is by intention. The spreadsheet inside InfoWindows is writable. Carlos idea is to make that configurable.&lt;br /&gt;
&lt;br /&gt;
== closing orders in batch ==&lt;br /&gt;
&lt;br /&gt;
Mahmuda asked how we do that. We showed the process &amp;quot;order batch process&amp;quot; that can get parameters to filter documents and close them. As an alternative we showed an InfoWindow that allows to filter documents manually and then runs a process to close.&lt;br /&gt;
&lt;br /&gt;
== consignment ==&lt;br /&gt;
&lt;br /&gt;
== How to get help from the community ==&lt;br /&gt;
&lt;br /&gt;
Carlos talked about how to ask questions in mattermost and forums.&lt;br /&gt;
&lt;br /&gt;
https://www.catb.org/~esr/faqs/smart-questions.html&lt;br /&gt;
&lt;br /&gt;
== Widgets and Quick Info ==&lt;br /&gt;
&lt;br /&gt;
Diego did a place in Docusaurus with a list of 2Packs. These widgets are a smart way to do some things and here we can share them.&lt;br /&gt;
&lt;br /&gt;
https://docs.idempiere.org/docs/category/widgets--quick-info&lt;br /&gt;
&lt;br /&gt;
== MFG 2 ==&lt;br /&gt;
&lt;br /&gt;
Some people of the community plan to work on manufacturing 2. They are in a mattermost channel.&lt;br /&gt;
&lt;br /&gt;
== BI mattermost channel ==&lt;br /&gt;
&lt;br /&gt;
There is a new channel for the BI interest group.&lt;br /&gt;
&lt;br /&gt;
== How to use Skills / How to work with claude code ==&lt;br /&gt;
&lt;br /&gt;
Markus did a demonstration for Carlos and us how he uses ai skills.&lt;br /&gt;
&lt;br /&gt;
There is a starting point for skills to work with iDempiere from hengsin: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
There is also an mcp server to access data from an iDempiere Server: https://github.com/hengsin/idempiere-mcp/&lt;br /&gt;
&lt;br /&gt;
Carlos and Thomas were interested how to set up guardrails for AI.&lt;br /&gt;
&lt;br /&gt;
Diego showed us how the skills work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;br /&gt;
[[Category:Meetings 2026]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24076</id>
		<title>IDempiere workshop 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24076"/>
		<updated>2026-09-21T20:39:18Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* POS group */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Brainstorming =&lt;br /&gt;
&lt;br /&gt;
At the beginning of the workshop we did a brainstorming about things to talk about in the workshop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AI: ==&lt;br /&gt;
* AI for users&lt;br /&gt;
* Security&lt;br /&gt;
* Guardrails&lt;br /&gt;
* Skills/MCP for documentation&lt;br /&gt;
&lt;br /&gt;
== Howto ==&lt;br /&gt;
* write documentation (with ai)&lt;br /&gt;
* write unit tests&lt;br /&gt;
* monitor state of sql queries, processes, database&lt;br /&gt;
* load tests&lt;br /&gt;
* fitnesse/playwright (zk fixed ids?)&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
* integrate zk into iDempiere&lt;br /&gt;
* better theme support&lt;br /&gt;
* Marble theme&lt;br /&gt;
* free new components&lt;br /&gt;
* Murilo’s improvements to his UI&lt;br /&gt;
&lt;br /&gt;
== POS interest group ==&lt;br /&gt;
&lt;br /&gt;
== BI ==&lt;br /&gt;
* semantic layer for reporting&lt;br /&gt;
* HTML support in a PrintFormat (Murilo advises his FreeMarker solution for that)&lt;br /&gt;
* Pivot print persists&lt;br /&gt;
* XLS export as numbers (instead of formula)&lt;br /&gt;
* internal/external MCP&lt;br /&gt;
&lt;br /&gt;
== functional ==&lt;br /&gt;
* MFG II manufacturing - capacity planning&lt;br /&gt;
* iDempiere as a framework&lt;br /&gt;
* close orders/documents as a process or in a info window&lt;br /&gt;
* plugin versus core&lt;br /&gt;
&lt;br /&gt;
== marketing ==&lt;br /&gt;
* iDempiere fast track - demystification [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post]&lt;br /&gt;
* product versus project&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= workshop day 1 =&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
&lt;br /&gt;
What do we need to do to implement marble or other themes?&lt;br /&gt;
&lt;br /&gt;
Carlos: We mixed css inside java. Murilo has done work in this area. Norbert wants to define ui in json. He has an example where he uses badges or other zk view components. We discussed if there is a way and if it is useful to mix the application and and json. What Carlos takes out is that he wants a field not shown as one of our fixed  components (e.g. a number as a text field) but in another way (as a progress bar or so). Thomas example of the cards in his logistics board is similiar and already can be done using the html field. For Norberts case we want a json typ field attached to a json schema ([https://idempiere.atlassian.net/browse/IDEMPIERE-6059 IDEMPIERE-6059]).&lt;br /&gt;
&lt;br /&gt;
Norbert also likes to improve the tag (label) functionality. tags are not shown in the normal data window. Carlos said the same is true for PostIts.&lt;br /&gt;
&lt;br /&gt;
Carlos says the first step is to enable to use themes (css). ([https://idempiere.atlassian.net/browse/IDEMPIERE-7105 IDEMPIERE-7105]) clean up the code. Norbert thinks that can be automated by ai.&lt;br /&gt;
&lt;br /&gt;
Second step is: How can we enable easily layout changes in the UI. (zul) (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Try to cover the components zk gives us.&lt;br /&gt;
&lt;br /&gt;
Mohamed asked what is the goal of this work - the goal is to empower users in a ux group to have the flexibility to change the ui and ux as they like.&lt;br /&gt;
&lt;br /&gt;
Murilo did a demonstration of the UI/UX of an implementation he did. Most of his work was done as forms and so can not be used for all windows or for community but it showed nicely what is possible.&lt;br /&gt;
&lt;br /&gt;
He also showed his [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates]. It is an easy way to create very nice reports in html and pdf.&lt;br /&gt;
&lt;br /&gt;
(btw... Thomas did something similar [https://github.com/ThomasBayen/de.bxservice.bxjasperbridge using JasperReports] but what Murilo did seems more matured and at the end more powerful. If you prefer to work with JapserReports to be able to edit the reports in Jasper Studio you can have a look at it.)&lt;br /&gt;
&lt;br /&gt;
He also showed a nice workflow to create freemarker forms using ai. Murilo wanted to add an ai interface later to do that automatically. Markus Bozem said we need an plugin to provide an ai interface. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Mahmuda (from Sysnova) started a discussion to create an UI/UX user group and a mattermost channel for it. She wants to lead this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/uiux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== small issues before the break ==&lt;br /&gt;
&lt;br /&gt;
We talked about some small things from the list:&lt;br /&gt;
&lt;br /&gt;
=== manufacturing ===&lt;br /&gt;
* Manufacturing: Deepak, Zuri, Peter had a kind of group to be in charge of libero manufacturing. They have to create one single joined version and make it compatible with vanilla iDempiere. Mahmuda wants to join this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/mfg&lt;br /&gt;
&lt;br /&gt;
=== POS group ===&lt;br /&gt;
* a POS group can be build separately because in this workshop most people are not interested in this theme. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/pos&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
Hengsin asked to enable developers to use Vibe Coding to create code. We discussed about the definition of vibe coding. &lt;br /&gt;
&lt;br /&gt;
Hengsin builded a small number of developer skills in the past. https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
Markus Bozem wants to create skills and write all informations about idempiere conventions in coding. Norbert added that we need also mcp files that may be based on skills.&lt;br /&gt;
&lt;br /&gt;
For example an skill that creates a new column can get a description to look into the database to identify patterns to create new columns.&lt;br /&gt;
&lt;br /&gt;
Mahmuda did a picture to show us a possible layaered approach to get skills.&lt;br /&gt;
&lt;br /&gt;
* An MCP Layer&lt;br /&gt;
* idempiere core knowlwedge&lt;br /&gt;
* Vibe Coding Chats, including user skills&lt;br /&gt;
* a human in the loop&lt;br /&gt;
* published&lt;br /&gt;
inbetween each layer we need security.&lt;br /&gt;
&lt;br /&gt;
Murilo talked about someone who uses a separate webservice to access iDempiere through rest interfaces that uses like skills.&lt;br /&gt;
&lt;br /&gt;
Mahmuda explains how generic AI and agentic AI can work here. The agenticv AI get information from *.md files, RAG (rules, knowledge database) and a data repository. You can have several LLMs using that like hiring employees. Then you need an &amp;quot;HR-UI&amp;quot; that gives guard rails to the agents and looks over them.&lt;br /&gt;
&lt;br /&gt;
We should care to see where we need an mcp and where skills.&lt;br /&gt;
&lt;br /&gt;
We do need a common repository with skills and mcps.&lt;br /&gt;
&lt;br /&gt;
Carlos wanted to talk about migration scripts. They are very hard to review. An idea is if coderabbit can summarize the migration scripts to help.&lt;br /&gt;
&lt;br /&gt;
We also have to analyze 2packs. We havo to know what to check in the 2Pack and in the SQL. (E.g. validations that lead to a password table or such.)&lt;br /&gt;
&lt;br /&gt;
We have to think how an mcp takes centralized ids. Norbert proposed to have a dry-run before you really take the ids for your public code.&lt;br /&gt;
&lt;br /&gt;
=== centralized IDs / 2Pack ===&lt;br /&gt;
&lt;br /&gt;
Thomas asked why we do not use 2Pack instead of migration scripts. Carlos wants to talk about that in the friday meeting with Hengsin and Deepak.&lt;br /&gt;
&lt;br /&gt;
Do we want to stop using centralized ids. Hengsin said on matterpost that it may be possible to use uuids in a 2pack to not need centralized ids any more. That needs a ticket to analyze (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
We may change from 2Pack in *.xml to *.yaml. Care about PostgreSQL/Oracle code. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Nicolas says that we have to implement a test to assure that when we change 2Pack that it works in all old versions of iDempiere.&lt;br /&gt;
&lt;br /&gt;
== UI again: json defined  ==&lt;br /&gt;
&lt;br /&gt;
Murilo showed a PoC to use JSON files and a predefined UI definition to automatically create new fields and new UI elements in an iDempiere window. As it is based on json it is very flexible. That was very niced and showed interesting ideas.&lt;br /&gt;
&lt;br /&gt;
Carlos said this may replace the Attribute Set Editor.&lt;br /&gt;
&lt;br /&gt;
We had concerns about performance. Deepak has concerned about search and reports. Carlos says he has concerns about rest filters (they als do not use json fields). json fields have to be searchable because users expect that.&lt;br /&gt;
&lt;br /&gt;
Carlos says that we can use Attribut Set Instance to implement that. That is another approach.&lt;br /&gt;
&lt;br /&gt;
Nicolas talked about where the definitions can be and if they can be overridden. If the schema is defined in column we can override it in field and in customization. We can have a table to define the schemas. We may create schemas based on context. We can create a detail table for this data. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
== AI for business users ==&lt;br /&gt;
&lt;br /&gt;
Thomas wanted to talk about how to use AI for business cases. Evan has the example that they read their supplier's price lists and read the data into the erp. Thomas uses AI to read incoming order emails.&lt;br /&gt;
&lt;br /&gt;
Another kind of usage is to have an end user interface to gather information and reporting. This can work like a chat window. Thomas has a PoC for a reporting window and Norbert has also a nice working solution in the quickinfo panel.&lt;br /&gt;
&lt;br /&gt;
Up to now there is no common community approach for these things.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= workshop day 2 =&lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
&lt;br /&gt;
We talked about if we want to enforce tickets to be documented. Carlos does not like this idea.&lt;br /&gt;
&lt;br /&gt;
The documentation is now moved from the wiki to docusaurus. Diego explained that we need to strenghten docusaurus because AI likes to read these .md files and it can be our authorative doc for the project. Carlos likes to have a space where users can add things very fast and easy. IT also can be a playfield for not-finished documentation.&lt;br /&gt;
&lt;br /&gt;
Marco and others like the recent changes list shown in the wiki.&lt;br /&gt;
&lt;br /&gt;
Carlos says that google drive may be a better tool for that.&lt;br /&gt;
&lt;br /&gt;
Actions to be taken:&lt;br /&gt;
* We need to discuss to create subfolder in the docusaurus and how to create categories.&lt;br /&gt;
* improve rules for documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== related records ==&lt;br /&gt;
&lt;br /&gt;
This feature is about the detail zoom button.&lt;br /&gt;
&lt;br /&gt;
Norbert has a solution that materializes the lists of related records.&lt;br /&gt;
&lt;br /&gt;
Deepak has a ticket to filter which tables can be zoomed.&lt;br /&gt;
&lt;br /&gt;
Thomas want to filter the list, e.g. to see only orders of the last two years.&lt;br /&gt;
&lt;br /&gt;
We want to open a ticket IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
== pivot print / reporting ==&lt;br /&gt;
&lt;br /&gt;
Deepak has an idea to save the settings of pivot table output. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
He also likes to allow excel templates to define how excel reports look like. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Here we mentioned also the [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates] from Murilo.&lt;br /&gt;
&lt;br /&gt;
== iDempiere fast track ==&lt;br /&gt;
&lt;br /&gt;
Mohamed talked about his first impressions and we discussed how to explain what iDempiere is and how to start working with it. Carlos showed [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post] and talked about what it means.&lt;br /&gt;
&lt;br /&gt;
Mohamed gave the example to show an example of a kanban of requests to show iDempiere as an crm.&lt;br /&gt;
&lt;br /&gt;
One solution is that we want to improve the test data in garden world. (IDEMPIERE-4297 already closed - create a new ticket?) Our ideas were:&lt;br /&gt;
* more data&lt;br /&gt;
* more historic documents to allow reporting&lt;br /&gt;
* print formats are ugly&lt;br /&gt;
* show a logo in reports&lt;br /&gt;
&lt;br /&gt;
Norbert has a script to create random sales and purchase orders.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos wants to contribute data into a seed server but he is not experienced in creating 2packs.&lt;br /&gt;
&lt;br /&gt;
Diego and Rifat offered to find out how we can do that technically. we want to export it as 2pack. Carlos says it can be possible to take the 2pack and create migration scripts later to bring it into seed.&lt;br /&gt;
&lt;br /&gt;
Diego says that iDempiere out of the box is overwhelming for new users.&lt;br /&gt;
&lt;br /&gt;
More test data for all functionality is also demanded for unit tests and to help with bug reporter's test cases. In Compiere theg Garden World data was meant to show every single function in the ERP.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos reminds of his ticket to add more columns for reporting of dimensions like brand, product class, etc. (IDENMPIERE-xxxx ???)&lt;br /&gt;
&lt;br /&gt;
== dynamic validation ==&lt;br /&gt;
&lt;br /&gt;
Evan talked about that his customers can see their invoices through REST and now it can be filtered by an sql term so they can only see their own data.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos sais that in Compiere it is possible to do a list of access tables for customers. He may find documantation about that and create a proposal.&lt;br /&gt;
&lt;br /&gt;
== monitor resource intensive SQL/Process ==&lt;br /&gt;
&lt;br /&gt;
Nicolas proposed that. Now we can use debug to see all queries in the log file. This is hard to work with.&lt;br /&gt;
&lt;br /&gt;
Carlos has increased the log level of postgres to see all queries and its time. That fills your disk very quickly.&lt;br /&gt;
&lt;br /&gt;
Deepak used [https://github.com/darold/pgbadger PgBadger]. This is a good tool.&lt;br /&gt;
&lt;br /&gt;
Juan Carlos has the idea to add a comment in iDempiere with the process id or more data. That may help to find the process that created the sql that you see in Postgres logs.&lt;br /&gt;
&lt;br /&gt;
Carlos sometimes uses a breakpoint in the convert class to find out where in the code a single sql query is done.&lt;br /&gt;
&lt;br /&gt;
In the OSGI console you can set the debug property in iDempiere even in a running production system.&lt;br /&gt;
&lt;br /&gt;
== Load Test ==&lt;br /&gt;
&lt;br /&gt;
Mahmuda says that at Sysnova they have installations with a very big number of concurrent users and they use load balancers. They do load tests and she wants to talk about that.&lt;br /&gt;
&lt;br /&gt;
We can use REST to do mass documents.&lt;br /&gt;
&lt;br /&gt;
to use JMeter you have to start the server so that it creates fixed ids. There is a jvm variable to switch that on.&lt;br /&gt;
&lt;br /&gt;
Carlos says there is a problem with a sequences lock. If you create too many documents cuncurrently it breaks after 2 minutes. A solution for that is to use uuid as document numbers. There is already an open ticket for that (IDEMPIERE-xxxx ???).&lt;br /&gt;
&lt;br /&gt;
== playwright ==&lt;br /&gt;
&lt;br /&gt;
https://playwright.dev/ works similar like selenium.&lt;br /&gt;
&lt;br /&gt;
With fixed ids in zk it works much faster. When Thomas aked why these are not used by default Carlos explains two reasons: zk is slower because it has to call a function in iDempiere's model to create the id. And second there may be collisions when two components accidentally create the same id. If this happens it is a bug but not all of them are solved.&lt;br /&gt;
&lt;br /&gt;
Murilo showed his screenshot runner: https://github.com/muriloht/idempiere-screenshot-runner&lt;br /&gt;
&lt;br /&gt;
Diego uses PlayWright a lot. He proposes to move all test cases to playwright. We can try that on a test server with fixed zk ids. IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Noone wants to use fitnesse any more.&lt;br /&gt;
&lt;br /&gt;
== semantic layer ==&lt;br /&gt;
&lt;br /&gt;
Thomas and Norbert did talks in the conference about a similar concept. Mahmuda also likes that.&lt;br /&gt;
&lt;br /&gt;
Thomas said that it will be good to agree on a set of dimensions and facts to work with. That helps to unify reporting and also helps AI when we add that to the official documentation.&lt;br /&gt;
&lt;br /&gt;
We like to add materialized views IDEMPIERE-xxxx&lt;br /&gt;
&lt;br /&gt;
Juan Carlos wants to add the possibility to create a &amp;quot;materialized&amp;quot; table on another postgres server.&lt;br /&gt;
&lt;br /&gt;
== MCP ==&lt;br /&gt;
&lt;br /&gt;
There are projects for mcp for developers and for users. internal/external. We do not like this naming.&lt;br /&gt;
&lt;br /&gt;
== framework ==&lt;br /&gt;
&lt;br /&gt;
What is the idempiere framework and what not?&lt;br /&gt;
&lt;br /&gt;
Carlos explained which work has to be done to take more things out of core. There is still a lot of work to do. For example we need different installers (using for example profiles). It will also make contributions harder if we split the codebase into several repositories.&lt;br /&gt;
&lt;br /&gt;
Diego showed some work he did in a group of people based on starting ideas from Murilo to define the things that belong to a framework.&lt;br /&gt;
&lt;br /&gt;
Carlos counted which tables are part of the framework like users, countries, sessions, etc. It is hard to split columns inside tables.&lt;br /&gt;
&lt;br /&gt;
Simpler is to extract is jasperreports or the report engine.&lt;br /&gt;
&lt;br /&gt;
=== Marketing ===&lt;br /&gt;
&lt;br /&gt;
At some point we should find a better name for iDempiere as a framework.&lt;br /&gt;
  &lt;br /&gt;
== Excel export has problems with number ==&lt;br /&gt;
&lt;br /&gt;
There is a bug in the excel export so that it does not create numbers in the number format but as text.&lt;br /&gt;
&lt;br /&gt;
Mahmuda reported this bug and Thomas had also seen it. We could not reproduce it here in the workshop. So we think it must be solved already and the bug was in iDempiere 11 and vefore.&lt;br /&gt;
&lt;br /&gt;
We use [https://keikai.io/ Keikai] for our internal spreadsheet report. We realized that in the actual version the reports in KeiKai (the included spreadsheet in the report window) are read-only. Diego says according to the ticket from Hengsin this is by intention. The spreadsheet inside InfoWindows is writable. Carlos idea is to make that configurable.&lt;br /&gt;
&lt;br /&gt;
== closing orders in batch ==&lt;br /&gt;
&lt;br /&gt;
Mahmuda asked how we do that. We showed the process &amp;quot;order batch process&amp;quot; that can get parameters to filter documents and close them. As an alternative we showed an InfoWindow that allows to filter documents manually and then runs a process to close.&lt;br /&gt;
&lt;br /&gt;
== consignment ==&lt;br /&gt;
&lt;br /&gt;
== How to get help from the community ==&lt;br /&gt;
&lt;br /&gt;
Carlos talked about how to ask questions in mattermost and forums.&lt;br /&gt;
&lt;br /&gt;
https://www.catb.org/~esr/faqs/smart-questions.html&lt;br /&gt;
&lt;br /&gt;
== Widgets and Quick Info ==&lt;br /&gt;
&lt;br /&gt;
Diego did a place in Docusaurus with a list of 2Packs. These widgets are a smart way to do some things and here we can share them.&lt;br /&gt;
&lt;br /&gt;
https://docs.idempiere.org/docs/category/widgets--quick-info&lt;br /&gt;
&lt;br /&gt;
== MFG 2 ==&lt;br /&gt;
&lt;br /&gt;
Some people of the community plan to work on manufacturing 2. They are in a mattermost channel.&lt;br /&gt;
&lt;br /&gt;
== BI mattermost channel ==&lt;br /&gt;
&lt;br /&gt;
There is a new channel for the BI interest group.&lt;br /&gt;
&lt;br /&gt;
== How to use Skills / How to work with claude code ==&lt;br /&gt;
&lt;br /&gt;
Markus did a demonstration for Carlos and us how he uses ai skills.&lt;br /&gt;
&lt;br /&gt;
There is a starting point for skills to work with iDempiere from hengsin: https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
There is also an mcp server to access data from an iDempiere Server: https://github.com/hengsin/idempiere-mcp/&lt;br /&gt;
&lt;br /&gt;
Carlos and Thomas were interested how to set up guardrails for AI.&lt;br /&gt;
&lt;br /&gt;
Diego showed us how the skills work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;br /&gt;
[[Category:Meetings 2026]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=24075</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=24075"/>
		<updated>2026-09-21T17:40:54Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-09-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6571 IDEMPIERE-6571] Disable stock reservation for order if shipment is not autogenerated [https://github.com/idempiere/idempiere/pull/3361 (#3361)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6968 IDEMPIERE-6968] NPE in FavoriteSimpleTreeModel.render() when role lacks window access [https://github.com/idempiere/idempiere/pull/3364 (#3364)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7101 IDEMPIERE-7101] Infinite loop in workflow approval user search [https://github.com/idempiere/idempiere/pull/3362 (#3362)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7103 IDEMPIERE-7103] CSV Import fails with WrongDataType on &amp;quot;Timestamp with Time Zone&amp;quot; columns [https://github.com/idempiere/idempiere/pull/3365 (#3365)]&lt;br /&gt;
&lt;br /&gt;
== 2026-09-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6571 IDEMPIERE-6571] Disable stock reservation for order if shipment is not autogenerated - fix reservation, weight, volume issues [https://github.com/idempiere/idempiere/pull/3358 (#3358)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7085 IDEMPIERE-7085] Poor performance in Match Invoice Posting [https://github.com/idempiere/idempiere/pull/3340 (#3340)]&lt;br /&gt;
&lt;br /&gt;
== 2026-09-07 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7036 IDEMPIERE-7036] Add optional presigned-URL capability to IArchiveStore SPI [https://github.com/idempiere/idempiere/pull/3285 (#3285)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7054 IDEMPIERE-7054] Add optional presigned-URL capability to IAttachmentStore SPI [https://github.com/idempiere/idempiere/pull/3295 (#3295)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7070 IDEMPIERE-7070] Make report content generation extensible through OSGi [https://github.com/idempiere/idempiere/pull/3318 (#3318)] [https://github.com/idempiere/idempiere/pull/3349 (#3349)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7096 IDEMPIERE-7096] CSV import template record save issue when use /KT for single [https://github.com/idempiere/idempiere/pull/3353 (#3353)]&lt;br /&gt;
&lt;br /&gt;
== 2026-09-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6960 IDEMPIERE-6960] Back-dated costing incorrectly updates other lots when Costing Level = Batch/Lot [https://github.com/idempiere/idempiere/pull/3322 (#3322)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7046 IDEMPIERE-7046] Cost Adjustment Line should only fill up ASI when costing level is batch/lot [https://github.com/idempiere/idempiere/pull/3289 (#3289)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7067 IDEMPIERE-7067] Make sure Record_UU is not empty before executing the query to search related records [https://github.com/idempiere/idempiere/pull/3315 (#3315)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7069 IDEMPIERE-7069] Inclusive Pricelist with Summary Tax should be allowed when a custom Tax Provider is used [https://github.com/idempiere/idempiere/pull/3317 (#3317)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7075 IDEMPIERE-7075] Fix reservations for over-receipt reversals [https://github.com/idempiere/idempiere/pull/3327 (#3327)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7077 IDEMPIERE-7077] Set correct mime-type for email attachments [https://github.com/idempiere/idempiere/pull/3326 (#3326)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7087 IDEMPIERE-7087] Process button in tab is not self-explanatory [https://github.com/idempiere/idempiere/pull/3342 (#3342)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7076 IDEMPIERE-7076] Implement Same Logic on 4768 to Movement [https://github.com/idempiere/idempiere/pull/3325 (#3325)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3320 (#3320)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7045 IDEMPIERE-7045] Implement OSGi component support for WEditor.DynamicDisplayListener [https://github.com/idempiere/idempiere/pull/3288 (#3288)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7062 IDEMPIERE-7062] Sales Order changing documentNo even when the sequence is the same [https://github.com/idempiere/idempiere/pull/3308 (#3308)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7065 IDEMPIERE-7065] Allow requests without initial SalesRep [https://github.com/idempiere/idempiere/pull/3313 (#3313)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7066 IDEMPIERE-7066] Import process should fill UU columns [https://github.com/idempiere/idempiere/pull/3314 (#3314)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7068 IDEMPIERE-7068] Quick Entry broken for new parent record [https://github.com/idempiere/idempiere/pull/3316 (#3316)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7071 IDEMPIERE-7071] Menu search was trimmed until release-12 [https://github.com/idempiere/idempiere/pull/3319 (#3319)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6732 IDEMPIERE-6732] Prevent Multiple Receipt Generation from the Same Invoice [https://github.com/idempiere/idempiere/pull/2983 (#2983)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6893 IDEMPIERE-6893] Form Customization [https://github.com/idempiere/idempiere/pull/3167 (#3167)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6952 IDEMPIERE-6952] Fix Open transaction when OFX1ToXML parsing fails [https://github.com/idempiere/idempiere/pull/3215 (#3215)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6973 IDEMPIERE-6973] Incorrect average PO cost (&amp;lt;&amp;gt; GL amount) after reverse/correct of Landed Cost Invoice with multiple lines [https://github.com/idempiere/idempiere/pull/3281 (#3281)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6993 IDEMPIERE-6993] Match Invoice wrong GL account and posting [https://github.com/idempiere/idempiere/pull/3283 (#3283)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7015 IDEMPIERE-7015] Sort open transactions by StartTime in ascending order [https://github.com/idempiere/idempiere/pull/3270 (#3270)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7037 IDEMPIERE-7037] New Process Copy Window Customization [https://github.com/idempiere/idempiere/pull/3284 (#3284)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7038 IDEMPIERE-7038] iDempiere master/release-13 not compatible with Eclipse 2026-06 [https://github.com/idempiere/idempiere/pull/3286 (#3286)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7039 IDEMPIERE-7039] Improve Migrate Storage Provider error handling and reporting [https://github.com/idempiere/idempiere/pull/3300 (#3300)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7047 IDEMPIERE-7047] RMA: Shipment Callout to Set Business Partner field [https://github.com/idempiere/idempiere/pull/3290 (#3290)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7048 IDEMPIERE-7048] Improve Load Template button in Send Mail dialog [https://github.com/idempiere/idempiere/pull/3291 (#3291)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7051 IDEMPIERE-7051] Move Doc_AllocationHdr.equalFactLineIDs to FactLine in order to be used elsewhere [https://github.com/idempiere/idempiere/pull/3292 (#3292)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7055 IDEMPIERE-7055] Improve Copy Order Process Error Messaging [https://github.com/idempiere/idempiere/pull/3298 (#3298)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7056 IDEMPIERE-7056] Use setClob() for large strings on Oracle to avoid ORA-18717 with Oracle JDBC 23 [https://github.com/idempiere/idempiere/pull/3299 (#3299)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7059 IDEMPIERE-7059] Scheduler window should be restricted to Advanced Users only [https://github.com/idempiere/idempiere/pull/3302 (#3302)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7060 IDEMPIERE-7060] Redesign Forgot Password flow [https://github.com/idempiere/idempiere/pull/3303 (#3303)]&lt;br /&gt;
&lt;br /&gt;
== 2026-06-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6832 IDEMPIERE-6832] Average PO Costing Qty &amp;lt;&amp;gt; Stock Qty [https://github.com/idempiere/idempiere/pull/3205 (#3205)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7011 IDEMPIERE-7011] Storage Validator OSGI Service [https://github.com/idempiere/idempiere/pull/3269 (#3269)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7019 IDEMPIERE-7019]: Add currency for Chilean Unidad de Fomento [https://github.com/idempiere/idempiere/pull/3275 (#3275)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7022 IDEMPIERE-7022]: AllocationReset : error message not explicit when commit fails [https://github.com/idempiere/idempiere/pull/3277 (#3277)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7025 IDEMPIERE-7025] Requests &amp;gt; Update Notification is showing and notifying inactive users [https://github.com/idempiere/idempiere/pull/3282 (#3282)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] DBA - Tuning AD_Attachment (FHCA-3962) [https://github.com/idempiere/idempiere/pull/3271 (#3271)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24065</id>
		<title>IDempiere workshop 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_workshop_2026&amp;diff=24065"/>
		<updated>2026-09-19T07:15:06Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: mm channels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Brainstorming =&lt;br /&gt;
&lt;br /&gt;
At the beginning of the workshop we did a brainstorming about things to talk about in the workshop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AI: ==&lt;br /&gt;
* AI for users&lt;br /&gt;
* Security&lt;br /&gt;
* Guardrails&lt;br /&gt;
* Skills/MCP for documentation&lt;br /&gt;
&lt;br /&gt;
== Howto ==&lt;br /&gt;
* write documentation (with ai)&lt;br /&gt;
* write unit tests&lt;br /&gt;
* monitor state of sql queries, processes, database&lt;br /&gt;
* load tests&lt;br /&gt;
* fitnesse/playwright (zk fixed ids?)&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
* integrate zk into iDempiere&lt;br /&gt;
* better theme support&lt;br /&gt;
* Marble theme&lt;br /&gt;
* free new components&lt;br /&gt;
* Murilo’s improvements to his UI&lt;br /&gt;
&lt;br /&gt;
== POS interest group ==&lt;br /&gt;
&lt;br /&gt;
== BI ==&lt;br /&gt;
* semantic layer for reporting&lt;br /&gt;
* HTML support in a PrintFormat (Murilo advises his FreeMarker solution for that)&lt;br /&gt;
* Pivot print persists&lt;br /&gt;
* XLS export as numbers (instead of formula)&lt;br /&gt;
* internal/external MCP&lt;br /&gt;
&lt;br /&gt;
== functional ==&lt;br /&gt;
* MFG II manufacturing - capacity planning&lt;br /&gt;
* iDempiere as a framework&lt;br /&gt;
* close orders/documents as a process or in a info window&lt;br /&gt;
* plugin versus core&lt;br /&gt;
&lt;br /&gt;
== marketing ==&lt;br /&gt;
* iDempiere fast track - demystification [https://idempiere.org/blog/2025/06/04/demystifying-idempiere-understanding-what-it-is-and-who-its-for/ Crispians blog post]&lt;br /&gt;
* product versus project&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= work =&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
&lt;br /&gt;
What do we need to do to implement marble or other themes?&lt;br /&gt;
&lt;br /&gt;
Carlos: We mixed css inside java. Murilo has done work in this area. Norbert wants to define ui in json. He has an example where he uses badges or other zk view components. We discussed if there is a way and if it is useful to mix the application and and json. What Carlos takes out is that he wants a field not shown as one of our fixed  components (e.g. a number as a text field) but in another way (as a progress bar or so). Thomas example of the cards in his logistics board is similiar and already can be done using the html field. For Norberts case we want a json typ field attached to a json schema ([https://idempiere.atlassian.net/browse/IDEMPIERE-6059 IDEMPIERE-6059]).&lt;br /&gt;
&lt;br /&gt;
Norbert also likes to improve the tag (label) functionality. tags are not shown in the normal data window. Carlos said the same is true for PostIts.&lt;br /&gt;
&lt;br /&gt;
Carlos says the first step is to enable to use themes (css). ([https://idempiere.atlassian.net/browse/IDEMPIERE-7105 IDEMPIERE-7105]) clean up the code. Norbert thinks that can be automated by ai.&lt;br /&gt;
&lt;br /&gt;
Second step is: How can we enable easily layout changes in the UI. (zul) (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Try to cover the components zk gives us.&lt;br /&gt;
&lt;br /&gt;
Mohamed asked what is the goal of this work - the goal is to empower users in a ux group to have the flexibility to change the ui and ux as they like.&lt;br /&gt;
&lt;br /&gt;
Murilo did a demonstration of the UI/UX of an implementation he did. Most of his work was done as forms and so can not be used for all windows or for community but it showed nicely what is possible.&lt;br /&gt;
&lt;br /&gt;
He also showed his [https://github.com/muriloht/idempiere-print-template plugin for freemarker templates]. It is an easy way to create very nice reports in html and pdf.&lt;br /&gt;
&lt;br /&gt;
(btw... Thomas did something similar [https://github.com/ThomasBayen/de.bxservice.bxjasperbridge using JasperReports] but what Murilo did seems more matured and at the end more powerful. If you prefer to work with JapserReports to be able to edit the reports in Jasper Studio you can have a look at it.)&lt;br /&gt;
&lt;br /&gt;
He also showed a nice workflow to create freemarker forms using ai. Murilo wanted to add an ai interface later to do that automatically. Markus Bozem said we need an plugin to provide an ai interface. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Mahmuda (from Sysnova) started a discussion to create an UI/UX user group and a mattermost channel for it. She wants to lead this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/uiux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== small issues before the break ==&lt;br /&gt;
&lt;br /&gt;
We talked about some small things from the list:&lt;br /&gt;
&lt;br /&gt;
=== manufacturing ===&lt;br /&gt;
* Manufacturing: Deepak, Zuri, Peter had a kind of group to be in charge of libero manufacturing. They have to create one single joined version and make it compatible with vanilla iDempiere. Mahmuda wants to join this group. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/mfg&lt;br /&gt;
&lt;br /&gt;
=== POS group ===&lt;br /&gt;
* an POS group can be build seperately because in this workshop most people are not interested in this theme. NOTE: Carlos suggests to add a mattermost channel -&amp;gt; https://mattermost.idempiere.org/idempiere/channels/pos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
&lt;br /&gt;
Hengsin asked to enable developers to use Vibe Coding to create code. We discussed about the definition of vibe coding. &lt;br /&gt;
&lt;br /&gt;
Hengsin builded a small number of developer skills in the past. https://github.com/hengsin/idempiere-skills&lt;br /&gt;
&lt;br /&gt;
Markus Bozem wants to create skills and write all informations about idempiere conventions in coding. Norbert added that we need also mcp files that may be based on skills.&lt;br /&gt;
&lt;br /&gt;
For example an skill that creates a new column can get a description to look into the database to identify patterns to create new columns.&lt;br /&gt;
&lt;br /&gt;
Mahmuda did a picture to show us a possible layaered approach to get skills.&lt;br /&gt;
&lt;br /&gt;
* An MCP Layer&lt;br /&gt;
* idempiere core knowlwedge&lt;br /&gt;
* Vibe Coding Chats, including user skills&lt;br /&gt;
* a human in the loop&lt;br /&gt;
* published&lt;br /&gt;
inbetween each layer we need security.&lt;br /&gt;
&lt;br /&gt;
Murilo talked about someone who uses a separate webservice to access iDempiere through rest interfaces that uses like skills.&lt;br /&gt;
&lt;br /&gt;
Mahmuda explains how generic AI and agentic AI can work here. The agenticv AI get information from *.md files, RAG (rules, knowledge database) and a data repository. You can have several LLMs using that like hiring employees. Then you need an &amp;quot;HR-UI&amp;quot; that gives guard rails to the agents and looks over them.&lt;br /&gt;
&lt;br /&gt;
We should care to see where we need an mcp and where skills.&lt;br /&gt;
&lt;br /&gt;
We do need a common repository with skills and mcps.&lt;br /&gt;
&lt;br /&gt;
Carlos wanted to talk about migration scripts. They are very hard to review. An idea is if coderabbit can summarize the migration scripts to help.&lt;br /&gt;
&lt;br /&gt;
We also have to analyze 2packs. We havo to know what to check in the 2Pack and in the SQL. (E.g. validations that lead to a password table or such.)&lt;br /&gt;
&lt;br /&gt;
We have to think how an mcp takes centralized ids. Norbert proposed to have a dry-run before you really take the ids for your public code.&lt;br /&gt;
&lt;br /&gt;
=== centralized IDs / 2Pack ===&lt;br /&gt;
&lt;br /&gt;
Thomas asked why we do not use 2Pack instead of migration scripts. Carlos wants to talk about that in the friday meeting with Hengsin and Deepak.&lt;br /&gt;
&lt;br /&gt;
Do we want to stop using centralized ids. Hengsin said on matterpost that it may be possible to use uuids in a 2pack to not need centralized ids any more. That needs a ticket to analyze (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
We may change from 2Pack in *.xml to *.yaml. Care about PostgreSQL/Oracle code. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
Nicolas says that we have to implement a test to assure that when we change 2Pack that it works in all old versions of iDempiere.&lt;br /&gt;
&lt;br /&gt;
== UI again: json defined  ==&lt;br /&gt;
&lt;br /&gt;
Murilo showed a PoC to use JSON files and a predefined UI definition to automatically create new fields and new UI elements in an iDempiere window. As it is based on json it is very flexible. That was very niced and showed interesting ideas.&lt;br /&gt;
&lt;br /&gt;
Carlos said this may replace the Attribute Set Editor.&lt;br /&gt;
&lt;br /&gt;
We had concerns about performance. Deepak has concerned about search and reports. Carlos says he has concerns about rest filters (they als do not use json fields). json fields have to be searchable because users expect that.&lt;br /&gt;
&lt;br /&gt;
Carlos says that we can use Attribut Set Instance to implement that. That is another approach.&lt;br /&gt;
&lt;br /&gt;
Nicolas talked about where the definitions can be and if they can be overridden. If the schema is defined in column we can override it in field and in customization. We can have a table to define the schemas. We may create schemas based on context. We can create a detail table for this data. (IDEMPIERE-xxxx)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;br /&gt;
[[Category:Meetings 2026]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=24041</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=24041"/>
		<updated>2026-09-10T10:25:08Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-09-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6571 IDEMPIERE-6571] Disable stock reservation for order if shipment is not autogenerated - fix reservation, weight, volume issues [https://github.com/idempiere/idempiere/pull/3358 (#3358)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7085 IDEMPIERE-7085] Poor performance in Match Invoice Posting [https://github.com/idempiere/idempiere/pull/3340 (#3340)]&lt;br /&gt;
&lt;br /&gt;
== 2026-09-07 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7036 IDEMPIERE-7036] Add optional presigned-URL capability to IArchiveStore SPI [https://github.com/idempiere/idempiere/pull/3285 (#3285)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7054 IDEMPIERE-7054] Add optional presigned-URL capability to IAttachmentStore SPI [https://github.com/idempiere/idempiere/pull/3295 (#3295)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7070 IDEMPIERE-7070] Make report content generation extensible through OSGi [https://github.com/idempiere/idempiere/pull/3318 (#3318)] [https://github.com/idempiere/idempiere/pull/3349 (#3349)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7096 IDEMPIERE-7096] CSV import template record save issue when use /KT for single [https://github.com/idempiere/idempiere/pull/3353 (#3353)]&lt;br /&gt;
&lt;br /&gt;
== 2026-09-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6960 IDEMPIERE-6960] Back-dated costing incorrectly updates other lots when Costing Level = Batch/Lot [https://github.com/idempiere/idempiere/pull/3322 (#3322)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7046 IDEMPIERE-7046] Cost Adjustment Line should only fill up ASI when costing level is batch/lot [https://github.com/idempiere/idempiere/pull/3289 (#3289)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7067 IDEMPIERE-7067] Make sure Record_UU is not empty before executing the query to search related records [https://github.com/idempiere/idempiere/pull/3315 (#3315)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7069 IDEMPIERE-7069] Inclusive Pricelist with Summary Tax should be allowed when a custom Tax Provider is used [https://github.com/idempiere/idempiere/pull/3317 (#3317)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7075 IDEMPIERE-7075] Fix reservations for over-receipt reversals [https://github.com/idempiere/idempiere/pull/3327 (#3327)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7077 IDEMPIERE-7077] Set correct mime-type for email attachments [https://github.com/idempiere/idempiere/pull/3326 (#3326)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7087 IDEMPIERE-7087] Process button in tab is not self-explanatory [https://github.com/idempiere/idempiere/pull/3342 (#3342)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7076 IDEMPIERE-7076] Implement Same Logic on 4768 to Movement [https://github.com/idempiere/idempiere/pull/3325 (#3325)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3320 (#3320)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7045 IDEMPIERE-7045] Implement OSGi component support for WEditor.DynamicDisplayListener [https://github.com/idempiere/idempiere/pull/3288 (#3288)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7062 IDEMPIERE-7062] Sales Order changing documentNo even when the sequence is the same [https://github.com/idempiere/idempiere/pull/3308 (#3308)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7065 IDEMPIERE-7065] Allow requests without initial SalesRep [https://github.com/idempiere/idempiere/pull/3313 (#3313)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7066 IDEMPIERE-7066] Import process should fill UU columns [https://github.com/idempiere/idempiere/pull/3314 (#3314)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7068 IDEMPIERE-7068] Quick Entry broken for new parent record [https://github.com/idempiere/idempiere/pull/3316 (#3316)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7071 IDEMPIERE-7071] Menu search was trimmed until release-12 [https://github.com/idempiere/idempiere/pull/3319 (#3319)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6732 IDEMPIERE-6732] Prevent Multiple Receipt Generation from the Same Invoice [https://github.com/idempiere/idempiere/pull/2983 (#2983)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6893 IDEMPIERE-6893] Form Customization [https://github.com/idempiere/idempiere/pull/3167 (#3167)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6952 IDEMPIERE-6952] Fix Open transaction when OFX1ToXML parsing fails [https://github.com/idempiere/idempiere/pull/3215 (#3215)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6973 IDEMPIERE-6973] Incorrect average PO cost (&amp;lt;&amp;gt; GL amount) after reverse/correct of Landed Cost Invoice with multiple lines [https://github.com/idempiere/idempiere/pull/3281 (#3281)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6993 IDEMPIERE-6993] Match Invoice wrong GL account and posting [https://github.com/idempiere/idempiere/pull/3283 (#3283)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7015 IDEMPIERE-7015] Sort open transactions by StartTime in ascending order [https://github.com/idempiere/idempiere/pull/3270 (#3270)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7037 IDEMPIERE-7037] New Process Copy Window Customization [https://github.com/idempiere/idempiere/pull/3284 (#3284)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7038 IDEMPIERE-7038] iDempiere master/release-13 not compatible with Eclipse 2026-06 [https://github.com/idempiere/idempiere/pull/3286 (#3286)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7039 IDEMPIERE-7039] Improve Migrate Storage Provider error handling and reporting [https://github.com/idempiere/idempiere/pull/3300 (#3300)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7047 IDEMPIERE-7047] RMA: Shipment Callout to Set Business Partner field [https://github.com/idempiere/idempiere/pull/3290 (#3290)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7048 IDEMPIERE-7048] Improve Load Template button in Send Mail dialog [https://github.com/idempiere/idempiere/pull/3291 (#3291)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7051 IDEMPIERE-7051] Move Doc_AllocationHdr.equalFactLineIDs to FactLine in order to be used elsewhere [https://github.com/idempiere/idempiere/pull/3292 (#3292)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7055 IDEMPIERE-7055] Improve Copy Order Process Error Messaging [https://github.com/idempiere/idempiere/pull/3298 (#3298)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7056 IDEMPIERE-7056] Use setClob() for large strings on Oracle to avoid ORA-18717 with Oracle JDBC 23 [https://github.com/idempiere/idempiere/pull/3299 (#3299)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7059 IDEMPIERE-7059] Scheduler window should be restricted to Advanced Users only [https://github.com/idempiere/idempiere/pull/3302 (#3302)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7060 IDEMPIERE-7060] Redesign Forgot Password flow [https://github.com/idempiere/idempiere/pull/3303 (#3303)]&lt;br /&gt;
&lt;br /&gt;
== 2026-06-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6832 IDEMPIERE-6832] Average PO Costing Qty &amp;lt;&amp;gt; Stock Qty [https://github.com/idempiere/idempiere/pull/3205 (#3205)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7011 IDEMPIERE-7011] Storage Validator OSGI Service [https://github.com/idempiere/idempiere/pull/3269 (#3269)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7019 IDEMPIERE-7019]: Add currency for Chilean Unidad de Fomento [https://github.com/idempiere/idempiere/pull/3275 (#3275)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7022 IDEMPIERE-7022]: AllocationReset : error message not explicit when commit fails [https://github.com/idempiere/idempiere/pull/3277 (#3277)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7025 IDEMPIERE-7025] Requests &amp;gt; Update Notification is showing and notifying inactive users [https://github.com/idempiere/idempiere/pull/3282 (#3282)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] DBA - Tuning AD_Attachment (FHCA-3962) [https://github.com/idempiere/idempiere/pull/3271 (#3271)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=24039</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=24039"/>
		<updated>2026-09-07T13:46:32Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-09-07 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7036 IDEMPIERE-7036] Add optional presigned-URL capability to IArchiveStore SPI [https://github.com/idempiere/idempiere/pull/3285 (#3285)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7054 IDEMPIERE-7054] Add optional presigned-URL capability to IAttachmentStore SPI [https://github.com/idempiere/idempiere/pull/3295 (#3295)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7070 IDEMPIERE-7070] Make report content generation extensible through OSGi [https://github.com/idempiere/idempiere/pull/3318 (#3318)] [https://github.com/idempiere/idempiere/pull/3349 (#3349)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7096 IDEMPIERE-7096] CSV import template record save issue when use /KT for single [https://github.com/idempiere/idempiere/pull/3353 (#3353)]&lt;br /&gt;
&lt;br /&gt;
== 2026-09-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6960 IDEMPIERE-6960] Back-dated costing incorrectly updates other lots when Costing Level = Batch/Lot [https://github.com/idempiere/idempiere/pull/3322 (#3322)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7046 IDEMPIERE-7046] Cost Adjustment Line should only fill up ASI when costing level is batch/lot [https://github.com/idempiere/idempiere/pull/3289 (#3289)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7067 IDEMPIERE-7067] Make sure Record_UU is not empty before executing the query to search related records [https://github.com/idempiere/idempiere/pull/3315 (#3315)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7069 IDEMPIERE-7069] Inclusive Pricelist with Summary Tax should be allowed when a custom Tax Provider is used [https://github.com/idempiere/idempiere/pull/3317 (#3317)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7075 IDEMPIERE-7075] Fix reservations for over-receipt reversals [https://github.com/idempiere/idempiere/pull/3327 (#3327)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7077 IDEMPIERE-7077] Set correct mime-type for email attachments [https://github.com/idempiere/idempiere/pull/3326 (#3326)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7087 IDEMPIERE-7087] Process button in tab is not self-explanatory [https://github.com/idempiere/idempiere/pull/3342 (#3342)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7076 IDEMPIERE-7076] Implement Same Logic on 4768 to Movement [https://github.com/idempiere/idempiere/pull/3325 (#3325)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3320 (#3320)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7045 IDEMPIERE-7045] Implement OSGi component support for WEditor.DynamicDisplayListener [https://github.com/idempiere/idempiere/pull/3288 (#3288)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7062 IDEMPIERE-7062] Sales Order changing documentNo even when the sequence is the same [https://github.com/idempiere/idempiere/pull/3308 (#3308)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7065 IDEMPIERE-7065] Allow requests without initial SalesRep [https://github.com/idempiere/idempiere/pull/3313 (#3313)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7066 IDEMPIERE-7066] Import process should fill UU columns [https://github.com/idempiere/idempiere/pull/3314 (#3314)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7068 IDEMPIERE-7068] Quick Entry broken for new parent record [https://github.com/idempiere/idempiere/pull/3316 (#3316)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7071 IDEMPIERE-7071] Menu search was trimmed until release-12 [https://github.com/idempiere/idempiere/pull/3319 (#3319)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6732 IDEMPIERE-6732] Prevent Multiple Receipt Generation from the Same Invoice [https://github.com/idempiere/idempiere/pull/2983 (#2983)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6893 IDEMPIERE-6893] Form Customization [https://github.com/idempiere/idempiere/pull/3167 (#3167)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6952 IDEMPIERE-6952] Fix Open transaction when OFX1ToXML parsing fails [https://github.com/idempiere/idempiere/pull/3215 (#3215)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6973 IDEMPIERE-6973] Incorrect average PO cost (&amp;lt;&amp;gt; GL amount) after reverse/correct of Landed Cost Invoice with multiple lines [https://github.com/idempiere/idempiere/pull/3281 (#3281)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6993 IDEMPIERE-6993] Match Invoice wrong GL account and posting [https://github.com/idempiere/idempiere/pull/3283 (#3283)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7015 IDEMPIERE-7015] Sort open transactions by StartTime in ascending order [https://github.com/idempiere/idempiere/pull/3270 (#3270)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7037 IDEMPIERE-7037] New Process Copy Window Customization [https://github.com/idempiere/idempiere/pull/3284 (#3284)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7038 IDEMPIERE-7038] iDempiere master/release-13 not compatible with Eclipse 2026-06 [https://github.com/idempiere/idempiere/pull/3286 (#3286)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7039 IDEMPIERE-7039] Improve Migrate Storage Provider error handling and reporting [https://github.com/idempiere/idempiere/pull/3300 (#3300)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7047 IDEMPIERE-7047] RMA: Shipment Callout to Set Business Partner field [https://github.com/idempiere/idempiere/pull/3290 (#3290)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7048 IDEMPIERE-7048] Improve Load Template button in Send Mail dialog [https://github.com/idempiere/idempiere/pull/3291 (#3291)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7051 IDEMPIERE-7051] Move Doc_AllocationHdr.equalFactLineIDs to FactLine in order to be used elsewhere [https://github.com/idempiere/idempiere/pull/3292 (#3292)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7055 IDEMPIERE-7055] Improve Copy Order Process Error Messaging [https://github.com/idempiere/idempiere/pull/3298 (#3298)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7056 IDEMPIERE-7056] Use setClob() for large strings on Oracle to avoid ORA-18717 with Oracle JDBC 23 [https://github.com/idempiere/idempiere/pull/3299 (#3299)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7059 IDEMPIERE-7059] Scheduler window should be restricted to Advanced Users only [https://github.com/idempiere/idempiere/pull/3302 (#3302)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7060 IDEMPIERE-7060] Redesign Forgot Password flow [https://github.com/idempiere/idempiere/pull/3303 (#3303)]&lt;br /&gt;
&lt;br /&gt;
== 2026-06-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6832 IDEMPIERE-6832] Average PO Costing Qty &amp;lt;&amp;gt; Stock Qty [https://github.com/idempiere/idempiere/pull/3205 (#3205)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7011 IDEMPIERE-7011] Storage Validator OSGI Service [https://github.com/idempiere/idempiere/pull/3269 (#3269)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7019 IDEMPIERE-7019]: Add currency for Chilean Unidad de Fomento [https://github.com/idempiere/idempiere/pull/3275 (#3275)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7022 IDEMPIERE-7022]: AllocationReset : error message not explicit when commit fails [https://github.com/idempiere/idempiere/pull/3277 (#3277)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7025 IDEMPIERE-7025] Requests &amp;gt; Update Notification is showing and notifying inactive users [https://github.com/idempiere/idempiere/pull/3282 (#3282)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] DBA - Tuning AD_Attachment (FHCA-3962) [https://github.com/idempiere/idempiere/pull/3271 (#3271)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=24038</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=24038"/>
		<updated>2026-09-04T11:49:21Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-09-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6960 IDEMPIERE-6960] Back-dated costing incorrectly updates other lots when Costing Level = Batch/Lot [https://github.com/idempiere/idempiere/pull/3322 (#3322)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7046 IDEMPIERE-7046] Cost Adjustment Line should only fill up ASI when costing level is batch/lot [https://github.com/idempiere/idempiere/pull/3289 (#3289)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7067 IDEMPIERE-7067] Make sure Record_UU is not empty before executing the query to search related records [https://github.com/idempiere/idempiere/pull/3315 (#3315)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7069 IDEMPIERE-7069] Inclusive Pricelist with Summary Tax should be allowed when a custom Tax Provider is used [https://github.com/idempiere/idempiere/pull/3317 (#3317)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7075 IDEMPIERE-7075] Fix reservations for over-receipt reversals [https://github.com/idempiere/idempiere/pull/3327 (#3327)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7077 IDEMPIERE-7077] Set correct mime-type for email attachments [https://github.com/idempiere/idempiere/pull/3326 (#3326)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7087 IDEMPIERE-7087] Process button in tab is not self-explanatory [https://github.com/idempiere/idempiere/pull/3342 (#3342)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7076 IDEMPIERE-7076] Implement Same Logic on 4768 to Movement [https://github.com/idempiere/idempiere/pull/3325 (#3325)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3320 (#3320)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7045 IDEMPIERE-7045] Implement OSGi component support for WEditor.DynamicDisplayListener [https://github.com/idempiere/idempiere/pull/3288 (#3288)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7062 IDEMPIERE-7062] Sales Order changing documentNo even when the sequence is the same [https://github.com/idempiere/idempiere/pull/3308 (#3308)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7065 IDEMPIERE-7065] Allow requests without initial SalesRep [https://github.com/idempiere/idempiere/pull/3313 (#3313)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7066 IDEMPIERE-7066] Import process should fill UU columns [https://github.com/idempiere/idempiere/pull/3314 (#3314)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7068 IDEMPIERE-7068] Quick Entry broken for new parent record [https://github.com/idempiere/idempiere/pull/3316 (#3316)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7071 IDEMPIERE-7071] Menu search was trimmed until release-12 [https://github.com/idempiere/idempiere/pull/3319 (#3319)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6732 IDEMPIERE-6732] Prevent Multiple Receipt Generation from the Same Invoice [https://github.com/idempiere/idempiere/pull/2983 (#2983)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6893 IDEMPIERE-6893] Form Customization [https://github.com/idempiere/idempiere/pull/3167 (#3167)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6952 IDEMPIERE-6952] Fix Open transaction when OFX1ToXML parsing fails [https://github.com/idempiere/idempiere/pull/3215 (#3215)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6973 IDEMPIERE-6973] Incorrect average PO cost (&amp;lt;&amp;gt; GL amount) after reverse/correct of Landed Cost Invoice with multiple lines [https://github.com/idempiere/idempiere/pull/3281 (#3281)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6993 IDEMPIERE-6993] Match Invoice wrong GL account and posting [https://github.com/idempiere/idempiere/pull/3283 (#3283)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7015 IDEMPIERE-7015] Sort open transactions by StartTime in ascending order [https://github.com/idempiere/idempiere/pull/3270 (#3270)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7037 IDEMPIERE-7037] New Process Copy Window Customization [https://github.com/idempiere/idempiere/pull/3284 (#3284)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7038 IDEMPIERE-7038] iDempiere master/release-13 not compatible with Eclipse 2026-06 [https://github.com/idempiere/idempiere/pull/3286 (#3286)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7039 IDEMPIERE-7039] Improve Migrate Storage Provider error handling and reporting [https://github.com/idempiere/idempiere/pull/3300 (#3300)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7047 IDEMPIERE-7047] RMA: Shipment Callout to Set Business Partner field [https://github.com/idempiere/idempiere/pull/3290 (#3290)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7048 IDEMPIERE-7048] Improve Load Template button in Send Mail dialog [https://github.com/idempiere/idempiere/pull/3291 (#3291)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7051 IDEMPIERE-7051] Move Doc_AllocationHdr.equalFactLineIDs to FactLine in order to be used elsewhere [https://github.com/idempiere/idempiere/pull/3292 (#3292)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7055 IDEMPIERE-7055] Improve Copy Order Process Error Messaging [https://github.com/idempiere/idempiere/pull/3298 (#3298)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7056 IDEMPIERE-7056] Use setClob() for large strings on Oracle to avoid ORA-18717 with Oracle JDBC 23 [https://github.com/idempiere/idempiere/pull/3299 (#3299)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7059 IDEMPIERE-7059] Scheduler window should be restricted to Advanced Users only [https://github.com/idempiere/idempiere/pull/3302 (#3302)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7060 IDEMPIERE-7060] Redesign Forgot Password flow [https://github.com/idempiere/idempiere/pull/3303 (#3303)]&lt;br /&gt;
&lt;br /&gt;
== 2026-06-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6832 IDEMPIERE-6832] Average PO Costing Qty &amp;lt;&amp;gt; Stock Qty [https://github.com/idempiere/idempiere/pull/3205 (#3205)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7011 IDEMPIERE-7011] Storage Validator OSGI Service [https://github.com/idempiere/idempiere/pull/3269 (#3269)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7019 IDEMPIERE-7019]: Add currency for Chilean Unidad de Fomento [https://github.com/idempiere/idempiere/pull/3275 (#3275)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7022 IDEMPIERE-7022]: AllocationReset : error message not explicit when commit fails [https://github.com/idempiere/idempiere/pull/3277 (#3277)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7025 IDEMPIERE-7025] Requests &amp;gt; Update Notification is showing and notifying inactive users [https://github.com/idempiere/idempiere/pull/3282 (#3282)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] DBA - Tuning AD_Attachment (FHCA-3962) [https://github.com/idempiere/idempiere/pull/3271 (#3271)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24037</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24037"/>
		<updated>2026-09-04T11:08:41Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
|&lt;br /&gt;
* if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with [[#Evaluator.parseSQLLogic]]&lt;br /&gt;
* otherwise is parsed using [[#Evaluator.evaluateLogic]] with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
| org.compiere.model.GridTab.getDeleteConfirmationLogic&lt;br /&gt;
|&lt;br /&gt;
* first calls FileUtil.parseTitle, which calls Env.parseVariable when related a PO record or Env.parseContext if not&lt;br /&gt;
* then calls Msg.parseTranslation, which replaces context using AD_Message or AD_Element&lt;br /&gt;
* [https://docs.idempiere.org/docs/new-features/v10/delete-record-with-confirmation-logic Documented here]&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* row(s) returned means true&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The evaluator calls a tab &amp;lt;code&amp;gt;Env.parseContext&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;ignoreUnparsable=false&amp;lt;/code&amp;gt;, which means a bad context variable will make the SQL empty, log a warning and returns false.&lt;br /&gt;
&lt;br /&gt;
There is a cache of 500 milliseconds for the result of a query, this means, if the query is executed again less than half second after finished the result from the cache is returned (to avoid extra visits to the database).&lt;br /&gt;
&lt;br /&gt;
== Evaluator.evaluateLogic ==&lt;br /&gt;
&lt;br /&gt;
This calls [https://jenkins-artifacts.idempiere.org/javadocdev/org/idempiere/expression/logic/LogicEvaluator.html#evaluateLogic(org.compiere.util.Evaluatee,java.lang.String) LogicEvaluator.evaluateLogic] which evaluates logic according to what is explained in this javadoc.&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24036</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24036"/>
		<updated>2026-09-04T11:03:59Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
|&lt;br /&gt;
* if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with [[#Evaluator.parseSQLLogic]]&lt;br /&gt;
* otherwise is parsed using [[#Evaluator.evaluateLogic]] with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
| org.compiere.model.GridTab.getDeleteConfirmationLogic&lt;br /&gt;
|&lt;br /&gt;
* first calls FileUtil.parseTitle, which calls Env.parseVariable when related a PO record or Env.parseContext if not&lt;br /&gt;
* then calls Msg.parseTranslation, which replaces context using AD_Message or AD_Element&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* row(s) returned means true&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The evaluator calls a tab &amp;lt;code&amp;gt;Env.parseContext&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;ignoreUnparsable=false&amp;lt;/code&amp;gt;, which means a bad context variable will make the SQL empty, log a warning and returns false.&lt;br /&gt;
&lt;br /&gt;
There is a cache of 500 milliseconds for the result of a query, this means, if the query is executed again less than half second after finished the result from the cache is returned (to avoid extra visits to the database).&lt;br /&gt;
&lt;br /&gt;
== Evaluator.evaluateLogic ==&lt;br /&gt;
&lt;br /&gt;
This calls [https://jenkins-artifacts.idempiere.org/javadocdev/org/idempiere/expression/logic/LogicEvaluator.html#evaluateLogic(org.compiere.util.Evaluatee,java.lang.String) LogicEvaluator.evaluateLogic] which evaluates logic according to what is explained in this javadoc.&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24035</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24035"/>
		<updated>2026-09-04T10:58:33Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Conditional Context Logic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
|&lt;br /&gt;
* if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with [[#Evaluator.parseSQLLogic]]&lt;br /&gt;
* otherwise is parsed using [[#Evaluator.evaluateLogic]] with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
| org.compiere.model.GridTab.getDeleteConfirmationLogic&lt;br /&gt;
org.adempiere.webui.adwindow.AbstractADWindowContent.onDeleteSelected&lt;br /&gt;
|&lt;br /&gt;
* first calls FileUtil.parseTitle, which calls Env.parseVariable when related a PO record or Env.parseContext if not&lt;br /&gt;
* then calls Msg.parseTranslation, which replaces context using AD_Message or AD_Element&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* row(s) returned means true&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The evaluator calls a tab &amp;lt;code&amp;gt;Env.parseContext&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;ignoreUnparsable=false&amp;lt;/code&amp;gt;, which means a bad context variable will make the SQL empty, log a warning and returns false.&lt;br /&gt;
&lt;br /&gt;
There is a cache of 500 milliseconds for the result of a query, this means, if the query is executed again less than half second after finished the result from the cache is returned (to avoid extra visits to the database).&lt;br /&gt;
&lt;br /&gt;
== Evaluator.evaluateLogic ==&lt;br /&gt;
&lt;br /&gt;
This calls [https://jenkins-artifacts.idempiere.org/javadocdev/org/idempiere/expression/logic/LogicEvaluator.html#evaluateLogic(org.compiere.util.Evaluatee,java.lang.String) LogicEvaluator.evaluateLogic] which evaluates logic according to what is explained in this javadoc.&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24034</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24034"/>
		<updated>2026-08-28T10:44:58Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Evaluator.evaluateLogic&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
|&lt;br /&gt;
* if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with [[#Evaluator.parseSQLLogic]]&lt;br /&gt;
* otherwise is parsed using [[#Evaluator.evaluateLogic]] with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* row(s) returned means true&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The evaluator calls a tab &amp;lt;code&amp;gt;Env.parseContext&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;ignoreUnparsable=false&amp;lt;/code&amp;gt;, which means a bad context variable will make the SQL empty, log a warning and returns false.&lt;br /&gt;
&lt;br /&gt;
There is a cache of 500 milliseconds for the result of a query, this means, if the query is executed again less than half second after finished the result from the cache is returned (to avoid extra visits to the database).&lt;br /&gt;
&lt;br /&gt;
== Evaluator.evaluateLogic ==&lt;br /&gt;
&lt;br /&gt;
This calls [https://jenkins-artifacts.idempiere.org/javadocdev/org/idempiere/expression/logic/LogicEvaluator.html#evaluateLogic(org.compiere.util.Evaluatee,java.lang.String) LogicEvaluator.evaluateLogic] which evaluates logic according to what is explained in this javadoc.&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24033</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=24033"/>
		<updated>2026-08-28T10:37:23Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Evaluator.parseSQLLogic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
|&lt;br /&gt;
* if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with [[#Evaluator.parseSQLLogic]]&lt;br /&gt;
* otherwise is parsed using [[#Evaluator.evaluateLogic]] with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* row(s) returned means true&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The evaluator calls a tab &amp;lt;code&amp;gt;Env.parseContext&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;ignoreUnparsable=false&amp;lt;/code&amp;gt;, which means a bad context variable will make the SQL empty, log a warning and returns false.&lt;br /&gt;
&lt;br /&gt;
There is a cache of 500 milliseconds for the result of a query, this means, if the query is executed again less than half second after finished the result from the cache is returned (to avoid extra visits to the database).&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23998</id>
		<title>Migration Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23998"/>
		<updated>2026-08-25T10:48:54Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Version iDempiere 14 (to be released, known as master) */ IDEMPIERE-7084&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Features]]&lt;br /&gt;
[[Category:Migration]] &lt;br /&gt;
[[Category:Installation|M]] &lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[Category:Updated2022]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 14 (to be released, known as master) =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 14 ==&lt;br /&gt;
&lt;br /&gt;
=== WebSocket as default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
The default server push mechanism in r14 has been set to WebSocket.&lt;br /&gt;
&lt;br /&gt;
Websocket improves performance and reduces overhead in standard environments.&lt;br /&gt;
&lt;br /&gt;
However, in case WebSocket fails or is not fit for your environment you can switch to atmosphere.&lt;br /&gt;
&lt;br /&gt;
'''To use Atmosphere:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=atmosphere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use Websocket you can use &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;, or simply don't set it at all as is the default.&lt;br /&gt;
&lt;br /&gt;
=== SOAP Web Services Extracted from Core ===&lt;br /&gt;
&lt;br /&gt;
The SOAP Web Services bundle (&amp;lt;code&amp;gt;org.idempiere.webservice&amp;lt;/code&amp;gt;) has been removed from iDempiere core and is now distributed as a separate optional plugin hosted at [https://github.com/idempiere/idempiere-soap-webservices idempiere-soap-webservices].&lt;br /&gt;
&lt;br /&gt;
'''Required action for implementations using SOAP Web Services:'''&lt;br /&gt;
&lt;br /&gt;
After upgrading to this release, the SOAP endpoints (&amp;lt;code&amp;gt;ModelADService&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CompositeService&amp;lt;/code&amp;gt;) will '''no longer be available''' until the plugin is explicitly installed via the Extension Manager.&lt;br /&gt;
&lt;br /&gt;
To restore SOAP Web Services functionality:&lt;br /&gt;
# Open the '''Extension Manager''' in iDempiere.&lt;br /&gt;
# Install the '''iDempiere SOAP Web Services (ADInterface)''' extensions&lt;br /&gt;
&lt;br /&gt;
'''No action is required''' for implementations that use only the REST API.&lt;br /&gt;
&lt;br /&gt;
'''For plugin developers:''' If your custom plugin depends on SOAP web service classes (e.g. inside &amp;lt;code&amp;gt;org.idempiere.webservice.*&amp;lt;/code&amp;gt;), you must update your plugin's dependency declaration in &amp;lt;code&amp;gt;MANIFEST.MF&amp;lt;/code&amp;gt; to reference the new standalone bundle instead of core. Failure to do so will result in compilation errors when building against this release.&lt;br /&gt;
&lt;br /&gt;
This change reduces the core footprint by removing the Apache CXF framework and related WSDL libraries from base installations.&lt;br /&gt;
&lt;br /&gt;
See https://docs.idempiere.org/docs/new-features/v14/soap-web-services-plugin&lt;br /&gt;
&lt;br /&gt;
=== Accounting Implementation Classes Moved to org.idempiere.acct ===&lt;br /&gt;
&lt;br /&gt;
The accounting implementation classes (document posting logic, &amp;lt;code&amp;gt;Doc_*&amp;lt;/code&amp;gt; classes, accounting schema handling) have been extracted from iDempiere core into a dedicated bundle: &amp;lt;code&amp;gt;org.idempiere.acct&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please check for details and impact at https://docs.idempiere.org/docs/new-features/v14/accounting-plugin&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 13 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 13 ==&lt;br /&gt;
&lt;br /&gt;
=== Changes in Inventory Imports via CSV ===&lt;br /&gt;
&lt;br /&gt;
With [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010], the **UOM** and **Qty Entered** fields in the Physical Inventory and Inventory Increase/Decrease windows were introduced. However, existing CSV Import Formats for &amp;quot;Inventory Decrease/Increase&amp;quot; and &amp;quot;Physical Inventory&amp;quot; will fail and require updates because the old Qty fields are now read-only:&lt;br /&gt;
&lt;br /&gt;
* In Inventory Decrease/Increase, `QtyInternalUse` must be changed to `QtyEntered`.&lt;br /&gt;
* In Physical Inventory, `QtyCount` must be changed to `QtyEntered`.&lt;br /&gt;
&lt;br /&gt;
=== Changes in default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
Initially release-13 was released with websocket as the default push server, but after [[ChangeLog_Release_13#2026-04-13|Release-13-2026-04-13]] it was rolled back and the default is again atmosphere.  In release-14 it has been changed again to websocket (see comments above)&lt;br /&gt;
&lt;br /&gt;
'''To use Websocket in release-13:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAttachment.setTitle driven by list ===&lt;br /&gt;
&lt;br /&gt;
The column AD_Attachment.Title was managed as a free text field, but in reality it contained a list of values.&lt;br /&gt;
&lt;br /&gt;
So, with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] the column was changed to a List, and the values are now restricted.  So, if you have used MAttachment.setTitle in a plugin or test for a different purpose, this plugin will threw an error if the value is not one of the allowed in the list.&lt;br /&gt;
&lt;br /&gt;
=== UUID native type in PostgreSQL and UUIDv7 ===&lt;br /&gt;
&lt;br /&gt;
A big change for PostgreSQL was implemented with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650]:&lt;br /&gt;
All the UUID columns in the database were converted from VARCHAR to the native UUID type.&lt;br /&gt;
This is a big recommendation from postgresql that impacts positively performance and database size.&lt;br /&gt;
&lt;br /&gt;
Also the UUIDs generated in iDempiere were moved to the [https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_7_(timestamp_and_random) UUIDv7 standard], this is also a performance recommendation, as well as it allows to order by UUID and have the same order as the creation of the records, which was something possible with the _ID columns too.&lt;br /&gt;
&lt;br /&gt;
There are some implications about this change:&lt;br /&gt;
&lt;br /&gt;
1 - the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function uses the function &amp;lt;code&amp;gt;gen_random_uuid&amp;lt;/code&amp;gt; which is available natively in postgresql since version 13.&lt;br /&gt;
&lt;br /&gt;
Previous versions will throw an error when applying the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For versions 11 and 12 you can still use it enabling the pgcrypto extension:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
CREATE EXTENSION pgcrypto;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 - the script &amp;lt;code&amp;gt;postgresql/202510101902_IDEMPIERE-6650-uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using a UUID column and at the same time having the UNION clause.&lt;br /&gt;
&lt;br /&gt;
If this happens then you must take care of dropping those views (and their dependencies) before applying the script, and then recreating them back at the end.&lt;br /&gt;
&lt;br /&gt;
3 - the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function&lt;br /&gt;
&lt;br /&gt;
You need to apply the same solution as the previous point, drop those views before and recreate them after.&lt;br /&gt;
&lt;br /&gt;
This script can also fail on versions 11 and 12, and as explained above the solution is to install the pgcrypto extension.&lt;br /&gt;
&lt;br /&gt;
=== Problem with some PostgreSQL queries because of the UUID changes ===&lt;br /&gt;
&lt;br /&gt;
For the solution of [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] the JDBC URL now has the &amp;lt;code&amp;gt;stringtype=unspecified&amp;lt;/code&amp;gt; to allow the postgresql backend determine the data type of the parameters.&lt;br /&gt;
&lt;br /&gt;
However, there are certain SQL constructions that can be problematic for postgres, some of those are commonly used in jasper.&lt;br /&gt;
&lt;br /&gt;
For example a jasper with the following where clause:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
SELECT Name FROM C_BPartner bp WHERE ( ? IS NULL OR bp.Value=? )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
throws error &amp;lt;code&amp;gt;org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution is simple, the SQL must be changed to cast the binding variable (?) to the desired data type.  In postgresql that can be done using &amp;lt;code&amp;gt;::varchar&amp;lt;/code&amp;gt;, but this is not compatible with oracle, so it's more recommended to use the CAST function, or in case of a string you can concatenate with an empty string, like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
SELECT Name FROM C_BPartner bp WHERE ( ?||'' IS NULL OR bp.Value=? )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information read [https://idempiere.atlassian.net/browse/IDEMPIERE-6650?focusedCommentId=72214 the comment here].&lt;br /&gt;
&lt;br /&gt;
=== Deprecated PO getters on X_ classes ===&lt;br /&gt;
The X_ classes have getter methods for every foreign key, for example &amp;lt;code&amp;gt;X_C_Order.getC_DocType()&amp;lt;/code&amp;gt; - the usage of these getters is very handy and because of that it has been widely used historically.  The problem is that the way these methods are implemented is very expensive in performance, and it cannot use caches at all.  So with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6642 IDEMPIERE-6642] we decided to deprecate.  What you probably see when migrating to release-13 is a lot of deprecate warnings in your custom and plugins code, these warnings are harmless, but is recommended to migrate to better methods that have a better performance and use cache when possible.&lt;br /&gt;
&lt;br /&gt;
=== Removal of old deprecated code ===&lt;br /&gt;
This release removes several classes and methods that were deprecated more than two major versions ago.&amp;lt;br&amp;gt;&lt;br /&gt;
Custom plugins and customizations that still call these classes and methods '''will no longer compile and must be updated'''.&amp;lt;br&amp;gt;&lt;br /&gt;
See the full commit here: [https://idempiere.atlassian.net/browse/IDEMPIERE-6735 IDEMPIERE-6735]  &lt;br /&gt;
&lt;br /&gt;
==== Removed Classes ====&lt;br /&gt;
* org.compiere.process.BOMValidate&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookup&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookupInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.Postcode&lt;br /&gt;
* com.akunagroup.uk.postcode.package-info&lt;br /&gt;
* org.adempiere.util.GenerateModel&lt;br /&gt;
* org.adempiere.util.GenerateModelJPA&lt;br /&gt;
* org.compiere.db.SecurityPrincipal&lt;br /&gt;
* org.compiere.model.MBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBOMProduct and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBlackListCheque and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MProductBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.util.CallableResult&lt;br /&gt;
* org.compiere.util.ExecuteResult&lt;br /&gt;
* org.compiere.util.ExtensionFileFilter&lt;br /&gt;
* org.compiere.util.FileUpload&lt;br /&gt;
* org.compiere.util.Queue&lt;br /&gt;
* org.adempiere.webui.DelegatingServlet&lt;br /&gt;
* org.adempiere.webui.event.TouchEventHelper&lt;br /&gt;
* org.adempiere.webui.panel.ChatPanel&lt;br /&gt;
* org.adempiere.webui.panel.ConfigurationPanel&lt;br /&gt;
* org.adempiere.webui.panel.FooterPanel&lt;br /&gt;
* org.adempiere.webui.panel.RequestNoticePanel&lt;br /&gt;
* org.adempiere.webui.window.FDialog&lt;br /&gt;
&lt;br /&gt;
==== Removed Methods ====&lt;br /&gt;
'''AbstractADWindowContent'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void executeASync(ProcessInfo pi)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ADSortTab'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void editRecord(boolean b)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''AEnv'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void exit (int status)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean isTablet()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CConnection'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public InitialContext getInitialContext(boolean useCache)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CustomizerGridViewDialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean onCustomize(ADTabpanel tabPanel)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean showCustomize(int WindowNo, int AD_Tab_ID, Map &amp;amp;lt;Integer, String&amp;amp;gt; columnsWidth, ArrayList &amp;amp;lt;Integer&amp;amp;gt; gridFieldIds, GridView gridPanel, QuickGridView quickGridView, boolean isQuickForm)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage, String additionalMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''diff_match_patch'''&lt;br /&gt;
* &amp;lt;code&amp;gt;@Deprecated public LinkedList&amp;amp;lt;Patch&amp;amp;gt; patch_make(String text1, String text2, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Env'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties getRemoteCallCtx(Properties ctx)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GridTable'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isSortedAscending()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getSortColumnIndex()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''I_C_Country'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isPostcodeLookup()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClassName()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClientID()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupPassword()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupUrl()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setIsPostcodeLookup(boolean IsPostcodeLookup)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClassName(String LookupClassName)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClientID(String LookupClientID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupPassword(String LookupPassword)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupUrl(String LookupUrl)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LayoutUtils'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void sendDeferLayoutEvent(org.zkoss.zul.Borderlayout layout, int timeout)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Login'''&lt;br /&gt;
* &amp;lt;code&amp;gt;private KeyNamePair[] getRoles(String app_user, String app_pwd, boolean force)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;protected KeyNamePair[] getRoles(CConnection cc, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(Principal app_user)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(String app_user, String app_pwd)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties initTest (boolean isClient)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MAging'''&lt;br /&gt;
* &amp;lt;code&amp;gt;MAging (Properties ctx, int AD_PInstance_ID, Timestamp StatementDate, int C_BPartner_ID, int C_Currency_ID, int C_Invoice_ID, int C_InvoicePaySchedule_ID, int C_BP_Group_ID, Timestamp DueDate, boolean IsSOTrx, String trxName)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartner'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getAD_OrgBP_ID_Int()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartnerLocation'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MBPartnerLocation[] getForBPartner(Properties ctx, int C_BPartner_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCharge'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MAccount getAccount (int C_Charge_ID, MAcctSchema as, BigDecimal amount)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCountry'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void setDisplayLanguage (String AD_Language)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MPaySelectionLine'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void xsetInvoice(int C_Invoice_ID, boolean isSOTrx, BigDecimal OpenAmt, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MWFEventAudit'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID, int AD_WF_Node_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WCreateFromWindow'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setStatusBar(StatusBarPanel statusBar)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WListItemRenderer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setRO(int colIndex, Boolean readOnly)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WLocatorEditor'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setField(org.compiere.model.GridField mField)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WTableColumn'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean getResizable()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMaxWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMinWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getPreferredWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMaxWidth(int maxWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMinWidth(int minWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setPreferredWidth(int preferredWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setResizable(boolean isResizable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setWidth(int width)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WindowContainer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertAfter(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertBefore(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Required developer actions ====&lt;br /&gt;
* Rebuild your custom plugins and note any compilation errors related to missing classes or methods.&lt;br /&gt;
* For each error, replace the removed deprecated API with its recommended alternative (standard getters/setters, services, or cache‑aware access patterns).&lt;br /&gt;
* Re‑run your test suite (or perform manual regression tests) to validate that business logic continues to work as expected.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Only APIs that had been deprecated for more than two major releases were removed, following the project deprecation policy.''&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 13 ==&lt;br /&gt;
With the [https://idempiere.atlassian.net/browse/IDEMPIERE-6575 IDEMPIERE-6575] ticket, on the AD_Sequence_No.CalendarYearMonth column was renamed to SequenceKey, this means for the  getCalendarYearMonth and  setCalendarYearMonth methods the adequate replacement is getSequenceKey and setSequenceKey.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 12 =&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
As reported by Robert Green [https://groups.google.com/g/idempiere/c/iFtEV_6mwf0/m/GejbvQhOAwAJ on forums], there are problems running iDempiere '''as a server''' on windows.&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== JDBC libraries upgraded ===&lt;br /&gt;
&lt;br /&gt;
Three libraries related to JDBC were upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] on [[ChangeLog_Release_12#2025-11-10|release-12.2025-11-10]]&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL from 42.7.3 to 42.7.8&lt;br /&gt;
* Oracle from ojdbc10 19.21.0.0 to ojdbc17 23.26.0.0.0&lt;br /&gt;
* HikariCP from 5.1.0 to 7.0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL 42.7.8 has a change that could break previous working code:&lt;br /&gt;
* previously the DatabaseMetaData.get* methods worked with any catalog name, that parameter was simply ignored&lt;br /&gt;
* since 42.7.5 the catalog is used as a filter, so it must be passed as the database name, or null&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3394&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3389&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/pull/3390&lt;br /&gt;
&lt;br /&gt;
=== Session Fingerprinting ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-02-08|release-12-20260208]] session fingerprinting was added to the zkwebui.&lt;br /&gt;
&lt;br /&gt;
Please read carefully [[NF12 Session Fingerprinting]] to see the options being checked.&lt;br /&gt;
&lt;br /&gt;
It's possible your users will be logged out when changing the language '''of the browser''' during and iDempiere session, or if the browser is updated.&lt;br /&gt;
&lt;br /&gt;
It's also possible that changes of IP address will be logged in logs and in AD_Issue.  This can happen when connecting to a VPN, changing wifi, or using mobile.  But it can also be the indication of attempts to hijack the session.  It is recommended to keep an eye on these alerts and verify for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
=== New Env.parseContext parameter ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-01-04|release-12-20260104]] a new parameter was added to Env.parseContext:&lt;br /&gt;
&lt;br /&gt;
* '''forSQL''': if true, the parsed value is intended for SQL statement, so it replaces quotes accordingly&lt;br /&gt;
&lt;br /&gt;
It is recommended to review your plugins and use the new parameter when the Env.parseContext is intended to be used in SQL clauses, this is very important to prevent SQL Injection attacks.&lt;br /&gt;
&lt;br /&gt;
=== New SQLFragment approach ===&lt;br /&gt;
&lt;br /&gt;
In many places of iDempiere direct SQL clauses were added with parameters replaced directly within the where clause, this can open doors for SQL Injection attacs that we want to avoid.&lt;br /&gt;
&lt;br /&gt;
To solve that, the new org.idempiere.db.util.SQLFragment was added in [[ChangeLog_Release_12#2026-01-16|release-12-20260116]], this approach allows to define a where clause with binding parameters and associate a List of parameters to the clause.&lt;br /&gt;
&lt;br /&gt;
Many methods were deprecated to encourage the usage of the new SQLFragment approach instead of adding directly where clauses.&lt;br /&gt;
&lt;br /&gt;
It is encouraged to check carefully your plugins using these deprecated methods and migrate to the new SQLFragment approach.&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== Promotions functionality was removed from core to a plugin ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-2826 IDEMPIERE-2826] it was decided to move the Promotions functionality out of core to a plugin.&lt;br /&gt;
&lt;br /&gt;
So, if you have been using this functionality, when migrating to release-12 is necessary to install the plugin.&lt;br /&gt;
&lt;br /&gt;
The plugin documentation can be found at: [[Plugin:_Promotions]]&lt;br /&gt;
&lt;br /&gt;
== Theme ==&lt;br /&gt;
&lt;br /&gt;
Default theme was changed from ''breeze'' to ''iceblue_c''. &lt;br /&gt;
&lt;br /&gt;
To reflect that, the ''ZK_THEME'' SysConfig has been forced to 'iceblue_c'.&lt;br /&gt;
&lt;br /&gt;
So, once your customized theme is updated (as it will probably require some adaptations), you can update the SysConfig to use it.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 11 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 11 ==&lt;br /&gt;
&lt;br /&gt;
=== Java 17 required ===&lt;br /&gt;
For the release-11 we decided to move to the next Long Term Supported version of java.  As java 11 is too close to its end of life, the release-11 requires java-17 for running and compiling.&lt;br /&gt;
&lt;br /&gt;
=== Storage size increase because of new Record_UU columns ===&lt;br /&gt;
As explained in [[NF11 UUID Key Tables#Enabled Features for tables with UUID key and without ID key|UUID Key Tables documentation page]]: a number of Record_UU columns have been added to core tables, which can represent an increase in storage size and backup size in implementations that have many records on these tables, for example many attachments, or heavy usage of chat, post-it or labels.  Also the Change Log can be affected by size depending on the System Configurator key AD_CHANGELOG_SAVE_UUID&lt;br /&gt;
&lt;br /&gt;
=== New MPInstance constructors to manage the new column AD_PInstance.AD_Table_ID ===&lt;br /&gt;
The table AD_PInstance table had a Record_ID column without the corresponding AD_Table_ID.  This is an anomaly and it created a problem as it was not possible to figure out which table triggered a process, and use the Record_ID field to navigate to the originating record.&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5567 IDEMPIERE-5567] the column was added, and the migration script 202309111844_IDEMPIERE-5567_ADPInstance.sql tries the best to fill the new column AD_Table_ID discovering the related table from column, toolbar button, print formats, etc.&lt;br /&gt;
&lt;br /&gt;
However, it is very possible that not all relationships can be figured out, after migration you can review which records were left on AD_PInstance table with null AD_Table_ID and Record_ID&amp;gt;0, and decide if you want to fill it for your specific cases (sometimes is not possible to discover it at the end (for example the process org.compiere.process.BankStatementMatcher could have been called from three different tables and there is no trace about that).&lt;br /&gt;
&lt;br /&gt;
Additionally, it is possible that your plugins call processes filling AD_PInstance without the table, the old constructors for MPInstance are marked as deprecated to ease the task to find them in your plugins and migrate to use the new methods.&lt;br /&gt;
&lt;br /&gt;
=== Constructor MPaymentBatch(Properties, String, String) changed ===&lt;br /&gt;
&lt;br /&gt;
There was a constructor MPaymentBatch(Properties, String, String) that was not used in the official core.&lt;br /&gt;
&lt;br /&gt;
The second parameter of this constructor was the Name and it was intended to create a new record and set the Name of the Payment Batch record.&lt;br /&gt;
&lt;br /&gt;
This constructor conflicts with the [[NF11_UUID_Key_Tables#New_UUID_based_constructors|new UUID based constructor]], so it was replaced by the UUID constructor and its behavior is now completely different.&lt;br /&gt;
&lt;br /&gt;
Most probably nobody is using this old constructor, but in case you use MPaymentBatch constructor in your plugins, please review that you are not using this constructor, if used, please change it to a normal constructor with zero as ID parameter and then set the Name.&lt;br /&gt;
&lt;br /&gt;
=== Product Info toolbar button deactivated in Core. ===&lt;br /&gt;
The community discussion was that most people is not using that toolbar button. However, if you miss it after upgrading. You can go to the Toolbar Button window and activate it again.&lt;br /&gt;
&lt;br /&gt;
=== Export Button not exporting Official Dictionary entries ===&lt;br /&gt;
Since [https://idempiere.atlassian.net/browse/IDEMPIERE-6018 IDEMPIERE-6018] the Export button on windows does not export official dictionary entries, to export dictionary is needed to configure and use a PackOut.&lt;br /&gt;
&lt;br /&gt;
=== Hazelcast defaults to disable auto-detection ===&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6279 IDEMPIERE-6279] the hazelcast automatic detection of other servers within the network was disabled, if you plan to use Hazelcast in a multi-server or load balanced scenario, the hazelcast-template.xml needs to be customized.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 10 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 10 ==&lt;br /&gt;
&lt;br /&gt;
=== System user with ID zero deprecated ===&lt;br /&gt;
&lt;br /&gt;
The user System with ID=0 was inactivated and replaced with a similar user with ID=10&lt;br /&gt;
&lt;br /&gt;
Implementors that use System in any way must check if there is impact with this change, the migration script 202202072157_IDEMPIERE-5174.sql copies the information from AD_User, but it doesn't copy custom columns.  Also, it replaces AD_User_ID in some core tables, but implementors must take care if is needed in other custom tables.&lt;br /&gt;
&lt;br /&gt;
=== Change on Schedule behaviour ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5093 IDEMPIERE-5093] changed the way the schedule works:&lt;br /&gt;
* Before this ticket when you had a schedule configured to run at 9AM, the job was executed at 9AM of the server timezone.&lt;br /&gt;
* This ticket changed this behaviour and now the job is executed at 9AM '''of the tenant timezone''' where the job is defined.&lt;br /&gt;
&lt;br /&gt;
=== Terminology changed from Client to Tenant ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4586 IDEMPIERE-4586] changed the terminology for Client to be known as Tenant in the whole application.&lt;br /&gt;
&lt;br /&gt;
This have little impact from user perspective, but it can have a big impact on documentation.&lt;br /&gt;
&lt;br /&gt;
=== Backward compatibility issue with TimeUtil.getBusinessDaysBetween ===&lt;br /&gt;
Before v10, the method was counting the last day of the period in the total of non business days.&lt;br /&gt;
&lt;br /&gt;
Now, the last day is excluded. In order to fix that, a new method with a new parameter has been added ''includeEndDate,'' so you must use that new method with your plugin if you want to preserve behaviour prior to v10.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade to Hazelcast ===&lt;br /&gt;
The hazelcast library was upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5816 IDEMPIERE-5816], the &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; configuration file is not compatible with previous version, so it is needed to run setup again to use the new template.  In case your &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; is customized, you need to take the template for version 5.3 and apply your changes.  NOTE: This was integrated into release-11, and also into release-10 at 2023-07-29&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 9 Horizon =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 9 Horizon ==&lt;br /&gt;
&lt;br /&gt;
=== Deprecated direct http usage ===&lt;br /&gt;
&lt;br /&gt;
iDempiere 9 Horizon doesn't support anymore direct http usage of the webui interface.  Workaround is simply to use port https.&lt;br /&gt;
&lt;br /&gt;
If you use http the system doesn't allow login in webui.&lt;br /&gt;
&lt;br /&gt;
Note that http can still be used for proxy forwarding, but the configuration requires to forward the header X-Forwarded-Proto to https.&lt;br /&gt;
&lt;br /&gt;
In nginx you must add the following line to the definition of the locations /webui and /webui/zkau/comet:&lt;br /&gt;
 proxy_set_header  X-Forwarded-Proto $scheme;&lt;br /&gt;
As described in [[Proxy iDempiere Through Nginx]]&lt;br /&gt;
&lt;br /&gt;
=== All core views imported to dictionary ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5059 IDEMPIERE-5059] the definition of the 149 core views was imported to the dictionary.&lt;br /&gt;
&lt;br /&gt;
In the migration scripts there is code to recreate all these views, so it is very possible that all the custom columns that were added to views by the implementor will present problems when applying the scripts.&lt;br /&gt;
&lt;br /&gt;
Two possible cases that you need to take care about:&lt;br /&gt;
* the script doesn't show errors, but your customization for the view is lost. You must check all the core views that you customized to see if they are having problems and apply the corresponding fixes in release 9&lt;br /&gt;
* the script show errors when applying (usually postgres complains because it cannot change the columns)&lt;br /&gt;
In both cases it is required that you fix the views, do not create the view by hand in SQL, the best way is to add your customized columns to the dictionary and then use the iDempiere process to validate/create the view in the database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Take care of AD_Window.PredefinedContextVariables ===&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4837 IDEMPIERE-4837] will erase changes done on AD_Window.PredefinedContextVariables for Order, Invoices.&lt;br /&gt;
Make a backup of the content of those fields if you have customized them and reapply them.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Default to Native Dialect ===&lt;br /&gt;
Release-9 comes by default with Native PostgreSQL dialect.  The SQLs in core were changed to make them compatible for Oracle and PostgreSQL.  Because of that is possible that some plugins can be broken, for example if using NATIVE_PostgreSQL_KEYWORK.&lt;br /&gt;
&lt;br /&gt;
To solve that, the best option is to change your plugin to use SQL standard (compatible with both databases).&lt;br /&gt;
&lt;br /&gt;
See [[NF9 PostgreSQL Default To Native Dialect]] for information about how to disable it (not recommended).&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 8.2 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 8.2 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
For migration script issues see [[Note Upgrade 8.2]] from [[User:Hieplq|Hiep]]&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 8.2 ==&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4421 IDEMPIERE-4421] it was implemented a mechanism for versioning the themes.&lt;br /&gt;
&lt;br /&gt;
We tried to preserve backward compatibility with pre-8.2 themes, but still you'll find problems when the following conditions are in your plugin&lt;br /&gt;
* if the old plugin has references to /theme/default, because the URL of /theme/default was changed to the versioning approach&lt;br /&gt;
** Recommended solution: migrate your theme to 8.2 approach&lt;br /&gt;
** Or change the pointers to /theme/default to point to your own theme&lt;br /&gt;
** Or change the pointers to ~./theme/default/ (this is not recommended, is preferable to maintain your own theme assets)&lt;br /&gt;
* if your plugin referenced the public variable ITheme.THEME_PATH_PREFIX, that variable was dropped&lt;br /&gt;
** Solution is to change the variable to ThemeManager.THEME_PATH_PREFIX&lt;br /&gt;
&lt;br /&gt;
You can find additional instructions to migrate your theme at this ticket comment: https://idempiere.atlassian.net/browse/IDEMPIERE-4421?focusedCommentId=46667&lt;br /&gt;
&lt;br /&gt;
=== PO is immutable ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about not writing objects retrieved from cache.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids writing to these objects to prevent multi-threading issues with these objects.  The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4287 IDEMPIERE-4287]&lt;br /&gt;
&lt;br /&gt;
=== Cross-tenant reading/writing forbidden by default ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about avoiding reading or writing records from a different tenant than the tenant that was used in login.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids reading/writing records from a different tenant.&lt;br /&gt;
&lt;br /&gt;
Reading can be done from the current tenant or System tenant.  Writing can be done just on the current tenant.&lt;br /&gt;
&lt;br /&gt;
The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
How to avoid this condition?&lt;br /&gt;
* Always read/write records within the tenant&lt;br /&gt;
* for example filter &amp;lt;code&amp;gt;AD_Client_ID=?&amp;lt;/code&amp;gt;&lt;br /&gt;
* or filter &amp;lt;code&amp;gt;AD_Client_ID IN (0,?)&amp;lt;/code&amp;gt;&lt;br /&gt;
* with Query consider using the method setClient_ID&lt;br /&gt;
&lt;br /&gt;
If, for any reason, it is absolutely necessary to read or write a record in a different tenant, the following code can be used:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
    PO.setCrossTenantSafe();&lt;br /&gt;
    // write here the Query.list or PO.saveEx that is cross tenant safe&lt;br /&gt;
} finally {&lt;br /&gt;
    PO.clearCrossTenantSafe();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4268 IDEMPIERE-4268]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 7.1 =&lt;br /&gt;
&lt;br /&gt;
== Multi-server schedulers ==&lt;br /&gt;
&lt;br /&gt;
Because of ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4056 IDEMPIERE-4056], the schedulers running in all servers are not supported anymore.&lt;br /&gt;
&lt;br /&gt;
This is, in previous versions when a scheduler didn't have a RunOnlyOnIP defined it was executed in all servers, after the implementation of IDEMPIERE-4056 the schedulers without an IP defined are executed on just one server (randomly).&lt;br /&gt;
&lt;br /&gt;
How to configure now:&lt;br /&gt;
* The RunOnlyOnIP keeps working as usual, so the easiest workaround is to configure one scheduler per each server&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 3.1 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 3.1 ==&lt;br /&gt;
&lt;br /&gt;
=== Keystore moved ===&lt;br /&gt;
&lt;br /&gt;
As the web server was changed from tomcat to jetty the keystore file was moved from &amp;lt;code&amp;gt;idempiere-server/keystore/myKeystore&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;idempiere-server/jettyhome/etc/keystore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the upgrade of zk to version 7 the file &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/theme.css.dsp&amp;lt;/code&amp;gt; was split in fragments located at folder &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/fragment&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;about.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;adwindow.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;application-menu.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;borderlayout.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;button.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;desktop.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;field-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;find-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;form.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;gadget.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;grid.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;group.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;help-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;info-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;input-element.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;login.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;menu-tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;setup-wizard.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar-popup.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Theme developers must take care of migrating the themes to be compliant with this new schema.&lt;br /&gt;
&lt;br /&gt;
=== Migration Notes from [[User:Hieplq|Hieplq]] ===&lt;br /&gt;
&lt;br /&gt;
Please take a look to the migration notes provided by hiep at [[Update_your_development_environment_zk7_branch#known_issues|Known issues when updating your development environment zk7 branch]]&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.1 to iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1z i2.1z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i3.1 i3.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.0 to iDempiere 2.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0 i2.0]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0z i2.0z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 1.0 to iDempiere 2.0 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]  # just the scripts still not applied&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0z i1.0z]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i2.0 i2.0]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 1.0 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old systems to iDempiere 1.0 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== org.compiere.acct.Doc ===&lt;br /&gt;
&lt;br /&gt;
Constructor account schema parameter have been changed from MAcctSchema[] to MAcctSchema. This can break extensions that modify accounting, solution is simple, just change it to use new method and accomodate code.&lt;br /&gt;
&lt;br /&gt;
=== 2Pack ===&lt;br /&gt;
&lt;br /&gt;
The new 2pack format is not backward compatible&lt;br /&gt;
&lt;br /&gt;
=== AD_WF_Node ===&lt;br /&gt;
&lt;br /&gt;
The xposition and yposition column now stored the node's position in a grid instead of absolute pixel value.&lt;br /&gt;
&lt;br /&gt;
=== Change Log Configuration ===&lt;br /&gt;
&lt;br /&gt;
The change log is now enabled by default in most of the tables.&lt;br /&gt;
&lt;br /&gt;
Enabling the change log is done with the script 201306261840_EnableChangeLog.sql&lt;br /&gt;
&lt;br /&gt;
If you have already tuned your change log configuration, you can skip that script - or run it and then recover your specific fine tuning changes.&lt;br /&gt;
&lt;br /&gt;
Note also that enabling the change log it will increase the disk consumption - if that's a concern on your installation you must fine tune this configuration after running the script.&lt;br /&gt;
&lt;br /&gt;
=== Jasper ID parameters passed as BigDecimal now as Integer ===&lt;br /&gt;
&lt;br /&gt;
In some cases the ID parameters (table, table direct, search) were passed to jasper reports as BigDecimal, while in other cases same parameters were passed as Integer (like RECORD_ID or ranges), with [http://idempiere.atlassian.net/browse/IDEMPIERE-1422 IDEMPIERE-1422] that behavior is now consistent, always using Integer for _ID parameters.&lt;br /&gt;
&lt;br /&gt;
This change can break old jasper reports that defined the ID parameter as BigDecimal, the fix is simple, just change the jasper parameter to Integer and compile again.&lt;br /&gt;
&lt;br /&gt;
When this error is reached running the jasper report throws this exception:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
16:47:32.058===========&amp;gt; ProcessUtil.startJavaProcess: org.compiere.report.ReportStarter [17]&lt;br /&gt;
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:553)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:399)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter$1.visit(JRJdbcQueryExecuter.java:332)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter$QueryParameter.accept(JRAbstractQueryExecuter.java:157)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter.visitQueryParameters(JRAbstractQueryExecuter.java:646)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:317)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1281)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:900)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functional Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Inventory Document Types ===&lt;br /&gt;
&lt;br /&gt;
Because of [http://idempiere.atlassian.net/browse/IDEMPIERE-675 IDEMPIERE-675] you need to set manually the inventory document subtype for your inventory documents (internal use and physical inventory).&lt;br /&gt;
&lt;br /&gt;
In case you used the same document type for both cases - then recommendation is to inactivate the old mixed document and create new document types for each specific case.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated Functionalities ===&lt;br /&gt;
&lt;br /&gt;
With [http://idempiere.atlassian.net/browse/IDEMPIERE-362 IDEMPIERE-362], [http://idempiere.atlassian.net/browse/IDEMPIERE-170 IDEMPIERE-170], [http://idempiere.atlassian.net/browse/IDEMPIERE-247 IDEMPIERE-247] some functionalities that were not working properly where deprecated, please check the tickets and commits for details, most prominent are:&lt;br /&gt;
* Cash Journals (all cash functionalities can be modeled using payments)&lt;br /&gt;
* MRP Heavy Manufacturing (Light Manufacturing was integrated)&lt;br /&gt;
* Payroll (being developed as extension)&lt;br /&gt;
&lt;br /&gt;
=== Production ===&lt;br /&gt;
&lt;br /&gt;
If you used the old Production window (original from Compiere with three tabs) - please note some changes are required as noted in [http://idempiere.atlassian.net/browse/IDEMPIERE-521 IDEMPIERE-521]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Roles ===&lt;br /&gt;
&lt;br /&gt;
With [https://idempiere.atlassian.net/browse/IDEMPIERE-1160 IDEMPIERE-1160] a new security feature was implemented, when creating a new client the ClientAdmin role is configured as advanced role and the ClientUser role is not, after that you can use the ClientAdmin role to configure the rest of roles (advanced or not) and users.&lt;br /&gt;
&lt;br /&gt;
Please note that advanced role is not intended for end-users, is mostly intended for Information technology (IT) roles that administer the system - advanced roles have access to many fields that are documented and exposed security holes in the system.&lt;br /&gt;
&lt;br /&gt;
This new feature creates a problem when migrating databases with existing tenants - as we can't know in advance how the security was configured in an already existing client - we cannot set advanced role to one of the client roles in the database via migration script.  The consequence is that when migrating databases, all the roles on Clients (not GardenAdmin and System) are marked as non-advanced - and there is not a way to mark advanced role within the system, it's needed to mark your required advanced role directly via SQL with a command like:&lt;br /&gt;
 UPDATE AD_Role SET IsAccessAdvanced='Y' WHERE AD_Role_ID=?&lt;br /&gt;
where you replace the ? with the ID of the role you design as advanced (with access to security holes).&lt;br /&gt;
&lt;br /&gt;
= Migration Scripts =&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to ADempiere 361 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts-360lts.010?at=globalqss_adempiere361 360lts-360lts.010]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts.010-361.Final?at=globalqss_adempiere361 360lts.010-361.Final]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/361.Final-BUG_FIXES?at=globalqss_adempiere361 361.Final-BUG_FIXES]&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/360lts-i1.0a 360lts-i1.0a]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0a-i1.0b i1.0a-i1.0b]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0b-i1.0c i1.0b-i1.0c]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 361 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
You need to apply the migration scripts like migrating from 360, '''EXCLUDING''' those already applied when you migrated from 360 to 361.&lt;br /&gt;
&lt;br /&gt;
== Increasing speed of some scripts ==&lt;br /&gt;
&lt;br /&gt;
* Script &amp;lt;code&amp;gt;postgresql/789_GenerateUUIDColumns.sql&amp;lt;/code&amp;gt; can apply ALTER TABLE too slowly for big tables - this can be improved dropping the &amp;quot; DEFAULT NULL&amp;quot; at the end of each ALTER TABLE&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended to run &amp;quot;UUID Generator&amp;quot; process after migration to fill the empty UUID columns, but this can be a very slow process for big tables, a faster way can be achieved executing an update directly on the database, also you can consider deleting the related uuid index before the update and recreating it at the end, for example:&lt;br /&gt;
** &amp;lt;code&amp;gt;DROP INDEX ad_changelog_uu_idx;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;UPDATE AD_ChangeLog SET AD_ChangeLog_UU=generate_uuid() WHERE AD_ChangeLog_UU IS NULL;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;CREATE UNIQUE INDEX ad_changelog_uu_idx ON ad_changelog (ad_changelog_uu);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The script &amp;lt;code&amp;gt;processes_post_migration/postgresql/02_SynchronizeTerminology.sql&amp;lt;/code&amp;gt; tend to be slow on postgresql versions higher than 9.1 with the default memory.  In order to solve this is recommended to tune the memory for the database.&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere 370 =&lt;br /&gt;
&lt;br /&gt;
[[User:Pb_integratio|Pb_integratio]] is sharing and documenting experience about this at [[Migration from ADempiere 370 to iDempiere]]&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere pre-360 =&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
Migrating some Adempiere installations before 360 to iDempiere generates a problem when using postgresql 9.2 - applying the script 201309192024_IDEMPIERE-1370.sql:222 throws:&lt;br /&gt;
 ERROR:  cannot change name of input parameter &amp;quot;p_product_id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cause ==&lt;br /&gt;
&lt;br /&gt;
An issue has been detected migrating a database pre-360 to iDempiere using postgresql 9.2&lt;br /&gt;
&lt;br /&gt;
The function bomqtyonhand from the database seed doesn't match with the function bomqtyonhand present on the migration scripts (pre-360), the script 201309192024_IDEMPIERE-1370.sql fixes that situation, but postgresql 9.2 doesn't allow changing a parameter name for a function.&lt;br /&gt;
&lt;br /&gt;
== Solutions ==&lt;br /&gt;
&lt;br /&gt;
* You can do the migration using postgres 8.4 and at the end migrate to 9.2 (postgres 8.4 allows changing name of function parameters)&lt;br /&gt;
alternatively&lt;br /&gt;
* You can drop the old function bomqtyonhand (and all the associated views) and recreate them properly&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23961</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23961"/>
		<updated>2026-07-31T11:04:49Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Conditional Context Logic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
|&lt;br /&gt;
* if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with [[#Evaluator.parseSQLLogic]]&lt;br /&gt;
* otherwise is parsed using [[#Evaluator.evaluateLogic]] with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* otherwise is true.&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23960</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23960"/>
		<updated>2026-07-31T11:03:56Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Conditional Context Logic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
| if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with [[#Evaluator.parseSQLLogic]]&lt;br /&gt;
otherwise is parsed using [[#Evaluator.evaluateLogic]] with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* otherwise is true.&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23959</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23959"/>
		<updated>2026-07-31T11:03:24Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Conditional Context Logic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
| if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with #Evaluator.parseSQLLogic&lt;br /&gt;
otherwise is parsed using [[#Evaluator.evaluateLogic]] with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* otherwise is true.&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23958</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23958"/>
		<updated>2026-07-31T11:02:08Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* SQL Context Logic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
| if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with #Evaluator.parseSQLLogic&lt;br /&gt;
otherwise is parsed using #Evaluator.evaluateLogic with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Evaluator.parseSQLLogic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* otherwise is true.&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23957</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23957"/>
		<updated>2026-07-31T11:01:10Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Conditional Context Logic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
! Class&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
| org.compiere.model.GridField.isEditable&lt;br /&gt;
| if the logic starts with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; is parsed with #Evaluator.parseSQLLogic&lt;br /&gt;
otherwise is parsed using #Evaluator.evaluateLogic with the value from GridField or DefaultEvaluatee&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SQL Context Logic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* otherwise is true.&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23956</id>
		<title>Context Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Context_Logic&amp;diff=23956"/>
		<updated>2026-07-31T10:48:07Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Add logic columns table to investigate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Context Logic Explained =&lt;br /&gt;
&lt;br /&gt;
'''''Note, this page is work in progress, please feel free to contribute and help completing the documentation'''''&lt;br /&gt;
&lt;br /&gt;
There are many places within iDempiere where the application manages Context Logic and is difficult to keep track of all the possibilities of every field.  This wiki page tries to collect the documentation about the fields and the possibilities of each logic.&lt;br /&gt;
&lt;br /&gt;
== Conditional Context Logic ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Column&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.AlwaysUpdatableLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.AlwaysUpdatableLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.AlwaysUpdatableLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DeleteConfirmationLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Attribute.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoRelated.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_PrintFormatItem.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Column.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Info_Related.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.DisplayLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.MandatoryLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.PressedLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Field.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Proc_Parameter.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_UserDef_Tab.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| REST_ViewColumn.ReadOnlyLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Window.TitleLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_Scheduler.WebSessionLogic&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Used in ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Column !! Class&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.adempiere.impexp.GridTabCSVExporter.export&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoProcess.DisplayLogic || org.adempiere.model.MInfoProcess.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Field.DisplayLogic&amp;lt;br&amp;gt;AD_UserDef_Field.DisplayLogic&amp;lt;br&amp;gt;AD_Process_Para.DisplayLogic || org.compiere.model.GridField.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.ReadOnlyLogic&amp;lt;br&amp;gt;AD_Field.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Field.ReadOnlyLogic || org.compiere.model.GridField.isEditable&lt;br /&gt;
|-&lt;br /&gt;
| AD_Process_Para.ReadOnlyLogic || org.compiere.model.GridField.isEditablePara&lt;br /&gt;
|-&lt;br /&gt;
| AD_Column.MandatoryLogic&amp;lt;br&amp;gt;AD_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_UserDef_Field.MandatoryLogic&amp;lt;br&amp;gt;AD_Process_Para.MandatoryLogic || org.compiere.model.GridField.isMandatory&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.DisplayLogic || org.compiere.model.GridTab.isDisplayed&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.AbstractADTabbox.isDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.CompositeADTabbox.updateBreadCrumb / updateTabState&lt;br /&gt;
|-&lt;br /&gt;
| AD_Tab.ReadOnlyLogic&amp;lt;br&amp;gt;AD_UserDef_Tab.ReadOnlyLogic || org.compiere.model.GridTab.isReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| AD_InfoColumn.DisplayLogic || org.compiere.model.MInfoColumn.isDisplayed&lt;br /&gt;
|-&lt;br /&gt;
| AD_ZoomCondition.ZoomLogic || org.compiere.model.MZoomCondition.findZoomWindowByTableId / findZoomWindowByTableId&lt;br /&gt;
|-&lt;br /&gt;
| AD_Workflow.DocValueLogic || org.compiere.wf.DocWorkflowManager.process&lt;br /&gt;
|-&lt;br /&gt;
| AD_StyleLine.DisplayLogic || org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&amp;lt;br&amp;gt;org.adempiere.webui.editor.WEditor.buildStyle&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.GridTabRowRenderer.applyFieldStyle&lt;br /&gt;
|-&lt;br /&gt;
| AD_ToolBarButton.DisplayLogic || org.adempiere.webui.adwindow.ToolbarCustomButton.dynamicDisplay&amp;lt;br&amp;gt;org.adempiere.webui.adwindow.ToolbarProcessButton.dynamicDisplay&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
&lt;br /&gt;
 format := {expression} [{logic} {expression}]&lt;br /&gt;
 expression := @{context}@{operand}{value} or @{context}@{operand}{value}&lt;br /&gt;
 logic := {|}|{&amp;amp;}&lt;br /&gt;
 context := any global or window context&lt;br /&gt;
 value := strings or numbers&lt;br /&gt;
 logic operators := AND{&amp;amp;} or OR{|} with the previous result from left to right&lt;br /&gt;
 operand := eq{=}, gt{&amp;gt;}, le{&amp;lt;}, not{~^!}&lt;br /&gt;
&lt;br /&gt;
In other words, a conditional context logic is composed by one or several expressions (comparisons) processed from left to right with AND or OR operators, in this statement is important to note:&lt;br /&gt;
* Expression: means a comparison between a context variable and a constant (also between two constants or two context variables)&lt;br /&gt;
* Context variable can be:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Syntax !! Example !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@#AD_Org_ID@&amp;lt;/pre&amp;gt; || These variables starting with # are set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@$Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@$C_AcctSchema_ID@&amp;lt;/pre&amp;gt; || Accounting variables (starting with $) also set at login time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@C_Tax_ID@&amp;lt;/pre&amp;gt; || This usually refers to a field in the current window (or another process parameter in the process dialog)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@TabNo|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID@&amp;lt;/pre&amp;gt; || This refers to a field on the specified tab (tab numbering starts with zero)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@~Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@~C_Tax_ID@&amp;lt;/pre&amp;gt; || When the variable starts with ~ that means a field in the CURRENT tab, do not look for fields in the other tabs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@P|Variable@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@P|C_Country_ID@&amp;lt;/pre&amp;gt; || These are preferences, sometimes defined at login time, sometimes defined by the user&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable:Default@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@0|C_Tax_ID:0@&amp;lt;/pre&amp;gt; || At the end of any of the variables described above, you can set a default to be set when the variable is null or it doesn't exist, the default is defined at the end of the variable after a colon :&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@AnyVariable.Column@&amp;lt;/pre&amp;gt; || &amp;lt;pre&amp;gt;@AD_Org_ID.Name@&amp;lt;/pre&amp;gt; || This is a way to obtain and compare values from foreign tables, in the example it gets the Name from the table AD_Org for comparison.&lt;br /&gt;
NOTES:&lt;br /&gt;
&lt;br /&gt;
* In process parameters this syntax just works for columnnames where the tablename is implicit in the name (like Table Direct).&lt;br /&gt;
* In Tab Display Logic this notation doesn't work&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$env.USER@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from an operating system environment variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-4939 since r8.2]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.USER@&amp;lt;/code&amp;gt; will be rendered as the username of the operating system&lt;br /&gt;
* &amp;lt;code&amp;gt;@$env.LANG@&amp;lt;/code&amp;gt; will return the language of the operating system&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.VARIABLE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Obtain the value from a [https://wiki.idempiere.org/en/System_Configurator_(Window_ID-50006) System Configurator] variable ([https://idempiere.atlassian.net/browse/IDEMPIERE-6596 since r12]).&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;@$sysconfig.ZK_MAX_UPLOAD_SIZE@&amp;lt;/code&amp;gt; will return the value of the System Configurator ZK_MAX_UPLOAD_SIZE&lt;br /&gt;
|}&lt;br /&gt;
* Note that when checking a context variable ending with _ID the null is replaced with a zero value&lt;br /&gt;
&lt;br /&gt;
* Constants are strings or numeric values, the constants don't need to be surrounded by quotes, but if they are surrounded by quotes they are properly managed&lt;br /&gt;
** The constant empty string is defined as two quotes: ''&lt;br /&gt;
&lt;br /&gt;
* The expression then requires a comparison operator, these are:&lt;br /&gt;
** Equals =&lt;br /&gt;
** Greater than &amp;gt;&lt;br /&gt;
** Less than &amp;lt;&lt;br /&gt;
** Different ! or ^ or ~&lt;br /&gt;
&lt;br /&gt;
* Several expressions can be evaluated '''''FROM LEFT TO RIGHT''''' using AND or OR logical operators&lt;br /&gt;
** the AND operator is &amp;amp;&lt;br /&gt;
** the OR operator is |&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;1=2&amp;lt;/pre&amp;gt; || This is evaluated always as false&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@ElementType@=A &amp;amp; @IsSummary@=N &amp;amp; @IsDetailBPartner@=Y&amp;lt;/pre&amp;gt; || If the field ElementType contains an A, and the flag IsSummary is unchecked, and the flag IsDetailBPartner is checked&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;pre&amp;gt;@#AD_Client_ID@&amp;gt;0&amp;lt;/pre&amp;gt; || When the field AD_Client_ID is greater than zero, this means false in System client, and true for all the other clients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SQL Context Logic ==&lt;br /&gt;
&lt;br /&gt;
Logic based on a SQL query works like this:&lt;br /&gt;
* no row returned means false&lt;br /&gt;
* otherwise is true.&lt;br /&gt;
&lt;br /&gt;
The SQL logic must start with &amp;lt;code&amp;gt;@SQL=&amp;lt;/code&amp;gt; and it uses commonly context variables.&lt;br /&gt;
&lt;br /&gt;
Preceding the query with a &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; sign, this is, starting with &amp;lt;code&amp;gt;@SQL=!&amp;lt;/code&amp;gt;, inverts the logic (no rows is true, otherwise false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
@SQL=!SELECT 1 FROM WS_WebService_Para WHERE WS_WebServiceType_ID = @WS_WebServiceType_ID:0@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Context Variables Replacement ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:To Be Documented]]&lt;br /&gt;
[[Category:User Manual‏‎ ]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23955</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23955"/>
		<updated>2026-07-30T19:04:20Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-07-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3320 (#3320)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7045 IDEMPIERE-7045] Implement OSGi component support for WEditor.DynamicDisplayListener [https://github.com/idempiere/idempiere/pull/3288 (#3288)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7062 IDEMPIERE-7062] Sales Order changing documentNo even when the sequence is the same [https://github.com/idempiere/idempiere/pull/3308 (#3308)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7065 IDEMPIERE-7065] Allow requests without initial SalesRep [https://github.com/idempiere/idempiere/pull/3313 (#3313)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7066 IDEMPIERE-7066] Import process should fill UU columns [https://github.com/idempiere/idempiere/pull/3314 (#3314)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7068 IDEMPIERE-7068] Quick Entry broken for new parent record [https://github.com/idempiere/idempiere/pull/3316 (#3316)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7071 IDEMPIERE-7071] Menu search was trimmed until release-12 [https://github.com/idempiere/idempiere/pull/3319 (#3319)]&lt;br /&gt;
&lt;br /&gt;
== 2026-07-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6732 IDEMPIERE-6732] Prevent Multiple Receipt Generation from the Same Invoice [https://github.com/idempiere/idempiere/pull/2983 (#2983)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6893 IDEMPIERE-6893] Form Customization [https://github.com/idempiere/idempiere/pull/3167 (#3167)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6952 IDEMPIERE-6952] Fix Open transaction when OFX1ToXML parsing fails [https://github.com/idempiere/idempiere/pull/3215 (#3215)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6973 IDEMPIERE-6973] Incorrect average PO cost (&amp;lt;&amp;gt; GL amount) after reverse/correct of Landed Cost Invoice with multiple lines [https://github.com/idempiere/idempiere/pull/3281 (#3281)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6993 IDEMPIERE-6993] Match Invoice wrong GL account and posting [https://github.com/idempiere/idempiere/pull/3283 (#3283)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7015 IDEMPIERE-7015] Sort open transactions by StartTime in ascending order [https://github.com/idempiere/idempiere/pull/3270 (#3270)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7037 IDEMPIERE-7037] New Process Copy Window Customization [https://github.com/idempiere/idempiere/pull/3284 (#3284)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7038 IDEMPIERE-7038] iDempiere master/release-13 not compatible with Eclipse 2026-06 [https://github.com/idempiere/idempiere/pull/3286 (#3286)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7039 IDEMPIERE-7039] Improve Migrate Storage Provider error handling and reporting [https://github.com/idempiere/idempiere/pull/3300 (#3300)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7047 IDEMPIERE-7047] RMA: Shipment Callout to Set Business Partner field [https://github.com/idempiere/idempiere/pull/3290 (#3290)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7048 IDEMPIERE-7048] Improve Load Template button in Send Mail dialog [https://github.com/idempiere/idempiere/pull/3291 (#3291)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7051 IDEMPIERE-7051] Move Doc_AllocationHdr.equalFactLineIDs to FactLine in order to be used elsewhere [https://github.com/idempiere/idempiere/pull/3292 (#3292)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7055 IDEMPIERE-7055] Improve Copy Order Process Error Messaging [https://github.com/idempiere/idempiere/pull/3298 (#3298)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7056 IDEMPIERE-7056] Use setClob() for large strings on Oracle to avoid ORA-18717 with Oracle JDBC 23 [https://github.com/idempiere/idempiere/pull/3299 (#3299)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7059 IDEMPIERE-7059] Scheduler window should be restricted to Advanced Users only [https://github.com/idempiere/idempiere/pull/3302 (#3302)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7060 IDEMPIERE-7060] Redesign Forgot Password flow [https://github.com/idempiere/idempiere/pull/3303 (#3303)]&lt;br /&gt;
&lt;br /&gt;
== 2026-06-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6832 IDEMPIERE-6832] Average PO Costing Qty &amp;lt;&amp;gt; Stock Qty [https://github.com/idempiere/idempiere/pull/3205 (#3205)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7011 IDEMPIERE-7011] Storage Validator OSGI Service [https://github.com/idempiere/idempiere/pull/3269 (#3269)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7019 IDEMPIERE-7019]: Add currency for Chilean Unidad de Fomento [https://github.com/idempiere/idempiere/pull/3275 (#3275)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7022 IDEMPIERE-7022]: AllocationReset : error message not explicit when commit fails [https://github.com/idempiere/idempiere/pull/3277 (#3277)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7025 IDEMPIERE-7025] Requests &amp;gt; Update Notification is showing and notifying inactive users [https://github.com/idempiere/idempiere/pull/3282 (#3282)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] DBA - Tuning AD_Attachment (FHCA-3962) [https://github.com/idempiere/idempiere/pull/3271 (#3271)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=NF13_Storage_Validator_OSGI_Service&amp;diff=23954</id>
		<title>NF13 Storage Validator OSGI Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=NF13_Storage_Validator_OSGI_Service&amp;diff=23954"/>
		<updated>2026-07-29T15:51:59Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: redirection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has moved. Please go to https://docs.idempiere.org/docs/new-features/v13/storage-validator-osgi-service&lt;br /&gt;
&lt;br /&gt;
[[Category:New Features|F]]&lt;br /&gt;
[[Category:New Features w13|F]]&lt;br /&gt;
[[Category:New Features Functional]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23953</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23953"/>
		<updated>2026-07-14T11:38:30Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-07-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6732 IDEMPIERE-6732] Prevent Multiple Receipt Generation from the Same Invoice [https://github.com/idempiere/idempiere/pull/2983 (#2983)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6893 IDEMPIERE-6893] Form Customization [https://github.com/idempiere/idempiere/pull/3167 (#3167)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6952 IDEMPIERE-6952] Fix Open transaction when OFX1ToXML parsing fails [https://github.com/idempiere/idempiere/pull/3215 (#3215)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6973 IDEMPIERE-6973] Incorrect average PO cost (&amp;lt;&amp;gt; GL amount) after reverse/correct of Landed Cost Invoice with multiple lines [https://github.com/idempiere/idempiere/pull/3281 (#3281)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6993 IDEMPIERE-6993] Match Invoice wrong GL account and posting [https://github.com/idempiere/idempiere/pull/3283 (#3283)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7015 IDEMPIERE-7015] Sort open transactions by StartTime in ascending order [https://github.com/idempiere/idempiere/pull/3270 (#3270)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7037 IDEMPIERE-7037] New Process Copy Window Customization [https://github.com/idempiere/idempiere/pull/3284 (#3284)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7038 IDEMPIERE-7038] iDempiere master/release-13 not compatible with Eclipse 2026-06 [https://github.com/idempiere/idempiere/pull/3286 (#3286)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7039 IDEMPIERE-7039] Improve Migrate Storage Provider error handling and reporting [https://github.com/idempiere/idempiere/pull/3300 (#3300)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7047 IDEMPIERE-7047] RMA: Shipment Callout to Set Business Partner field [https://github.com/idempiere/idempiere/pull/3290 (#3290)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7048 IDEMPIERE-7048] Improve Load Template button in Send Mail dialog [https://github.com/idempiere/idempiere/pull/3291 (#3291)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7051 IDEMPIERE-7051] Move Doc_AllocationHdr.equalFactLineIDs to FactLine in order to be used elsewhere [https://github.com/idempiere/idempiere/pull/3292 (#3292)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7055 IDEMPIERE-7055] Improve Copy Order Process Error Messaging [https://github.com/idempiere/idempiere/pull/3298 (#3298)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7056 IDEMPIERE-7056] Use setClob() for large strings on Oracle to avoid ORA-18717 with Oracle JDBC 23 [https://github.com/idempiere/idempiere/pull/3299 (#3299)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7059 IDEMPIERE-7059] Scheduler window should be restricted to Advanced Users only [https://github.com/idempiere/idempiere/pull/3302 (#3302)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7060 IDEMPIERE-7060] Redesign Forgot Password flow [https://github.com/idempiere/idempiere/pull/3303 (#3303)]&lt;br /&gt;
&lt;br /&gt;
== 2026-06-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6832 IDEMPIERE-6832] Average PO Costing Qty &amp;lt;&amp;gt; Stock Qty [https://github.com/idempiere/idempiere/pull/3205 (#3205)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7011 IDEMPIERE-7011] Storage Validator OSGI Service [https://github.com/idempiere/idempiere/pull/3269 (#3269)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7019 IDEMPIERE-7019]: Add currency for Chilean Unidad de Fomento [https://github.com/idempiere/idempiere/pull/3275 (#3275)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7022 IDEMPIERE-7022]: AllocationReset : error message not explicit when commit fails [https://github.com/idempiere/idempiere/pull/3277 (#3277)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7025 IDEMPIERE-7025] Requests &amp;gt; Update Notification is showing and notifying inactive users [https://github.com/idempiere/idempiere/pull/3282 (#3282)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] DBA - Tuning AD_Attachment (FHCA-3962) [https://github.com/idempiere/idempiere/pull/3271 (#3271)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23902</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23902"/>
		<updated>2026-06-09T15:06:54Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-06-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6832 IDEMPIERE-6832] Average PO Costing Qty &amp;lt;&amp;gt; Stock Qty [https://github.com/idempiere/idempiere/pull/3205 (#3205)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7011 IDEMPIERE-7011] Storage Validator OSGI Service [https://github.com/idempiere/idempiere/pull/3269 (#3269)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7019 IDEMPIERE-7019]: Add currency for Chilean Unidad de Fomento [https://github.com/idempiere/idempiere/pull/3275 (#3275)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7022 IDEMPIERE-7022]: AllocationReset : error message not explicit when commit fails [https://github.com/idempiere/idempiere/pull/3277 (#3277)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7025 IDEMPIERE-7025] Requests &amp;gt; Update Notification is showing and notifying inactive users [https://github.com/idempiere/idempiere/pull/3282 (#3282)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] DBA - Tuning AD_Attachment (FHCA-3962) [https://github.com/idempiere/idempiere/pull/3271 (#3271)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Request_(all)_(Window_ID-232)&amp;diff=23901</id>
		<title>Request (all) (Window ID-232)</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Request_(all)_(Window_ID-232)&amp;diff=23901"/>
		<updated>2026-06-09T11:46:07Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- breadcrumb --&amp;gt;&lt;br /&gt;
&amp;lt;font size=-2&amp;gt;&lt;br /&gt;
&amp;amp;lArr;&lt;br /&gt;
[[Manual|Table of Contents]]&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual|W]]&lt;br /&gt;
&lt;br /&gt;
[[en:Request (all) (Window ID-232)]]&lt;br /&gt;
[[ar:Request (all) (نافذة ID-232)]]&lt;br /&gt;
[[bg:Заявки (всички) (прозорец ID-232)]]&lt;br /&gt;
[[da:Request (all) (Vindue ID-232)]]&lt;br /&gt;
[[de:Anfragen (alle) (Fenster ID-232)]]&lt;br /&gt;
[[el:Αιτήματα (Όλα) (παράθυρο ID-232)]]&lt;br /&gt;
[[es:Todas las Solicitudes (Ventana ID-232)]]&lt;br /&gt;
[[fr:Voir toute les requètes (Fenêtre ID-232)]]&lt;br /&gt;
[[hu:Igény (mind) (Aablak ID-232)]]&lt;br /&gt;
[[id:Permintaan (semuanya) (jendela ID-232)]]&lt;br /&gt;
[[it:Richiesta tutto (finestra ID-232)]]&lt;br /&gt;
[[ja:要求(すべて) (ウィンドウ ID-232)]]&lt;br /&gt;
[[ms:Permintaan (semuanya) (tetingkap ID-232)]]&lt;br /&gt;
[[nl:Request (all) (Venster ID-232)]]&lt;br /&gt;
[[pl:Wszystkie zapytania (Okno ID-232)]]&lt;br /&gt;
[[pt:Executar todas as Tarefas (Janela ID-232)]]&lt;br /&gt;
[[ro:Sesizări (toate) (fereastră ID-232)]]&lt;br /&gt;
[[ru:Запросы (все) (окно ID-232)]]&lt;br /&gt;
[[sr:Захтев (све) (прозор ID-232)]]&lt;br /&gt;
[[sv:Alla förfrågningar (Fönster ID-232)]]&lt;br /&gt;
[[th:คำร้องขอ (ทั้งหมด) (หน้าต่าง ID-232)]]&lt;br /&gt;
[[tr:Request (all) (pencere ID-232)]]&lt;br /&gt;
[[zh:所有请求 (窗口 ID-232)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Note to editors: DON'T MODIFY THIS CODE --&amp;gt;&lt;br /&gt;
[[Category: Reference Manual]]&lt;br /&gt;
[[Category: sales request]]&lt;br /&gt;
&lt;br /&gt;
{{Request (all) (Window ID-232 V1.0.0)}}&lt;br /&gt;
&amp;lt;!-- END Note to editors: DON'T MODIFY THIS CODE --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contributions / Posts==&lt;br /&gt;
&lt;br /&gt;
=== How Notification works ===&lt;br /&gt;
&lt;br /&gt;
To notify users via email or Notice RequestEventHandler manages this query:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT u.AD_User_ID, u.NotificationType, u.EMail, u.Name, MAX(r.AD_Role_ID) &lt;br /&gt;
FROM RV_RequestUpdates_Only ru&lt;br /&gt;
 INNER JOIN AD_User u ON (ru.AD_User_ID=u.AD_User_ID OR u.AD_User_ID=?)&lt;br /&gt;
 LEFT OUTER JOIN AD_User_Roles r ON (u.AD_User_ID=r.AD_User_ID) &lt;br /&gt;
WHERE ru.R_Request_ID=? &lt;br /&gt;
GROUP BY u.AD_User_ID, u.NotificationType, u.EMail, u.Name&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the Entry Confidentiality on Request is set to Internal, just users with a role are notified.&lt;br /&gt;
&lt;br /&gt;
The view RV_RequestUpdates_Only is intended to extract unique users based on the view RV_RequestUpdates.&lt;br /&gt;
&lt;br /&gt;
This view gets the users from:&lt;br /&gt;
* the users added directly for a ''Request'' in the ''Update Notification'' tab&lt;br /&gt;
* the ''User/Contact'' referenced in the ''Request'' (if any)&lt;br /&gt;
* the ''Sales Representative'' referenced in the ''Request''&lt;br /&gt;
* the users pertaining to the ''Role'' referenced in the ''Request'' (if any)&lt;br /&gt;
* the users added in ''Request Group'' &amp;gt; ''Request Updates'' tab&lt;br /&gt;
* the users added in ''Request Type'' &amp;gt; ''Update Notification'' tab&lt;br /&gt;
* the users added in ''Request Category'' &amp;gt; ''Update Notification'' tab&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Request_(all)_(Window_ID-232)&amp;diff=23900</id>
		<title>Request (all) (Window ID-232)</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Request_(all)_(Window_ID-232)&amp;diff=23900"/>
		<updated>2026-06-09T11:45:29Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Contributions / Posts */ How Notification works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- breadcrumb --&amp;gt;&lt;br /&gt;
&amp;lt;font size=-2&amp;gt;&lt;br /&gt;
&amp;amp;lArr;&lt;br /&gt;
[[Manual|Table of Contents]]&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual|W]]&lt;br /&gt;
&lt;br /&gt;
[[en:Request (all) (Window ID-232)]]&lt;br /&gt;
[[ar:Request (all) (نافذة ID-232)]]&lt;br /&gt;
[[bg:Заявки (всички) (прозорец ID-232)]]&lt;br /&gt;
[[da:Request (all) (Vindue ID-232)]]&lt;br /&gt;
[[de:Anfragen (alle) (Fenster ID-232)]]&lt;br /&gt;
[[el:Αιτήματα (Όλα) (παράθυρο ID-232)]]&lt;br /&gt;
[[es:Todas las Solicitudes (Ventana ID-232)]]&lt;br /&gt;
[[fr:Voir toute les requètes (Fenêtre ID-232)]]&lt;br /&gt;
[[hu:Igény (mind) (Aablak ID-232)]]&lt;br /&gt;
[[id:Permintaan (semuanya) (jendela ID-232)]]&lt;br /&gt;
[[it:Richiesta tutto (finestra ID-232)]]&lt;br /&gt;
[[ja:要求(すべて) (ウィンドウ ID-232)]]&lt;br /&gt;
[[ms:Permintaan (semuanya) (tetingkap ID-232)]]&lt;br /&gt;
[[nl:Request (all) (Venster ID-232)]]&lt;br /&gt;
[[pl:Wszystkie zapytania (Okno ID-232)]]&lt;br /&gt;
[[pt:Executar todas as Tarefas (Janela ID-232)]]&lt;br /&gt;
[[ro:Sesizări (toate) (fereastră ID-232)]]&lt;br /&gt;
[[ru:Запросы (все) (окно ID-232)]]&lt;br /&gt;
[[sr:Захтев (све) (прозор ID-232)]]&lt;br /&gt;
[[sv:Alla förfrågningar (Fönster ID-232)]]&lt;br /&gt;
[[th:คำร้องขอ (ทั้งหมด) (หน้าต่าง ID-232)]]&lt;br /&gt;
[[tr:Request (all) (pencere ID-232)]]&lt;br /&gt;
[[zh:所有请求 (窗口 ID-232)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Note to editors: DON'T MODIFY THIS CODE --&amp;gt;&lt;br /&gt;
[[Category: Reference Manual]]&lt;br /&gt;
[[Category: sales request]]&lt;br /&gt;
&lt;br /&gt;
{{Request (all) (Window ID-232 V1.0.0)}}&lt;br /&gt;
&amp;lt;!-- END Note to editors: DON'T MODIFY THIS CODE --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contributions / Posts==&lt;br /&gt;
&lt;br /&gt;
=== How Notification works ==&lt;br /&gt;
&lt;br /&gt;
To notify users via email or Notice RequestEventHandler manages this query:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT u.AD_User_ID, u.NotificationType, u.EMail, u.Name, MAX(r.AD_Role_ID) &lt;br /&gt;
FROM RV_RequestUpdates_Only ru&lt;br /&gt;
 INNER JOIN AD_User u ON (ru.AD_User_ID=u.AD_User_ID OR u.AD_User_ID=?)&lt;br /&gt;
 LEFT OUTER JOIN AD_User_Roles r ON (u.AD_User_ID=r.AD_User_ID) &lt;br /&gt;
WHERE ru.R_Request_ID=? &lt;br /&gt;
GROUP BY u.AD_User_ID, u.NotificationType, u.EMail, u.Name&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the Entry Confidentiality on Request is set to Internal, just users with a role are notified.&lt;br /&gt;
&lt;br /&gt;
The view RV_RequestUpdates_Only is intended to extract unique users based on the view RV_RequestUpdates.&lt;br /&gt;
&lt;br /&gt;
This view gets the users from:&lt;br /&gt;
* the users added directly for a ''Request'' in the ''Update Notification'' tab&lt;br /&gt;
* the ''User/Contact'' referenced in the ''Request'' (if any)&lt;br /&gt;
* the ''Sales Representative'' referenced in the ''Request''&lt;br /&gt;
* the users pertaining to the ''Role'' referenced in the ''Request'' (if any)&lt;br /&gt;
* the users added in ''Request Group'' &amp;gt; ''Request Updates'' tab&lt;br /&gt;
* the users added in ''Request Type'' &amp;gt; ''Update Notification'' tab&lt;br /&gt;
* the users added in ''Request Category'' &amp;gt; ''Update Notification'' tab&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23888</id>
		<title>Migration Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23888"/>
		<updated>2026-06-02T13:39:19Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Technical Notes from 13 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Features]]&lt;br /&gt;
[[Category:Migration]] &lt;br /&gt;
[[Category:Installation|M]] &lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[Category:Updated2022]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 14 (to be released, known as master) =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 14 ==&lt;br /&gt;
&lt;br /&gt;
=== WebSocket as default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
The default server push mechanism in r14 has been set to WebSocket.&lt;br /&gt;
&lt;br /&gt;
Websocket improves performance and reduces overhead in standard environments.&lt;br /&gt;
&lt;br /&gt;
However, WebSocket connectivity may fail in certain infrastructure configurations. Three known scenarios are affected.&lt;br /&gt;
&lt;br /&gt;
* LXC containers: WebSocket connections may not work correctly depending on the host kernel and network configuration of the LXC environment&lt;br /&gt;
* Port redirection via iptables: Redirecting port 8443 to 443 using iptables rules can break WebSocket handshake negotiation&lt;br /&gt;
* Connecting using a ssh tunnel for port 8443 doesn't work&lt;br /&gt;
&lt;br /&gt;
'''To use Atmosphere:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=atmosphere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use Websocket you can use &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;, or simply don't set it at all as is the default.&lt;br /&gt;
&lt;br /&gt;
=== SOAP Web Services Extracted from Core ===&lt;br /&gt;
&lt;br /&gt;
The SOAP Web Services bundle (&amp;lt;code&amp;gt;org.idempiere.webservice&amp;lt;/code&amp;gt;) has been removed from iDempiere core and is now distributed as a separate optional plugin hosted at [https://github.com/idempiere/idempiere-soap-webservices idempiere-soap-webservices].&lt;br /&gt;
&lt;br /&gt;
'''Required action for implementations using SOAP Web Services:'''&lt;br /&gt;
&lt;br /&gt;
After upgrading to this release, the SOAP endpoints (&amp;lt;code&amp;gt;ModelADService&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CompositeService&amp;lt;/code&amp;gt;) will '''no longer be available''' until the plugin is explicitly installed via the Extension Manager.&lt;br /&gt;
&lt;br /&gt;
To restore SOAP Web Services functionality:&lt;br /&gt;
# Open the '''Extension Manager''' in iDempiere.&lt;br /&gt;
# Install the '''iDempiere SOAP Web Services (ADInterface)''' extensions&lt;br /&gt;
&lt;br /&gt;
'''No action is required''' for implementations that use only the REST API.&lt;br /&gt;
&lt;br /&gt;
'''For plugin developers:''' If your custom plugin depends on SOAP web service classes (e.g. inside &amp;lt;code&amp;gt;org.idempiere.webservice.*&amp;lt;/code&amp;gt;), you must update your plugin's dependency declaration in &amp;lt;code&amp;gt;MANIFEST.MF&amp;lt;/code&amp;gt; to reference the new standalone bundle instead of core. Failure to do so will result in compilation errors when building against this release.&lt;br /&gt;
&lt;br /&gt;
This change reduces the core footprint by removing the Apache CXF framework and related WSDL libraries from base installations.&lt;br /&gt;
&lt;br /&gt;
See https://docs.idempiere.org/docs/new-features/v14/soap-web-services-plugin&lt;br /&gt;
&lt;br /&gt;
=== Accounting Implementation Classes Moved to org.idempiere.acct ===&lt;br /&gt;
&lt;br /&gt;
The accounting implementation classes (document posting logic, &amp;lt;code&amp;gt;Doc_*&amp;lt;/code&amp;gt; classes, accounting schema handling) have been extracted from iDempiere core into a dedicated bundle: &amp;lt;code&amp;gt;org.idempiere.acct&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please check for details and impact at https://docs.idempiere.org/docs/new-features/v14/accounting-plugin&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 13 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 13 ==&lt;br /&gt;
&lt;br /&gt;
=== Changes in Inventory Imports via CSV ===&lt;br /&gt;
&lt;br /&gt;
With [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010], the **UOM** and **Qty Entered** fields in the Physical Inventory and Inventory Increase/Decrease windows were introduced. However, existing CSV Import Formats for &amp;quot;Inventory Decrease/Increase&amp;quot; and &amp;quot;Physical Inventory&amp;quot; will fail and require updates because the old Qty fields are now read-only:&lt;br /&gt;
&lt;br /&gt;
* In Inventory Decrease/Increase, `QtyInternalUse` must be changed to `QtyEntered`.&lt;br /&gt;
* In Physical Inventory, `QtyCount` must be changed to `QtyEntered`.&lt;br /&gt;
&lt;br /&gt;
=== Changes in default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
Initially release-13 was released with websocket as the default push server, but after [[ChangeLog_Release_13#2026-04-13|Release-13-2026-04-13]] it was rolled back and the default is again atmosphere.  In release-14 it has been changed again to websocket (see comments above)&lt;br /&gt;
&lt;br /&gt;
'''To use Websocket in release-13:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAttachment.setTitle driven by list ===&lt;br /&gt;
&lt;br /&gt;
The column AD_Attachment.Title was managed as a free text field, but in reality it contained a list of values.&lt;br /&gt;
&lt;br /&gt;
So, with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] the column was changed to a List, and the values are now restricted.  So, if you have used MAttachment.setTitle in a plugin or test for a different purpose, this plugin will threw an error if the value is not one of the allowed in the list.&lt;br /&gt;
&lt;br /&gt;
=== UUID native type in PostgreSQL and UUIDv7 ===&lt;br /&gt;
&lt;br /&gt;
A big change for PostgreSQL was implemented with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650]:&lt;br /&gt;
All the UUID columns in the database were converted from VARCHAR to the native UUID type.&lt;br /&gt;
This is a big recommendation from postgresql that impacts positively performance and database size.&lt;br /&gt;
&lt;br /&gt;
Also the UUIDs generated in iDempiere were moved to the [https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_7_(timestamp_and_random) UUIDv7 standard], this is also a performance recommendation, as well as it allows to order by UUID and have the same order as the creation of the records, which was something possible with the _ID columns too.&lt;br /&gt;
&lt;br /&gt;
There are some implications about this change:&lt;br /&gt;
&lt;br /&gt;
1 - the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function uses the function &amp;lt;code&amp;gt;gen_random_uuid&amp;lt;/code&amp;gt; which is available natively in postgresql since version 13.&lt;br /&gt;
&lt;br /&gt;
Previous versions will throw an error when applying the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For versions 11 and 12 you can still use it enabling the pgcrypto extension:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
CREATE EXTENSION pgcrypto;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 - the script &amp;lt;code&amp;gt;postgresql/202510101902_IDEMPIERE-6650-uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using a UUID column and at the same time having the UNION clause.&lt;br /&gt;
&lt;br /&gt;
If this happens then you must take care of dropping those views (and their dependencies) before applying the script, and then recreating them back at the end.&lt;br /&gt;
&lt;br /&gt;
3 - the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function&lt;br /&gt;
&lt;br /&gt;
You need to apply the same solution as the previous point, drop those views before and recreate them after.&lt;br /&gt;
&lt;br /&gt;
This script can also fail on versions 11 and 12, and as explained above the solution is to install the pgcrypto extension.&lt;br /&gt;
&lt;br /&gt;
=== Problem with some PostgreSQL queries because of the UUID changes ===&lt;br /&gt;
&lt;br /&gt;
For the solution of [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] the JDBC URL now has the &amp;lt;code&amp;gt;stringtype=unspecified&amp;lt;/code&amp;gt; to allow the postgresql backend determine the data type of the parameters.&lt;br /&gt;
&lt;br /&gt;
However, there are certain SQL constructions that can be problematic for postgres, some of those are commonly used in jasper.&lt;br /&gt;
&lt;br /&gt;
For example a jasper with the following where clause:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
SELECT Name FROM C_BPartner bp WHERE ( ? IS NULL OR bp.Value=? )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
throws error &amp;lt;code&amp;gt;org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The solution is simple, the SQL must be changed to cast the binding variable (?) to the desired data type.  In postgresql that can be done using &amp;lt;code&amp;gt;::varchar&amp;lt;/code&amp;gt;, but this is not compatible with oracle, so it's more recommended to use the CAST function, or in case of a string you can concatenate with an empty string, like:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
SELECT Name FROM C_BPartner bp WHERE ( ?||'' IS NULL OR bp.Value=? )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information read [https://idempiere.atlassian.net/browse/IDEMPIERE-6650?focusedCommentId=72214 the comment here].&lt;br /&gt;
&lt;br /&gt;
=== Deprecated PO getters on X_ classes ===&lt;br /&gt;
The X_ classes have getter methods for every foreign key, for example &amp;lt;code&amp;gt;X_C_Order.getC_DocType()&amp;lt;/code&amp;gt; - the usage of these getters is very handy and because of that it has been widely used historically.  The problem is that the way these methods are implemented is very expensive in performance, and it cannot use caches at all.  So with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6642 IDEMPIERE-6642] we decided to deprecate.  What you probably see when migrating to release-13 is a lot of deprecate warnings in your custom and plugins code, these warnings are harmless, but is recommended to migrate to better methods that have a better performance and use cache when possible.&lt;br /&gt;
&lt;br /&gt;
=== Removal of old deprecated code ===&lt;br /&gt;
This release removes several classes and methods that were deprecated more than two major versions ago.&amp;lt;br&amp;gt;&lt;br /&gt;
Custom plugins and customizations that still call these classes and methods '''will no longer compile and must be updated'''.&amp;lt;br&amp;gt;&lt;br /&gt;
See the full commit here: [https://idempiere.atlassian.net/browse/IDEMPIERE-6735 IDEMPIERE-6735]  &lt;br /&gt;
&lt;br /&gt;
==== Removed Classes ====&lt;br /&gt;
* org.compiere.process.BOMValidate&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookup&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookupInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.Postcode&lt;br /&gt;
* com.akunagroup.uk.postcode.package-info&lt;br /&gt;
* org.adempiere.util.GenerateModel&lt;br /&gt;
* org.adempiere.util.GenerateModelJPA&lt;br /&gt;
* org.compiere.db.SecurityPrincipal&lt;br /&gt;
* org.compiere.model.MBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBOMProduct and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBlackListCheque and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MProductBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.util.CallableResult&lt;br /&gt;
* org.compiere.util.ExecuteResult&lt;br /&gt;
* org.compiere.util.ExtensionFileFilter&lt;br /&gt;
* org.compiere.util.FileUpload&lt;br /&gt;
* org.compiere.util.Queue&lt;br /&gt;
* org.adempiere.webui.DelegatingServlet&lt;br /&gt;
* org.adempiere.webui.event.TouchEventHelper&lt;br /&gt;
* org.adempiere.webui.panel.ChatPanel&lt;br /&gt;
* org.adempiere.webui.panel.ConfigurationPanel&lt;br /&gt;
* org.adempiere.webui.panel.FooterPanel&lt;br /&gt;
* org.adempiere.webui.panel.RequestNoticePanel&lt;br /&gt;
* org.adempiere.webui.window.FDialog&lt;br /&gt;
&lt;br /&gt;
==== Removed Methods ====&lt;br /&gt;
'''AbstractADWindowContent'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void executeASync(ProcessInfo pi)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ADSortTab'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void editRecord(boolean b)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''AEnv'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void exit (int status)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean isTablet()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CConnection'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public InitialContext getInitialContext(boolean useCache)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CustomizerGridViewDialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean onCustomize(ADTabpanel tabPanel)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean showCustomize(int WindowNo, int AD_Tab_ID, Map &amp;amp;lt;Integer, String&amp;amp;gt; columnsWidth, ArrayList &amp;amp;lt;Integer&amp;amp;gt; gridFieldIds, GridView gridPanel, QuickGridView quickGridView, boolean isQuickForm)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage, String additionalMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''diff_match_patch'''&lt;br /&gt;
* &amp;lt;code&amp;gt;@Deprecated public LinkedList&amp;amp;lt;Patch&amp;amp;gt; patch_make(String text1, String text2, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Env'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties getRemoteCallCtx(Properties ctx)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GridTable'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isSortedAscending()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getSortColumnIndex()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''I_C_Country'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isPostcodeLookup()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClassName()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClientID()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupPassword()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupUrl()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setIsPostcodeLookup(boolean IsPostcodeLookup)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClassName(String LookupClassName)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClientID(String LookupClientID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupPassword(String LookupPassword)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupUrl(String LookupUrl)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LayoutUtils'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void sendDeferLayoutEvent(org.zkoss.zul.Borderlayout layout, int timeout)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Login'''&lt;br /&gt;
* &amp;lt;code&amp;gt;private KeyNamePair[] getRoles(String app_user, String app_pwd, boolean force)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;protected KeyNamePair[] getRoles(CConnection cc, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(Principal app_user)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(String app_user, String app_pwd)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties initTest (boolean isClient)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MAging'''&lt;br /&gt;
* &amp;lt;code&amp;gt;MAging (Properties ctx, int AD_PInstance_ID, Timestamp StatementDate, int C_BPartner_ID, int C_Currency_ID, int C_Invoice_ID, int C_InvoicePaySchedule_ID, int C_BP_Group_ID, Timestamp DueDate, boolean IsSOTrx, String trxName)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartner'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getAD_OrgBP_ID_Int()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartnerLocation'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MBPartnerLocation[] getForBPartner(Properties ctx, int C_BPartner_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCharge'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MAccount getAccount (int C_Charge_ID, MAcctSchema as, BigDecimal amount)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCountry'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void setDisplayLanguage (String AD_Language)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MPaySelectionLine'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void xsetInvoice(int C_Invoice_ID, boolean isSOTrx, BigDecimal OpenAmt, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MWFEventAudit'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID, int AD_WF_Node_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WCreateFromWindow'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setStatusBar(StatusBarPanel statusBar)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WListItemRenderer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setRO(int colIndex, Boolean readOnly)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WLocatorEditor'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setField(org.compiere.model.GridField mField)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WTableColumn'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean getResizable()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMaxWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMinWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getPreferredWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMaxWidth(int maxWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMinWidth(int minWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setPreferredWidth(int preferredWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setResizable(boolean isResizable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setWidth(int width)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WindowContainer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertAfter(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertBefore(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Required developer actions ====&lt;br /&gt;
* Rebuild your custom plugins and note any compilation errors related to missing classes or methods.&lt;br /&gt;
* For each error, replace the removed deprecated API with its recommended alternative (standard getters/setters, services, or cache‑aware access patterns).&lt;br /&gt;
* Re‑run your test suite (or perform manual regression tests) to validate that business logic continues to work as expected.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Only APIs that had been deprecated for more than two major releases were removed, following the project deprecation policy.''&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 13 ==&lt;br /&gt;
With the [https://idempiere.atlassian.net/browse/IDEMPIERE-6575 IDEMPIERE-6575] ticket, on the AD_Sequence_No.CalendarYearMonth column was renamed to SequenceKey, this means for the  getCalendarYearMonth and  setCalendarYearMonth methods the adequate replacement is getSequenceKey and setSequenceKey.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 12 =&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
As reported by Robert Green [https://groups.google.com/g/idempiere/c/iFtEV_6mwf0/m/GejbvQhOAwAJ on forums], there are problems running iDempiere '''as a server''' on windows.&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== JDBC libraries upgraded ===&lt;br /&gt;
&lt;br /&gt;
Three libraries related to JDBC were upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] on [[ChangeLog_Release_12#2025-11-10|release-12.2025-11-10]]&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL from 42.7.3 to 42.7.8&lt;br /&gt;
* Oracle from ojdbc10 19.21.0.0 to ojdbc17 23.26.0.0.0&lt;br /&gt;
* HikariCP from 5.1.0 to 7.0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL 42.7.8 has a change that could break previous working code:&lt;br /&gt;
* previously the DatabaseMetaData.get* methods worked with any catalog name, that parameter was simply ignored&lt;br /&gt;
* since 42.7.5 the catalog is used as a filter, so it must be passed as the database name, or null&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3394&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3389&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/pull/3390&lt;br /&gt;
&lt;br /&gt;
=== Session Fingerprinting ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-02-08|release-12-20260208]] session fingerprinting was added to the zkwebui.&lt;br /&gt;
&lt;br /&gt;
Please read carefully [[NF12 Session Fingerprinting]] to see the options being checked.&lt;br /&gt;
&lt;br /&gt;
It's possible your users will be logged out when changing the language '''of the browser''' during and iDempiere session, or if the browser is updated.&lt;br /&gt;
&lt;br /&gt;
It's also possible that changes of IP address will be logged in logs and in AD_Issue.  This can happen when connecting to a VPN, changing wifi, or using mobile.  But it can also be the indication of attempts to hijack the session.  It is recommended to keep an eye on these alerts and verify for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
=== New Env.parseContext parameter ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-01-04|release-12-20260104]] a new parameter was added to Env.parseContext:&lt;br /&gt;
&lt;br /&gt;
* '''forSQL''': if true, the parsed value is intended for SQL statement, so it replaces quotes accordingly&lt;br /&gt;
&lt;br /&gt;
It is recommended to review your plugins and use the new parameter when the Env.parseContext is intended to be used in SQL clauses, this is very important to prevent SQL Injection attacks.&lt;br /&gt;
&lt;br /&gt;
=== New SQLFragment approach ===&lt;br /&gt;
&lt;br /&gt;
In many places of iDempiere direct SQL clauses were added with parameters replaced directly within the where clause, this can open doors for SQL Injection attacs that we want to avoid.&lt;br /&gt;
&lt;br /&gt;
To solve that, the new org.idempiere.db.util.SQLFragment was added in [[ChangeLog_Release_12#2026-01-16|release-12-20260116]], this approach allows to define a where clause with binding parameters and associate a List of parameters to the clause.&lt;br /&gt;
&lt;br /&gt;
Many methods were deprecated to encourage the usage of the new SQLFragment approach instead of adding directly where clauses.&lt;br /&gt;
&lt;br /&gt;
It is encouraged to check carefully your plugins using these deprecated methods and migrate to the new SQLFragment approach.&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== Promotions functionality was removed from core to a plugin ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-2826 IDEMPIERE-2826] it was decided to move the Promotions functionality out of core to a plugin.&lt;br /&gt;
&lt;br /&gt;
So, if you have been using this functionality, when migrating to release-12 is necessary to install the plugin.&lt;br /&gt;
&lt;br /&gt;
The plugin documentation can be found at: [[Plugin:_Promotions]]&lt;br /&gt;
&lt;br /&gt;
== Theme ==&lt;br /&gt;
&lt;br /&gt;
Default theme was changed from ''breeze'' to ''iceblue_c''. &lt;br /&gt;
&lt;br /&gt;
To reflect that, the ''ZK_THEME'' SysConfig has been forced to 'iceblue_c'.&lt;br /&gt;
&lt;br /&gt;
So, once your customized theme is updated (as it will probably require some adaptations), you can update the SysConfig to use it.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 11 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 11 ==&lt;br /&gt;
&lt;br /&gt;
=== Java 17 required ===&lt;br /&gt;
For the release-11 we decided to move to the next Long Term Supported version of java.  As java 11 is too close to its end of life, the release-11 requires java-17 for running and compiling.&lt;br /&gt;
&lt;br /&gt;
=== Storage size increase because of new Record_UU columns ===&lt;br /&gt;
As explained in [[NF11 UUID Key Tables#Enabled Features for tables with UUID key and without ID key|UUID Key Tables documentation page]]: a number of Record_UU columns have been added to core tables, which can represent an increase in storage size and backup size in implementations that have many records on these tables, for example many attachments, or heavy usage of chat, post-it or labels.  Also the Change Log can be affected by size depending on the System Configurator key AD_CHANGELOG_SAVE_UUID&lt;br /&gt;
&lt;br /&gt;
=== New MPInstance constructors to manage the new column AD_PInstance.AD_Table_ID ===&lt;br /&gt;
The table AD_PInstance table had a Record_ID column without the corresponding AD_Table_ID.  This is an anomaly and it created a problem as it was not possible to figure out which table triggered a process, and use the Record_ID field to navigate to the originating record.&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5567 IDEMPIERE-5567] the column was added, and the migration script 202309111844_IDEMPIERE-5567_ADPInstance.sql tries the best to fill the new column AD_Table_ID discovering the related table from column, toolbar button, print formats, etc.&lt;br /&gt;
&lt;br /&gt;
However, it is very possible that not all relationships can be figured out, after migration you can review which records were left on AD_PInstance table with null AD_Table_ID and Record_ID&amp;gt;0, and decide if you want to fill it for your specific cases (sometimes is not possible to discover it at the end (for example the process org.compiere.process.BankStatementMatcher could have been called from three different tables and there is no trace about that).&lt;br /&gt;
&lt;br /&gt;
Additionally, it is possible that your plugins call processes filling AD_PInstance without the table, the old constructors for MPInstance are marked as deprecated to ease the task to find them in your plugins and migrate to use the new methods.&lt;br /&gt;
&lt;br /&gt;
=== Constructor MPaymentBatch(Properties, String, String) changed ===&lt;br /&gt;
&lt;br /&gt;
There was a constructor MPaymentBatch(Properties, String, String) that was not used in the official core.&lt;br /&gt;
&lt;br /&gt;
The second parameter of this constructor was the Name and it was intended to create a new record and set the Name of the Payment Batch record.&lt;br /&gt;
&lt;br /&gt;
This constructor conflicts with the [[NF11_UUID_Key_Tables#New_UUID_based_constructors|new UUID based constructor]], so it was replaced by the UUID constructor and its behavior is now completely different.&lt;br /&gt;
&lt;br /&gt;
Most probably nobody is using this old constructor, but in case you use MPaymentBatch constructor in your plugins, please review that you are not using this constructor, if used, please change it to a normal constructor with zero as ID parameter and then set the Name.&lt;br /&gt;
&lt;br /&gt;
=== Product Info toolbar button deactivated in Core. ===&lt;br /&gt;
The community discussion was that most people is not using that toolbar button. However, if you miss it after upgrading. You can go to the Toolbar Button window and activate it again.&lt;br /&gt;
&lt;br /&gt;
=== Export Button not exporting Official Dictionary entries ===&lt;br /&gt;
Since [https://idempiere.atlassian.net/browse/IDEMPIERE-6018 IDEMPIERE-6018] the Export button on windows does not export official dictionary entries, to export dictionary is needed to configure and use a PackOut.&lt;br /&gt;
&lt;br /&gt;
=== Hazelcast defaults to disable auto-detection ===&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6279 IDEMPIERE-6279] the hazelcast automatic detection of other servers within the network was disabled, if you plan to use Hazelcast in a multi-server or load balanced scenario, the hazelcast-template.xml needs to be customized.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 10 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 10 ==&lt;br /&gt;
&lt;br /&gt;
=== System user with ID zero deprecated ===&lt;br /&gt;
&lt;br /&gt;
The user System with ID=0 was inactivated and replaced with a similar user with ID=10&lt;br /&gt;
&lt;br /&gt;
Implementors that use System in any way must check if there is impact with this change, the migration script 202202072157_IDEMPIERE-5174.sql copies the information from AD_User, but it doesn't copy custom columns.  Also, it replaces AD_User_ID in some core tables, but implementors must take care if is needed in other custom tables.&lt;br /&gt;
&lt;br /&gt;
=== Change on Schedule behaviour ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5093 IDEMPIERE-5093] changed the way the schedule works:&lt;br /&gt;
* Before this ticket when you had a schedule configured to run at 9AM, the job was executed at 9AM of the server timezone.&lt;br /&gt;
* This ticket changed this behaviour and now the job is executed at 9AM '''of the tenant timezone''' where the job is defined.&lt;br /&gt;
&lt;br /&gt;
=== Terminology changed from Client to Tenant ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4586 IDEMPIERE-4586] changed the terminology for Client to be known as Tenant in the whole application.&lt;br /&gt;
&lt;br /&gt;
This have little impact from user perspective, but it can have a big impact on documentation.&lt;br /&gt;
&lt;br /&gt;
=== Backward compatibility issue with TimeUtil.getBusinessDaysBetween ===&lt;br /&gt;
Before v10, the method was counting the last day of the period in the total of non business days.&lt;br /&gt;
&lt;br /&gt;
Now, the last day is excluded. In order to fix that, a new method with a new parameter has been added ''includeEndDate,'' so you must use that new method with your plugin if you want to preserve behaviour prior to v10.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade to Hazelcast ===&lt;br /&gt;
The hazelcast library was upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5816 IDEMPIERE-5816], the &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; configuration file is not compatible with previous version, so it is needed to run setup again to use the new template.  In case your &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; is customized, you need to take the template for version 5.3 and apply your changes.  NOTE: This was integrated into release-11, and also into release-10 at 2023-07-29&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 9 Horizon =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 9 Horizon ==&lt;br /&gt;
&lt;br /&gt;
=== Deprecated direct http usage ===&lt;br /&gt;
&lt;br /&gt;
iDempiere 9 Horizon doesn't support anymore direct http usage of the webui interface.  Workaround is simply to use port https.&lt;br /&gt;
&lt;br /&gt;
If you use http the system doesn't allow login in webui.&lt;br /&gt;
&lt;br /&gt;
Note that http can still be used for proxy forwarding, but the configuration requires to forward the header X-Forwarded-Proto to https.&lt;br /&gt;
&lt;br /&gt;
In nginx you must add the following line to the definition of the locations /webui and /webui/zkau/comet:&lt;br /&gt;
 proxy_set_header  X-Forwarded-Proto $scheme;&lt;br /&gt;
As described in [[Proxy iDempiere Through Nginx]]&lt;br /&gt;
&lt;br /&gt;
=== All core views imported to dictionary ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5059 IDEMPIERE-5059] the definition of the 149 core views was imported to the dictionary.&lt;br /&gt;
&lt;br /&gt;
In the migration scripts there is code to recreate all these views, so it is very possible that all the custom columns that were added to views by the implementor will present problems when applying the scripts.&lt;br /&gt;
&lt;br /&gt;
Two possible cases that you need to take care about:&lt;br /&gt;
* the script doesn't show errors, but your customization for the view is lost. You must check all the core views that you customized to see if they are having problems and apply the corresponding fixes in release 9&lt;br /&gt;
* the script show errors when applying (usually postgres complains because it cannot change the columns)&lt;br /&gt;
In both cases it is required that you fix the views, do not create the view by hand in SQL, the best way is to add your customized columns to the dictionary and then use the iDempiere process to validate/create the view in the database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Take care of AD_Window.PredefinedContextVariables ===&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4837 IDEMPIERE-4837] will erase changes done on AD_Window.PredefinedContextVariables for Order, Invoices.&lt;br /&gt;
Make a backup of the content of those fields if you have customized them and reapply them.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Default to Native Dialect ===&lt;br /&gt;
Release-9 comes by default with Native PostgreSQL dialect.  The SQLs in core were changed to make them compatible for Oracle and PostgreSQL.  Because of that is possible that some plugins can be broken, for example if using NATIVE_PostgreSQL_KEYWORK.&lt;br /&gt;
&lt;br /&gt;
To solve that, the best option is to change your plugin to use SQL standard (compatible with both databases).&lt;br /&gt;
&lt;br /&gt;
See [[NF9 PostgreSQL Default To Native Dialect]] for information about how to disable it (not recommended).&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 8.2 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 8.2 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
For migration script issues see [[Note Upgrade 8.2]] from [[User:Hieplq|Hiep]]&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 8.2 ==&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4421 IDEMPIERE-4421] it was implemented a mechanism for versioning the themes.&lt;br /&gt;
&lt;br /&gt;
We tried to preserve backward compatibility with pre-8.2 themes, but still you'll find problems when the following conditions are in your plugin&lt;br /&gt;
* if the old plugin has references to /theme/default, because the URL of /theme/default was changed to the versioning approach&lt;br /&gt;
** Recommended solution: migrate your theme to 8.2 approach&lt;br /&gt;
** Or change the pointers to /theme/default to point to your own theme&lt;br /&gt;
** Or change the pointers to ~./theme/default/ (this is not recommended, is preferable to maintain your own theme assets)&lt;br /&gt;
* if your plugin referenced the public variable ITheme.THEME_PATH_PREFIX, that variable was dropped&lt;br /&gt;
** Solution is to change the variable to ThemeManager.THEME_PATH_PREFIX&lt;br /&gt;
&lt;br /&gt;
You can find additional instructions to migrate your theme at this ticket comment: https://idempiere.atlassian.net/browse/IDEMPIERE-4421?focusedCommentId=46667&lt;br /&gt;
&lt;br /&gt;
=== PO is immutable ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about not writing objects retrieved from cache.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids writing to these objects to prevent multi-threading issues with these objects.  The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4287 IDEMPIERE-4287]&lt;br /&gt;
&lt;br /&gt;
=== Cross-tenant reading/writing forbidden by default ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about avoiding reading or writing records from a different tenant than the tenant that was used in login.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids reading/writing records from a different tenant.&lt;br /&gt;
&lt;br /&gt;
Reading can be done from the current tenant or System tenant.  Writing can be done just on the current tenant.&lt;br /&gt;
&lt;br /&gt;
The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
How to avoid this condition?&lt;br /&gt;
* Always read/write records within the tenant&lt;br /&gt;
* for example filter &amp;lt;code&amp;gt;AD_Client_ID=?&amp;lt;/code&amp;gt;&lt;br /&gt;
* or filter &amp;lt;code&amp;gt;AD_Client_ID IN (0,?)&amp;lt;/code&amp;gt;&lt;br /&gt;
* with Query consider using the method setClient_ID&lt;br /&gt;
&lt;br /&gt;
If, for any reason, it is absolutely necessary to read or write a record in a different tenant, the following code can be used:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
    PO.setCrossTenantSafe();&lt;br /&gt;
    // write here the Query.list or PO.saveEx that is cross tenant safe&lt;br /&gt;
} finally {&lt;br /&gt;
    PO.clearCrossTenantSafe();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4268 IDEMPIERE-4268]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 7.1 =&lt;br /&gt;
&lt;br /&gt;
== Multi-server schedulers ==&lt;br /&gt;
&lt;br /&gt;
Because of ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4056 IDEMPIERE-4056], the schedulers running in all servers are not supported anymore.&lt;br /&gt;
&lt;br /&gt;
This is, in previous versions when a scheduler didn't have a RunOnlyOnIP defined it was executed in all servers, after the implementation of IDEMPIERE-4056 the schedulers without an IP defined are executed on just one server (randomly).&lt;br /&gt;
&lt;br /&gt;
How to configure now:&lt;br /&gt;
* The RunOnlyOnIP keeps working as usual, so the easiest workaround is to configure one scheduler per each server&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 3.1 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 3.1 ==&lt;br /&gt;
&lt;br /&gt;
=== Keystore moved ===&lt;br /&gt;
&lt;br /&gt;
As the web server was changed from tomcat to jetty the keystore file was moved from &amp;lt;code&amp;gt;idempiere-server/keystore/myKeystore&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;idempiere-server/jettyhome/etc/keystore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the upgrade of zk to version 7 the file &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/theme.css.dsp&amp;lt;/code&amp;gt; was split in fragments located at folder &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/fragment&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;about.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;adwindow.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;application-menu.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;borderlayout.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;button.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;desktop.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;field-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;find-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;form.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;gadget.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;grid.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;group.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;help-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;info-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;input-element.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;login.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;menu-tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;setup-wizard.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar-popup.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Theme developers must take care of migrating the themes to be compliant with this new schema.&lt;br /&gt;
&lt;br /&gt;
=== Migration Notes from [[User:Hieplq|Hieplq]] ===&lt;br /&gt;
&lt;br /&gt;
Please take a look to the migration notes provided by hiep at [[Update_your_development_environment_zk7_branch#known_issues|Known issues when updating your development environment zk7 branch]]&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.1 to iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1z i2.1z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i3.1 i3.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.0 to iDempiere 2.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0 i2.0]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0z i2.0z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 1.0 to iDempiere 2.0 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]  # just the scripts still not applied&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0z i1.0z]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i2.0 i2.0]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 1.0 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old systems to iDempiere 1.0 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== org.compiere.acct.Doc ===&lt;br /&gt;
&lt;br /&gt;
Constructor account schema parameter have been changed from MAcctSchema[] to MAcctSchema. This can break extensions that modify accounting, solution is simple, just change it to use new method and accomodate code.&lt;br /&gt;
&lt;br /&gt;
=== 2Pack ===&lt;br /&gt;
&lt;br /&gt;
The new 2pack format is not backward compatible&lt;br /&gt;
&lt;br /&gt;
=== AD_WF_Node ===&lt;br /&gt;
&lt;br /&gt;
The xposition and yposition column now stored the node's position in a grid instead of absolute pixel value.&lt;br /&gt;
&lt;br /&gt;
=== Change Log Configuration ===&lt;br /&gt;
&lt;br /&gt;
The change log is now enabled by default in most of the tables.&lt;br /&gt;
&lt;br /&gt;
Enabling the change log is done with the script 201306261840_EnableChangeLog.sql&lt;br /&gt;
&lt;br /&gt;
If you have already tuned your change log configuration, you can skip that script - or run it and then recover your specific fine tuning changes.&lt;br /&gt;
&lt;br /&gt;
Note also that enabling the change log it will increase the disk consumption - if that's a concern on your installation you must fine tune this configuration after running the script.&lt;br /&gt;
&lt;br /&gt;
=== Jasper ID parameters passed as BigDecimal now as Integer ===&lt;br /&gt;
&lt;br /&gt;
In some cases the ID parameters (table, table direct, search) were passed to jasper reports as BigDecimal, while in other cases same parameters were passed as Integer (like RECORD_ID or ranges), with [http://idempiere.atlassian.net/browse/IDEMPIERE-1422 IDEMPIERE-1422] that behavior is now consistent, always using Integer for _ID parameters.&lt;br /&gt;
&lt;br /&gt;
This change can break old jasper reports that defined the ID parameter as BigDecimal, the fix is simple, just change the jasper parameter to Integer and compile again.&lt;br /&gt;
&lt;br /&gt;
When this error is reached running the jasper report throws this exception:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
16:47:32.058===========&amp;gt; ProcessUtil.startJavaProcess: org.compiere.report.ReportStarter [17]&lt;br /&gt;
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:553)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:399)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter$1.visit(JRJdbcQueryExecuter.java:332)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter$QueryParameter.accept(JRAbstractQueryExecuter.java:157)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter.visitQueryParameters(JRAbstractQueryExecuter.java:646)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:317)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1281)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:900)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functional Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Inventory Document Types ===&lt;br /&gt;
&lt;br /&gt;
Because of [http://idempiere.atlassian.net/browse/IDEMPIERE-675 IDEMPIERE-675] you need to set manually the inventory document subtype for your inventory documents (internal use and physical inventory).&lt;br /&gt;
&lt;br /&gt;
In case you used the same document type for both cases - then recommendation is to inactivate the old mixed document and create new document types for each specific case.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated Functionalities ===&lt;br /&gt;
&lt;br /&gt;
With [http://idempiere.atlassian.net/browse/IDEMPIERE-362 IDEMPIERE-362], [http://idempiere.atlassian.net/browse/IDEMPIERE-170 IDEMPIERE-170], [http://idempiere.atlassian.net/browse/IDEMPIERE-247 IDEMPIERE-247] some functionalities that were not working properly where deprecated, please check the tickets and commits for details, most prominent are:&lt;br /&gt;
* Cash Journals (all cash functionalities can be modeled using payments)&lt;br /&gt;
* MRP Heavy Manufacturing (Light Manufacturing was integrated)&lt;br /&gt;
* Payroll (being developed as extension)&lt;br /&gt;
&lt;br /&gt;
=== Production ===&lt;br /&gt;
&lt;br /&gt;
If you used the old Production window (original from Compiere with three tabs) - please note some changes are required as noted in [http://idempiere.atlassian.net/browse/IDEMPIERE-521 IDEMPIERE-521]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Roles ===&lt;br /&gt;
&lt;br /&gt;
With [https://idempiere.atlassian.net/browse/IDEMPIERE-1160 IDEMPIERE-1160] a new security feature was implemented, when creating a new client the ClientAdmin role is configured as advanced role and the ClientUser role is not, after that you can use the ClientAdmin role to configure the rest of roles (advanced or not) and users.&lt;br /&gt;
&lt;br /&gt;
Please note that advanced role is not intended for end-users, is mostly intended for Information technology (IT) roles that administer the system - advanced roles have access to many fields that are documented and exposed security holes in the system.&lt;br /&gt;
&lt;br /&gt;
This new feature creates a problem when migrating databases with existing tenants - as we can't know in advance how the security was configured in an already existing client - we cannot set advanced role to one of the client roles in the database via migration script.  The consequence is that when migrating databases, all the roles on Clients (not GardenAdmin and System) are marked as non-advanced - and there is not a way to mark advanced role within the system, it's needed to mark your required advanced role directly via SQL with a command like:&lt;br /&gt;
 UPDATE AD_Role SET IsAccessAdvanced='Y' WHERE AD_Role_ID=?&lt;br /&gt;
where you replace the ? with the ID of the role you design as advanced (with access to security holes).&lt;br /&gt;
&lt;br /&gt;
= Migration Scripts =&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to ADempiere 361 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts-360lts.010?at=globalqss_adempiere361 360lts-360lts.010]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts.010-361.Final?at=globalqss_adempiere361 360lts.010-361.Final]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/361.Final-BUG_FIXES?at=globalqss_adempiere361 361.Final-BUG_FIXES]&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/360lts-i1.0a 360lts-i1.0a]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0a-i1.0b i1.0a-i1.0b]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0b-i1.0c i1.0b-i1.0c]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 361 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
You need to apply the migration scripts like migrating from 360, '''EXCLUDING''' those already applied when you migrated from 360 to 361.&lt;br /&gt;
&lt;br /&gt;
== Increasing speed of some scripts ==&lt;br /&gt;
&lt;br /&gt;
* Script &amp;lt;code&amp;gt;postgresql/789_GenerateUUIDColumns.sql&amp;lt;/code&amp;gt; can apply ALTER TABLE too slowly for big tables - this can be improved dropping the &amp;quot; DEFAULT NULL&amp;quot; at the end of each ALTER TABLE&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended to run &amp;quot;UUID Generator&amp;quot; process after migration to fill the empty UUID columns, but this can be a very slow process for big tables, a faster way can be achieved executing an update directly on the database, also you can consider deleting the related uuid index before the update and recreating it at the end, for example:&lt;br /&gt;
** &amp;lt;code&amp;gt;DROP INDEX ad_changelog_uu_idx;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;UPDATE AD_ChangeLog SET AD_ChangeLog_UU=generate_uuid() WHERE AD_ChangeLog_UU IS NULL;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;CREATE UNIQUE INDEX ad_changelog_uu_idx ON ad_changelog (ad_changelog_uu);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The script &amp;lt;code&amp;gt;processes_post_migration/postgresql/02_SynchronizeTerminology.sql&amp;lt;/code&amp;gt; tend to be slow on postgresql versions higher than 9.1 with the default memory.  In order to solve this is recommended to tune the memory for the database.&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere 370 =&lt;br /&gt;
&lt;br /&gt;
[[User:Pb_integratio|Pb_integratio]] is sharing and documenting experience about this at [[Migration from ADempiere 370 to iDempiere]]&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere pre-360 =&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
Migrating some Adempiere installations before 360 to iDempiere generates a problem when using postgresql 9.2 - applying the script 201309192024_IDEMPIERE-1370.sql:222 throws:&lt;br /&gt;
 ERROR:  cannot change name of input parameter &amp;quot;p_product_id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cause ==&lt;br /&gt;
&lt;br /&gt;
An issue has been detected migrating a database pre-360 to iDempiere using postgresql 9.2&lt;br /&gt;
&lt;br /&gt;
The function bomqtyonhand from the database seed doesn't match with the function bomqtyonhand present on the migration scripts (pre-360), the script 201309192024_IDEMPIERE-1370.sql fixes that situation, but postgresql 9.2 doesn't allow changing a parameter name for a function.&lt;br /&gt;
&lt;br /&gt;
== Solutions ==&lt;br /&gt;
&lt;br /&gt;
* You can do the migration using postgres 8.4 and at the end migrate to 9.2 (postgres 8.4 allows changing name of function parameters)&lt;br /&gt;
alternatively&lt;br /&gt;
* You can drop the old function bomqtyonhand (and all the associated views) and recreate them properly&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23884</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23884"/>
		<updated>2026-05-25T21:10:10Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-05-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] DBA - Tuning AD_Attachment (FHCA-3962) [https://github.com/idempiere/idempiere/pull/3271 (#3271)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23878</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23878"/>
		<updated>2026-05-20T19:48:20Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-05-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6982 IDEMPIERE-6982] Window Customization ignores AD_UserDef_Field overrides in &amp;quot;Customize Grid&amp;quot; panel [https://github.com/idempiere/idempiere/pull/3252 (#3252)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6998 IDEMPIERE-6998] Login automatic open sequence panel is not using UserDef customizations [https://github.com/idempiere/idempiere/pull/3266 (#3266)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-7010 IDEMPIERE-7010] Support UOM and QtyEntered on Inventory documents [https://github.com/idempiere/idempiere/pull/3268 (#3268)]&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_12&amp;diff=23872</id>
		<title>ChangeLog Release 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_12&amp;diff=23872"/>
		<updated>2026-05-08T20:46:44Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-12&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-13 ==&lt;br /&gt;
&lt;br /&gt;
* Revert &amp;quot;[https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6366 IDEMPIERE-6366] Generic Info window shows all columns exists on table and do not respect seqNoSelection [https://github.com/idempiere/idempiere/pull/2620 (#2620)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6719 IDEMPIERE-6719] Selected records in the info window are not being processed. [https://github.com/idempiere/idempiere/pull/2964 (#2964)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3155 (#3155)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6198 IDEMPIERE-6198] Incorrect Accumulated Amt and Accumulated Qty after reverse-correct a Physical Inventory [https://github.com/idempiere/idempiere/pull/2908 (#2908)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3158 (#3158)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824] Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6870 IDEMPIERE-6870] Fix NPE in callout when selecting product without cost [https://github.com/idempiere/idempiere/pull/3125 (#3125)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6876 IDEMPIERE-6876] Report parameters are overwritten when refreshing a previously opened tab of the same report [https://github.com/idempiere/idempiere/pull/3141 (#3141)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6879 IDEMPIERE-6879] WLocationDialog showing misleading error to user [https://github.com/idempiere/idempiere/pull/3145 (#3145)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6880 IDEMPIERE-6880] PO is NULL Issue When Clicking in Window Zoom [https://github.com/idempiere/idempiere/pull/3146 (#3146)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6865 IDEMPIERE-6865] Hashed password saved as plain text when SecureEngine.getSecureRandom fails [https://github.com/idempiere/idempiere/pull/3119 (#3119)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3110 (#3110)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6850 IDEMPIERE-6850] Change log not capture for delete of record with UUID Key or with Composite Key (DAD-205) [https://github.com/idempiere/idempiere/pull/3111 (#3111)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6845 IDEMPIERE-6845] BOM Price Functions Should Distinguish Between Explicit Zero and Missing Price [https://github.com/idempiere/idempiere/pull/3104 (#3104)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6843 IDEMPIERE-6843] Security Dashboard [https://github.com/idempiere/idempiere/pull/3099 (#3099)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6844 IDEMPIERE-6844] Prevent CSV Injection in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3102 (#3102)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6009 IDEMPIERE-6009] AllocationReset Not Working Correctly / fix trx leak [https://github.com/idempiere/idempiere/pull/3097 (#3097)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6833 IDEMPIERE-6833] Jar upgrades for Vulnerability fix [https://github.com/idempiere/idempiere/pull/3093 (#3093)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6837 IDEMPIERE-6837] Payment Selection window fails to update amounts and has incorrect field behavior [https://github.com/idempiere/idempiere/pull/3090 (#3090)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6435 IDEMPIERE-6435] Add &amp;quot;Hide on Zero&amp;quot; to Document Status (Activities) [https://github.com/idempiere/idempiere/pull/2688 (#2688)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3095 (#3095)] [https://github.com/idempiere/idempiere/pull/3098 (#3098)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6838 IDEMPIERE-6838] Allow a BP to pay invoices from a different BP [https://github.com/idempiere/idempiere/pull/3091 (#3091)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5985 IDEMPIERE-5985] Reactivation of Payments: Credit Manager - fix conflicts [https://github.com/idempiere/idempiere/pull/2832 (#2832)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - minor - avoid warning [https://github.com/idempiere/idempiere/pull/3088 (#3088)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6809 IDEMPIERE-6809] Session Fixation Vulnerability in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3082 (#3082)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6829 IDEMPIERE-6829] Accounting Fact Reconciliation must not allow to reset half reconciliation records [https://github.com/idempiere/idempiere/pull/3079 (#3079)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6831 IDEMPIERE-6831] In some cases, date registered is wrong [https://github.com/idempiere/idempiere/pull/3086 (#3086)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6834 IDEMPIERE-6834] Copy Tenant must validate image storage provider too [https://github.com/idempiere/idempiere/pull/3087 (#3087)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6840 IDEMPIERE-6840] Date format : allow d (for day) [https://github.com/idempiere/idempiere/pull/3092 (#3092)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3083 (#3083)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6809 IDEMPIERE-6809] Session Fixation Vulnerability in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3080 (#3080)] [https://github.com/idempiere/idempiere/pull/3081 (#3081)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6122 IDEMPIERE-6122] Query class to accept a list of columns to select [https://github.com/idempiere/idempiere/pull/3073 (#3073)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6545 IDEMPIERE-6545] Translation tabs must not allow delete - enable insert in Tenant Level Message [https://github.com/idempiere/idempiere/pull/3077 (#3077)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3071 (#3071)] [https://github.com/idempiere/idempiere/pull/3072 (#3072)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6822 IDEMPIERE-6822] Replace iDempiere Server Monitor Basic Authentication with Session Login Form [https://github.com/idempiere/idempiere/pull/3070 (#3070)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5067 IDEMPIERE-5067] Over Shipment getting reverse in generate shipment [https://github.com/idempiere/idempiere/pull/3029 (#3029)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6737 IDEMPIERE-6737] Attribute Set with &amp;quot;Use Guarantee Date for Material Policy&amp;quot; = &amp;quot;Y&amp;quot; recording wrong material policy date in window Physical Inventory, Inventory Move, and Inventory Decrease/Increase [https://github.com/idempiere/idempiere/pull/3053 (#3053)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6800 IDEMPIERE-6800] Wrong costing qty after purchase invoice for partial MR with identical Account Date in MR, shipment and invoice [https://github.com/idempiere/idempiere/pull/3051 (#3051)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6817 IDEMPIERE-6817] Sales Order printing Reversed Invoices [https://github.com/idempiere/idempiere/pull/3069 (#3069)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6818 IDEMPIERE-6818] Billboard chart showing D instead of day [https://github.com/idempiere/idempiere/pull/3061 (#3061)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6822 IDEMPIERE-6822] Replace iDempiere Server Monitor Basic Authentication with Session Login Form [https://github.com/idempiere/idempiere/pull/3067 (#3067)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3064 (#3064)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3014 (#3014)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-15 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/3059 (#3059)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6814 IDEMPIERE-6814] Notice count wrong for GardenUser [https://github.com/idempiere/idempiere/pull/3056 (#3056)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6377 IDEMPIERE-6377] Adding a quote to sales opportunity is impossible [https://github.com/idempiere/idempiere/pull/3016 (#3016)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6528 IDEMPIERE-6528] Archive Viewer loads every Archived Document after deleting one&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6572 IDEMPIERE-6572] Deactivating windows in WTF still allows windows to be accessed if window has been added to favourites [https://github.com/idempiere/idempiere/pull/3019 (#3019)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6600 IDEMPIERE-6600] Posting Error For No Cost Product On Physical Inventory [https://github.com/idempiere/idempiere/pull/2836 (#2836)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base and org.compiere.util [https://github.com/idempiere/idempiere/pull/3018 (#3018)] [https://github.com/idempiere/idempiere/pull/2989 (#2989)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6702 IDEMPIERE-6702] Error: Insufficient Stock Coverage for drop shipment to customer of product with existing transactions [https://github.com/idempiere/idempiere/pull/2975 (#2975)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6729 IDEMPIERE-6729] Favorites Tree breaking UI [https://github.com/idempiere/idempiere/pull/2981 (#2981)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Improvement for Env.parseContext [https://github.com/idempiere/idempiere/pull/2998 (#2998)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6742 IDEMPIERE-6742] Add Cache Reset after bulk Packin Processing [https://github.com/idempiere/idempiere/pull/2994 (#2994)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6744 IDEMPIERE-6744] fix NPE in DocumentSearchController [https://github.com/idempiere/idempiere/pull/2995 (#2995)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6751 IDEMPIERE-6751] Back-dated costing: physical inventory posting error in original document after reversal and new back-dated document [https://github.com/idempiere/idempiere/pull/3003 (#3003)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6753 IDEMPIERE-6753] Error installing plugins that create a _Trl_Key with a 2pack [https://github.com/idempiere/idempiere/pull/3017 (#3017)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6805 IDEMPIERE-6805] MUserRole should disallow assignment of role template to user [https://github.com/idempiere/idempiere/pull/3047 (#3047)]&lt;br /&gt;
&lt;br /&gt;
== 2025-12-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6802 IDEMPIERE-6802] MRoleIncluded should set SeqNo in beforeSave [https://github.com/idempiere/idempiere/pull/3044 (#3044)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2988 (#2988)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6734 IDEMPIERE-6734] Allow #User_Org to be available for all kind of session [https://github.com/idempiere/idempiere/pull/2984 (#2984)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/2990 (#2990)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6656 IDEMPIERE-6656] Unclear message when reactivating a document with reconciled posting [https://github.com/idempiere/idempiere/pull/2958 (#2958)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6694 IDEMPIERE-6694] 2 issues related to back-dated costing. Refer to details below [https://github.com/idempiere/idempiere/pull/2943 (#2943)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] Upgrade DB libraries (FHCA-7459) - fix packin broken [https://github.com/idempiere/idempiere/pull/2970 (#2970)] [https://github.com/idempiere/idempiere/pull/2960 (#2960)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6717 IDEMPIERE-6717] Support French when searching for constraint names [https://github.com/idempiere/idempiere/pull/2957 (#2957)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6718 IDEMPIERE-6718] GridTabTest leaves residual records in C_Order and C_OrderLine tables due to missing transaction context [https://github.com/idempiere/idempiere/pull/2959 (#2959)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6720 IDEMPIERE-6720] Copy Tenant fails when there is a report archived [https://github.com/idempiere/idempiere/pull/2962 (#2962)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6721 IDEMPIERE-6721] Incorrect M_AttributeInstance.Value when setting integer for number attribute type [https://github.com/idempiere/idempiere/pull/2963 (#2963)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6722 IDEMPIERE-6722] Infinite loop with a SEVERE error in MIssue.create [https://github.com/idempiere/idempiere/pull/2969 (#2969)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6295 IDEMPIERE-6295] Fix logout issue when SSO provider is selected from multiple SSO providers [https://github.com/idempiere/idempiere/pull/2950 (#2950)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage for PO and create unit test class for cross tenant safety feature [https://github.com/idempiere/idempiere/pull/2948 (#2948)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6706 IDEMPIERE-6706] Error installing 2Pack using ALL-CLIENTS approach [https://github.com/idempiere/idempiere/pull/2947 (#2947)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/2956 (#2956)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6714 IDEMPIERE-6714] Calculation Fields Disabled in Print Format but Enabled in Report Wizard for non-Field Items [https://github.com/idempiere/idempiere/pull/2955 (#2955)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/2925 (#2925)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2944 (#2944)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6705 IDEMPIERE-6705] PackIn failing silently when the zip has wrong folder hierarchy [https://github.com/idempiere/idempiere/pull/2942 (#2942)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6695 IDEMPIERE-6695] AP Credit Memo for Landed Cost: Wrong side of inventory account against Suspense balancing [https://github.com/idempiere/idempiere/pull/2932 (#2932)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6697 IDEMPIERE-6697] Rename Master Role as Role Template and split to Role Template window [https://github.com/idempiere/idempiere/pull/2934 (#2934)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6699 IDEMPIERE-6699] Portable SQL insert script not working for Location, Account, etc [https://github.com/idempiere/idempiere/pull/2936 (#2936)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2937 (#2937)] [https://github.com/idempiere/idempiere/pull/2939 (#2939)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6701 IDEMPIERE-6701] RUN_SyncDB.sh with parameter failing on server [https://github.com/idempiere/idempiere/pull/2938 (#2938)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6506 IDEMPIERE-6506] Translation cache not reset after update by user [https://github.com/idempiere/idempiere/pull/2931 (#2931)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6698 IDEMPIERE-6698] Enhance Print Invoices Process to Support Multi-Select Document Type Parameter [https://github.com/idempiere/idempiere/pull/2935 (#2935)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2929 (#2929)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6680 IDEMPIERE-6680] Back-dated costing bug related to re-posting of matched PO [https://github.com/idempiere/idempiere/pull/2915 (#2915)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6690 IDEMPIERE-6690] Error when clicking UU-based reference field with null value - org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = integer [https://github.com/idempiere/idempiere/pull/2926 (#2926)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6691 IDEMPIERE-6691] org.idempiere.bouncy.castle-feature: Name in .project is not org.idempiere.bouncy.castle-feature [https://github.com/idempiere/idempiere/pull/2927 (#2927)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6692 IDEMPIERE-6692] Archive Viewer is adding .pdf to any file - and showing always as PDF [https://github.com/idempiere/idempiere/pull/2928 (#2928)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6685 IDEMPIERE-6685] MColumn.getReferenceTableName not working for ChosenMultipleSelectionTable and ChosenMultipleSelectionSearch [https://github.com/idempiere/idempiere/pull/2924 (#2924)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6122 IDEMPIERE-6122] Query class to accept a list of columns to select - fix support order by virtual column not in select [https://github.com/idempiere/idempiere/pull/2918 (#2918)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6659 IDEMPIERE-6659] Estimated Landed Cost Scenarios for Purchase Orders and Incorrect Product Costs [https://github.com/idempiere/idempiere/pull/2905 (#2905)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6666 IDEMPIERE-6666] fix getShipmentReceiptDocType in MDocType [https://github.com/idempiere/idempiere/pull/2921 (#2921)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6683 IDEMPIERE-6683] Concurrent client requests can cause &amp;quot;key already exists&amp;quot; errors for user preference [https://github.com/idempiere/idempiere/pull/2919 (#2919)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6684 IDEMPIERE-6684] Unable to save a record via Rest API when a column is set to Record UUID display type [https://github.com/idempiere/idempiere/pull/2922 (#2922)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6685 IDEMPIERE-6685] MColumn.getReferenceTableName not working for ChosenMultipleSelectionTable and ChosenMultipleSelectionSearch [https://github.com/idempiere/idempiere/pull/2923 (#2923)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2916 (#2916)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6670 IDEMPIERE-6670] Refactoring: make CLogMgt.reInit public [https://github.com/idempiere/idempiere/pull/2903 (#2903)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6671 IDEMPIERE-6671] Replace MD5 digest with SHA-256 digest (DAD-61) - fix Secure.convertHexString [https://github.com/idempiere/idempiere/pull/2917 (#2917)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/2909 (#2909)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6682 IDEMPIERE-6682] Plugin : editor which extends WButtonEditor doesn't work when tab in grid mode [https://github.com/idempiere/idempiere/pull/2914 (#2914)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6646 IDEMPIERE-6646] Customize toolbar button enable/disable based on current tab data status [https://github.com/idempiere/idempiere/pull/2891 (#2891)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6668 IDEMPIERE-6668] Field holding invalid data [https://github.com/idempiere/idempiere/pull/2902 (#2902)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6671 IDEMPIERE-6671] Replace MD5 digest with SHA-256 digest (DAD-61) [https://github.com/idempiere/idempiere/pull/2904 (#2904)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6672 IDEMPIERE-6672] The same event triggered in less than 200ms prevents callouts from being executed [https://github.com/idempiere/idempiere/pull/2906 (#2906)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6676 IDEMPIERE-6676] Review the PO.getKeyColumns for UUID tables [https://github.com/idempiere/idempiere/pull/2913 (#2913)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6663 IDEMPIERE-6663] More reliable discovery of key store service [https://github.com/idempiere/idempiere/pull/2899 (#2899)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6667 IDEMPIERE-6667] Secure could be using wrong provider with idempiere-ks.properties and IKeyStore service [https://github.com/idempiere/idempiere/pull/2901 (#2901)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6124 IDEMPIERE-6124] Add Quantity field to Invoice &amp;gt; Invoice Line &amp;gt; Landed Cost for allocations to Product [https://github.com/idempiere/idempiere/pull/2892 (#2892)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6662 IDEMPIERE-6662] Proper length for LoginPanel Name/EMail field [https://github.com/idempiere/idempiere/pull/2897 (#2897)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6664 IDEMPIERE-6664] Secure engine extensibility improvements [https://github.com/idempiere/idempiere/pull/2898 (#2898)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6662 IDEMPIERE-6662] Email field length mismatch between LoginPanel and database [https://github.com/idempiere/idempiere/pull/2895 (#2895)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6663 IDEMPIERE-6663] More reliable discovery of key store service (DAD-61) [https://github.com/idempiere/idempiere/pull/2896 (#2896)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6645 IDEMPIERE-6645] Error message being cleared due to concurrency issue [https://github.com/idempiere/idempiere/pull/2878 (#2878)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2881 (#2881)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6304 IDEMPIERE-6304] Multiple SSO provider support [https://github.com/idempiere/idempiere/pull/2811 (#2811)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Extend Unit Tests for MRole [https://github.com/idempiere/idempiere/pull/2879 (#2879)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6648 IDEMPIERE-6648] Ensure all scripts can run with an alternate db admin user (DAD-62) [https://github.com/idempiere/idempiere/pull/2886 (#2886)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6654 IDEMPIERE-6654] Passwords must not be shown in logs (DAD-63) [https://github.com/idempiere/idempiere/pull/2885 (#2885)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6657 IDEMPIERE-6657] Setup error when the DB password is 57 chars or longer [https://github.com/idempiere/idempiere/pull/2888 (#2888)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2874 (#2874)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6614 IDEMPIERE-6614] Performance improvement for back-dated costing process [https://github.com/idempiere/idempiere/pull/2860 (#2860)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6648 IDEMPIERE-6648] Ensure all scripts can run with an alternate db admin user (DAD-62) [https://github.com/idempiere/idempiere/pull/2882 (#2882)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5651 IDEMPIERE-5651] Validate VFormat regex on WStringEditor [https://github.com/idempiere/idempiere/pull/2641 (#2641)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing - fix references [https://github.com/idempiere/idempiere/pull/2869 (#2869)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6617 IDEMPIERE-6617] Add InputStream interface to image storage provider [https://github.com/idempiere/idempiere/pull/2852 (#2852)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6637 IDEMPIERE-6637] Wrong Default Logic for Migration Storage Provider parameter AD_AllClients_V_ID in Oracle [https://github.com/idempiere/idempiere/pull/2864 (#2864)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6639 IDEMPIERE-6639] OFXFileBankStatementLoader - ErrorReadingData - Stream closed [https://github.com/idempiere/idempiere/pull/2866 (#2866)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6641 IDEMPIERE-6641] Cryptic error on silent-setup-alt.sh when ADEMPIERE_DB_SERVER is not reachable [https://github.com/idempiere/idempiere/pull/2868 (#2868)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6644 IDEMPIERE-6644] Fix some wrong defaults for EntityType [https://github.com/idempiere/idempiere/pull/2876 (#2876)]&lt;br /&gt;
&lt;br /&gt;
== 2025-07-26 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6564 IDEMPIERE-6564] Add InputStream interface to archive storage provider [https://github.com/idempiere/idempiere/pull/2805 (#2805)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6618 IDEMPIERE-6618] added Maven 3.9.10 wrapper [https://github.com/idempiere/idempiere/pull/2853 (#2853)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6635 IDEMPIERE-6635] Makes the DataProvider a priority for search of context variables and restores '[https://idempiere.atlassian.net/browse/IDEMPIERE-6473 IDEMPIERE-6473]' [https://github.com/idempiere/idempiere/pull/2863 (#2863)]&lt;br /&gt;
&lt;br /&gt;
== 2025-07-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2841 (#2841)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6229 IDEMPIERE-6229] 2Pack / Data : fill table field using SQL Statement content - fix java.lang.StringIndexOutOfBoundsException [https://github.com/idempiere/idempiere/pull/2834 (#2834)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6314 IDEMPIERE-6314] Issues with attachment on System records [https://github.com/idempiere/idempiere/pull/2839 (#2839)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6553 IDEMPIERE-6553] Add logs to investigate why the model event handler isn't being triggered [https://github.com/idempiere/idempiere/pull/2801 (#2801)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6570 IDEMPIERE-6570] Improve attachment support for large file [https://github.com/idempiere/idempiere/pull/2809 (#2809)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6591 IDEMPIERE-6591] Can't delete records created through Recurring [https://github.com/idempiere/idempiere/pull/2825 (#2825)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6592 IDEMPIERE-6592] T_Spool wrongly defined as view in dictionary [https://github.com/idempiere/idempiere/pull/2826 (#2826)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6595 IDEMPIERE-6595] Enable Using Virtual Columns as Report Parameters [https://github.com/idempiere/idempiere/pull/2830 (#2830)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6596 IDEMPIERE-6596] Implement $sysconfig. prefix for access to AD_SysConfig value in context variable expression [https://github.com/idempiere/idempiere/pull/2831 (#2831)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6597 IDEMPIERE-6597] PackIn error importing record with variable organization [https://github.com/idempiere/idempiere/pull/2833 (#2833)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6599 IDEMPIERE-6599] Enable mail session debug based on mail.debug [https://github.com/idempiere/idempiere/pull/2835 (#2835)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6602 IDEMPIERE-6602] Excessive logging of Invalid Column [https://github.com/idempiere/idempiere/pull/2837 (#2837)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6607 IDEMPIERE-6607] Support Debian Installer in arm [https://github.com/idempiere/idempiere/pull/2845 (#2845)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6611 IDEMPIERE-6611] Predefined Context Variables are not being cleared for forms [https://github.com/idempiere/idempiere/pull/2847 (#2847)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6615 IDEMPIERE-6615] Custom toolbar buttons shown wrongly in mobile [https://github.com/idempiere/idempiere/pull/2851 (#2851)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6619 IDEMPIERE-6619] Cannot enter multiple lines in fields in Grid View or Quick Form [https://github.com/idempiere/idempiere/pull/2856 (#2856)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6620 IDEMPIERE-6620] CSS style not working in info window [https://github.com/idempiere/idempiere/pull/2854 (#2854)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6626 IDEMPIERE-6626] ZoomConditions: missing parenthesis cause trouble when WhereClause has a OR operator [https://github.com/idempiere/idempiere/pull/2857 (#2857)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6629 IDEMPIERE-6629] Fixes username text wrapping in mobile layout [https://github.com/idempiere/idempiere/pull/2858 (#2858)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6631 IDEMPIERE-6631] Allow extra parameters in AD_AuthorizationProvider.AuthorizationEndpoint [https://github.com/idempiere/idempiere/pull/2862 (#2862)]&lt;br /&gt;
&lt;br /&gt;
== 2025-06-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6067 IDEMPIERE-6067] Reactivation of Invoices - fix OrderLine QtyInvoiced [https://github.com/idempiere/idempiere/pull/2812 (#2812)] [https://github.com/idempiere/idempiere/pull/2815 (#2815)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2819 (#2819)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6565 IDEMPIERE-6565] Forgot My Password from Login page doesn't send the temporary password [https://github.com/idempiere/idempiere/pull/2806 (#2806)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6580 IDEMPIERE-6580] Multiple tab records and cannot be closed [https://github.com/idempiere/idempiere/pull/2816 (#2816)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6581 IDEMPIERE-6581] Clean Orphan Cascade broken [https://github.com/idempiere/idempiere/pull/2814 (#2814)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6583 IDEMPIERE-6583] Env.parseVariable doesn't parse CreatedBy/UpdatedBy [https://github.com/idempiere/idempiere/pull/2817 (#2817)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6587 IDEMPIERE-6587] Product Info showing stock when no warehouse is selected [https://github.com/idempiere/idempiere/pull/2822 (#2822)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6588 IDEMPIERE-6588] Payment Discount excluding freight charges [https://github.com/idempiere/idempiere/pull/2823 (#2823)]&lt;br /&gt;
&lt;br /&gt;
== 2025-06-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method + [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] + [https://idempiere.atlassian.net/browse/IDEMPIERE-6547 IDEMPIERE-6547] [https://github.com/idempiere/idempiere/pull/2784 (#2784)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6550 IDEMPIERE-6550] Console setup enhancements [https://github.com/idempiere/idempiere/pull/2800 (#2800)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6563 IDEMPIERE-6563] Attach stacktrace and Unresolved to the 2pack as error_yyyymmddhhmmss.log (FHCA) [https://github.com/idempiere/idempiere/pull/2803 (#2803)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6546 IDEMPIERE-6546] Allow exporting tree definition with 2Pack [https://github.com/idempiere/idempiere/pull/2799 (#2799)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6545 IDEMPIERE-6545] Translation tabs must not allow delete [https://github.com/idempiere/idempiere/pull/2797 (#2797)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6546 IDEMPIERE-6546] Allow exporting tree definition with 2Pack [https://github.com/idempiere/idempiere/pull/2796 (#2796)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6549 IDEMPIERE-6549] - Add option to Disable Insufficient Inventory Popup [https://github.com/idempiere/idempiere/pull/2798 (#2798)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-15 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method [https://github.com/idempiere/idempiere/pull/2718 (#2718)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150] Support development with IntelliJ [https://github.com/idempiere/idempiere/pull/2774 (#2774)] [https://github.com/idempiere/idempiere/pull/2788 (#2788)] [https://github.com/idempiere/idempiere/pull/2789 (#2789)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5174 IDEMPIERE-5174] Disable System User [https://github.com/idempiere/idempiere/pull/2792 (#2792)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5795 IDEMPIERE-5795] DeveloperMode context variable - minor, move to SystemProperties [https://github.com/idempiere/idempiere/pull/2771 (#2771)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6067 IDEMPIERE-6067] Reactivation of Invoices [https://github.com/idempiere/idempiere/pull/2669 (#2669)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6413 IDEMPIERE-6413] Visually differentiate environments [https://github.com/idempiere/idempiere/pull/2668 (#2668)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6433 IDEMPIERE-6433] Fill Getting Started box [https://github.com/idempiere/idempiere/pull/2773 (#2773)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6521 IDEMPIERE-6521] Create RUN_ImportIdempiereDev.sh and RUN_DBRestoreDev.sh [https://github.com/idempiere/idempiere/pull/2765 (#2765)] [https://github.com/idempiere/idempiere/pull/2791 (#2791)] [https://github.com/idempiere/idempiere/pull/2793 (#2793)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6526 IDEMPIERE-6526] Performance improvement exporting to XLSX [https://github.com/idempiere/idempiere/pull/2768 (#2768)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6527 IDEMPIERE-6527] Read value of ZK_BROWSER_ICON and ZK_BROWSER_TITLE from the server [https://github.com/idempiere/idempiere/pull/2770 (#2770)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6529 IDEMPIERE-6529] Wrong cache for Window Names [https://github.com/idempiere/idempiere/pull/2778 (#2778)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6530 IDEMPIERE-6530] Mail Template parsing : Issues when no value and when searching for email address [https://github.com/idempiere/idempiere/pull/2776 (#2776)] [https://github.com/idempiere/idempiere/pull/2780 (#2780)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6531 IDEMPIERE-6531] _TabInfo_AD_Table_ID / _TabInfo_AD_Table_UU are missing from context [https://github.com/idempiere/idempiere/pull/2777 (#2777)] [https://github.com/idempiere/idempiere/pull/2779 (#2779)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6532 IDEMPIERE-6532] Regression: For Tab 0, Env.parseContext is always getting value from window context instead of from tab 0 context [https://github.com/idempiere/idempiere/pull/2781 (#2781)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6536 IDEMPIERE-6536] Find window sometime uses wrong GridTab to find search field [https://github.com/idempiere/idempiere/pull/2783 (#2783)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6537 IDEMPIERE-6537] MFA cookie is a session cookie [https://github.com/idempiere/idempiere/pull/2786 (#2786)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6538 IDEMPIERE-6538] Info Window error sorting by ASI [https://github.com/idempiere/idempiere/pull/2785 (#2785)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6539 IDEMPIERE-6539] Role Access Update - Created by / Updated by [https://github.com/idempiere/idempiere/pull/2787 (#2787)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6540 IDEMPIERE-6540] Import/Export script doesn't support Oracle running as Docker Container [https://github.com/idempiere/idempiere/pull/2790 (#2790)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6543 IDEMPIERE-6543] Error with Post-It on AD_User_Roles (FHCA) [https://github.com/idempiere/idempiere/pull/2795 (#2795)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6544 IDEMPIERE-6544] Chat window hides thread on Reply [https://github.com/idempiere/idempiere/pull/2794 (#2794)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6425 IDEMPIERE-6425] service cache make wrong order of service ranking (IInfoFactory case) [https://github.com/idempiere/idempiere/pull/2689 (#2689)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6476 IDEMPIERE-6476] Payment schedule is not getting updated with header record organization [https://github.com/idempiere/idempiere/pull/2734 (#2734)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6493 IDEMPIERE-6493] Error when executing Add or Copy Accounts [https://github.com/idempiere/idempiere/pull/2746 (#2746)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6496 IDEMPIERE-6496] Dynamic Validation not functioning in Attribute Set Instance (ASI) window: attribute dependency not respected [https://github.com/idempiere/idempiere/pull/2757 (#2757)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6498 IDEMPIERE-6498] Error when trying to register a time slot to a resource with an UoM without symbol [https://github.com/idempiere/idempiere/pull/2749 (#2749)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6502 IDEMPIERE-6502] Mobile UI enhancements [https://github.com/idempiere/idempiere/pull/2754 (#2754)] [https://github.com/idempiere/idempiere/pull/2769 (#2769)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6506 IDEMPIERE-6506] Translation cache not reset after update by user [https://github.com/idempiere/idempiere/pull/2756 (#2756)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6507 IDEMPIERE-6507] Issue using mail template / searching data on linked table [https://github.com/idempiere/idempiere/pull/2758 (#2758)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6508 IDEMPIERE-6508] Inconsistencies on images for detail panel in Single Mode [https://github.com/idempiere/idempiere/pull/2759 (#2759)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6509 IDEMPIERE-6509] Inconsistency on arrow to navigate on Detail Pane [https://github.com/idempiere/idempiere/pull/2762 (#2762)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6510 IDEMPIERE-6510] NPE on login : Cannot invoke &amp;quot;org.compiere.model.MCountry.getC_Country_ID()&amp;quot; because the return value of &amp;quot;org.compiere.model.MCountry.getDefault()&amp;quot; is null [https://github.com/idempiere/idempiere/pull/2760 (#2760)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6513 IDEMPIERE-6513] Error installing Cascade Delete plugin in release-12 [https://github.com/idempiere/idempiere/pull/2761 (#2761)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6520 IDEMPIERE-6520] Allow to use barcode in print format items for script types [https://github.com/idempiere/idempiere/pull/2764 (#2764)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6522 IDEMPIERE-6522] Re-packin a column can cause an error related to AD_Column_Trl [https://github.com/idempiere/idempiere/pull/2766 (#2766)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6523 IDEMPIERE-6523] Migration script comment is not appearing in Preference [https://github.com/idempiere/idempiere/pull/2767 (#2767)]&lt;br /&gt;
&lt;br /&gt;
== 2025-04-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150] Support development with IntelliJ [https://github.com/idempiere/idempiere/pull/2721 (#2721)] [https://github.com/idempiere/idempiere/pull/2750 (#2750)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6241 IDEMPIERE-6241] Print item on next line not working in HTML incl Datatable. Adjusted both specification of HTML and DataTable reports to specification of PDF report. [https://github.com/idempiere/idempiere/pull/2743 (#2743)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6387 IDEMPIERE-6387] Asset Expense for the same period becomes two after asset addition [https://github.com/idempiere/idempiere/pull/2731 (#2731)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2755 (#2755)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6423 IDEMPIERE-6423] A field in the process dialog evaluates 'Default Logic' differently from 'ReadOnly/Display Logic, Mandatory Logic, GridField.backupValue' [https://github.com/idempiere/idempiere/pull/2737 (#2737)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6471 IDEMPIERE-6471] Prevent data corruption if a plugin is missing [https://github.com/idempiere/idempiere/pull/2736 (#2736)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6472 IDEMPIERE-6472] Payment - Amounts not recalculated if no BP/Inv leaving corrupt data [https://github.com/idempiere/idempiere/pull/2744 (#2744)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6478 IDEMPIERE-6478] InvoiceGenerate Consolidating Sales Order from Different Organizations [https://github.com/idempiere/idempiere/pull/2735 (#2735)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6483 IDEMPIERE-6483] repeat Callout annotation isn't working [https://github.com/idempiere/idempiere/pull/2738 (#2738)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6487 IDEMPIERE-6487] Make InfoPanel.ROW_ID_CTX_VARIABLE_NAME public [https://github.com/idempiere/idempiere/pull/2740 (#2740)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6488 IDEMPIERE-6488] Standardize what is triggered when a form is closed after being from an InfoWindow [https://github.com/idempiere/idempiere/pull/2741 (#2741)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6492 IDEMPIERE-6492] Various little fixes on User Panel [https://github.com/idempiere/idempiere/pull/2745 (#2745)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6495 IDEMPIERE-6495] Use SysConfig from css files [https://github.com/idempiere/idempiere/pull/2747 (#2747)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6497 IDEMPIERE-6497] Search for non business days on ScheduleUtil fails on Oracle [https://github.com/idempiere/idempiere/pull/2748 (#2748)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6500 IDEMPIERE-6500] Support Users vs Roles: problem when same user or role in several tenants [https://github.com/idempiere/idempiere/pull/2751 (#2751)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6501 IDEMPIERE-6501] Info Window error when a column has a FROM clause [https://github.com/idempiere/idempiere/pull/2752 (#2752)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6503 IDEMPIERE-6503] The calculator’s initial value carries over from the previous row at the grid view. [https://github.com/idempiere/idempiere/pull/2753 (#2753)]&lt;br /&gt;
&lt;br /&gt;
== 2025-04-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6441 IDEMPIERE-6441] Add default fallback foreign key to Copy Client (FHCA-6009) [https://github.com/idempiere/idempiere/pull/2722 (#2722)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6470 IDEMPIERE-6470] Fixed NPE when users search for a non-existing menu entry and hit enter [https://github.com/idempiere/idempiere/pull/2733 (#2733)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6472 IDEMPIERE-6472] Payment - Amounts not recalculated if no BP/Inv leaving corrupt data [https://github.com/idempiere/idempiere/pull/2728 (#2728)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6473 IDEMPIERE-6473] display logic on parameter that depend on field on window always return false (hot fix only) [https://github.com/idempiere/idempiere/pull/2730 (#2730)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5657 IDEMPIERE-5657] Postgresql 15 errors on import GL Journal [https://github.com/idempiere/idempiere/pull/2716 (#2716)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6408 IDEMPIERE-6408] Problem when sorting columns in an Info Window with Distinct [https://github.com/idempiere/idempiere/pull/2664 (#2664)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6457 IDEMPIERE-6457] Asterisk always colored in red for mandatory fields [https://github.com/idempiere/idempiere/pull/2719 (#2719)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6459 IDEMPIERE-6459] Improve test coverage of org.adempiere.base.ds and ImportEventDelegate [https://github.com/idempiere/idempiere/pull/2713 (#2713)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6461 IDEMPIERE-6461] Improve test coverage of org.compiere.util.Util [https://github.com/idempiere/idempiere/pull/2714 (#2714)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6462 IDEMPIERE-6462] Zoom to loaded data after Import File Loader [https://github.com/idempiere/idempiere/pull/2717 (#2717)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6464 IDEMPIERE-6464] Hide Jetty version from test.idempiere.org/adempiere [https://github.com/idempiere/idempiere/pull/2727 (#2727)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6466 IDEMPIERE-6466] IProcessParameterListener - add onInit method [https://github.com/idempiere/idempiere/pull/2723 (#2723)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6467 IDEMPIERE-6467] NPE on CalloutA_Depreciation_Workfile when set empty for number field [https://github.com/idempiere/idempiere/pull/2724 (#2724)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6468 IDEMPIERE-6468] Unit Test: add mockito support [https://github.com/idempiere/idempiere/pull/2725 (#2725)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-19 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6422 IDEMPIERE-6422] Remove calls for external dependencies [https://github.com/idempiere/idempiere/pull/2715 (#2715)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6419 IDEMPIERE-6419] Replacing environment values with dummy values in the Validate Info window does not work for timestamps [https://github.com/idempiere/idempiere/pull/2712 (#2712)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6422 IDEMPIERE-6422] Remove calls for external dependencies [https://github.com/idempiere/idempiere/pull/2709 (#2709)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6456 IDEMPIERE-6456] GridWindowVO.AD_Table_ID is not initialized when window is loaded from cache [https://github.com/idempiere/idempiere/pull/2710 (#2710)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4827 IDEMPIERE-4827] Unify Evaluatee Implementation - fix import CSV process [https://github.com/idempiere/idempiere/pull/2703 (#2703)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6421 IDEMPIERE-6421] Make the &amp;quot;Server started&amp;quot; email configurable to enable/disable [https://github.com/idempiere/idempiere/pull/2705 (#2705)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6437 IDEMPIERE-6437] remove dup line in sonarqube.yml&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6445 IDEMPIERE-6445] SimplePDFViewer don't respect agrument title (file name) [https://github.com/idempiere/idempiere/pull/2699 (#2699)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6448 IDEMPIERE-6448] Fix some issues from SonarQube analysis [https://github.com/idempiere/idempiere/pull/2702 (#2702)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6449 IDEMPIERE-6449] Target platform state is missing org.jvnet.mimepul.mimepull:1.9.14 with Eclipse 2024-12 [https://github.com/idempiere/idempiere/pull/2704 (#2704)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6450 IDEMPIERE-6450] Servlets should not have mutable instance fields java:S2226 [https://github.com/idempiere/idempiere/pull/2706 (#2706)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6451 IDEMPIERE-6451] missing linkedin icon on idempiere 12 homepage [https://github.com/idempiere/idempiere/pull/2707 (#2707)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6452 IDEMPIERE-6452] Import of Bank Statements is in random order [https://github.com/idempiere/idempiere/pull/2708 (#2708)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method - fix java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. [https://github.com/idempiere/idempiere/pull/2697 (#2697)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4925 IDEMPIERE-4925] Fixed bug cause by original commit that made QtyCount and InternalQty read only on inventory windows [https://github.com/idempiere/idempiere/pull/2700 (#2700)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6385 IDEMPIERE-6385] [QuickForm] - Problem with quickform sorting [https://github.com/idempiere/idempiere/pull/2698 (#2698)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6443 IDEMPIERE-6443] address(C_Location) is not print when city is empty(null) [https://github.com/idempiere/idempiere/pull/2696 (#2696)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6446 IDEMPIERE-6446] Problem detected after update.sh and update-prd.sh is ran several times [https://github.com/idempiere/idempiere/pull/2701 (#2701)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-28 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5570 IDEMPIERE-5570] Zk: Improve readability of code [https://github.com/idempiere/idempiere/pull/2693 (#2693)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6347 IDEMPIERE-6347] Update default font-family setting - decrease 1px [https://github.com/idempiere/idempiere/pull/2673 (#2673)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6437 IDEMPIERE-6437] Change sonarqube analysis to manual workflow [https://github.com/idempiere/idempiere/pull/2691 (#2691)] [https://github.com/idempiere/idempiere/pull/2692 (#2692)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6440 IDEMPIERE-6440] Sequence Check is creating ID sequence for non-existing column [https://github.com/idempiere/idempiere/pull/2695 (#2695)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6442 IDEMPIERE-6442] can't edit org_info of org &amp;quot;*&amp;quot; [https://github.com/idempiere/idempiere/pull/2694 (#2694)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6329 IDEMPIERE-6329] Bug in BOM* SQL functions not getting the correct BOM children [https://github.com/idempiere/idempiere/pull/2683 (#2683)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6428 IDEMPIERE-6428] v12 - Issue with custom toolbar buttons (Action) which are not shown [https://github.com/idempiere/idempiere/pull/2682 (#2682)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6429 IDEMPIERE-6429] Missing images in iceblue_c theme [https://github.com/idempiere/idempiere/pull/2681 (#2681)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6431 IDEMPIERE-6431] missing field suggestion icon image on popup menu [https://github.com/idempiere/idempiere/pull/2684 (#2684)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6432 IDEMPIERE-6432] Fix links in Home server page [https://github.com/idempiere/idempiere/pull/2685 (#2685)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6436 IDEMPIERE-6436] Error inserting permission record for System Administrator role (FHCA-6351) [https://github.com/idempiere/idempiere/pull/2690 (#2690)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] Could not invoke Toolbar listener method: onSave - NPE on GridTab.fireDataStatusChanged [https://github.com/idempiere/idempiere/pull/2672 (#2672)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2981 IDEMPIERE-2981] Add missing header in new WJsonEditor class [https://github.com/idempiere/idempiere/pull/2678 (#2678)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6387 IDEMPIERE-6387] Asset Expense for the same period becomes two after asset addition [https://github.com/idempiere/idempiere/pull/2677 (#2677)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2674 (#2674)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6407 IDEMPIERE-6407] Payment Selection (Manual) - NPE when there is no conversion rate [https://github.com/idempiere/idempiere/pull/2663 (#2663)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6409 IDEMPIERE-6409] Charts not rendered on certain conditions [https://github.com/idempiere/idempiere/pull/2665 (#2665)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6420 IDEMPIERE-6420] The Info column description is incorrect because it uses [https://github.com/idempiere/idempiere/pull/2676 (#2676)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6426 IDEMPIERE-6426] Implement CrossTenantExceptions to manage tenant access restrictions errors [https://github.com/idempiere/idempiere/pull/2679 (#2679)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4580 IDEMPIERE-4580] Update credits file with new dev&amp;amp;Co name and logo [https://github.com/idempiere/idempiere/pull/2661 (#2661)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6397 IDEMPIERE-6397] PostgreSQL json datatype doesn't works well with JSON field editor [https://github.com/idempiere/idempiere/pull/2654 (#2654)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6398 IDEMPIERE-6398] Server crash after a user without report permission tries to run a report [https://github.com/idempiere/idempiere/pull/2655 (#2655)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6399 IDEMPIERE-6399] Deadlock at Web service [https://github.com/idempiere/idempiere/pull/2656 (#2656)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2660 (#2660)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6403 IDEMPIERE-6403] Drafted payment cannot be deleted after printing [https://github.com/idempiere/idempiere/pull/2659 (#2659)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6406 IDEMPIERE-6406] Create AD_message for errors in import csv [https://github.com/idempiere/idempiere/pull/2662 (#2662)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6412 IDEMPIERE-6412] Improve MChart.getData response by using camel case [https://github.com/idempiere/idempiere/pull/2667 (#2667)]&lt;br /&gt;
* Revert &amp;quot;[https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] NPE on GridTab.m_DataStatusEvent / change approach from volatile to synchronized [https://github.com/idempiere/idempiere/pull/2623 (#2623)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 2025-01-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4827 IDEMPIERE-4827] Unify Evaluatee Implementation [https://github.com/idempiere/idempiere/pull/2652 (#2652)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4925 IDEMPIERE-4925] Adding column for UOM and QtyEntered on Inventory Move [https://github.com/idempiere/idempiere/pull/2636 (#2636)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5647 IDEMPIERE-5647] Allow definition of context variables by Role [https://github.com/idempiere/idempiere/pull/2649 (#2649)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2653 (#2653)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6389 IDEMPIERE-6389] Move test done in AmtInWords_ES.main to the unit tests package [https://github.com/idempiere/idempiere/pull/2646 (#2646)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6396 IDEMPIERE-6396] Adding Support for context variable in HTML_REPORT_THEME sys config [https://github.com/idempiere/idempiere/pull/2650 (#2650)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2651 (#2651)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3031 IDEMPIERE-3031] Tooltips cannot be set on column headers in some forms [https://github.com/idempiere/idempiere/pull/2638 (#2638)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5136 IDEMPIERE-5136] Set Messages at tenant level - Add Title Logic to the Window [https://github.com/idempiere/idempiere/pull/2647 (#2647)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6365 IDEMPIERE-6365] RefTable with not ID as KeyColumn can't be translated [https://github.com/idempiere/idempiere/pull/2619 (#2619)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6383 IDEMPIERE-6383] Create Message Record for &amp;quot;Total Base Value is 0&amp;quot; [https://github.com/idempiere/idempiere/pull/2639 (#2639)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6384 IDEMPIERE-6384] Implement GenericPO UUID constructors [https://github.com/idempiere/idempiere/pull/2640 (#2640)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2643 (#2643)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6388 IDEMPIERE-6388] Fix some errors in AmtInWords_ES [https://github.com/idempiere/idempiere/pull/2644 (#2644)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6391 IDEMPIERE-6391] SaveError when Create Bank Transfer Via REST [https://github.com/idempiere/idempiere/pull/2645 (#2645)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4302 IDEMPIERE-4302] remove unnecessary code [https://github.com/idempiere/idempiere/pull/2625 (#2625)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Costing details by Account Date [https://github.com/idempiere/idempiere/pull/2435 (#2435)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6314 IDEMPIERE-6314] Issues with attachment on System records [https://github.com/idempiere/idempiere/pull/2626 (#2626)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6339 IDEMPIERE-6339] Focused button is not highlighted with the new theme [https://github.com/idempiere/idempiere/pull/2633 (#2633)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6355 IDEMPIERE-6355] Virtual UI column type date field cause record to display as not saved [https://github.com/idempiere/idempiere/pull/2615 (#2615)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6361 IDEMPIERE-6361] Document being closed when user does not have read and write access [https://github.com/idempiere/idempiere/pull/2621 (#2621)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6364 IDEMPIERE-6364] Make Menu Search Highlight Accent Insensitive [https://github.com/idempiere/idempiere/pull/2618 (#2618)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6369 IDEMPIERE-6369] iDempiere 12 server startup error on Windows [https://github.com/idempiere/idempiere/pull/2635 (#2635)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6370 IDEMPIERE-6370] Improve Menu Tree Filter Popup options by showing the item name next to the image&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6371 IDEMPIERE-6371] testPrintWithLocalFile unit test failed on windows [https://github.com/idempiere/idempiere/pull/2628 (#2628)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6373 IDEMPIERE-6373] Update IDempiere Home Page [https://github.com/idempiere/idempiere/pull/2629 (#2629)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6375 IDEMPIERE-6375] Add missing quantities to RV_Storage_per_product view [https://github.com/idempiere/idempiere/pull/2631 (#2631)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6379 IDEMPIERE-6379] Charts not honoring Display Legend flag [https://github.com/idempiere/idempiere/pull/2634 (#2634)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6380 IDEMPIERE-6380] MRoleOrgAccess and MUserOrgAccess .get are returning inactive records [https://github.com/idempiere/idempiere/pull/2632 (#2632)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-05 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] NPE on GridTab.m_DataStatusEvent / change approach from volatile to synchronized [https://github.com/idempiere/idempiere/pull/2623 (#2623)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6350 IDEMPIERE-6350] ToolbarProcessButton doesn't use process Process Customization for Name and Description [https://github.com/idempiere/idempiere/pull/2603 (#2603)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6351 IDEMPIERE-6351] Process called from Info Window do not use process Process Customization for Name and Description [https://github.com/idempiere/idempiere/pull/2604 (#2604)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6362 IDEMPIERE-6362] Update SyncDB for MacOsx Compatibility [https://github.com/idempiere/idempiere/pull/2616 (#2616)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6367 IDEMPIERE-6367] Problem rendering info window columns vs gridfields [https://github.com/idempiere/idempiere/pull/2622 (#2622)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6368 IDEMPIERE-6368] Improve execution of Task [https://github.com/idempiere/idempiere/pull/2624 (#2624)]&lt;br /&gt;
&lt;br /&gt;
== 2024-12-27 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3989 IDEMPIERE-3989] fast entity type identification - backward compatibility [https://github.com/idempiere/idempiere/pull/2606 (#2606)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6349 IDEMPIERE-6349] Add M49 country codes to the C_Country table (FHCA-6138) [https://github.com/idempiere/idempiere/pull/2609 (#2609)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6352 IDEMPIERE-6352] Missing @Deprecated annotation [https://github.com/idempiere/idempiere/pull/2607 (#2607)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6354 IDEMPIERE-6354] User Locking mechanism broken [https://github.com/idempiere/idempiere/pull/2610 (#2610)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6336 IDEMPIERE-6336] Fix NPE on MRefList.getList [https://github.com/idempiere/idempiere/pull/2613 (#2613)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23871</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23871"/>
		<updated>2026-05-08T20:06:10Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-05-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/3240 (#3240)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6841 IDEMPIERE-6841] Add Fields to Select Document Types to improve the Bank Transfer Window [https://github.com/idempiere/idempiere/pull/3162 (#3162)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3241 (#3241)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3257 (#3257)] [https://github.com/idempiere/idempiere/pull/3263 (#3263)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3244 (#3244)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6975 IDEMPIERE-6975] InfoPanel: Select All freezes the UI with paged result sets [https://github.com/idempiere/idempiere/pull/3243 (#3243)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6977 IDEMPIERE-6977] Performance improvement on InfoPanel.updateRowSelectionOrder [https://github.com/idempiere/idempiere/pull/3245 (#3245)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6980 IDEMPIERE-6980] Set Description When Generate Cash Plan Lines [https://github.com/idempiere/idempiere/pull/3249 (#3249)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6983 IDEMPIERE-6983] Oracle issue - cannot create attachments in UUID based tables [https://github.com/idempiere/idempiere/pull/3253 (#3253)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6985 IDEMPIERE-6985] InfoWindow: Query parameter grid caps at 3 fields per row [https://github.com/idempiere/idempiere/pull/3255 (#3255)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6988 IDEMPIERE-6988] Import CSV master+detail failing to insert detail [https://github.com/idempiere/idempiere/pull/3256 (#3256)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6990 IDEMPIERE-6990] Silent failure on Incremental2PackActivator [https://github.com/idempiere/idempiere/pull/3261 (#3261)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6991 IDEMPIERE-6991] Table Index 2Pack non-dictionary processing dictionary entries [https://github.com/idempiere/idempiere/pull/3262 (#3262)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6994 IDEMPIERE-6994] Cannot encrypt column on UU based tables [https://github.com/idempiere/idempiere/pull/3264 (#3264)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23862</id>
		<title>Migration Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23862"/>
		<updated>2026-04-23T08:04:47Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* SOAP Web Services Extracted from Core */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Features]]&lt;br /&gt;
[[Category:Migration]] &lt;br /&gt;
[[Category:Installation|M]] &lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[Category:Updated2022]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 14 (to be released, known as master) =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 14 ==&lt;br /&gt;
&lt;br /&gt;
=== WebSocket as default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
The default server push mechanism in r14 has been set to WebSocket.&lt;br /&gt;
&lt;br /&gt;
Websocket improves performance and reduces overhead in standard environments.&lt;br /&gt;
&lt;br /&gt;
However, WebSocket connectivity may fail in certain infrastructure configurations. Three known scenarios are affected.&lt;br /&gt;
&lt;br /&gt;
* LXC containers: WebSocket connections may not work correctly depending on the host kernel and network configuration of the LXC environment&lt;br /&gt;
* Port redirection via iptables: Redirecting port 8443 to 443 using iptables rules can break WebSocket handshake negotiation&lt;br /&gt;
* Connecting using a ssh tunnel for port 8443 doesn't work&lt;br /&gt;
&lt;br /&gt;
'''To use Atmosphere:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=atmosphere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use Websocket you can use &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;, or simply don't set it at all as is the default.&lt;br /&gt;
&lt;br /&gt;
=== SOAP Web Services Extracted from Core ===&lt;br /&gt;
&lt;br /&gt;
The SOAP Web Services bundle (&amp;lt;code&amp;gt;org.idempiere.webservice&amp;lt;/code&amp;gt;) has been removed from iDempiere core and is now distributed as a separate optional plugin hosted at [https://github.com/idempiere/idempiere-soap-webservices idempiere-soap-webservices].&lt;br /&gt;
&lt;br /&gt;
'''Required action for implementations using SOAP Web Services:'''&lt;br /&gt;
&lt;br /&gt;
After upgrading to this release, the SOAP endpoints (&amp;lt;code&amp;gt;ModelADService&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CompositeService&amp;lt;/code&amp;gt;) will '''no longer be available''' until the plugin is explicitly installed via the Extension Manager.&lt;br /&gt;
&lt;br /&gt;
To restore SOAP Web Services functionality:&lt;br /&gt;
# Open the '''Extension Manager''' in iDempiere.&lt;br /&gt;
# Install the '''iDempiere SOAP Web Services (ADInterface)''' extensions&lt;br /&gt;
&lt;br /&gt;
'''No action is required''' for implementations that use only the REST API.&lt;br /&gt;
&lt;br /&gt;
'''For plugin developers:''' If your custom plugin depends on SOAP web service classes (e.g. inside &amp;lt;code&amp;gt;org.idempiere.webservice.*&amp;lt;/code&amp;gt;), you must update your plugin's dependency declaration in &amp;lt;code&amp;gt;MANIFEST.MF&amp;lt;/code&amp;gt; to reference the new standalone bundle instead of core. Failure to do so will result in compilation errors when building against this release.&lt;br /&gt;
&lt;br /&gt;
This change reduces the core footprint by removing the Apache CXF framework and related WSDL libraries from base installations.&lt;br /&gt;
&lt;br /&gt;
See https://docs.idempiere.org/docs/new-features/v14/soap-web-services-plugin&lt;br /&gt;
&lt;br /&gt;
=== Accounting Implementation Classes Moved to org.idempiere.acct ===&lt;br /&gt;
&lt;br /&gt;
The accounting implementation classes (document posting logic, &amp;lt;code&amp;gt;Doc_*&amp;lt;/code&amp;gt; classes, accounting schema handling) have been extracted from iDempiere core into a dedicated bundle: &amp;lt;code&amp;gt;org.idempiere.acct&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please check for details and impact at https://docs.idempiere.org/docs/new-features/v14/accounting-plugin&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 13 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 13 ==&lt;br /&gt;
&lt;br /&gt;
=== Changes in default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
Initially release-13 was released with websocket as the default push server, but after [[ChangeLog_Release_13#2026-04-13|Release-13-2026-04-13]] it was rolled back and the default is again atmosphere.  In release-14 it has been changed again to websocket (see comments above)&lt;br /&gt;
&lt;br /&gt;
'''To use Websocket in release-13:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAttachment.setTitle driven by list ===&lt;br /&gt;
&lt;br /&gt;
The column AD_Attachment.Title was managed as a free text field, but in reality it contained a list of values.&lt;br /&gt;
&lt;br /&gt;
So, with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] the column was changed to a List, and the values are now restricted.  So, if you have used MAttachment.setTitle in a plugin or test for a different purpose, this plugin will threw an error if the value is not one of the allowed in the list.&lt;br /&gt;
&lt;br /&gt;
=== UUID native type in PostgreSQL and UUIDv7 ===&lt;br /&gt;
&lt;br /&gt;
A big change for PostgreSQL was implemented with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650]:&lt;br /&gt;
All the UUID columns in the database were converted from VARCHAR to the native UUID type.&lt;br /&gt;
This is a big recommendation from postgresql that impacts positively performance and database size.&lt;br /&gt;
&lt;br /&gt;
Also the UUIDs generated in iDempiere were moved to the [https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_7_(timestamp_and_random) UUIDv7 standard], this is also a performance recommendation, as well as it allows to order by UUID and have the same order as the creation of the records, which was something possible with the _ID columns too.&lt;br /&gt;
&lt;br /&gt;
There are some implications about this change:&lt;br /&gt;
&lt;br /&gt;
1 - the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function uses the function &amp;lt;code&amp;gt;gen_random_uuid&amp;lt;/code&amp;gt; which is available natively in postgresql since version 13.&lt;br /&gt;
&lt;br /&gt;
Previous versions will throw an error when applying the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For versions 11 and 12 you can still use it enabling the pgcrypto extension:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
CREATE EXTENSION pgcrypto;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 - the script &amp;lt;code&amp;gt;postgresql/202510101902_IDEMPIERE-6650-uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using a UUID column and at the same time having the UNION clause.&lt;br /&gt;
&lt;br /&gt;
If this happens then you must take care of dropping those views (and their dependencies) before applying the script, and then recreating them back at the end.&lt;br /&gt;
&lt;br /&gt;
3 - the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function&lt;br /&gt;
&lt;br /&gt;
You need to apply the same solution as the previous point, drop those views before and recreate them after.&lt;br /&gt;
&lt;br /&gt;
This script can also fail on versions 11 and 12, and as explained above the solution is to install the pgcrypto extension.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated PO getters on X_ classes ===&lt;br /&gt;
The X_ classes have getter methods for every foreign key, for example &amp;lt;code&amp;gt;X_C_Order.getC_DocType()&amp;lt;/code&amp;gt; - the usage of these getters is very handy and because of that it has been widely used historically.  The problem is that the way these methods are implemented is very expensive in performance, and it cannot use caches at all.  So with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6642 IDEMPIERE-6642] we decided to deprecate.  What you probably see when migrating to release-13 is a lot of deprecate warnings in your custom and plugins code, these warnings are harmless, but is recommended to migrate to better methods that have a better performance and use cache when possible.&lt;br /&gt;
&lt;br /&gt;
=== Removal of old deprecated code ===&lt;br /&gt;
This release removes several classes and methods that were deprecated more than two major versions ago.&amp;lt;br&amp;gt;&lt;br /&gt;
Custom plugins and customizations that still call these classes and methods '''will no longer compile and must be updated'''.&amp;lt;br&amp;gt;&lt;br /&gt;
See the full commit here: [https://idempiere.atlassian.net/browse/IDEMPIERE-6735 IDEMPIERE-6735]  &lt;br /&gt;
&lt;br /&gt;
==== Removed Classes ====&lt;br /&gt;
* org.compiere.process.BOMValidate&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookup&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookupInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.Postcode&lt;br /&gt;
* com.akunagroup.uk.postcode.package-info&lt;br /&gt;
* org.adempiere.util.GenerateModel&lt;br /&gt;
* org.adempiere.util.GenerateModelJPA&lt;br /&gt;
* org.compiere.db.SecurityPrincipal&lt;br /&gt;
* org.compiere.model.MBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBOMProduct and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBlackListCheque and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MProductBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.util.CallableResult&lt;br /&gt;
* org.compiere.util.ExecuteResult&lt;br /&gt;
* org.compiere.util.ExtensionFileFilter&lt;br /&gt;
* org.compiere.util.FileUpload&lt;br /&gt;
* org.compiere.util.Queue&lt;br /&gt;
* org.adempiere.webui.DelegatingServlet&lt;br /&gt;
* org.adempiere.webui.event.TouchEventHelper&lt;br /&gt;
* org.adempiere.webui.panel.ChatPanel&lt;br /&gt;
* org.adempiere.webui.panel.ConfigurationPanel&lt;br /&gt;
* org.adempiere.webui.panel.FooterPanel&lt;br /&gt;
* org.adempiere.webui.panel.RequestNoticePanel&lt;br /&gt;
* org.adempiere.webui.window.FDialog&lt;br /&gt;
&lt;br /&gt;
==== Removed Methods ====&lt;br /&gt;
'''AbstractADWindowContent'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void executeASync(ProcessInfo pi)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ADSortTab'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void editRecord(boolean b)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''AEnv'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void exit (int status)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean isTablet()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CConnection'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public InitialContext getInitialContext(boolean useCache)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CustomizerGridViewDialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean onCustomize(ADTabpanel tabPanel)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean showCustomize(int WindowNo, int AD_Tab_ID, Map &amp;amp;lt;Integer, String&amp;amp;gt; columnsWidth, ArrayList &amp;amp;lt;Integer&amp;amp;gt; gridFieldIds, GridView gridPanel, QuickGridView quickGridView, boolean isQuickForm)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage, String additionalMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''diff_match_patch'''&lt;br /&gt;
* &amp;lt;code&amp;gt;@Deprecated public LinkedList&amp;amp;lt;Patch&amp;amp;gt; patch_make(String text1, String text2, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Env'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties getRemoteCallCtx(Properties ctx)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GridTable'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isSortedAscending()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getSortColumnIndex()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''I_C_Country'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isPostcodeLookup()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClassName()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClientID()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupPassword()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupUrl()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setIsPostcodeLookup(boolean IsPostcodeLookup)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClassName(String LookupClassName)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClientID(String LookupClientID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupPassword(String LookupPassword)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupUrl(String LookupUrl)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LayoutUtils'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void sendDeferLayoutEvent(org.zkoss.zul.Borderlayout layout, int timeout)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Login'''&lt;br /&gt;
* &amp;lt;code&amp;gt;private KeyNamePair[] getRoles(String app_user, String app_pwd, boolean force)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;protected KeyNamePair[] getRoles(CConnection cc, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(Principal app_user)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(String app_user, String app_pwd)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties initTest (boolean isClient)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MAging'''&lt;br /&gt;
* &amp;lt;code&amp;gt;MAging (Properties ctx, int AD_PInstance_ID, Timestamp StatementDate, int C_BPartner_ID, int C_Currency_ID, int C_Invoice_ID, int C_InvoicePaySchedule_ID, int C_BP_Group_ID, Timestamp DueDate, boolean IsSOTrx, String trxName)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartner'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getAD_OrgBP_ID_Int()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartnerLocation'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MBPartnerLocation[] getForBPartner(Properties ctx, int C_BPartner_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCharge'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MAccount getAccount (int C_Charge_ID, MAcctSchema as, BigDecimal amount)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCountry'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void setDisplayLanguage (String AD_Language)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MPaySelectionLine'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void xsetInvoice(int C_Invoice_ID, boolean isSOTrx, BigDecimal OpenAmt, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MWFEventAudit'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID, int AD_WF_Node_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WCreateFromWindow'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setStatusBar(StatusBarPanel statusBar)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WListItemRenderer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setRO(int colIndex, Boolean readOnly)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WLocatorEditor'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setField(org.compiere.model.GridField mField)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WTableColumn'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean getResizable()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMaxWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMinWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getPreferredWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMaxWidth(int maxWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMinWidth(int minWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setPreferredWidth(int preferredWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setResizable(boolean isResizable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setWidth(int width)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WindowContainer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertAfter(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertBefore(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Required developer actions ====&lt;br /&gt;
* Rebuild your custom plugins and note any compilation errors related to missing classes or methods.&lt;br /&gt;
* For each error, replace the removed deprecated API with its recommended alternative (standard getters/setters, services, or cache‑aware access patterns).&lt;br /&gt;
* Re‑run your test suite (or perform manual regression tests) to validate that business logic continues to work as expected.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Only APIs that had been deprecated for more than two major releases were removed, following the project deprecation policy.''&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 13 ==&lt;br /&gt;
With the [https://idempiere.atlassian.net/browse/IDEMPIERE-6575 IDEMPIERE-6575] ticket, on the AD_Sequence_No.CalendarYearMonth column was renamed to SequenceKey, this means for the  getCalendarYearMonth and  setCalendarYearMonth methods the adequate replacement is getSequenceKey and setSequenceKey.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 12 =&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
As reported by Robert Green [https://groups.google.com/g/idempiere/c/iFtEV_6mwf0/m/GejbvQhOAwAJ on forums], there are problems running iDempiere '''as a server''' on windows.&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== JDBC libraries upgraded ===&lt;br /&gt;
&lt;br /&gt;
Three libraries related to JDBC were upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] on [[ChangeLog_Release_12#2025-11-10|release-12.2025-11-10]]&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL from 42.7.3 to 42.7.8&lt;br /&gt;
* Oracle from ojdbc10 19.21.0.0 to ojdbc17 23.26.0.0.0&lt;br /&gt;
* HikariCP from 5.1.0 to 7.0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL 42.7.8 has a change that could break previous working code:&lt;br /&gt;
* previously the DatabaseMetaData.get* methods worked with any catalog name, that parameter was simply ignored&lt;br /&gt;
* since 42.7.5 the catalog is used as a filter, so it must be passed as the database name, or null&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3394&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3389&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/pull/3390&lt;br /&gt;
&lt;br /&gt;
=== Session Fingerprinting ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-02-08|release-12-20260208]] session fingerprinting was added to the zkwebui.&lt;br /&gt;
&lt;br /&gt;
Please read carefully [[NF12 Session Fingerprinting]] to see the options being checked.&lt;br /&gt;
&lt;br /&gt;
It's possible your users will be logged out when changing the language '''of the browser''' during and iDempiere session, or if the browser is updated.&lt;br /&gt;
&lt;br /&gt;
It's also possible that changes of IP address will be logged in logs and in AD_Issue.  This can happen when connecting to a VPN, changing wifi, or using mobile.  But it can also be the indication of attempts to hijack the session.  It is recommended to keep an eye on these alerts and verify for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
=== New Env.parseContext parameter ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-01-04|release-12-20260104]] a new parameter was added to Env.parseContext:&lt;br /&gt;
&lt;br /&gt;
* '''forSQL''': if true, the parsed value is intended for SQL statement, so it replaces quotes accordingly&lt;br /&gt;
&lt;br /&gt;
It is recommended to review your plugins and use the new parameter when the Env.parseContext is intended to be used in SQL clauses, this is very important to prevent SQL Injection attacks.&lt;br /&gt;
&lt;br /&gt;
=== New SQLFragment approach ===&lt;br /&gt;
&lt;br /&gt;
In many places of iDempiere direct SQL clauses were added with parameters replaced directly within the where clause, this can open doors for SQL Injection attacs that we want to avoid.&lt;br /&gt;
&lt;br /&gt;
To solve that, the new org.idempiere.db.util.SQLFragment was added in [[ChangeLog_Release_12#2026-01-16|release-12-20260116]], this approach allows to define a where clause with binding parameters and associate a List of parameters to the clause.&lt;br /&gt;
&lt;br /&gt;
Many methods were deprecated to encourage the usage of the new SQLFragment approach instead of adding directly where clauses.&lt;br /&gt;
&lt;br /&gt;
It is encouraged to check carefully your plugins using these deprecated methods and migrate to the new SQLFragment approach.&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== Promotions functionality was removed from core to a plugin ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-2826 IDEMPIERE-2826] it was decided to move the Promotions functionality out of core to a plugin.&lt;br /&gt;
&lt;br /&gt;
So, if you have been using this functionality, when migrating to release-12 is necessary to install the plugin.&lt;br /&gt;
&lt;br /&gt;
The plugin documentation can be found at: [[Plugin:_Promotions]]&lt;br /&gt;
&lt;br /&gt;
== Theme ==&lt;br /&gt;
&lt;br /&gt;
Default theme was changed from ''breeze'' to ''iceblue_c''. &lt;br /&gt;
&lt;br /&gt;
To reflect that, the ''ZK_THEME'' SysConfig has been forced to 'iceblue_c'.&lt;br /&gt;
&lt;br /&gt;
So, once your customized theme is updated (as it will probably require some adaptations), you can update the SysConfig to use it.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 11 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 11 ==&lt;br /&gt;
&lt;br /&gt;
=== Java 17 required ===&lt;br /&gt;
For the release-11 we decided to move to the next Long Term Supported version of java.  As java 11 is too close to its end of life, the release-11 requires java-17 for running and compiling.&lt;br /&gt;
&lt;br /&gt;
=== Storage size increase because of new Record_UU columns ===&lt;br /&gt;
As explained in [[NF11 UUID Key Tables#Enabled Features for tables with UUID key and without ID key|UUID Key Tables documentation page]]: a number of Record_UU columns have been added to core tables, which can represent an increase in storage size and backup size in implementations that have many records on these tables, for example many attachments, or heavy usage of chat, post-it or labels.  Also the Change Log can be affected by size depending on the System Configurator key AD_CHANGELOG_SAVE_UUID&lt;br /&gt;
&lt;br /&gt;
=== New MPInstance constructors to manage the new column AD_PInstance.AD_Table_ID ===&lt;br /&gt;
The table AD_PInstance table had a Record_ID column without the corresponding AD_Table_ID.  This is an anomaly and it created a problem as it was not possible to figure out which table triggered a process, and use the Record_ID field to navigate to the originating record.&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5567 IDEMPIERE-5567] the column was added, and the migration script 202309111844_IDEMPIERE-5567_ADPInstance.sql tries the best to fill the new column AD_Table_ID discovering the related table from column, toolbar button, print formats, etc.&lt;br /&gt;
&lt;br /&gt;
However, it is very possible that not all relationships can be figured out, after migration you can review which records were left on AD_PInstance table with null AD_Table_ID and Record_ID&amp;gt;0, and decide if you want to fill it for your specific cases (sometimes is not possible to discover it at the end (for example the process org.compiere.process.BankStatementMatcher could have been called from three different tables and there is no trace about that).&lt;br /&gt;
&lt;br /&gt;
Additionally, it is possible that your plugins call processes filling AD_PInstance without the table, the old constructors for MPInstance are marked as deprecated to ease the task to find them in your plugins and migrate to use the new methods.&lt;br /&gt;
&lt;br /&gt;
=== Constructor MPaymentBatch(Properties, String, String) changed ===&lt;br /&gt;
&lt;br /&gt;
There was a constructor MPaymentBatch(Properties, String, String) that was not used in the official core.&lt;br /&gt;
&lt;br /&gt;
The second parameter of this constructor was the Name and it was intended to create a new record and set the Name of the Payment Batch record.&lt;br /&gt;
&lt;br /&gt;
This constructor conflicts with the [[NF11_UUID_Key_Tables#New_UUID_based_constructors|new UUID based constructor]], so it was replaced by the UUID constructor and its behavior is now completely different.&lt;br /&gt;
&lt;br /&gt;
Most probably nobody is using this old constructor, but in case you use MPaymentBatch constructor in your plugins, please review that you are not using this constructor, if used, please change it to a normal constructor with zero as ID parameter and then set the Name.&lt;br /&gt;
&lt;br /&gt;
=== Product Info toolbar button deactivated in Core. ===&lt;br /&gt;
The community discussion was that most people is not using that toolbar button. However, if you miss it after upgrading. You can go to the Toolbar Button window and activate it again.&lt;br /&gt;
&lt;br /&gt;
=== Export Button not exporting Official Dictionary entries ===&lt;br /&gt;
Since [https://idempiere.atlassian.net/browse/IDEMPIERE-6018 IDEMPIERE-6018] the Export button on windows does not export official dictionary entries, to export dictionary is needed to configure and use a PackOut.&lt;br /&gt;
&lt;br /&gt;
=== Hazelcast defaults to disable auto-detection ===&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6279 IDEMPIERE-6279] the hazelcast automatic detection of other servers within the network was disabled, if you plan to use Hazelcast in a multi-server or load balanced scenario, the hazelcast-template.xml needs to be customized.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 10 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 10 ==&lt;br /&gt;
&lt;br /&gt;
=== System user with ID zero deprecated ===&lt;br /&gt;
&lt;br /&gt;
The user System with ID=0 was inactivated and replaced with a similar user with ID=10&lt;br /&gt;
&lt;br /&gt;
Implementors that use System in any way must check if there is impact with this change, the migration script 202202072157_IDEMPIERE-5174.sql copies the information from AD_User, but it doesn't copy custom columns.  Also, it replaces AD_User_ID in some core tables, but implementors must take care if is needed in other custom tables.&lt;br /&gt;
&lt;br /&gt;
=== Change on Schedule behaviour ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5093 IDEMPIERE-5093] changed the way the schedule works:&lt;br /&gt;
* Before this ticket when you had a schedule configured to run at 9AM, the job was executed at 9AM of the server timezone.&lt;br /&gt;
* This ticket changed this behaviour and now the job is executed at 9AM '''of the tenant timezone''' where the job is defined.&lt;br /&gt;
&lt;br /&gt;
=== Terminology changed from Client to Tenant ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4586 IDEMPIERE-4586] changed the terminology for Client to be known as Tenant in the whole application.&lt;br /&gt;
&lt;br /&gt;
This have little impact from user perspective, but it can have a big impact on documentation.&lt;br /&gt;
&lt;br /&gt;
=== Backward compatibility issue with TimeUtil.getBusinessDaysBetween ===&lt;br /&gt;
Before v10, the method was counting the last day of the period in the total of non business days.&lt;br /&gt;
&lt;br /&gt;
Now, the last day is excluded. In order to fix that, a new method with a new parameter has been added ''includeEndDate,'' so you must use that new method with your plugin if you want to preserve behaviour prior to v10.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade to Hazelcast ===&lt;br /&gt;
The hazelcast library was upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5816 IDEMPIERE-5816], the &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; configuration file is not compatible with previous version, so it is needed to run setup again to use the new template.  In case your &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; is customized, you need to take the template for version 5.3 and apply your changes.  NOTE: This was integrated into release-11, and also into release-10 at 2023-07-29&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 9 Horizon =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 9 Horizon ==&lt;br /&gt;
&lt;br /&gt;
=== Deprecated direct http usage ===&lt;br /&gt;
&lt;br /&gt;
iDempiere 9 Horizon doesn't support anymore direct http usage of the webui interface.  Workaround is simply to use port https.&lt;br /&gt;
&lt;br /&gt;
If you use http the system doesn't allow login in webui.&lt;br /&gt;
&lt;br /&gt;
Note that http can still be used for proxy forwarding, but the configuration requires to forward the header X-Forwarded-Proto to https.&lt;br /&gt;
&lt;br /&gt;
In nginx you must add the following line to the definition of the locations /webui and /webui/zkau/comet:&lt;br /&gt;
 proxy_set_header  X-Forwarded-Proto $scheme;&lt;br /&gt;
As described in [[Proxy iDempiere Through Nginx]]&lt;br /&gt;
&lt;br /&gt;
=== All core views imported to dictionary ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5059 IDEMPIERE-5059] the definition of the 149 core views was imported to the dictionary.&lt;br /&gt;
&lt;br /&gt;
In the migration scripts there is code to recreate all these views, so it is very possible that all the custom columns that were added to views by the implementor will present problems when applying the scripts.&lt;br /&gt;
&lt;br /&gt;
Two possible cases that you need to take care about:&lt;br /&gt;
* the script doesn't show errors, but your customization for the view is lost. You must check all the core views that you customized to see if they are having problems and apply the corresponding fixes in release 9&lt;br /&gt;
* the script show errors when applying (usually postgres complains because it cannot change the columns)&lt;br /&gt;
In both cases it is required that you fix the views, do not create the view by hand in SQL, the best way is to add your customized columns to the dictionary and then use the iDempiere process to validate/create the view in the database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Take care of AD_Window.PredefinedContextVariables ===&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4837 IDEMPIERE-4837] will erase changes done on AD_Window.PredefinedContextVariables for Order, Invoices.&lt;br /&gt;
Make a backup of the content of those fields if you have customized them and reapply them.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Default to Native Dialect ===&lt;br /&gt;
Release-9 comes by default with Native PostgreSQL dialect.  The SQLs in core were changed to make them compatible for Oracle and PostgreSQL.  Because of that is possible that some plugins can be broken, for example if using NATIVE_PostgreSQL_KEYWORK.&lt;br /&gt;
&lt;br /&gt;
To solve that, the best option is to change your plugin to use SQL standard (compatible with both databases).&lt;br /&gt;
&lt;br /&gt;
See [[NF9 PostgreSQL Default To Native Dialect]] for information about how to disable it (not recommended).&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 8.2 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 8.2 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
For migration script issues see [[Note Upgrade 8.2]] from [[User:Hieplq|Hiep]]&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 8.2 ==&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4421 IDEMPIERE-4421] it was implemented a mechanism for versioning the themes.&lt;br /&gt;
&lt;br /&gt;
We tried to preserve backward compatibility with pre-8.2 themes, but still you'll find problems when the following conditions are in your plugin&lt;br /&gt;
* if the old plugin has references to /theme/default, because the URL of /theme/default was changed to the versioning approach&lt;br /&gt;
** Recommended solution: migrate your theme to 8.2 approach&lt;br /&gt;
** Or change the pointers to /theme/default to point to your own theme&lt;br /&gt;
** Or change the pointers to ~./theme/default/ (this is not recommended, is preferable to maintain your own theme assets)&lt;br /&gt;
* if your plugin referenced the public variable ITheme.THEME_PATH_PREFIX, that variable was dropped&lt;br /&gt;
** Solution is to change the variable to ThemeManager.THEME_PATH_PREFIX&lt;br /&gt;
&lt;br /&gt;
You can find additional instructions to migrate your theme at this ticket comment: https://idempiere.atlassian.net/browse/IDEMPIERE-4421?focusedCommentId=46667&lt;br /&gt;
&lt;br /&gt;
=== PO is immutable ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about not writing objects retrieved from cache.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids writing to these objects to prevent multi-threading issues with these objects.  The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4287 IDEMPIERE-4287]&lt;br /&gt;
&lt;br /&gt;
=== Cross-tenant reading/writing forbidden by default ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about avoiding reading or writing records from a different tenant than the tenant that was used in login.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids reading/writing records from a different tenant.&lt;br /&gt;
&lt;br /&gt;
Reading can be done from the current tenant or System tenant.  Writing can be done just on the current tenant.&lt;br /&gt;
&lt;br /&gt;
The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
How to avoid this condition?&lt;br /&gt;
* Always read/write records within the tenant&lt;br /&gt;
* for example filter &amp;lt;code&amp;gt;AD_Client_ID=?&amp;lt;/code&amp;gt;&lt;br /&gt;
* or filter &amp;lt;code&amp;gt;AD_Client_ID IN (0,?)&amp;lt;/code&amp;gt;&lt;br /&gt;
* with Query consider using the method setClient_ID&lt;br /&gt;
&lt;br /&gt;
If, for any reason, it is absolutely necessary to read or write a record in a different tenant, the following code can be used:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
    PO.setCrossTenantSafe();&lt;br /&gt;
    // write here the Query.list or PO.saveEx that is cross tenant safe&lt;br /&gt;
} finally {&lt;br /&gt;
    PO.clearCrossTenantSafe();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4268 IDEMPIERE-4268]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 7.1 =&lt;br /&gt;
&lt;br /&gt;
== Multi-server schedulers ==&lt;br /&gt;
&lt;br /&gt;
Because of ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4056 IDEMPIERE-4056], the schedulers running in all servers are not supported anymore.&lt;br /&gt;
&lt;br /&gt;
This is, in previous versions when a scheduler didn't have a RunOnlyOnIP defined it was executed in all servers, after the implementation of IDEMPIERE-4056 the schedulers without an IP defined are executed on just one server (randomly).&lt;br /&gt;
&lt;br /&gt;
How to configure now:&lt;br /&gt;
* The RunOnlyOnIP keeps working as usual, so the easiest workaround is to configure one scheduler per each server&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 3.1 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 3.1 ==&lt;br /&gt;
&lt;br /&gt;
=== Keystore moved ===&lt;br /&gt;
&lt;br /&gt;
As the web server was changed from tomcat to jetty the keystore file was moved from &amp;lt;code&amp;gt;idempiere-server/keystore/myKeystore&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;idempiere-server/jettyhome/etc/keystore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the upgrade of zk to version 7 the file &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/theme.css.dsp&amp;lt;/code&amp;gt; was split in fragments located at folder &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/fragment&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;about.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;adwindow.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;application-menu.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;borderlayout.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;button.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;desktop.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;field-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;find-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;form.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;gadget.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;grid.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;group.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;help-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;info-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;input-element.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;login.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;menu-tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;setup-wizard.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar-popup.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Theme developers must take care of migrating the themes to be compliant with this new schema.&lt;br /&gt;
&lt;br /&gt;
=== Migration Notes from [[User:Hieplq|Hieplq]] ===&lt;br /&gt;
&lt;br /&gt;
Please take a look to the migration notes provided by hiep at [[Update_your_development_environment_zk7_branch#known_issues|Known issues when updating your development environment zk7 branch]]&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.1 to iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1z i2.1z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i3.1 i3.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.0 to iDempiere 2.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0 i2.0]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0z i2.0z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 1.0 to iDempiere 2.0 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]  # just the scripts still not applied&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0z i1.0z]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i2.0 i2.0]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 1.0 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old systems to iDempiere 1.0 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== org.compiere.acct.Doc ===&lt;br /&gt;
&lt;br /&gt;
Constructor account schema parameter have been changed from MAcctSchema[] to MAcctSchema. This can break extensions that modify accounting, solution is simple, just change it to use new method and accomodate code.&lt;br /&gt;
&lt;br /&gt;
=== 2Pack ===&lt;br /&gt;
&lt;br /&gt;
The new 2pack format is not backward compatible&lt;br /&gt;
&lt;br /&gt;
=== AD_WF_Node ===&lt;br /&gt;
&lt;br /&gt;
The xposition and yposition column now stored the node's position in a grid instead of absolute pixel value.&lt;br /&gt;
&lt;br /&gt;
=== Change Log Configuration ===&lt;br /&gt;
&lt;br /&gt;
The change log is now enabled by default in most of the tables.&lt;br /&gt;
&lt;br /&gt;
Enabling the change log is done with the script 201306261840_EnableChangeLog.sql&lt;br /&gt;
&lt;br /&gt;
If you have already tuned your change log configuration, you can skip that script - or run it and then recover your specific fine tuning changes.&lt;br /&gt;
&lt;br /&gt;
Note also that enabling the change log it will increase the disk consumption - if that's a concern on your installation you must fine tune this configuration after running the script.&lt;br /&gt;
&lt;br /&gt;
=== Jasper ID parameters passed as BigDecimal now as Integer ===&lt;br /&gt;
&lt;br /&gt;
In some cases the ID parameters (table, table direct, search) were passed to jasper reports as BigDecimal, while in other cases same parameters were passed as Integer (like RECORD_ID or ranges), with [http://idempiere.atlassian.net/browse/IDEMPIERE-1422 IDEMPIERE-1422] that behavior is now consistent, always using Integer for _ID parameters.&lt;br /&gt;
&lt;br /&gt;
This change can break old jasper reports that defined the ID parameter as BigDecimal, the fix is simple, just change the jasper parameter to Integer and compile again.&lt;br /&gt;
&lt;br /&gt;
When this error is reached running the jasper report throws this exception:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
16:47:32.058===========&amp;gt; ProcessUtil.startJavaProcess: org.compiere.report.ReportStarter [17]&lt;br /&gt;
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:553)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:399)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter$1.visit(JRJdbcQueryExecuter.java:332)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter$QueryParameter.accept(JRAbstractQueryExecuter.java:157)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter.visitQueryParameters(JRAbstractQueryExecuter.java:646)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:317)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1281)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:900)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functional Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Inventory Document Types ===&lt;br /&gt;
&lt;br /&gt;
Because of [http://idempiere.atlassian.net/browse/IDEMPIERE-675 IDEMPIERE-675] you need to set manually the inventory document subtype for your inventory documents (internal use and physical inventory).&lt;br /&gt;
&lt;br /&gt;
In case you used the same document type for both cases - then recommendation is to inactivate the old mixed document and create new document types for each specific case.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated Functionalities ===&lt;br /&gt;
&lt;br /&gt;
With [http://idempiere.atlassian.net/browse/IDEMPIERE-362 IDEMPIERE-362], [http://idempiere.atlassian.net/browse/IDEMPIERE-170 IDEMPIERE-170], [http://idempiere.atlassian.net/browse/IDEMPIERE-247 IDEMPIERE-247] some functionalities that were not working properly where deprecated, please check the tickets and commits for details, most prominent are:&lt;br /&gt;
* Cash Journals (all cash functionalities can be modeled using payments)&lt;br /&gt;
* MRP Heavy Manufacturing (Light Manufacturing was integrated)&lt;br /&gt;
* Payroll (being developed as extension)&lt;br /&gt;
&lt;br /&gt;
=== Production ===&lt;br /&gt;
&lt;br /&gt;
If you used the old Production window (original from Compiere with three tabs) - please note some changes are required as noted in [http://idempiere.atlassian.net/browse/IDEMPIERE-521 IDEMPIERE-521]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Roles ===&lt;br /&gt;
&lt;br /&gt;
With [https://idempiere.atlassian.net/browse/IDEMPIERE-1160 IDEMPIERE-1160] a new security feature was implemented, when creating a new client the ClientAdmin role is configured as advanced role and the ClientUser role is not, after that you can use the ClientAdmin role to configure the rest of roles (advanced or not) and users.&lt;br /&gt;
&lt;br /&gt;
Please note that advanced role is not intended for end-users, is mostly intended for Information technology (IT) roles that administer the system - advanced roles have access to many fields that are documented and exposed security holes in the system.&lt;br /&gt;
&lt;br /&gt;
This new feature creates a problem when migrating databases with existing tenants - as we can't know in advance how the security was configured in an already existing client - we cannot set advanced role to one of the client roles in the database via migration script.  The consequence is that when migrating databases, all the roles on Clients (not GardenAdmin and System) are marked as non-advanced - and there is not a way to mark advanced role within the system, it's needed to mark your required advanced role directly via SQL with a command like:&lt;br /&gt;
 UPDATE AD_Role SET IsAccessAdvanced='Y' WHERE AD_Role_ID=?&lt;br /&gt;
where you replace the ? with the ID of the role you design as advanced (with access to security holes).&lt;br /&gt;
&lt;br /&gt;
= Migration Scripts =&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to ADempiere 361 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts-360lts.010?at=globalqss_adempiere361 360lts-360lts.010]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts.010-361.Final?at=globalqss_adempiere361 360lts.010-361.Final]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/361.Final-BUG_FIXES?at=globalqss_adempiere361 361.Final-BUG_FIXES]&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/360lts-i1.0a 360lts-i1.0a]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0a-i1.0b i1.0a-i1.0b]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0b-i1.0c i1.0b-i1.0c]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 361 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
You need to apply the migration scripts like migrating from 360, '''EXCLUDING''' those already applied when you migrated from 360 to 361.&lt;br /&gt;
&lt;br /&gt;
== Increasing speed of some scripts ==&lt;br /&gt;
&lt;br /&gt;
* Script &amp;lt;code&amp;gt;postgresql/789_GenerateUUIDColumns.sql&amp;lt;/code&amp;gt; can apply ALTER TABLE too slowly for big tables - this can be improved dropping the &amp;quot; DEFAULT NULL&amp;quot; at the end of each ALTER TABLE&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended to run &amp;quot;UUID Generator&amp;quot; process after migration to fill the empty UUID columns, but this can be a very slow process for big tables, a faster way can be achieved executing an update directly on the database, also you can consider deleting the related uuid index before the update and recreating it at the end, for example:&lt;br /&gt;
** &amp;lt;code&amp;gt;DROP INDEX ad_changelog_uu_idx;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;UPDATE AD_ChangeLog SET AD_ChangeLog_UU=generate_uuid() WHERE AD_ChangeLog_UU IS NULL;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;CREATE UNIQUE INDEX ad_changelog_uu_idx ON ad_changelog (ad_changelog_uu);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The script &amp;lt;code&amp;gt;processes_post_migration/postgresql/02_SynchronizeTerminology.sql&amp;lt;/code&amp;gt; tend to be slow on postgresql versions higher than 9.1 with the default memory.  In order to solve this is recommended to tune the memory for the database.&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere 370 =&lt;br /&gt;
&lt;br /&gt;
[[User:Pb_integratio|Pb_integratio]] is sharing and documenting experience about this at [[Migration from ADempiere 370 to iDempiere]]&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere pre-360 =&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
Migrating some Adempiere installations before 360 to iDempiere generates a problem when using postgresql 9.2 - applying the script 201309192024_IDEMPIERE-1370.sql:222 throws:&lt;br /&gt;
 ERROR:  cannot change name of input parameter &amp;quot;p_product_id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cause ==&lt;br /&gt;
&lt;br /&gt;
An issue has been detected migrating a database pre-360 to iDempiere using postgresql 9.2&lt;br /&gt;
&lt;br /&gt;
The function bomqtyonhand from the database seed doesn't match with the function bomqtyonhand present on the migration scripts (pre-360), the script 201309192024_IDEMPIERE-1370.sql fixes that situation, but postgresql 9.2 doesn't allow changing a parameter name for a function.&lt;br /&gt;
&lt;br /&gt;
== Solutions ==&lt;br /&gt;
&lt;br /&gt;
* You can do the migration using postgres 8.4 and at the end migrate to 9.2 (postgres 8.4 allows changing name of function parameters)&lt;br /&gt;
alternatively&lt;br /&gt;
* You can drop the old function bomqtyonhand (and all the associated views) and recreate them properly&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23861</id>
		<title>Migration Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23861"/>
		<updated>2026-04-23T07:51:26Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: change to link to docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Features]]&lt;br /&gt;
[[Category:Migration]] &lt;br /&gt;
[[Category:Installation|M]] &lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[Category:Updated2022]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 14 (to be released, known as master) =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 14 ==&lt;br /&gt;
&lt;br /&gt;
=== WebSocket as default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
The default server push mechanism in r14 has been set to WebSocket.&lt;br /&gt;
&lt;br /&gt;
Websocket improves performance and reduces overhead in standard environments.&lt;br /&gt;
&lt;br /&gt;
However, WebSocket connectivity may fail in certain infrastructure configurations. Three known scenarios are affected.&lt;br /&gt;
&lt;br /&gt;
* LXC containers: WebSocket connections may not work correctly depending on the host kernel and network configuration of the LXC environment&lt;br /&gt;
* Port redirection via iptables: Redirecting port 8443 to 443 using iptables rules can break WebSocket handshake negotiation&lt;br /&gt;
* Connecting using a ssh tunnel for port 8443 doesn't work&lt;br /&gt;
&lt;br /&gt;
'''To use Atmosphere:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=atmosphere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use Websocket you can use &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;, or simply don't set it at all as is the default.&lt;br /&gt;
&lt;br /&gt;
=== SOAP Web Services Extracted from Core ===&lt;br /&gt;
&lt;br /&gt;
The SOAP Web Services bundle (&amp;lt;code&amp;gt;org.idempiere.webservice&amp;lt;/code&amp;gt;) has been removed from iDempiere core and is now distributed as a separate optional plugin hosted at [https://github.com/idempiere/idempiere-soap-webservices idempiere-soap-webservices].&lt;br /&gt;
&lt;br /&gt;
'''Required action for implementations using SOAP Web Services:'''&lt;br /&gt;
&lt;br /&gt;
After upgrading to this release, the SOAP endpoints (&amp;lt;code&amp;gt;ModelADService&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CompositeService&amp;lt;/code&amp;gt;) will '''no longer be available''' until the plugin is explicitly installed via the Extension Manager.&lt;br /&gt;
&lt;br /&gt;
To restore SOAP Web Services functionality:&lt;br /&gt;
# Open the '''Extension Manager''' in iDempiere.&lt;br /&gt;
# Install the '''iDempiere SOAP Web Services (ADInterface)''' extensions&lt;br /&gt;
&lt;br /&gt;
'''No action is required''' for implementations that use only the REST API.&lt;br /&gt;
&lt;br /&gt;
'''For plugin developers:''' If your custom plugin depends on SOAP web service classes (e.g. inside &amp;lt;code&amp;gt;org.idempiere.webservice.*&amp;lt;/code&amp;gt;), you must update your plugin's dependency declaration in &amp;lt;code&amp;gt;MANIFEST.MF&amp;lt;/code&amp;gt; to reference the new standalone bundle instead of core. Failure to do so will result in compilation errors when building against this release.&lt;br /&gt;
&lt;br /&gt;
This change reduces the core footprint by removing the Apache CXF framework and related WSDL libraries from base installations.&lt;br /&gt;
&lt;br /&gt;
=== Accounting Implementation Classes Moved to org.idempiere.acct ===&lt;br /&gt;
&lt;br /&gt;
The accounting implementation classes (document posting logic, &amp;lt;code&amp;gt;Doc_*&amp;lt;/code&amp;gt; classes, accounting schema handling) have been extracted from iDempiere core into a dedicated bundle: &amp;lt;code&amp;gt;org.idempiere.acct&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please check for details and impact at https://docs.idempiere.org/docs/new-features/v14/accounting-plugin&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 13 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 13 ==&lt;br /&gt;
&lt;br /&gt;
=== Changes in default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
Initially release-13 was released with websocket as the default push server, but after [[ChangeLog_Release_13#2026-04-13|Release-13-2026-04-13]] it was rolled back and the default is again atmosphere.  In release-14 it has been changed again to websocket (see comments above)&lt;br /&gt;
&lt;br /&gt;
'''To use Websocket in release-13:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAttachment.setTitle driven by list ===&lt;br /&gt;
&lt;br /&gt;
The column AD_Attachment.Title was managed as a free text field, but in reality it contained a list of values.&lt;br /&gt;
&lt;br /&gt;
So, with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] the column was changed to a List, and the values are now restricted.  So, if you have used MAttachment.setTitle in a plugin or test for a different purpose, this plugin will threw an error if the value is not one of the allowed in the list.&lt;br /&gt;
&lt;br /&gt;
=== UUID native type in PostgreSQL and UUIDv7 ===&lt;br /&gt;
&lt;br /&gt;
A big change for PostgreSQL was implemented with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650]:&lt;br /&gt;
All the UUID columns in the database were converted from VARCHAR to the native UUID type.&lt;br /&gt;
This is a big recommendation from postgresql that impacts positively performance and database size.&lt;br /&gt;
&lt;br /&gt;
Also the UUIDs generated in iDempiere were moved to the [https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_7_(timestamp_and_random) UUIDv7 standard], this is also a performance recommendation, as well as it allows to order by UUID and have the same order as the creation of the records, which was something possible with the _ID columns too.&lt;br /&gt;
&lt;br /&gt;
There are some implications about this change:&lt;br /&gt;
&lt;br /&gt;
1 - the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function uses the function &amp;lt;code&amp;gt;gen_random_uuid&amp;lt;/code&amp;gt; which is available natively in postgresql since version 13.&lt;br /&gt;
&lt;br /&gt;
Previous versions will throw an error when applying the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For versions 11 and 12 you can still use it enabling the pgcrypto extension:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
CREATE EXTENSION pgcrypto;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 - the script &amp;lt;code&amp;gt;postgresql/202510101902_IDEMPIERE-6650-uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using a UUID column and at the same time having the UNION clause.&lt;br /&gt;
&lt;br /&gt;
If this happens then you must take care of dropping those views (and their dependencies) before applying the script, and then recreating them back at the end.&lt;br /&gt;
&lt;br /&gt;
3 - the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function&lt;br /&gt;
&lt;br /&gt;
You need to apply the same solution as the previous point, drop those views before and recreate them after.&lt;br /&gt;
&lt;br /&gt;
This script can also fail on versions 11 and 12, and as explained above the solution is to install the pgcrypto extension.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated PO getters on X_ classes ===&lt;br /&gt;
The X_ classes have getter methods for every foreign key, for example &amp;lt;code&amp;gt;X_C_Order.getC_DocType()&amp;lt;/code&amp;gt; - the usage of these getters is very handy and because of that it has been widely used historically.  The problem is that the way these methods are implemented is very expensive in performance, and it cannot use caches at all.  So with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6642 IDEMPIERE-6642] we decided to deprecate.  What you probably see when migrating to release-13 is a lot of deprecate warnings in your custom and plugins code, these warnings are harmless, but is recommended to migrate to better methods that have a better performance and use cache when possible.&lt;br /&gt;
&lt;br /&gt;
=== Removal of old deprecated code ===&lt;br /&gt;
This release removes several classes and methods that were deprecated more than two major versions ago.&amp;lt;br&amp;gt;&lt;br /&gt;
Custom plugins and customizations that still call these classes and methods '''will no longer compile and must be updated'''.&amp;lt;br&amp;gt;&lt;br /&gt;
See the full commit here: [https://idempiere.atlassian.net/browse/IDEMPIERE-6735 IDEMPIERE-6735]  &lt;br /&gt;
&lt;br /&gt;
==== Removed Classes ====&lt;br /&gt;
* org.compiere.process.BOMValidate&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookup&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookupInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.Postcode&lt;br /&gt;
* com.akunagroup.uk.postcode.package-info&lt;br /&gt;
* org.adempiere.util.GenerateModel&lt;br /&gt;
* org.adempiere.util.GenerateModelJPA&lt;br /&gt;
* org.compiere.db.SecurityPrincipal&lt;br /&gt;
* org.compiere.model.MBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBOMProduct and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBlackListCheque and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MProductBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.util.CallableResult&lt;br /&gt;
* org.compiere.util.ExecuteResult&lt;br /&gt;
* org.compiere.util.ExtensionFileFilter&lt;br /&gt;
* org.compiere.util.FileUpload&lt;br /&gt;
* org.compiere.util.Queue&lt;br /&gt;
* org.adempiere.webui.DelegatingServlet&lt;br /&gt;
* org.adempiere.webui.event.TouchEventHelper&lt;br /&gt;
* org.adempiere.webui.panel.ChatPanel&lt;br /&gt;
* org.adempiere.webui.panel.ConfigurationPanel&lt;br /&gt;
* org.adempiere.webui.panel.FooterPanel&lt;br /&gt;
* org.adempiere.webui.panel.RequestNoticePanel&lt;br /&gt;
* org.adempiere.webui.window.FDialog&lt;br /&gt;
&lt;br /&gt;
==== Removed Methods ====&lt;br /&gt;
'''AbstractADWindowContent'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void executeASync(ProcessInfo pi)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ADSortTab'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void editRecord(boolean b)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''AEnv'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void exit (int status)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean isTablet()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CConnection'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public InitialContext getInitialContext(boolean useCache)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CustomizerGridViewDialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean onCustomize(ADTabpanel tabPanel)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean showCustomize(int WindowNo, int AD_Tab_ID, Map &amp;amp;lt;Integer, String&amp;amp;gt; columnsWidth, ArrayList &amp;amp;lt;Integer&amp;amp;gt; gridFieldIds, GridView gridPanel, QuickGridView quickGridView, boolean isQuickForm)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage, String additionalMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''diff_match_patch'''&lt;br /&gt;
* &amp;lt;code&amp;gt;@Deprecated public LinkedList&amp;amp;lt;Patch&amp;amp;gt; patch_make(String text1, String text2, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Env'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties getRemoteCallCtx(Properties ctx)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GridTable'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isSortedAscending()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getSortColumnIndex()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''I_C_Country'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isPostcodeLookup()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClassName()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClientID()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupPassword()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupUrl()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setIsPostcodeLookup(boolean IsPostcodeLookup)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClassName(String LookupClassName)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClientID(String LookupClientID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupPassword(String LookupPassword)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupUrl(String LookupUrl)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LayoutUtils'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void sendDeferLayoutEvent(org.zkoss.zul.Borderlayout layout, int timeout)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Login'''&lt;br /&gt;
* &amp;lt;code&amp;gt;private KeyNamePair[] getRoles(String app_user, String app_pwd, boolean force)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;protected KeyNamePair[] getRoles(CConnection cc, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(Principal app_user)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(String app_user, String app_pwd)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties initTest (boolean isClient)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MAging'''&lt;br /&gt;
* &amp;lt;code&amp;gt;MAging (Properties ctx, int AD_PInstance_ID, Timestamp StatementDate, int C_BPartner_ID, int C_Currency_ID, int C_Invoice_ID, int C_InvoicePaySchedule_ID, int C_BP_Group_ID, Timestamp DueDate, boolean IsSOTrx, String trxName)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartner'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getAD_OrgBP_ID_Int()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartnerLocation'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MBPartnerLocation[] getForBPartner(Properties ctx, int C_BPartner_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCharge'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MAccount getAccount (int C_Charge_ID, MAcctSchema as, BigDecimal amount)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCountry'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void setDisplayLanguage (String AD_Language)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MPaySelectionLine'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void xsetInvoice(int C_Invoice_ID, boolean isSOTrx, BigDecimal OpenAmt, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MWFEventAudit'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID, int AD_WF_Node_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WCreateFromWindow'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setStatusBar(StatusBarPanel statusBar)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WListItemRenderer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setRO(int colIndex, Boolean readOnly)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WLocatorEditor'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setField(org.compiere.model.GridField mField)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WTableColumn'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean getResizable()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMaxWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMinWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getPreferredWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMaxWidth(int maxWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMinWidth(int minWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setPreferredWidth(int preferredWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setResizable(boolean isResizable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setWidth(int width)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WindowContainer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertAfter(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertBefore(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Required developer actions ====&lt;br /&gt;
* Rebuild your custom plugins and note any compilation errors related to missing classes or methods.&lt;br /&gt;
* For each error, replace the removed deprecated API with its recommended alternative (standard getters/setters, services, or cache‑aware access patterns).&lt;br /&gt;
* Re‑run your test suite (or perform manual regression tests) to validate that business logic continues to work as expected.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Only APIs that had been deprecated for more than two major releases were removed, following the project deprecation policy.''&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 13 ==&lt;br /&gt;
With the [https://idempiere.atlassian.net/browse/IDEMPIERE-6575 IDEMPIERE-6575] ticket, on the AD_Sequence_No.CalendarYearMonth column was renamed to SequenceKey, this means for the  getCalendarYearMonth and  setCalendarYearMonth methods the adequate replacement is getSequenceKey and setSequenceKey.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 12 =&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
As reported by Robert Green [https://groups.google.com/g/idempiere/c/iFtEV_6mwf0/m/GejbvQhOAwAJ on forums], there are problems running iDempiere '''as a server''' on windows.&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== JDBC libraries upgraded ===&lt;br /&gt;
&lt;br /&gt;
Three libraries related to JDBC were upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] on [[ChangeLog_Release_12#2025-11-10|release-12.2025-11-10]]&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL from 42.7.3 to 42.7.8&lt;br /&gt;
* Oracle from ojdbc10 19.21.0.0 to ojdbc17 23.26.0.0.0&lt;br /&gt;
* HikariCP from 5.1.0 to 7.0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL 42.7.8 has a change that could break previous working code:&lt;br /&gt;
* previously the DatabaseMetaData.get* methods worked with any catalog name, that parameter was simply ignored&lt;br /&gt;
* since 42.7.5 the catalog is used as a filter, so it must be passed as the database name, or null&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3394&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3389&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/pull/3390&lt;br /&gt;
&lt;br /&gt;
=== Session Fingerprinting ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-02-08|release-12-20260208]] session fingerprinting was added to the zkwebui.&lt;br /&gt;
&lt;br /&gt;
Please read carefully [[NF12 Session Fingerprinting]] to see the options being checked.&lt;br /&gt;
&lt;br /&gt;
It's possible your users will be logged out when changing the language '''of the browser''' during and iDempiere session, or if the browser is updated.&lt;br /&gt;
&lt;br /&gt;
It's also possible that changes of IP address will be logged in logs and in AD_Issue.  This can happen when connecting to a VPN, changing wifi, or using mobile.  But it can also be the indication of attempts to hijack the session.  It is recommended to keep an eye on these alerts and verify for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
=== New Env.parseContext parameter ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-01-04|release-12-20260104]] a new parameter was added to Env.parseContext:&lt;br /&gt;
&lt;br /&gt;
* '''forSQL''': if true, the parsed value is intended for SQL statement, so it replaces quotes accordingly&lt;br /&gt;
&lt;br /&gt;
It is recommended to review your plugins and use the new parameter when the Env.parseContext is intended to be used in SQL clauses, this is very important to prevent SQL Injection attacks.&lt;br /&gt;
&lt;br /&gt;
=== New SQLFragment approach ===&lt;br /&gt;
&lt;br /&gt;
In many places of iDempiere direct SQL clauses were added with parameters replaced directly within the where clause, this can open doors for SQL Injection attacs that we want to avoid.&lt;br /&gt;
&lt;br /&gt;
To solve that, the new org.idempiere.db.util.SQLFragment was added in [[ChangeLog_Release_12#2026-01-16|release-12-20260116]], this approach allows to define a where clause with binding parameters and associate a List of parameters to the clause.&lt;br /&gt;
&lt;br /&gt;
Many methods were deprecated to encourage the usage of the new SQLFragment approach instead of adding directly where clauses.&lt;br /&gt;
&lt;br /&gt;
It is encouraged to check carefully your plugins using these deprecated methods and migrate to the new SQLFragment approach.&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== Promotions functionality was removed from core to a plugin ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-2826 IDEMPIERE-2826] it was decided to move the Promotions functionality out of core to a plugin.&lt;br /&gt;
&lt;br /&gt;
So, if you have been using this functionality, when migrating to release-12 is necessary to install the plugin.&lt;br /&gt;
&lt;br /&gt;
The plugin documentation can be found at: [[Plugin:_Promotions]]&lt;br /&gt;
&lt;br /&gt;
== Theme ==&lt;br /&gt;
&lt;br /&gt;
Default theme was changed from ''breeze'' to ''iceblue_c''. &lt;br /&gt;
&lt;br /&gt;
To reflect that, the ''ZK_THEME'' SysConfig has been forced to 'iceblue_c'.&lt;br /&gt;
&lt;br /&gt;
So, once your customized theme is updated (as it will probably require some adaptations), you can update the SysConfig to use it.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 11 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 11 ==&lt;br /&gt;
&lt;br /&gt;
=== Java 17 required ===&lt;br /&gt;
For the release-11 we decided to move to the next Long Term Supported version of java.  As java 11 is too close to its end of life, the release-11 requires java-17 for running and compiling.&lt;br /&gt;
&lt;br /&gt;
=== Storage size increase because of new Record_UU columns ===&lt;br /&gt;
As explained in [[NF11 UUID Key Tables#Enabled Features for tables with UUID key and without ID key|UUID Key Tables documentation page]]: a number of Record_UU columns have been added to core tables, which can represent an increase in storage size and backup size in implementations that have many records on these tables, for example many attachments, or heavy usage of chat, post-it or labels.  Also the Change Log can be affected by size depending on the System Configurator key AD_CHANGELOG_SAVE_UUID&lt;br /&gt;
&lt;br /&gt;
=== New MPInstance constructors to manage the new column AD_PInstance.AD_Table_ID ===&lt;br /&gt;
The table AD_PInstance table had a Record_ID column without the corresponding AD_Table_ID.  This is an anomaly and it created a problem as it was not possible to figure out which table triggered a process, and use the Record_ID field to navigate to the originating record.&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5567 IDEMPIERE-5567] the column was added, and the migration script 202309111844_IDEMPIERE-5567_ADPInstance.sql tries the best to fill the new column AD_Table_ID discovering the related table from column, toolbar button, print formats, etc.&lt;br /&gt;
&lt;br /&gt;
However, it is very possible that not all relationships can be figured out, after migration you can review which records were left on AD_PInstance table with null AD_Table_ID and Record_ID&amp;gt;0, and decide if you want to fill it for your specific cases (sometimes is not possible to discover it at the end (for example the process org.compiere.process.BankStatementMatcher could have been called from three different tables and there is no trace about that).&lt;br /&gt;
&lt;br /&gt;
Additionally, it is possible that your plugins call processes filling AD_PInstance without the table, the old constructors for MPInstance are marked as deprecated to ease the task to find them in your plugins and migrate to use the new methods.&lt;br /&gt;
&lt;br /&gt;
=== Constructor MPaymentBatch(Properties, String, String) changed ===&lt;br /&gt;
&lt;br /&gt;
There was a constructor MPaymentBatch(Properties, String, String) that was not used in the official core.&lt;br /&gt;
&lt;br /&gt;
The second parameter of this constructor was the Name and it was intended to create a new record and set the Name of the Payment Batch record.&lt;br /&gt;
&lt;br /&gt;
This constructor conflicts with the [[NF11_UUID_Key_Tables#New_UUID_based_constructors|new UUID based constructor]], so it was replaced by the UUID constructor and its behavior is now completely different.&lt;br /&gt;
&lt;br /&gt;
Most probably nobody is using this old constructor, but in case you use MPaymentBatch constructor in your plugins, please review that you are not using this constructor, if used, please change it to a normal constructor with zero as ID parameter and then set the Name.&lt;br /&gt;
&lt;br /&gt;
=== Product Info toolbar button deactivated in Core. ===&lt;br /&gt;
The community discussion was that most people is not using that toolbar button. However, if you miss it after upgrading. You can go to the Toolbar Button window and activate it again.&lt;br /&gt;
&lt;br /&gt;
=== Export Button not exporting Official Dictionary entries ===&lt;br /&gt;
Since [https://idempiere.atlassian.net/browse/IDEMPIERE-6018 IDEMPIERE-6018] the Export button on windows does not export official dictionary entries, to export dictionary is needed to configure and use a PackOut.&lt;br /&gt;
&lt;br /&gt;
=== Hazelcast defaults to disable auto-detection ===&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6279 IDEMPIERE-6279] the hazelcast automatic detection of other servers within the network was disabled, if you plan to use Hazelcast in a multi-server or load balanced scenario, the hazelcast-template.xml needs to be customized.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 10 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 10 ==&lt;br /&gt;
&lt;br /&gt;
=== System user with ID zero deprecated ===&lt;br /&gt;
&lt;br /&gt;
The user System with ID=0 was inactivated and replaced with a similar user with ID=10&lt;br /&gt;
&lt;br /&gt;
Implementors that use System in any way must check if there is impact with this change, the migration script 202202072157_IDEMPIERE-5174.sql copies the information from AD_User, but it doesn't copy custom columns.  Also, it replaces AD_User_ID in some core tables, but implementors must take care if is needed in other custom tables.&lt;br /&gt;
&lt;br /&gt;
=== Change on Schedule behaviour ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5093 IDEMPIERE-5093] changed the way the schedule works:&lt;br /&gt;
* Before this ticket when you had a schedule configured to run at 9AM, the job was executed at 9AM of the server timezone.&lt;br /&gt;
* This ticket changed this behaviour and now the job is executed at 9AM '''of the tenant timezone''' where the job is defined.&lt;br /&gt;
&lt;br /&gt;
=== Terminology changed from Client to Tenant ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4586 IDEMPIERE-4586] changed the terminology for Client to be known as Tenant in the whole application.&lt;br /&gt;
&lt;br /&gt;
This have little impact from user perspective, but it can have a big impact on documentation.&lt;br /&gt;
&lt;br /&gt;
=== Backward compatibility issue with TimeUtil.getBusinessDaysBetween ===&lt;br /&gt;
Before v10, the method was counting the last day of the period in the total of non business days.&lt;br /&gt;
&lt;br /&gt;
Now, the last day is excluded. In order to fix that, a new method with a new parameter has been added ''includeEndDate,'' so you must use that new method with your plugin if you want to preserve behaviour prior to v10.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade to Hazelcast ===&lt;br /&gt;
The hazelcast library was upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5816 IDEMPIERE-5816], the &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; configuration file is not compatible with previous version, so it is needed to run setup again to use the new template.  In case your &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; is customized, you need to take the template for version 5.3 and apply your changes.  NOTE: This was integrated into release-11, and also into release-10 at 2023-07-29&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 9 Horizon =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 9 Horizon ==&lt;br /&gt;
&lt;br /&gt;
=== Deprecated direct http usage ===&lt;br /&gt;
&lt;br /&gt;
iDempiere 9 Horizon doesn't support anymore direct http usage of the webui interface.  Workaround is simply to use port https.&lt;br /&gt;
&lt;br /&gt;
If you use http the system doesn't allow login in webui.&lt;br /&gt;
&lt;br /&gt;
Note that http can still be used for proxy forwarding, but the configuration requires to forward the header X-Forwarded-Proto to https.&lt;br /&gt;
&lt;br /&gt;
In nginx you must add the following line to the definition of the locations /webui and /webui/zkau/comet:&lt;br /&gt;
 proxy_set_header  X-Forwarded-Proto $scheme;&lt;br /&gt;
As described in [[Proxy iDempiere Through Nginx]]&lt;br /&gt;
&lt;br /&gt;
=== All core views imported to dictionary ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5059 IDEMPIERE-5059] the definition of the 149 core views was imported to the dictionary.&lt;br /&gt;
&lt;br /&gt;
In the migration scripts there is code to recreate all these views, so it is very possible that all the custom columns that were added to views by the implementor will present problems when applying the scripts.&lt;br /&gt;
&lt;br /&gt;
Two possible cases that you need to take care about:&lt;br /&gt;
* the script doesn't show errors, but your customization for the view is lost. You must check all the core views that you customized to see if they are having problems and apply the corresponding fixes in release 9&lt;br /&gt;
* the script show errors when applying (usually postgres complains because it cannot change the columns)&lt;br /&gt;
In both cases it is required that you fix the views, do not create the view by hand in SQL, the best way is to add your customized columns to the dictionary and then use the iDempiere process to validate/create the view in the database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Take care of AD_Window.PredefinedContextVariables ===&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4837 IDEMPIERE-4837] will erase changes done on AD_Window.PredefinedContextVariables for Order, Invoices.&lt;br /&gt;
Make a backup of the content of those fields if you have customized them and reapply them.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Default to Native Dialect ===&lt;br /&gt;
Release-9 comes by default with Native PostgreSQL dialect.  The SQLs in core were changed to make them compatible for Oracle and PostgreSQL.  Because of that is possible that some plugins can be broken, for example if using NATIVE_PostgreSQL_KEYWORK.&lt;br /&gt;
&lt;br /&gt;
To solve that, the best option is to change your plugin to use SQL standard (compatible with both databases).&lt;br /&gt;
&lt;br /&gt;
See [[NF9 PostgreSQL Default To Native Dialect]] for information about how to disable it (not recommended).&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 8.2 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 8.2 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
For migration script issues see [[Note Upgrade 8.2]] from [[User:Hieplq|Hiep]]&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 8.2 ==&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4421 IDEMPIERE-4421] it was implemented a mechanism for versioning the themes.&lt;br /&gt;
&lt;br /&gt;
We tried to preserve backward compatibility with pre-8.2 themes, but still you'll find problems when the following conditions are in your plugin&lt;br /&gt;
* if the old plugin has references to /theme/default, because the URL of /theme/default was changed to the versioning approach&lt;br /&gt;
** Recommended solution: migrate your theme to 8.2 approach&lt;br /&gt;
** Or change the pointers to /theme/default to point to your own theme&lt;br /&gt;
** Or change the pointers to ~./theme/default/ (this is not recommended, is preferable to maintain your own theme assets)&lt;br /&gt;
* if your plugin referenced the public variable ITheme.THEME_PATH_PREFIX, that variable was dropped&lt;br /&gt;
** Solution is to change the variable to ThemeManager.THEME_PATH_PREFIX&lt;br /&gt;
&lt;br /&gt;
You can find additional instructions to migrate your theme at this ticket comment: https://idempiere.atlassian.net/browse/IDEMPIERE-4421?focusedCommentId=46667&lt;br /&gt;
&lt;br /&gt;
=== PO is immutable ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about not writing objects retrieved from cache.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids writing to these objects to prevent multi-threading issues with these objects.  The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4287 IDEMPIERE-4287]&lt;br /&gt;
&lt;br /&gt;
=== Cross-tenant reading/writing forbidden by default ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about avoiding reading or writing records from a different tenant than the tenant that was used in login.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids reading/writing records from a different tenant.&lt;br /&gt;
&lt;br /&gt;
Reading can be done from the current tenant or System tenant.  Writing can be done just on the current tenant.&lt;br /&gt;
&lt;br /&gt;
The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
How to avoid this condition?&lt;br /&gt;
* Always read/write records within the tenant&lt;br /&gt;
* for example filter &amp;lt;code&amp;gt;AD_Client_ID=?&amp;lt;/code&amp;gt;&lt;br /&gt;
* or filter &amp;lt;code&amp;gt;AD_Client_ID IN (0,?)&amp;lt;/code&amp;gt;&lt;br /&gt;
* with Query consider using the method setClient_ID&lt;br /&gt;
&lt;br /&gt;
If, for any reason, it is absolutely necessary to read or write a record in a different tenant, the following code can be used:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
    PO.setCrossTenantSafe();&lt;br /&gt;
    // write here the Query.list or PO.saveEx that is cross tenant safe&lt;br /&gt;
} finally {&lt;br /&gt;
    PO.clearCrossTenantSafe();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4268 IDEMPIERE-4268]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 7.1 =&lt;br /&gt;
&lt;br /&gt;
== Multi-server schedulers ==&lt;br /&gt;
&lt;br /&gt;
Because of ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4056 IDEMPIERE-4056], the schedulers running in all servers are not supported anymore.&lt;br /&gt;
&lt;br /&gt;
This is, in previous versions when a scheduler didn't have a RunOnlyOnIP defined it was executed in all servers, after the implementation of IDEMPIERE-4056 the schedulers without an IP defined are executed on just one server (randomly).&lt;br /&gt;
&lt;br /&gt;
How to configure now:&lt;br /&gt;
* The RunOnlyOnIP keeps working as usual, so the easiest workaround is to configure one scheduler per each server&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 3.1 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 3.1 ==&lt;br /&gt;
&lt;br /&gt;
=== Keystore moved ===&lt;br /&gt;
&lt;br /&gt;
As the web server was changed from tomcat to jetty the keystore file was moved from &amp;lt;code&amp;gt;idempiere-server/keystore/myKeystore&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;idempiere-server/jettyhome/etc/keystore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the upgrade of zk to version 7 the file &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/theme.css.dsp&amp;lt;/code&amp;gt; was split in fragments located at folder &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/fragment&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;about.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;adwindow.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;application-menu.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;borderlayout.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;button.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;desktop.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;field-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;find-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;form.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;gadget.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;grid.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;group.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;help-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;info-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;input-element.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;login.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;menu-tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;setup-wizard.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar-popup.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Theme developers must take care of migrating the themes to be compliant with this new schema.&lt;br /&gt;
&lt;br /&gt;
=== Migration Notes from [[User:Hieplq|Hieplq]] ===&lt;br /&gt;
&lt;br /&gt;
Please take a look to the migration notes provided by hiep at [[Update_your_development_environment_zk7_branch#known_issues|Known issues when updating your development environment zk7 branch]]&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.1 to iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1z i2.1z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i3.1 i3.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.0 to iDempiere 2.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0 i2.0]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0z i2.0z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 1.0 to iDempiere 2.0 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]  # just the scripts still not applied&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0z i1.0z]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i2.0 i2.0]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 1.0 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old systems to iDempiere 1.0 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== org.compiere.acct.Doc ===&lt;br /&gt;
&lt;br /&gt;
Constructor account schema parameter have been changed from MAcctSchema[] to MAcctSchema. This can break extensions that modify accounting, solution is simple, just change it to use new method and accomodate code.&lt;br /&gt;
&lt;br /&gt;
=== 2Pack ===&lt;br /&gt;
&lt;br /&gt;
The new 2pack format is not backward compatible&lt;br /&gt;
&lt;br /&gt;
=== AD_WF_Node ===&lt;br /&gt;
&lt;br /&gt;
The xposition and yposition column now stored the node's position in a grid instead of absolute pixel value.&lt;br /&gt;
&lt;br /&gt;
=== Change Log Configuration ===&lt;br /&gt;
&lt;br /&gt;
The change log is now enabled by default in most of the tables.&lt;br /&gt;
&lt;br /&gt;
Enabling the change log is done with the script 201306261840_EnableChangeLog.sql&lt;br /&gt;
&lt;br /&gt;
If you have already tuned your change log configuration, you can skip that script - or run it and then recover your specific fine tuning changes.&lt;br /&gt;
&lt;br /&gt;
Note also that enabling the change log it will increase the disk consumption - if that's a concern on your installation you must fine tune this configuration after running the script.&lt;br /&gt;
&lt;br /&gt;
=== Jasper ID parameters passed as BigDecimal now as Integer ===&lt;br /&gt;
&lt;br /&gt;
In some cases the ID parameters (table, table direct, search) were passed to jasper reports as BigDecimal, while in other cases same parameters were passed as Integer (like RECORD_ID or ranges), with [http://idempiere.atlassian.net/browse/IDEMPIERE-1422 IDEMPIERE-1422] that behavior is now consistent, always using Integer for _ID parameters.&lt;br /&gt;
&lt;br /&gt;
This change can break old jasper reports that defined the ID parameter as BigDecimal, the fix is simple, just change the jasper parameter to Integer and compile again.&lt;br /&gt;
&lt;br /&gt;
When this error is reached running the jasper report throws this exception:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
16:47:32.058===========&amp;gt; ProcessUtil.startJavaProcess: org.compiere.report.ReportStarter [17]&lt;br /&gt;
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:553)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:399)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter$1.visit(JRJdbcQueryExecuter.java:332)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter$QueryParameter.accept(JRAbstractQueryExecuter.java:157)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter.visitQueryParameters(JRAbstractQueryExecuter.java:646)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:317)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1281)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:900)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functional Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Inventory Document Types ===&lt;br /&gt;
&lt;br /&gt;
Because of [http://idempiere.atlassian.net/browse/IDEMPIERE-675 IDEMPIERE-675] you need to set manually the inventory document subtype for your inventory documents (internal use and physical inventory).&lt;br /&gt;
&lt;br /&gt;
In case you used the same document type for both cases - then recommendation is to inactivate the old mixed document and create new document types for each specific case.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated Functionalities ===&lt;br /&gt;
&lt;br /&gt;
With [http://idempiere.atlassian.net/browse/IDEMPIERE-362 IDEMPIERE-362], [http://idempiere.atlassian.net/browse/IDEMPIERE-170 IDEMPIERE-170], [http://idempiere.atlassian.net/browse/IDEMPIERE-247 IDEMPIERE-247] some functionalities that were not working properly where deprecated, please check the tickets and commits for details, most prominent are:&lt;br /&gt;
* Cash Journals (all cash functionalities can be modeled using payments)&lt;br /&gt;
* MRP Heavy Manufacturing (Light Manufacturing was integrated)&lt;br /&gt;
* Payroll (being developed as extension)&lt;br /&gt;
&lt;br /&gt;
=== Production ===&lt;br /&gt;
&lt;br /&gt;
If you used the old Production window (original from Compiere with three tabs) - please note some changes are required as noted in [http://idempiere.atlassian.net/browse/IDEMPIERE-521 IDEMPIERE-521]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Roles ===&lt;br /&gt;
&lt;br /&gt;
With [https://idempiere.atlassian.net/browse/IDEMPIERE-1160 IDEMPIERE-1160] a new security feature was implemented, when creating a new client the ClientAdmin role is configured as advanced role and the ClientUser role is not, after that you can use the ClientAdmin role to configure the rest of roles (advanced or not) and users.&lt;br /&gt;
&lt;br /&gt;
Please note that advanced role is not intended for end-users, is mostly intended for Information technology (IT) roles that administer the system - advanced roles have access to many fields that are documented and exposed security holes in the system.&lt;br /&gt;
&lt;br /&gt;
This new feature creates a problem when migrating databases with existing tenants - as we can't know in advance how the security was configured in an already existing client - we cannot set advanced role to one of the client roles in the database via migration script.  The consequence is that when migrating databases, all the roles on Clients (not GardenAdmin and System) are marked as non-advanced - and there is not a way to mark advanced role within the system, it's needed to mark your required advanced role directly via SQL with a command like:&lt;br /&gt;
 UPDATE AD_Role SET IsAccessAdvanced='Y' WHERE AD_Role_ID=?&lt;br /&gt;
where you replace the ? with the ID of the role you design as advanced (with access to security holes).&lt;br /&gt;
&lt;br /&gt;
= Migration Scripts =&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to ADempiere 361 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts-360lts.010?at=globalqss_adempiere361 360lts-360lts.010]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts.010-361.Final?at=globalqss_adempiere361 360lts.010-361.Final]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/361.Final-BUG_FIXES?at=globalqss_adempiere361 361.Final-BUG_FIXES]&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/360lts-i1.0a 360lts-i1.0a]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0a-i1.0b i1.0a-i1.0b]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0b-i1.0c i1.0b-i1.0c]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 361 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
You need to apply the migration scripts like migrating from 360, '''EXCLUDING''' those already applied when you migrated from 360 to 361.&lt;br /&gt;
&lt;br /&gt;
== Increasing speed of some scripts ==&lt;br /&gt;
&lt;br /&gt;
* Script &amp;lt;code&amp;gt;postgresql/789_GenerateUUIDColumns.sql&amp;lt;/code&amp;gt; can apply ALTER TABLE too slowly for big tables - this can be improved dropping the &amp;quot; DEFAULT NULL&amp;quot; at the end of each ALTER TABLE&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended to run &amp;quot;UUID Generator&amp;quot; process after migration to fill the empty UUID columns, but this can be a very slow process for big tables, a faster way can be achieved executing an update directly on the database, also you can consider deleting the related uuid index before the update and recreating it at the end, for example:&lt;br /&gt;
** &amp;lt;code&amp;gt;DROP INDEX ad_changelog_uu_idx;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;UPDATE AD_ChangeLog SET AD_ChangeLog_UU=generate_uuid() WHERE AD_ChangeLog_UU IS NULL;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;CREATE UNIQUE INDEX ad_changelog_uu_idx ON ad_changelog (ad_changelog_uu);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The script &amp;lt;code&amp;gt;processes_post_migration/postgresql/02_SynchronizeTerminology.sql&amp;lt;/code&amp;gt; tend to be slow on postgresql versions higher than 9.1 with the default memory.  In order to solve this is recommended to tune the memory for the database.&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere 370 =&lt;br /&gt;
&lt;br /&gt;
[[User:Pb_integratio|Pb_integratio]] is sharing and documenting experience about this at [[Migration from ADempiere 370 to iDempiere]]&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere pre-360 =&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
Migrating some Adempiere installations before 360 to iDempiere generates a problem when using postgresql 9.2 - applying the script 201309192024_IDEMPIERE-1370.sql:222 throws:&lt;br /&gt;
 ERROR:  cannot change name of input parameter &amp;quot;p_product_id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cause ==&lt;br /&gt;
&lt;br /&gt;
An issue has been detected migrating a database pre-360 to iDempiere using postgresql 9.2&lt;br /&gt;
&lt;br /&gt;
The function bomqtyonhand from the database seed doesn't match with the function bomqtyonhand present on the migration scripts (pre-360), the script 201309192024_IDEMPIERE-1370.sql fixes that situation, but postgresql 9.2 doesn't allow changing a parameter name for a function.&lt;br /&gt;
&lt;br /&gt;
== Solutions ==&lt;br /&gt;
&lt;br /&gt;
* You can do the migration using postgres 8.4 and at the end migrate to 9.2 (postgres 8.4 allows changing name of function parameters)&lt;br /&gt;
alternatively&lt;br /&gt;
* You can drop the old function bomqtyonhand (and all the associated views) and recreate them properly&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_12&amp;diff=23857</id>
		<title>ChangeLog Release 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_12&amp;diff=23857"/>
		<updated>2026-04-21T16:35:38Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-12&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-13 ==&lt;br /&gt;
&lt;br /&gt;
* Revert &amp;quot;[https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6366 IDEMPIERE-6366] Generic Info window shows all columns exists on table and do not respect seqNoSelection [https://github.com/idempiere/idempiere/pull/2620 (#2620)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6719 IDEMPIERE-6719] Selected records in the info window are not being processed. [https://github.com/idempiere/idempiere/pull/2964 (#2964)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3155 (#3155)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6198 IDEMPIERE-6198] Incorrect Accumulated Amt and Accumulated Qty after reverse-correct a Physical Inventory [https://github.com/idempiere/idempiere/pull/2908 (#2908)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3158 (#3158)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824] Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6870 IDEMPIERE-6870] Fix NPE in callout when selecting product without cost [https://github.com/idempiere/idempiere/pull/3125 (#3125)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6876 IDEMPIERE-6876] Report parameters are overwritten when refreshing a previously opened tab of the same report [https://github.com/idempiere/idempiere/pull/3141 (#3141)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6879 IDEMPIERE-6879] WLocationDialog showing misleading error to user [https://github.com/idempiere/idempiere/pull/3145 (#3145)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6880 IDEMPIERE-6880] PO is NULL Issue When Clicking in Window Zoom [https://github.com/idempiere/idempiere/pull/3146 (#3146)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6865 IDEMPIERE-6865] Hashed password saved as plain text when SecureEngine.getSecureRandom fails [https://github.com/idempiere/idempiere/pull/3119 (#3119)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3110 (#3110)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6850 IDEMPIERE-6850] Change log not capture for delete of record with UUID Key or with Composite Key (DAD-205) [https://github.com/idempiere/idempiere/pull/3111 (#3111)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6845 IDEMPIERE-6845] BOM Price Functions Should Distinguish Between Explicit Zero and Missing Price [https://github.com/idempiere/idempiere/pull/3104 (#3104)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6843 IDEMPIERE-6843] Security Dashboard [https://github.com/idempiere/idempiere/pull/3099 (#3099)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6844 IDEMPIERE-6844] Prevent CSV Injection in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3102 (#3102)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6009 IDEMPIERE-6009] AllocationReset Not Working Correctly / fix trx leak [https://github.com/idempiere/idempiere/pull/3097 (#3097)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6833 IDEMPIERE-6833] Jar upgrades for Vulnerability fix [https://github.com/idempiere/idempiere/pull/3093 (#3093)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6837 IDEMPIERE-6837] Payment Selection window fails to update amounts and has incorrect field behavior [https://github.com/idempiere/idempiere/pull/3090 (#3090)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6435 IDEMPIERE-6435] Add &amp;quot;Hide on Zero&amp;quot; to Document Status (Activities) [https://github.com/idempiere/idempiere/pull/2688 (#2688)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3095 (#3095)] [https://github.com/idempiere/idempiere/pull/3098 (#3098)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6838 IDEMPIERE-6838] Allow a BP to pay invoices from a different BP [https://github.com/idempiere/idempiere/pull/3091 (#3091)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5985 IDEMPIERE-5985] Reactivation of Payments: Credit Manager - fix conflicts [https://github.com/idempiere/idempiere/pull/2832 (#2832)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - minor - avoid warning [https://github.com/idempiere/idempiere/pull/3088 (#3088)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6809 IDEMPIERE-6809] Session Fixation Vulnerability in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3082 (#3082)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6829 IDEMPIERE-6829] Accounting Fact Reconciliation must not allow to reset half reconciliation records [https://github.com/idempiere/idempiere/pull/3079 (#3079)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6831 IDEMPIERE-6831] In some cases, date registered is wrong [https://github.com/idempiere/idempiere/pull/3086 (#3086)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6834 IDEMPIERE-6834] Copy Tenant must validate image storage provider too [https://github.com/idempiere/idempiere/pull/3087 (#3087)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6840 IDEMPIERE-6840] Date format : allow d (for day) [https://github.com/idempiere/idempiere/pull/3092 (#3092)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3083 (#3083)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6809 IDEMPIERE-6809] Session Fixation Vulnerability in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3080 (#3080)] [https://github.com/idempiere/idempiere/pull/3081 (#3081)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6122 IDEMPIERE-6122] Query class to accept a list of columns to select [https://github.com/idempiere/idempiere/pull/3073 (#3073)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6545 IDEMPIERE-6545] Translation tabs must not allow delete - enable insert in Tenant Level Message [https://github.com/idempiere/idempiere/pull/3077 (#3077)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3071 (#3071)] [https://github.com/idempiere/idempiere/pull/3072 (#3072)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6822 IDEMPIERE-6822] Replace iDempiere Server Monitor Basic Authentication with Session Login Form [https://github.com/idempiere/idempiere/pull/3070 (#3070)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5067 IDEMPIERE-5067] Over Shipment getting reverse in generate shipment [https://github.com/idempiere/idempiere/pull/3029 (#3029)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6737 IDEMPIERE-6737] Attribute Set with &amp;quot;Use Guarantee Date for Material Policy&amp;quot; = &amp;quot;Y&amp;quot; recording wrong material policy date in window Physical Inventory, Inventory Move, and Inventory Decrease/Increase [https://github.com/idempiere/idempiere/pull/3053 (#3053)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6800 IDEMPIERE-6800] Wrong costing qty after purchase invoice for partial MR with identical Account Date in MR, shipment and invoice [https://github.com/idempiere/idempiere/pull/3051 (#3051)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6817 IDEMPIERE-6817] Sales Order printing Reversed Invoices [https://github.com/idempiere/idempiere/pull/3069 (#3069)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6818 IDEMPIERE-6818] Billboard chart showing D instead of day [https://github.com/idempiere/idempiere/pull/3061 (#3061)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6822 IDEMPIERE-6822] Replace iDempiere Server Monitor Basic Authentication with Session Login Form [https://github.com/idempiere/idempiere/pull/3067 (#3067)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3064 (#3064)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3014 (#3014)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-15 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/3059 (#3059)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6814 IDEMPIERE-6814] Notice count wrong for GardenUser [https://github.com/idempiere/idempiere/pull/3056 (#3056)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6377 IDEMPIERE-6377] Adding a quote to sales opportunity is impossible [https://github.com/idempiere/idempiere/pull/3016 (#3016)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6528 IDEMPIERE-6528] Archive Viewer loads every Archived Document after deleting one&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6572 IDEMPIERE-6572] Deactivating windows in WTF still allows windows to be accessed if window has been added to favourites [https://github.com/idempiere/idempiere/pull/3019 (#3019)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6600 IDEMPIERE-6600] Posting Error For No Cost Product On Physical Inventory [https://github.com/idempiere/idempiere/pull/2836 (#2836)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base and org.compiere.util [https://github.com/idempiere/idempiere/pull/3018 (#3018)] [https://github.com/idempiere/idempiere/pull/2989 (#2989)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6702 IDEMPIERE-6702] Error: Insufficient Stock Coverage for drop shipment to customer of product with existing transactions [https://github.com/idempiere/idempiere/pull/2975 (#2975)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6729 IDEMPIERE-6729] Favorites Tree breaking UI [https://github.com/idempiere/idempiere/pull/2981 (#2981)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Improvement for Env.parseContext [https://github.com/idempiere/idempiere/pull/2998 (#2998)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6742 IDEMPIERE-6742] Add Cache Reset after bulk Packin Processing [https://github.com/idempiere/idempiere/pull/2994 (#2994)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6744 IDEMPIERE-6744] fix NPE in DocumentSearchController [https://github.com/idempiere/idempiere/pull/2995 (#2995)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6751 IDEMPIERE-6751] Back-dated costing: physical inventory posting error in original document after reversal and new back-dated document [https://github.com/idempiere/idempiere/pull/3003 (#3003)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6753 IDEMPIERE-6753] Error installing plugins that create a _Trl_Key with a 2pack [https://github.com/idempiere/idempiere/pull/3017 (#3017)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6805 IDEMPIERE-6805] MUserRole should disallow assignment of role template to user [https://github.com/idempiere/idempiere/pull/3047 (#3047)]&lt;br /&gt;
&lt;br /&gt;
== 2025-12-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6802 IDEMPIERE-6802] MRoleIncluded should set SeqNo in beforeSave [https://github.com/idempiere/idempiere/pull/3044 (#3044)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2988 (#2988)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6734 IDEMPIERE-6734] Allow #User_Org to be available for all kind of session [https://github.com/idempiere/idempiere/pull/2984 (#2984)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/2990 (#2990)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6656 IDEMPIERE-6656] Unclear message when reactivating a document with reconciled posting [https://github.com/idempiere/idempiere/pull/2958 (#2958)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6694 IDEMPIERE-6694] 2 issues related to back-dated costing. Refer to details below [https://github.com/idempiere/idempiere/pull/2943 (#2943)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] Upgrade DB libraries (FHCA-7459) - fix packin broken [https://github.com/idempiere/idempiere/pull/2970 (#2970)] [https://github.com/idempiere/idempiere/pull/2960 (#2960)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6717 IDEMPIERE-6717] Support French when searching for constraint names [https://github.com/idempiere/idempiere/pull/2957 (#2957)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6718 IDEMPIERE-6718] GridTabTest leaves residual records in C_Order and C_OrderLine tables due to missing transaction context [https://github.com/idempiere/idempiere/pull/2959 (#2959)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6720 IDEMPIERE-6720] Copy Tenant fails when there is a report archived [https://github.com/idempiere/idempiere/pull/2962 (#2962)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6721 IDEMPIERE-6721] Incorrect M_AttributeInstance.Value when setting integer for number attribute type [https://github.com/idempiere/idempiere/pull/2963 (#2963)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6722 IDEMPIERE-6722] Infinite loop with a SEVERE error in MIssue.create [https://github.com/idempiere/idempiere/pull/2969 (#2969)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6295 IDEMPIERE-6295] Fix logout issue when SSO provider is selected from multiple SSO providers [https://github.com/idempiere/idempiere/pull/2950 (#2950)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage for PO and create unit test class for cross tenant safety feature [https://github.com/idempiere/idempiere/pull/2948 (#2948)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6706 IDEMPIERE-6706] Error installing 2Pack using ALL-CLIENTS approach [https://github.com/idempiere/idempiere/pull/2947 (#2947)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/2956 (#2956)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6714 IDEMPIERE-6714] Calculation Fields Disabled in Print Format but Enabled in Report Wizard for non-Field Items [https://github.com/idempiere/idempiere/pull/2955 (#2955)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/2925 (#2925)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2944 (#2944)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6705 IDEMPIERE-6705] PackIn failing silently when the zip has wrong folder hierarchy [https://github.com/idempiere/idempiere/pull/2942 (#2942)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6695 IDEMPIERE-6695] AP Credit Memo for Landed Cost: Wrong side of inventory account against Suspense balancing [https://github.com/idempiere/idempiere/pull/2932 (#2932)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6697 IDEMPIERE-6697] Rename Master Role as Role Template and split to Role Template window [https://github.com/idempiere/idempiere/pull/2934 (#2934)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6699 IDEMPIERE-6699] Portable SQL insert script not working for Location, Account, etc [https://github.com/idempiere/idempiere/pull/2936 (#2936)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2937 (#2937)] [https://github.com/idempiere/idempiere/pull/2939 (#2939)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6701 IDEMPIERE-6701] RUN_SyncDB.sh with parameter failing on server [https://github.com/idempiere/idempiere/pull/2938 (#2938)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6506 IDEMPIERE-6506] Translation cache not reset after update by user [https://github.com/idempiere/idempiere/pull/2931 (#2931)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6698 IDEMPIERE-6698] Enhance Print Invoices Process to Support Multi-Select Document Type Parameter [https://github.com/idempiere/idempiere/pull/2935 (#2935)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2929 (#2929)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6680 IDEMPIERE-6680] Back-dated costing bug related to re-posting of matched PO [https://github.com/idempiere/idempiere/pull/2915 (#2915)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6690 IDEMPIERE-6690] Error when clicking UU-based reference field with null value - org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = integer [https://github.com/idempiere/idempiere/pull/2926 (#2926)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6691 IDEMPIERE-6691] org.idempiere.bouncy.castle-feature: Name in .project is not org.idempiere.bouncy.castle-feature [https://github.com/idempiere/idempiere/pull/2927 (#2927)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6692 IDEMPIERE-6692] Archive Viewer is adding .pdf to any file - and showing always as PDF [https://github.com/idempiere/idempiere/pull/2928 (#2928)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6685 IDEMPIERE-6685] MColumn.getReferenceTableName not working for ChosenMultipleSelectionTable and ChosenMultipleSelectionSearch [https://github.com/idempiere/idempiere/pull/2924 (#2924)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6122 IDEMPIERE-6122] Query class to accept a list of columns to select - fix support order by virtual column not in select [https://github.com/idempiere/idempiere/pull/2918 (#2918)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6659 IDEMPIERE-6659] Estimated Landed Cost Scenarios for Purchase Orders and Incorrect Product Costs [https://github.com/idempiere/idempiere/pull/2905 (#2905)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6666 IDEMPIERE-6666] fix getShipmentReceiptDocType in MDocType [https://github.com/idempiere/idempiere/pull/2921 (#2921)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6683 IDEMPIERE-6683] Concurrent client requests can cause &amp;quot;key already exists&amp;quot; errors for user preference [https://github.com/idempiere/idempiere/pull/2919 (#2919)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6684 IDEMPIERE-6684] Unable to save a record via Rest API when a column is set to Record UUID display type [https://github.com/idempiere/idempiere/pull/2922 (#2922)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6685 IDEMPIERE-6685] MColumn.getReferenceTableName not working for ChosenMultipleSelectionTable and ChosenMultipleSelectionSearch [https://github.com/idempiere/idempiere/pull/2923 (#2923)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2916 (#2916)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6670 IDEMPIERE-6670] Refactoring: make CLogMgt.reInit public [https://github.com/idempiere/idempiere/pull/2903 (#2903)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6671 IDEMPIERE-6671] Replace MD5 digest with SHA-256 digest (DAD-61) - fix Secure.convertHexString [https://github.com/idempiere/idempiere/pull/2917 (#2917)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/2909 (#2909)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6682 IDEMPIERE-6682] Plugin : editor which extends WButtonEditor doesn't work when tab in grid mode [https://github.com/idempiere/idempiere/pull/2914 (#2914)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6646 IDEMPIERE-6646] Customize toolbar button enable/disable based on current tab data status [https://github.com/idempiere/idempiere/pull/2891 (#2891)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6668 IDEMPIERE-6668] Field holding invalid data [https://github.com/idempiere/idempiere/pull/2902 (#2902)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6671 IDEMPIERE-6671] Replace MD5 digest with SHA-256 digest (DAD-61) [https://github.com/idempiere/idempiere/pull/2904 (#2904)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6672 IDEMPIERE-6672] The same event triggered in less than 200ms prevents callouts from being executed [https://github.com/idempiere/idempiere/pull/2906 (#2906)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6676 IDEMPIERE-6676] Review the PO.getKeyColumns for UUID tables [https://github.com/idempiere/idempiere/pull/2913 (#2913)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6663 IDEMPIERE-6663] More reliable discovery of key store service [https://github.com/idempiere/idempiere/pull/2899 (#2899)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6667 IDEMPIERE-6667] Secure could be using wrong provider with idempiere-ks.properties and IKeyStore service [https://github.com/idempiere/idempiere/pull/2901 (#2901)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6124 IDEMPIERE-6124] Add Quantity field to Invoice &amp;gt; Invoice Line &amp;gt; Landed Cost for allocations to Product [https://github.com/idempiere/idempiere/pull/2892 (#2892)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6662 IDEMPIERE-6662] Proper length for LoginPanel Name/EMail field [https://github.com/idempiere/idempiere/pull/2897 (#2897)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6664 IDEMPIERE-6664] Secure engine extensibility improvements [https://github.com/idempiere/idempiere/pull/2898 (#2898)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6662 IDEMPIERE-6662] Email field length mismatch between LoginPanel and database [https://github.com/idempiere/idempiere/pull/2895 (#2895)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6663 IDEMPIERE-6663] More reliable discovery of key store service (DAD-61) [https://github.com/idempiere/idempiere/pull/2896 (#2896)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6645 IDEMPIERE-6645] Error message being cleared due to concurrency issue [https://github.com/idempiere/idempiere/pull/2878 (#2878)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2881 (#2881)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6304 IDEMPIERE-6304] Multiple SSO provider support [https://github.com/idempiere/idempiere/pull/2811 (#2811)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Extend Unit Tests for MRole [https://github.com/idempiere/idempiere/pull/2879 (#2879)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6648 IDEMPIERE-6648] Ensure all scripts can run with an alternate db admin user (DAD-62) [https://github.com/idempiere/idempiere/pull/2886 (#2886)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6654 IDEMPIERE-6654] Passwords must not be shown in logs (DAD-63) [https://github.com/idempiere/idempiere/pull/2885 (#2885)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6657 IDEMPIERE-6657] Setup error when the DB password is 57 chars or longer [https://github.com/idempiere/idempiere/pull/2888 (#2888)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2874 (#2874)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6614 IDEMPIERE-6614] Performance improvement for back-dated costing process [https://github.com/idempiere/idempiere/pull/2860 (#2860)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6648 IDEMPIERE-6648] Ensure all scripts can run with an alternate db admin user (DAD-62) [https://github.com/idempiere/idempiere/pull/2882 (#2882)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5651 IDEMPIERE-5651] Validate VFormat regex on WStringEditor [https://github.com/idempiere/idempiere/pull/2641 (#2641)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing - fix references [https://github.com/idempiere/idempiere/pull/2869 (#2869)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6617 IDEMPIERE-6617] Add InputStream interface to image storage provider [https://github.com/idempiere/idempiere/pull/2852 (#2852)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6637 IDEMPIERE-6637] Wrong Default Logic for Migration Storage Provider parameter AD_AllClients_V_ID in Oracle [https://github.com/idempiere/idempiere/pull/2864 (#2864)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6639 IDEMPIERE-6639] OFXFileBankStatementLoader - ErrorReadingData - Stream closed [https://github.com/idempiere/idempiere/pull/2866 (#2866)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6641 IDEMPIERE-6641] Cryptic error on silent-setup-alt.sh when ADEMPIERE_DB_SERVER is not reachable [https://github.com/idempiere/idempiere/pull/2868 (#2868)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6644 IDEMPIERE-6644] Fix some wrong defaults for EntityType [https://github.com/idempiere/idempiere/pull/2876 (#2876)]&lt;br /&gt;
&lt;br /&gt;
== 2025-07-26 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6564 IDEMPIERE-6564] Add InputStream interface to archive storage provider [https://github.com/idempiere/idempiere/pull/2805 (#2805)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6618 IDEMPIERE-6618] added Maven 3.9.10 wrapper [https://github.com/idempiere/idempiere/pull/2853 (#2853)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6635 IDEMPIERE-6635] Makes the DataProvider a priority for search of context variables and restores '[https://idempiere.atlassian.net/browse/IDEMPIERE-6473 IDEMPIERE-6473]' [https://github.com/idempiere/idempiere/pull/2863 (#2863)]&lt;br /&gt;
&lt;br /&gt;
== 2025-07-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2841 (#2841)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6229 IDEMPIERE-6229] 2Pack / Data : fill table field using SQL Statement content - fix java.lang.StringIndexOutOfBoundsException [https://github.com/idempiere/idempiere/pull/2834 (#2834)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6314 IDEMPIERE-6314] Issues with attachment on System records [https://github.com/idempiere/idempiere/pull/2839 (#2839)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6553 IDEMPIERE-6553] Add logs to investigate why the model event handler isn't being triggered [https://github.com/idempiere/idempiere/pull/2801 (#2801)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6570 IDEMPIERE-6570] Improve attachment support for large file [https://github.com/idempiere/idempiere/pull/2809 (#2809)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6591 IDEMPIERE-6591] Can't delete records created through Recurring [https://github.com/idempiere/idempiere/pull/2825 (#2825)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6592 IDEMPIERE-6592] T_Spool wrongly defined as view in dictionary [https://github.com/idempiere/idempiere/pull/2826 (#2826)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6595 IDEMPIERE-6595] Enable Using Virtual Columns as Report Parameters [https://github.com/idempiere/idempiere/pull/2830 (#2830)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6596 IDEMPIERE-6596] Implement $sysconfig. prefix for access to AD_SysConfig value in context variable expression [https://github.com/idempiere/idempiere/pull/2831 (#2831)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6597 IDEMPIERE-6597] PackIn error importing record with variable organization [https://github.com/idempiere/idempiere/pull/2833 (#2833)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6599 IDEMPIERE-6599] Enable mail session debug based on mail.debug [https://github.com/idempiere/idempiere/pull/2835 (#2835)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6602 IDEMPIERE-6602] Excessive logging of Invalid Column [https://github.com/idempiere/idempiere/pull/2837 (#2837)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6607 IDEMPIERE-6607] Support Debian Installer in arm [https://github.com/idempiere/idempiere/pull/2845 (#2845)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6611 IDEMPIERE-6611] Predefined Context Variables are not being cleared for forms [https://github.com/idempiere/idempiere/pull/2847 (#2847)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6615 IDEMPIERE-6615] Custom toolbar buttons shown wrongly in mobile [https://github.com/idempiere/idempiere/pull/2851 (#2851)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6619 IDEMPIERE-6619] Cannot enter multiple lines in fields in Grid View or Quick Form [https://github.com/idempiere/idempiere/pull/2856 (#2856)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6620 IDEMPIERE-6620] CSS style not working in info window [https://github.com/idempiere/idempiere/pull/2854 (#2854)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6626 IDEMPIERE-6626] ZoomConditions: missing parenthesis cause trouble when WhereClause has a OR operator [https://github.com/idempiere/idempiere/pull/2857 (#2857)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6629 IDEMPIERE-6629] Fixes username text wrapping in mobile layout [https://github.com/idempiere/idempiere/pull/2858 (#2858)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6631 IDEMPIERE-6631] Allow extra parameters in AD_AuthorizationProvider.AuthorizationEndpoint [https://github.com/idempiere/idempiere/pull/2862 (#2862)]&lt;br /&gt;
&lt;br /&gt;
== 2025-06-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6067 IDEMPIERE-6067] Reactivation of Invoices - fix OrderLine QtyInvoiced [https://github.com/idempiere/idempiere/pull/2812 (#2812)] [https://github.com/idempiere/idempiere/pull/2815 (#2815)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2819 (#2819)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6565 IDEMPIERE-6565] Forgot My Password from Login page doesn't send the temporary password [https://github.com/idempiere/idempiere/pull/2806 (#2806)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6580 IDEMPIERE-6580] Multiple tab records and cannot be closed [https://github.com/idempiere/idempiere/pull/2816 (#2816)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6581 IDEMPIERE-6581] Clean Orphan Cascade broken [https://github.com/idempiere/idempiere/pull/2814 (#2814)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6583 IDEMPIERE-6583] Env.parseVariable doesn't parse CreatedBy/UpdatedBy [https://github.com/idempiere/idempiere/pull/2817 (#2817)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6587 IDEMPIERE-6587] Product Info showing stock when no warehouse is selected [https://github.com/idempiere/idempiere/pull/2822 (#2822)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6588 IDEMPIERE-6588] Payment Discount excluding freight charges [https://github.com/idempiere/idempiere/pull/2823 (#2823)]&lt;br /&gt;
&lt;br /&gt;
== 2025-06-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method + [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] + [https://idempiere.atlassian.net/browse/IDEMPIERE-6547 IDEMPIERE-6547] [https://github.com/idempiere/idempiere/pull/2784 (#2784)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6550 IDEMPIERE-6550] Console setup enhancements [https://github.com/idempiere/idempiere/pull/2800 (#2800)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6563 IDEMPIERE-6563] Attach stacktrace and Unresolved to the 2pack as error_yyyymmddhhmmss.log (FHCA) [https://github.com/idempiere/idempiere/pull/2803 (#2803)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6546 IDEMPIERE-6546] Allow exporting tree definition with 2Pack [https://github.com/idempiere/idempiere/pull/2799 (#2799)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6545 IDEMPIERE-6545] Translation tabs must not allow delete [https://github.com/idempiere/idempiere/pull/2797 (#2797)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6546 IDEMPIERE-6546] Allow exporting tree definition with 2Pack [https://github.com/idempiere/idempiere/pull/2796 (#2796)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6549 IDEMPIERE-6549] - Add option to Disable Insufficient Inventory Popup [https://github.com/idempiere/idempiere/pull/2798 (#2798)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-15 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method [https://github.com/idempiere/idempiere/pull/2718 (#2718)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150] Support development with IntelliJ [https://github.com/idempiere/idempiere/pull/2774 (#2774)] [https://github.com/idempiere/idempiere/pull/2788 (#2788)] [https://github.com/idempiere/idempiere/pull/2789 (#2789)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5174 IDEMPIERE-5174] Disable System User [https://github.com/idempiere/idempiere/pull/2792 (#2792)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5795 IDEMPIERE-5795] DeveloperMode context variable - minor, move to SystemProperties [https://github.com/idempiere/idempiere/pull/2771 (#2771)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6067 IDEMPIERE-6067] Reactivation of Invoices [https://github.com/idempiere/idempiere/pull/2669 (#2669)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6413 IDEMPIERE-6413] Visually differentiate environments [https://github.com/idempiere/idempiere/pull/2668 (#2668)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6433 IDEMPIERE-6433] Fill Getting Started box [https://github.com/idempiere/idempiere/pull/2773 (#2773)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6521 IDEMPIERE-6521] Create RUN_ImportIdempiereDev.sh and RUN_DBRestoreDev.sh [https://github.com/idempiere/idempiere/pull/2765 (#2765)] [https://github.com/idempiere/idempiere/pull/2791 (#2791)] [https://github.com/idempiere/idempiere/pull/2793 (#2793)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6526 IDEMPIERE-6526] Performance improvement exporting to XLSX [https://github.com/idempiere/idempiere/pull/2768 (#2768)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6527 IDEMPIERE-6527] Read value of ZK_BROWSER_ICON and ZK_BROWSER_TITLE from the server [https://github.com/idempiere/idempiere/pull/2770 (#2770)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6529 IDEMPIERE-6529] Wrong cache for Window Names [https://github.com/idempiere/idempiere/pull/2778 (#2778)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6530 IDEMPIERE-6530] Mail Template parsing : Issues when no value and when searching for email address [https://github.com/idempiere/idempiere/pull/2776 (#2776)] [https://github.com/idempiere/idempiere/pull/2780 (#2780)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6531 IDEMPIERE-6531] _TabInfo_AD_Table_ID / _TabInfo_AD_Table_UU are missing from context [https://github.com/idempiere/idempiere/pull/2777 (#2777)] [https://github.com/idempiere/idempiere/pull/2779 (#2779)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6532 IDEMPIERE-6532] Regression: For Tab 0, Env.parseContext is always getting value from window context instead of from tab 0 context [https://github.com/idempiere/idempiere/pull/2781 (#2781)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6536 IDEMPIERE-6536] Find window sometime uses wrong GridTab to find search field [https://github.com/idempiere/idempiere/pull/2783 (#2783)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6537 IDEMPIERE-6537] MFA cookie is a session cookie [https://github.com/idempiere/idempiere/pull/2786 (#2786)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6538 IDEMPIERE-6538] Info Window error sorting by ASI [https://github.com/idempiere/idempiere/pull/2785 (#2785)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6539 IDEMPIERE-6539] Role Access Update - Created by / Updated by [https://github.com/idempiere/idempiere/pull/2787 (#2787)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6540 IDEMPIERE-6540] Import/Export script doesn't support Oracle running as Docker Container [https://github.com/idempiere/idempiere/pull/2790 (#2790)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6543 IDEMPIERE-6543] Error with Post-It on AD_User_Roles (FHCA) [https://github.com/idempiere/idempiere/pull/2795 (#2795)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6544 IDEMPIERE-6544] Chat window hides thread on Reply [https://github.com/idempiere/idempiere/pull/2794 (#2794)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6425 IDEMPIERE-6425] service cache make wrong order of service ranking (IInfoFactory case) [https://github.com/idempiere/idempiere/pull/2689 (#2689)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6476 IDEMPIERE-6476] Payment schedule is not getting updated with header record organization [https://github.com/idempiere/idempiere/pull/2734 (#2734)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6493 IDEMPIERE-6493] Error when executing Add or Copy Accounts [https://github.com/idempiere/idempiere/pull/2746 (#2746)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6496 IDEMPIERE-6496] Dynamic Validation not functioning in Attribute Set Instance (ASI) window: attribute dependency not respected [https://github.com/idempiere/idempiere/pull/2757 (#2757)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6498 IDEMPIERE-6498] Error when trying to register a time slot to a resource with an UoM without symbol [https://github.com/idempiere/idempiere/pull/2749 (#2749)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6502 IDEMPIERE-6502] Mobile UI enhancements [https://github.com/idempiere/idempiere/pull/2754 (#2754)] [https://github.com/idempiere/idempiere/pull/2769 (#2769)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6506 IDEMPIERE-6506] Translation cache not reset after update by user [https://github.com/idempiere/idempiere/pull/2756 (#2756)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6507 IDEMPIERE-6507] Issue using mail template / searching data on linked table [https://github.com/idempiere/idempiere/pull/2758 (#2758)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6508 IDEMPIERE-6508] Inconsistencies on images for detail panel in Single Mode [https://github.com/idempiere/idempiere/pull/2759 (#2759)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6509 IDEMPIERE-6509] Inconsistency on arrow to navigate on Detail Pane [https://github.com/idempiere/idempiere/pull/2762 (#2762)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6510 IDEMPIERE-6510] NPE on login : Cannot invoke &amp;quot;org.compiere.model.MCountry.getC_Country_ID()&amp;quot; because the return value of &amp;quot;org.compiere.model.MCountry.getDefault()&amp;quot; is null [https://github.com/idempiere/idempiere/pull/2760 (#2760)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6513 IDEMPIERE-6513] Error installing Cascade Delete plugin in release-12 [https://github.com/idempiere/idempiere/pull/2761 (#2761)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6520 IDEMPIERE-6520] Allow to use barcode in print format items for script types [https://github.com/idempiere/idempiere/pull/2764 (#2764)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6522 IDEMPIERE-6522] Re-packin a column can cause an error related to AD_Column_Trl [https://github.com/idempiere/idempiere/pull/2766 (#2766)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6523 IDEMPIERE-6523] Migration script comment is not appearing in Preference [https://github.com/idempiere/idempiere/pull/2767 (#2767)]&lt;br /&gt;
&lt;br /&gt;
== 2025-04-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150] Support development with IntelliJ [https://github.com/idempiere/idempiere/pull/2721 (#2721)] [https://github.com/idempiere/idempiere/pull/2750 (#2750)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6241 IDEMPIERE-6241] Print item on next line not working in HTML incl Datatable. Adjusted both specification of HTML and DataTable reports to specification of PDF report. [https://github.com/idempiere/idempiere/pull/2743 (#2743)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6387 IDEMPIERE-6387] Asset Expense for the same period becomes two after asset addition [https://github.com/idempiere/idempiere/pull/2731 (#2731)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2755 (#2755)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6423 IDEMPIERE-6423] A field in the process dialog evaluates 'Default Logic' differently from 'ReadOnly/Display Logic, Mandatory Logic, GridField.backupValue' [https://github.com/idempiere/idempiere/pull/2737 (#2737)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6471 IDEMPIERE-6471] Prevent data corruption if a plugin is missing [https://github.com/idempiere/idempiere/pull/2736 (#2736)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6472 IDEMPIERE-6472] Payment - Amounts not recalculated if no BP/Inv leaving corrupt data [https://github.com/idempiere/idempiere/pull/2744 (#2744)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6478 IDEMPIERE-6478] InvoiceGenerate Consolidating Sales Order from Different Organizations [https://github.com/idempiere/idempiere/pull/2735 (#2735)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6483 IDEMPIERE-6483] repeat Callout annotation isn't working [https://github.com/idempiere/idempiere/pull/2738 (#2738)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6487 IDEMPIERE-6487] Make InfoPanel.ROW_ID_CTX_VARIABLE_NAME public [https://github.com/idempiere/idempiere/pull/2740 (#2740)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6488 IDEMPIERE-6488] Standardize what is triggered when a form is closed after being from an InfoWindow [https://github.com/idempiere/idempiere/pull/2741 (#2741)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6492 IDEMPIERE-6492] Various little fixes on User Panel [https://github.com/idempiere/idempiere/pull/2745 (#2745)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6495 IDEMPIERE-6495] Use SysConfig from css files [https://github.com/idempiere/idempiere/pull/2747 (#2747)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6497 IDEMPIERE-6497] Search for non business days on ScheduleUtil fails on Oracle [https://github.com/idempiere/idempiere/pull/2748 (#2748)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6500 IDEMPIERE-6500] Support Users vs Roles: problem when same user or role in several tenants [https://github.com/idempiere/idempiere/pull/2751 (#2751)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6501 IDEMPIERE-6501] Info Window error when a column has a FROM clause [https://github.com/idempiere/idempiere/pull/2752 (#2752)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6503 IDEMPIERE-6503] The calculator’s initial value carries over from the previous row at the grid view. [https://github.com/idempiere/idempiere/pull/2753 (#2753)]&lt;br /&gt;
&lt;br /&gt;
== 2025-04-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6441 IDEMPIERE-6441] Add default fallback foreign key to Copy Client (FHCA-6009) [https://github.com/idempiere/idempiere/pull/2722 (#2722)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6470 IDEMPIERE-6470] Fixed NPE when users search for a non-existing menu entry and hit enter [https://github.com/idempiere/idempiere/pull/2733 (#2733)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6472 IDEMPIERE-6472] Payment - Amounts not recalculated if no BP/Inv leaving corrupt data [https://github.com/idempiere/idempiere/pull/2728 (#2728)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6473 IDEMPIERE-6473] display logic on parameter that depend on field on window always return false (hot fix only) [https://github.com/idempiere/idempiere/pull/2730 (#2730)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5657 IDEMPIERE-5657] Postgresql 15 errors on import GL Journal [https://github.com/idempiere/idempiere/pull/2716 (#2716)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6408 IDEMPIERE-6408] Problem when sorting columns in an Info Window with Distinct [https://github.com/idempiere/idempiere/pull/2664 (#2664)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6457 IDEMPIERE-6457] Asterisk always colored in red for mandatory fields [https://github.com/idempiere/idempiere/pull/2719 (#2719)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6459 IDEMPIERE-6459] Improve test coverage of org.adempiere.base.ds and ImportEventDelegate [https://github.com/idempiere/idempiere/pull/2713 (#2713)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6461 IDEMPIERE-6461] Improve test coverage of org.compiere.util.Util [https://github.com/idempiere/idempiere/pull/2714 (#2714)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6462 IDEMPIERE-6462] Zoom to loaded data after Import File Loader [https://github.com/idempiere/idempiere/pull/2717 (#2717)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6464 IDEMPIERE-6464] Hide Jetty version from test.idempiere.org/adempiere [https://github.com/idempiere/idempiere/pull/2727 (#2727)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6466 IDEMPIERE-6466] IProcessParameterListener - add onInit method [https://github.com/idempiere/idempiere/pull/2723 (#2723)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6467 IDEMPIERE-6467] NPE on CalloutA_Depreciation_Workfile when set empty for number field [https://github.com/idempiere/idempiere/pull/2724 (#2724)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6468 IDEMPIERE-6468] Unit Test: add mockito support [https://github.com/idempiere/idempiere/pull/2725 (#2725)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-19 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6422 IDEMPIERE-6422] Remove calls for external dependencies [https://github.com/idempiere/idempiere/pull/2715 (#2715)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6419 IDEMPIERE-6419] Replacing environment values with dummy values in the Validate Info window does not work for timestamps [https://github.com/idempiere/idempiere/pull/2712 (#2712)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6422 IDEMPIERE-6422] Remove calls for external dependencies [https://github.com/idempiere/idempiere/pull/2709 (#2709)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6456 IDEMPIERE-6456] GridWindowVO.AD_Table_ID is not initialized when window is loaded from cache [https://github.com/idempiere/idempiere/pull/2710 (#2710)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4827 IDEMPIERE-4827] Unify Evaluatee Implementation - fix import CSV process [https://github.com/idempiere/idempiere/pull/2703 (#2703)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6421 IDEMPIERE-6421] Make the &amp;quot;Server started&amp;quot; email configurable to enable/disable [https://github.com/idempiere/idempiere/pull/2705 (#2705)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6437 IDEMPIERE-6437] remove dup line in sonarqube.yml&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6445 IDEMPIERE-6445] SimplePDFViewer don't respect agrument title (file name) [https://github.com/idempiere/idempiere/pull/2699 (#2699)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6448 IDEMPIERE-6448] Fix some issues from SonarQube analysis [https://github.com/idempiere/idempiere/pull/2702 (#2702)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6449 IDEMPIERE-6449] Target platform state is missing org.jvnet.mimepul.mimepull:1.9.14 with Eclipse 2024-12 [https://github.com/idempiere/idempiere/pull/2704 (#2704)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6450 IDEMPIERE-6450] Servlets should not have mutable instance fields java:S2226 [https://github.com/idempiere/idempiere/pull/2706 (#2706)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6451 IDEMPIERE-6451] missing linkedin icon on idempiere 12 homepage [https://github.com/idempiere/idempiere/pull/2707 (#2707)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6452 IDEMPIERE-6452] Import of Bank Statements is in random order [https://github.com/idempiere/idempiere/pull/2708 (#2708)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method - fix java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. [https://github.com/idempiere/idempiere/pull/2697 (#2697)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4925 IDEMPIERE-4925] Fixed bug cause by original commit that made QtyCount and InternalQty read only on inventory windows [https://github.com/idempiere/idempiere/pull/2700 (#2700)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6385 IDEMPIERE-6385] [QuickForm] - Problem with quickform sorting [https://github.com/idempiere/idempiere/pull/2698 (#2698)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6443 IDEMPIERE-6443] address(C_Location) is not print when city is empty(null) [https://github.com/idempiere/idempiere/pull/2696 (#2696)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6446 IDEMPIERE-6446] Problem detected after update.sh and update-prd.sh is ran several times [https://github.com/idempiere/idempiere/pull/2701 (#2701)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-28 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5570 IDEMPIERE-5570] Zk: Improve readability of code [https://github.com/idempiere/idempiere/pull/2693 (#2693)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6347 IDEMPIERE-6347] Update default font-family setting - decrease 1px [https://github.com/idempiere/idempiere/pull/2673 (#2673)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6437 IDEMPIERE-6437] Change sonarqube analysis to manual workflow [https://github.com/idempiere/idempiere/pull/2691 (#2691)] [https://github.com/idempiere/idempiere/pull/2692 (#2692)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6440 IDEMPIERE-6440] Sequence Check is creating ID sequence for non-existing column [https://github.com/idempiere/idempiere/pull/2695 (#2695)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6442 IDEMPIERE-6442] can't edit org_info of org &amp;quot;*&amp;quot; [https://github.com/idempiere/idempiere/pull/2694 (#2694)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6329 IDEMPIERE-6329] Bug in BOM* SQL functions not getting the correct BOM children [https://github.com/idempiere/idempiere/pull/2683 (#2683)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6428 IDEMPIERE-6428] v12 - Issue with custom toolbar buttons (Action) which are not shown [https://github.com/idempiere/idempiere/pull/2682 (#2682)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6429 IDEMPIERE-6429] Missing images in iceblue_c theme [https://github.com/idempiere/idempiere/pull/2681 (#2681)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6431 IDEMPIERE-6431] missing field suggestion icon image on popup menu [https://github.com/idempiere/idempiere/pull/2684 (#2684)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6432 IDEMPIERE-6432] Fix links in Home server page [https://github.com/idempiere/idempiere/pull/2685 (#2685)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6436 IDEMPIERE-6436] Error inserting permission record for System Administrator role (FHCA-6351) [https://github.com/idempiere/idempiere/pull/2690 (#2690)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] Could not invoke Toolbar listener method: onSave - NPE on GridTab.fireDataStatusChanged [https://github.com/idempiere/idempiere/pull/2672 (#2672)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2981 IDEMPIERE-2981] Add missing header in new WJsonEditor class [https://github.com/idempiere/idempiere/pull/2678 (#2678)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6387 IDEMPIERE-6387] Asset Expense for the same period becomes two after asset addition [https://github.com/idempiere/idempiere/pull/2677 (#2677)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2674 (#2674)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6407 IDEMPIERE-6407] Payment Selection (Manual) - NPE when there is no conversion rate [https://github.com/idempiere/idempiere/pull/2663 (#2663)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6409 IDEMPIERE-6409] Charts not rendered on certain conditions [https://github.com/idempiere/idempiere/pull/2665 (#2665)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6420 IDEMPIERE-6420] The Info column description is incorrect because it uses [https://github.com/idempiere/idempiere/pull/2676 (#2676)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6426 IDEMPIERE-6426] Implement CrossTenantExceptions to manage tenant access restrictions errors [https://github.com/idempiere/idempiere/pull/2679 (#2679)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4580 IDEMPIERE-4580] Update credits file with new dev&amp;amp;Co name and logo [https://github.com/idempiere/idempiere/pull/2661 (#2661)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6397 IDEMPIERE-6397] PostgreSQL json datatype doesn't works well with JSON field editor [https://github.com/idempiere/idempiere/pull/2654 (#2654)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6398 IDEMPIERE-6398] Server crash after a user without report permission tries to run a report [https://github.com/idempiere/idempiere/pull/2655 (#2655)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6399 IDEMPIERE-6399] Deadlock at Web service [https://github.com/idempiere/idempiere/pull/2656 (#2656)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2660 (#2660)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6403 IDEMPIERE-6403] Drafted payment cannot be deleted after printing [https://github.com/idempiere/idempiere/pull/2659 (#2659)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6406 IDEMPIERE-6406] Create AD_message for errors in import csv [https://github.com/idempiere/idempiere/pull/2662 (#2662)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6412 IDEMPIERE-6412] Improve MChart.getData response by using camel case [https://github.com/idempiere/idempiere/pull/2667 (#2667)]&lt;br /&gt;
* Revert &amp;quot;[https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] NPE on GridTab.m_DataStatusEvent / change approach from volatile to synchronized [https://github.com/idempiere/idempiere/pull/2623 (#2623)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 2025-01-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4827 IDEMPIERE-4827] Unify Evaluatee Implementation [https://github.com/idempiere/idempiere/pull/2652 (#2652)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4925 IDEMPIERE-4925] Adding column for UOM and QtyEntered on Inventory Move [https://github.com/idempiere/idempiere/pull/2636 (#2636)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5647 IDEMPIERE-5647] Allow definition of context variables by Role [https://github.com/idempiere/idempiere/pull/2649 (#2649)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2653 (#2653)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6389 IDEMPIERE-6389] Move test done in AmtInWords_ES.main to the unit tests package [https://github.com/idempiere/idempiere/pull/2646 (#2646)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6396 IDEMPIERE-6396] Adding Support for context variable in HTML_REPORT_THEME sys config [https://github.com/idempiere/idempiere/pull/2650 (#2650)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2651 (#2651)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3031 IDEMPIERE-3031] Tooltips cannot be set on column headers in some forms [https://github.com/idempiere/idempiere/pull/2638 (#2638)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5136 IDEMPIERE-5136] Set Messages at tenant level - Add Title Logic to the Window [https://github.com/idempiere/idempiere/pull/2647 (#2647)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6365 IDEMPIERE-6365] RefTable with not ID as KeyColumn can't be translated [https://github.com/idempiere/idempiere/pull/2619 (#2619)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6383 IDEMPIERE-6383] Create Message Record for &amp;quot;Total Base Value is 0&amp;quot; [https://github.com/idempiere/idempiere/pull/2639 (#2639)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6384 IDEMPIERE-6384] Implement GenericPO UUID constructors [https://github.com/idempiere/idempiere/pull/2640 (#2640)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2643 (#2643)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6388 IDEMPIERE-6388] Fix some errors in AmtInWords_ES [https://github.com/idempiere/idempiere/pull/2644 (#2644)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6391 IDEMPIERE-6391] SaveError when Create Bank Transfer Via REST [https://github.com/idempiere/idempiere/pull/2645 (#2645)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4302 IDEMPIERE-4302] remove unnecessary code [https://github.com/idempiere/idempiere/pull/2625 (#2625)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Costing details by Account Date [https://github.com/idempiere/idempiere/pull/2435 (#2435)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6314 IDEMPIERE-6314] Issues with attachment on System records [https://github.com/idempiere/idempiere/pull/2626 (#2626)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6339 IDEMPIERE-6339] Focused button is not highlighted with the new theme [https://github.com/idempiere/idempiere/pull/2633 (#2633)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6355 IDEMPIERE-6355] Virtual UI column type date field cause record to display as not saved [https://github.com/idempiere/idempiere/pull/2615 (#2615)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6361 IDEMPIERE-6361] Document being closed when user does not have read and write access [https://github.com/idempiere/idempiere/pull/2621 (#2621)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6364 IDEMPIERE-6364] Make Menu Search Highlight Accent Insensitive [https://github.com/idempiere/idempiere/pull/2618 (#2618)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6369 IDEMPIERE-6369] iDempiere 12 server startup error on Windows [https://github.com/idempiere/idempiere/pull/2635 (#2635)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6370 IDEMPIERE-6370] Improve Menu Tree Filter Popup options by showing the item name next to the image&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6371 IDEMPIERE-6371] testPrintWithLocalFile unit test failed on windows [https://github.com/idempiere/idempiere/pull/2628 (#2628)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6373 IDEMPIERE-6373] Update IDempiere Home Page [https://github.com/idempiere/idempiere/pull/2629 (#2629)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6375 IDEMPIERE-6375] Add missing quantities to RV_Storage_per_product view [https://github.com/idempiere/idempiere/pull/2631 (#2631)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6379 IDEMPIERE-6379] Charts not honoring Display Legend flag [https://github.com/idempiere/idempiere/pull/2634 (#2634)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6380 IDEMPIERE-6380] MRoleOrgAccess and MUserOrgAccess .get are returning inactive records [https://github.com/idempiere/idempiere/pull/2632 (#2632)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-05 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] NPE on GridTab.m_DataStatusEvent / change approach from volatile to synchronized [https://github.com/idempiere/idempiere/pull/2623 (#2623)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6350 IDEMPIERE-6350] ToolbarProcessButton doesn't use process Process Customization for Name and Description [https://github.com/idempiere/idempiere/pull/2603 (#2603)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6351 IDEMPIERE-6351] Process called from Info Window do not use process Process Customization for Name and Description [https://github.com/idempiere/idempiere/pull/2604 (#2604)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6362 IDEMPIERE-6362] Update SyncDB for MacOsx Compatibility [https://github.com/idempiere/idempiere/pull/2616 (#2616)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6367 IDEMPIERE-6367] Problem rendering info window columns vs gridfields [https://github.com/idempiere/idempiere/pull/2622 (#2622)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6368 IDEMPIERE-6368] Improve execution of Task [https://github.com/idempiere/idempiere/pull/2624 (#2624)]&lt;br /&gt;
&lt;br /&gt;
== 2024-12-27 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3989 IDEMPIERE-3989] fast entity type identification - backward compatibility [https://github.com/idempiere/idempiere/pull/2606 (#2606)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6349 IDEMPIERE-6349] Add M49 country codes to the C_Country table (FHCA-6138) [https://github.com/idempiere/idempiere/pull/2609 (#2609)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6352 IDEMPIERE-6352] Missing @Deprecated annotation [https://github.com/idempiere/idempiere/pull/2607 (#2607)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6354 IDEMPIERE-6354] User Locking mechanism broken [https://github.com/idempiere/idempiere/pull/2610 (#2610)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6336 IDEMPIERE-6336] Fix NPE on MRefList.getList [https://github.com/idempiere/idempiere/pull/2613 (#2613)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23856</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23856"/>
		<updated>2026-04-21T16:06:15Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-04-21 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push [https://github.com/idempiere/idempiere/pull/3235 (#3235)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6899 IDEMPIERE-6899] Upgrade Zk to 10.3.0.1 [https://github.com/idempiere/idempiere/pull/3231 (#3231)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6907 IDEMPIERE-6907] Align iceblue_c theme with ZK CSS Variable Convention [https://github.com/idempiere/idempiere/pull/3223 (#3223)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6910 IDEMPIERE-6910] Add ExternalTraceId to core audit changelog [https://github.com/idempiere/idempiere/pull/3212 (#3212)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6951 IDEMPIERE-6951] Change logic to update Charge/Interest Amt on bank statement line [https://github.com/idempiere/idempiere/pull/3214 (#3214)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6953 IDEMPIERE-6953] CKEditor : allow override config.js and config-min.js in a plugin [https://github.com/idempiere/idempiere/pull/3219 (#3219)] [https://github.com/idempiere/idempiere/pull/3232 (#3232)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6969 IDEMPIERE-6969] Rollup BOM Cost must verify that BOM products are verified [https://github.com/idempiere/idempiere/pull/3230 (#3230)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6972 IDEMPIERE-6972] Doc_Inventory posting fails with &amp;quot;No Costs for &amp;lt;product&amp;gt;&amp;quot; when a physical inventory contains a zero-difference line for a batch/lot-costed product [https://github.com/idempiere/idempiere/pull/3238 (#3238)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23855</id>
		<title>Migration Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23855"/>
		<updated>2026-04-21T10:15:10Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: websocket and atmosphere&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Features]]&lt;br /&gt;
[[Category:Migration]] &lt;br /&gt;
[[Category:Installation|M]] &lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[Category:Updated2022]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 14 (to be released, known as master) =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 14 ==&lt;br /&gt;
&lt;br /&gt;
=== WebSocket as default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
The default server push mechanism in r14 has been set to WebSocket.&lt;br /&gt;
&lt;br /&gt;
Websocket improves performance and reduces overhead in standard environments.&lt;br /&gt;
&lt;br /&gt;
However, WebSocket connectivity may fail in certain infrastructure configurations. Three known scenarios are affected.&lt;br /&gt;
&lt;br /&gt;
* LXC containers: WebSocket connections may not work correctly depending on the host kernel and network configuration of the LXC environment&lt;br /&gt;
* Port redirection via iptables: Redirecting port 8443 to 443 using iptables rules can break WebSocket handshake negotiation&lt;br /&gt;
* Connecting using a ssh tunnel for port 8443 doesn't work&lt;br /&gt;
&lt;br /&gt;
'''To use Atmosphere:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=atmosphere&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use Websocket you can use &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;, or simply don't set it at all as is the default.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 13 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 13 ==&lt;br /&gt;
&lt;br /&gt;
=== Changes in default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
Initially release-13 was released with websocket as the default push server, but after [[ChangeLog_Release_13#2026-04-13|Release-13-2026-04-13]] it was rolled back and the default is again atmosphere.  In release-14 it has been changed again to websocket (see comments above)&lt;br /&gt;
&lt;br /&gt;
'''To use Websocket in release-13:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MAttachment.setTitle driven by list ===&lt;br /&gt;
&lt;br /&gt;
The column AD_Attachment.Title was managed as a free text field, but in reality it contained a list of values.&lt;br /&gt;
&lt;br /&gt;
So, with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] the column was changed to a List, and the values are now restricted.  So, if you have used MAttachment.setTitle in a plugin or test for a different purpose, this plugin will threw an error if the value is not one of the allowed in the list.&lt;br /&gt;
&lt;br /&gt;
=== UUID native type in PostgreSQL and UUIDv7 ===&lt;br /&gt;
&lt;br /&gt;
A big change for PostgreSQL was implemented with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650]:&lt;br /&gt;
All the UUID columns in the database were converted from VARCHAR to the native UUID type.&lt;br /&gt;
This is a big recommendation from postgresql that impacts positively performance and database size.&lt;br /&gt;
&lt;br /&gt;
Also the UUIDs generated in iDempiere were moved to the [https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_7_(timestamp_and_random) UUIDv7 standard], this is also a performance recommendation, as well as it allows to order by UUID and have the same order as the creation of the records, which was something possible with the _ID columns too.&lt;br /&gt;
&lt;br /&gt;
There are some implications about this change:&lt;br /&gt;
&lt;br /&gt;
1 - the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function uses the function &amp;lt;code&amp;gt;gen_random_uuid&amp;lt;/code&amp;gt; which is available natively in postgresql since version 13.&lt;br /&gt;
&lt;br /&gt;
Previous versions will throw an error when applying the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For versions 11 and 12 you can still use it enabling the pgcrypto extension:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
CREATE EXTENSION pgcrypto;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 - the script &amp;lt;code&amp;gt;postgresql/202510101902_IDEMPIERE-6650-uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using a UUID column and at the same time having the UNION clause.&lt;br /&gt;
&lt;br /&gt;
If this happens then you must take care of dropping those views (and their dependencies) before applying the script, and then recreating them back at the end.&lt;br /&gt;
&lt;br /&gt;
3 - the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function&lt;br /&gt;
&lt;br /&gt;
You need to apply the same solution as the previous point, drop those views before and recreate them after.&lt;br /&gt;
&lt;br /&gt;
This script can also fail on versions 11 and 12, and as explained above the solution is to install the pgcrypto extension.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated PO getters on X_ classes ===&lt;br /&gt;
The X_ classes have getter methods for every foreign key, for example &amp;lt;code&amp;gt;X_C_Order.getC_DocType()&amp;lt;/code&amp;gt; - the usage of these getters is very handy and because of that it has been widely used historically.  The problem is that the way these methods are implemented is very expensive in performance, and it cannot use caches at all.  So with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6642 IDEMPIERE-6642] we decided to deprecate.  What you probably see when migrating to release-13 is a lot of deprecate warnings in your custom and plugins code, these warnings are harmless, but is recommended to migrate to better methods that have a better performance and use cache when possible.&lt;br /&gt;
&lt;br /&gt;
=== Removal of old deprecated code ===&lt;br /&gt;
This release removes several classes and methods that were deprecated more than two major versions ago.&amp;lt;br&amp;gt;&lt;br /&gt;
Custom plugins and customizations that still call these classes and methods '''will no longer compile and must be updated'''.&amp;lt;br&amp;gt;&lt;br /&gt;
See the full commit here: [https://idempiere.atlassian.net/browse/IDEMPIERE-6735 IDEMPIERE-6735]  &lt;br /&gt;
&lt;br /&gt;
==== Removed Classes ====&lt;br /&gt;
* org.compiere.process.BOMValidate&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookup&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookupInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.Postcode&lt;br /&gt;
* com.akunagroup.uk.postcode.package-info&lt;br /&gt;
* org.adempiere.util.GenerateModel&lt;br /&gt;
* org.adempiere.util.GenerateModelJPA&lt;br /&gt;
* org.compiere.db.SecurityPrincipal&lt;br /&gt;
* org.compiere.model.MBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBOMProduct and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBlackListCheque and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MProductBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.util.CallableResult&lt;br /&gt;
* org.compiere.util.ExecuteResult&lt;br /&gt;
* org.compiere.util.ExtensionFileFilter&lt;br /&gt;
* org.compiere.util.FileUpload&lt;br /&gt;
* org.compiere.util.Queue&lt;br /&gt;
* org.adempiere.webui.DelegatingServlet&lt;br /&gt;
* org.adempiere.webui.event.TouchEventHelper&lt;br /&gt;
* org.adempiere.webui.panel.ChatPanel&lt;br /&gt;
* org.adempiere.webui.panel.ConfigurationPanel&lt;br /&gt;
* org.adempiere.webui.panel.FooterPanel&lt;br /&gt;
* org.adempiere.webui.panel.RequestNoticePanel&lt;br /&gt;
* org.adempiere.webui.window.FDialog&lt;br /&gt;
&lt;br /&gt;
==== Removed Methods ====&lt;br /&gt;
'''AbstractADWindowContent'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void executeASync(ProcessInfo pi)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ADSortTab'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void editRecord(boolean b)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''AEnv'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void exit (int status)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean isTablet()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CConnection'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public InitialContext getInitialContext(boolean useCache)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CustomizerGridViewDialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean onCustomize(ADTabpanel tabPanel)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean showCustomize(int WindowNo, int AD_Tab_ID, Map &amp;amp;lt;Integer, String&amp;amp;gt; columnsWidth, ArrayList &amp;amp;lt;Integer&amp;amp;gt; gridFieldIds, GridView gridPanel, QuickGridView quickGridView, boolean isQuickForm)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage, String additionalMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''diff_match_patch'''&lt;br /&gt;
* &amp;lt;code&amp;gt;@Deprecated public LinkedList&amp;amp;lt;Patch&amp;amp;gt; patch_make(String text1, String text2, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Env'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties getRemoteCallCtx(Properties ctx)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GridTable'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isSortedAscending()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getSortColumnIndex()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''I_C_Country'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isPostcodeLookup()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClassName()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClientID()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupPassword()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupUrl()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setIsPostcodeLookup(boolean IsPostcodeLookup)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClassName(String LookupClassName)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClientID(String LookupClientID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupPassword(String LookupPassword)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupUrl(String LookupUrl)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LayoutUtils'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void sendDeferLayoutEvent(org.zkoss.zul.Borderlayout layout, int timeout)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Login'''&lt;br /&gt;
* &amp;lt;code&amp;gt;private KeyNamePair[] getRoles(String app_user, String app_pwd, boolean force)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;protected KeyNamePair[] getRoles(CConnection cc, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(Principal app_user)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(String app_user, String app_pwd)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties initTest (boolean isClient)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MAging'''&lt;br /&gt;
* &amp;lt;code&amp;gt;MAging (Properties ctx, int AD_PInstance_ID, Timestamp StatementDate, int C_BPartner_ID, int C_Currency_ID, int C_Invoice_ID, int C_InvoicePaySchedule_ID, int C_BP_Group_ID, Timestamp DueDate, boolean IsSOTrx, String trxName)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartner'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getAD_OrgBP_ID_Int()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartnerLocation'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MBPartnerLocation[] getForBPartner(Properties ctx, int C_BPartner_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCharge'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MAccount getAccount (int C_Charge_ID, MAcctSchema as, BigDecimal amount)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCountry'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void setDisplayLanguage (String AD_Language)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MPaySelectionLine'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void xsetInvoice(int C_Invoice_ID, boolean isSOTrx, BigDecimal OpenAmt, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MWFEventAudit'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID, int AD_WF_Node_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WCreateFromWindow'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setStatusBar(StatusBarPanel statusBar)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WListItemRenderer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setRO(int colIndex, Boolean readOnly)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WLocatorEditor'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setField(org.compiere.model.GridField mField)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WTableColumn'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean getResizable()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMaxWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMinWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getPreferredWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMaxWidth(int maxWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMinWidth(int minWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setPreferredWidth(int preferredWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setResizable(boolean isResizable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setWidth(int width)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WindowContainer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertAfter(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertBefore(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Required developer actions ====&lt;br /&gt;
* Rebuild your custom plugins and note any compilation errors related to missing classes or methods.&lt;br /&gt;
* For each error, replace the removed deprecated API with its recommended alternative (standard getters/setters, services, or cache‑aware access patterns).&lt;br /&gt;
* Re‑run your test suite (or perform manual regression tests) to validate that business logic continues to work as expected.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Only APIs that had been deprecated for more than two major releases were removed, following the project deprecation policy.''&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 13 ==&lt;br /&gt;
With the [https://idempiere.atlassian.net/browse/IDEMPIERE-6575 IDEMPIERE-6575] ticket, on the AD_Sequence_No.CalendarYearMonth column was renamed to SequenceKey, this means for the  getCalendarYearMonth and  setCalendarYearMonth methods the adequate replacement is getSequenceKey and setSequenceKey.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 12 =&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
As reported by Robert Green [https://groups.google.com/g/idempiere/c/iFtEV_6mwf0/m/GejbvQhOAwAJ on forums], there are problems running iDempiere '''as a server''' on windows.&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== JDBC libraries upgraded ===&lt;br /&gt;
&lt;br /&gt;
Three libraries related to JDBC were upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] on [[ChangeLog_Release_12#2025-11-10|release-12.2025-11-10]]&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL from 42.7.3 to 42.7.8&lt;br /&gt;
* Oracle from ojdbc10 19.21.0.0 to ojdbc17 23.26.0.0.0&lt;br /&gt;
* HikariCP from 5.1.0 to 7.0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL 42.7.8 has a change that could break previous working code:&lt;br /&gt;
* previously the DatabaseMetaData.get* methods worked with any catalog name, that parameter was simply ignored&lt;br /&gt;
* since 42.7.5 the catalog is used as a filter, so it must be passed as the database name, or null&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3394&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3389&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/pull/3390&lt;br /&gt;
&lt;br /&gt;
=== Session Fingerprinting ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-02-08|release-12-20260208]] session fingerprinting was added to the zkwebui.&lt;br /&gt;
&lt;br /&gt;
Please read carefully [[NF12 Session Fingerprinting]] to see the options being checked.&lt;br /&gt;
&lt;br /&gt;
It's possible your users will be logged out when changing the language '''of the browser''' during and iDempiere session, or if the browser is updated.&lt;br /&gt;
&lt;br /&gt;
It's also possible that changes of IP address will be logged in logs and in AD_Issue.  This can happen when connecting to a VPN, changing wifi, or using mobile.  But it can also be the indication of attempts to hijack the session.  It is recommended to keep an eye on these alerts and verify for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
=== New Env.parseContext parameter ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-01-04|release-12-20260104]] a new parameter was added to Env.parseContext:&lt;br /&gt;
&lt;br /&gt;
* '''forSQL''': if true, the parsed value is intended for SQL statement, so it replaces quotes accordingly&lt;br /&gt;
&lt;br /&gt;
It is recommended to review your plugins and use the new parameter when the Env.parseContext is intended to be used in SQL clauses, this is very important to prevent SQL Injection attacks.&lt;br /&gt;
&lt;br /&gt;
=== New SQLFragment approach ===&lt;br /&gt;
&lt;br /&gt;
In many places of iDempiere direct SQL clauses were added with parameters replaced directly within the where clause, this can open doors for SQL Injection attacs that we want to avoid.&lt;br /&gt;
&lt;br /&gt;
To solve that, the new org.idempiere.db.util.SQLFragment was added in [[ChangeLog_Release_12#2026-01-16|release-12-20260116]], this approach allows to define a where clause with binding parameters and associate a List of parameters to the clause.&lt;br /&gt;
&lt;br /&gt;
Many methods were deprecated to encourage the usage of the new SQLFragment approach instead of adding directly where clauses.&lt;br /&gt;
&lt;br /&gt;
It is encouraged to check carefully your plugins using these deprecated methods and migrate to the new SQLFragment approach.&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== Promotions functionality was removed from core to a plugin ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-2826 IDEMPIERE-2826] it was decided to move the Promotions functionality out of core to a plugin.&lt;br /&gt;
&lt;br /&gt;
So, if you have been using this functionality, when migrating to release-12 is necessary to install the plugin.&lt;br /&gt;
&lt;br /&gt;
The plugin documentation can be found at: [[Plugin:_Promotions]]&lt;br /&gt;
&lt;br /&gt;
== Theme ==&lt;br /&gt;
&lt;br /&gt;
Default theme was changed from ''breeze'' to ''iceblue_c''. &lt;br /&gt;
&lt;br /&gt;
To reflect that, the ''ZK_THEME'' SysConfig has been forced to 'iceblue_c'.&lt;br /&gt;
&lt;br /&gt;
So, once your customized theme is updated (as it will probably require some adaptations), you can update the SysConfig to use it.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 11 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 11 ==&lt;br /&gt;
&lt;br /&gt;
=== Java 17 required ===&lt;br /&gt;
For the release-11 we decided to move to the next Long Term Supported version of java.  As java 11 is too close to its end of life, the release-11 requires java-17 for running and compiling.&lt;br /&gt;
&lt;br /&gt;
=== Storage size increase because of new Record_UU columns ===&lt;br /&gt;
As explained in [[NF11 UUID Key Tables#Enabled Features for tables with UUID key and without ID key|UUID Key Tables documentation page]]: a number of Record_UU columns have been added to core tables, which can represent an increase in storage size and backup size in implementations that have many records on these tables, for example many attachments, or heavy usage of chat, post-it or labels.  Also the Change Log can be affected by size depending on the System Configurator key AD_CHANGELOG_SAVE_UUID&lt;br /&gt;
&lt;br /&gt;
=== New MPInstance constructors to manage the new column AD_PInstance.AD_Table_ID ===&lt;br /&gt;
The table AD_PInstance table had a Record_ID column without the corresponding AD_Table_ID.  This is an anomaly and it created a problem as it was not possible to figure out which table triggered a process, and use the Record_ID field to navigate to the originating record.&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5567 IDEMPIERE-5567] the column was added, and the migration script 202309111844_IDEMPIERE-5567_ADPInstance.sql tries the best to fill the new column AD_Table_ID discovering the related table from column, toolbar button, print formats, etc.&lt;br /&gt;
&lt;br /&gt;
However, it is very possible that not all relationships can be figured out, after migration you can review which records were left on AD_PInstance table with null AD_Table_ID and Record_ID&amp;gt;0, and decide if you want to fill it for your specific cases (sometimes is not possible to discover it at the end (for example the process org.compiere.process.BankStatementMatcher could have been called from three different tables and there is no trace about that).&lt;br /&gt;
&lt;br /&gt;
Additionally, it is possible that your plugins call processes filling AD_PInstance without the table, the old constructors for MPInstance are marked as deprecated to ease the task to find them in your plugins and migrate to use the new methods.&lt;br /&gt;
&lt;br /&gt;
=== Constructor MPaymentBatch(Properties, String, String) changed ===&lt;br /&gt;
&lt;br /&gt;
There was a constructor MPaymentBatch(Properties, String, String) that was not used in the official core.&lt;br /&gt;
&lt;br /&gt;
The second parameter of this constructor was the Name and it was intended to create a new record and set the Name of the Payment Batch record.&lt;br /&gt;
&lt;br /&gt;
This constructor conflicts with the [[NF11_UUID_Key_Tables#New_UUID_based_constructors|new UUID based constructor]], so it was replaced by the UUID constructor and its behavior is now completely different.&lt;br /&gt;
&lt;br /&gt;
Most probably nobody is using this old constructor, but in case you use MPaymentBatch constructor in your plugins, please review that you are not using this constructor, if used, please change it to a normal constructor with zero as ID parameter and then set the Name.&lt;br /&gt;
&lt;br /&gt;
=== Product Info toolbar button deactivated in Core. ===&lt;br /&gt;
The community discussion was that most people is not using that toolbar button. However, if you miss it after upgrading. You can go to the Toolbar Button window and activate it again.&lt;br /&gt;
&lt;br /&gt;
=== Export Button not exporting Official Dictionary entries ===&lt;br /&gt;
Since [https://idempiere.atlassian.net/browse/IDEMPIERE-6018 IDEMPIERE-6018] the Export button on windows does not export official dictionary entries, to export dictionary is needed to configure and use a PackOut.&lt;br /&gt;
&lt;br /&gt;
=== Hazelcast defaults to disable auto-detection ===&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6279 IDEMPIERE-6279] the hazelcast automatic detection of other servers within the network was disabled, if you plan to use Hazelcast in a multi-server or load balanced scenario, the hazelcast-template.xml needs to be customized.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 10 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 10 ==&lt;br /&gt;
&lt;br /&gt;
=== System user with ID zero deprecated ===&lt;br /&gt;
&lt;br /&gt;
The user System with ID=0 was inactivated and replaced with a similar user with ID=10&lt;br /&gt;
&lt;br /&gt;
Implementors that use System in any way must check if there is impact with this change, the migration script 202202072157_IDEMPIERE-5174.sql copies the information from AD_User, but it doesn't copy custom columns.  Also, it replaces AD_User_ID in some core tables, but implementors must take care if is needed in other custom tables.&lt;br /&gt;
&lt;br /&gt;
=== Change on Schedule behaviour ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5093 IDEMPIERE-5093] changed the way the schedule works:&lt;br /&gt;
* Before this ticket when you had a schedule configured to run at 9AM, the job was executed at 9AM of the server timezone.&lt;br /&gt;
* This ticket changed this behaviour and now the job is executed at 9AM '''of the tenant timezone''' where the job is defined.&lt;br /&gt;
&lt;br /&gt;
=== Terminology changed from Client to Tenant ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4586 IDEMPIERE-4586] changed the terminology for Client to be known as Tenant in the whole application.&lt;br /&gt;
&lt;br /&gt;
This have little impact from user perspective, but it can have a big impact on documentation.&lt;br /&gt;
&lt;br /&gt;
=== Backward compatibility issue with TimeUtil.getBusinessDaysBetween ===&lt;br /&gt;
Before v10, the method was counting the last day of the period in the total of non business days.&lt;br /&gt;
&lt;br /&gt;
Now, the last day is excluded. In order to fix that, a new method with a new parameter has been added ''includeEndDate,'' so you must use that new method with your plugin if you want to preserve behaviour prior to v10.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade to Hazelcast ===&lt;br /&gt;
The hazelcast library was upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5816 IDEMPIERE-5816], the &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; configuration file is not compatible with previous version, so it is needed to run setup again to use the new template.  In case your &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; is customized, you need to take the template for version 5.3 and apply your changes.  NOTE: This was integrated into release-11, and also into release-10 at 2023-07-29&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 9 Horizon =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 9 Horizon ==&lt;br /&gt;
&lt;br /&gt;
=== Deprecated direct http usage ===&lt;br /&gt;
&lt;br /&gt;
iDempiere 9 Horizon doesn't support anymore direct http usage of the webui interface.  Workaround is simply to use port https.&lt;br /&gt;
&lt;br /&gt;
If you use http the system doesn't allow login in webui.&lt;br /&gt;
&lt;br /&gt;
Note that http can still be used for proxy forwarding, but the configuration requires to forward the header X-Forwarded-Proto to https.&lt;br /&gt;
&lt;br /&gt;
In nginx you must add the following line to the definition of the locations /webui and /webui/zkau/comet:&lt;br /&gt;
 proxy_set_header  X-Forwarded-Proto $scheme;&lt;br /&gt;
As described in [[Proxy iDempiere Through Nginx]]&lt;br /&gt;
&lt;br /&gt;
=== All core views imported to dictionary ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5059 IDEMPIERE-5059] the definition of the 149 core views was imported to the dictionary.&lt;br /&gt;
&lt;br /&gt;
In the migration scripts there is code to recreate all these views, so it is very possible that all the custom columns that were added to views by the implementor will present problems when applying the scripts.&lt;br /&gt;
&lt;br /&gt;
Two possible cases that you need to take care about:&lt;br /&gt;
* the script doesn't show errors, but your customization for the view is lost. You must check all the core views that you customized to see if they are having problems and apply the corresponding fixes in release 9&lt;br /&gt;
* the script show errors when applying (usually postgres complains because it cannot change the columns)&lt;br /&gt;
In both cases it is required that you fix the views, do not create the view by hand in SQL, the best way is to add your customized columns to the dictionary and then use the iDempiere process to validate/create the view in the database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Take care of AD_Window.PredefinedContextVariables ===&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4837 IDEMPIERE-4837] will erase changes done on AD_Window.PredefinedContextVariables for Order, Invoices.&lt;br /&gt;
Make a backup of the content of those fields if you have customized them and reapply them.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Default to Native Dialect ===&lt;br /&gt;
Release-9 comes by default with Native PostgreSQL dialect.  The SQLs in core were changed to make them compatible for Oracle and PostgreSQL.  Because of that is possible that some plugins can be broken, for example if using NATIVE_PostgreSQL_KEYWORK.&lt;br /&gt;
&lt;br /&gt;
To solve that, the best option is to change your plugin to use SQL standard (compatible with both databases).&lt;br /&gt;
&lt;br /&gt;
See [[NF9 PostgreSQL Default To Native Dialect]] for information about how to disable it (not recommended).&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 8.2 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 8.2 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
For migration script issues see [[Note Upgrade 8.2]] from [[User:Hieplq|Hiep]]&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 8.2 ==&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4421 IDEMPIERE-4421] it was implemented a mechanism for versioning the themes.&lt;br /&gt;
&lt;br /&gt;
We tried to preserve backward compatibility with pre-8.2 themes, but still you'll find problems when the following conditions are in your plugin&lt;br /&gt;
* if the old plugin has references to /theme/default, because the URL of /theme/default was changed to the versioning approach&lt;br /&gt;
** Recommended solution: migrate your theme to 8.2 approach&lt;br /&gt;
** Or change the pointers to /theme/default to point to your own theme&lt;br /&gt;
** Or change the pointers to ~./theme/default/ (this is not recommended, is preferable to maintain your own theme assets)&lt;br /&gt;
* if your plugin referenced the public variable ITheme.THEME_PATH_PREFIX, that variable was dropped&lt;br /&gt;
** Solution is to change the variable to ThemeManager.THEME_PATH_PREFIX&lt;br /&gt;
&lt;br /&gt;
You can find additional instructions to migrate your theme at this ticket comment: https://idempiere.atlassian.net/browse/IDEMPIERE-4421?focusedCommentId=46667&lt;br /&gt;
&lt;br /&gt;
=== PO is immutable ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about not writing objects retrieved from cache.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids writing to these objects to prevent multi-threading issues with these objects.  The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4287 IDEMPIERE-4287]&lt;br /&gt;
&lt;br /&gt;
=== Cross-tenant reading/writing forbidden by default ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about avoiding reading or writing records from a different tenant than the tenant that was used in login.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids reading/writing records from a different tenant.&lt;br /&gt;
&lt;br /&gt;
Reading can be done from the current tenant or System tenant.  Writing can be done just on the current tenant.&lt;br /&gt;
&lt;br /&gt;
The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
How to avoid this condition?&lt;br /&gt;
* Always read/write records within the tenant&lt;br /&gt;
* for example filter &amp;lt;code&amp;gt;AD_Client_ID=?&amp;lt;/code&amp;gt;&lt;br /&gt;
* or filter &amp;lt;code&amp;gt;AD_Client_ID IN (0,?)&amp;lt;/code&amp;gt;&lt;br /&gt;
* with Query consider using the method setClient_ID&lt;br /&gt;
&lt;br /&gt;
If, for any reason, it is absolutely necessary to read or write a record in a different tenant, the following code can be used:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
    PO.setCrossTenantSafe();&lt;br /&gt;
    // write here the Query.list or PO.saveEx that is cross tenant safe&lt;br /&gt;
} finally {&lt;br /&gt;
    PO.clearCrossTenantSafe();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4268 IDEMPIERE-4268]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 7.1 =&lt;br /&gt;
&lt;br /&gt;
== Multi-server schedulers ==&lt;br /&gt;
&lt;br /&gt;
Because of ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4056 IDEMPIERE-4056], the schedulers running in all servers are not supported anymore.&lt;br /&gt;
&lt;br /&gt;
This is, in previous versions when a scheduler didn't have a RunOnlyOnIP defined it was executed in all servers, after the implementation of IDEMPIERE-4056 the schedulers without an IP defined are executed on just one server (randomly).&lt;br /&gt;
&lt;br /&gt;
How to configure now:&lt;br /&gt;
* The RunOnlyOnIP keeps working as usual, so the easiest workaround is to configure one scheduler per each server&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 3.1 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 3.1 ==&lt;br /&gt;
&lt;br /&gt;
=== Keystore moved ===&lt;br /&gt;
&lt;br /&gt;
As the web server was changed from tomcat to jetty the keystore file was moved from &amp;lt;code&amp;gt;idempiere-server/keystore/myKeystore&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;idempiere-server/jettyhome/etc/keystore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the upgrade of zk to version 7 the file &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/theme.css.dsp&amp;lt;/code&amp;gt; was split in fragments located at folder &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/fragment&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;about.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;adwindow.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;application-menu.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;borderlayout.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;button.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;desktop.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;field-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;find-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;form.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;gadget.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;grid.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;group.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;help-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;info-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;input-element.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;login.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;menu-tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;setup-wizard.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar-popup.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Theme developers must take care of migrating the themes to be compliant with this new schema.&lt;br /&gt;
&lt;br /&gt;
=== Migration Notes from [[User:Hieplq|Hieplq]] ===&lt;br /&gt;
&lt;br /&gt;
Please take a look to the migration notes provided by hiep at [[Update_your_development_environment_zk7_branch#known_issues|Known issues when updating your development environment zk7 branch]]&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.1 to iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1z i2.1z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i3.1 i3.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.0 to iDempiere 2.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0 i2.0]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0z i2.0z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 1.0 to iDempiere 2.0 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]  # just the scripts still not applied&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0z i1.0z]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i2.0 i2.0]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 1.0 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old systems to iDempiere 1.0 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== org.compiere.acct.Doc ===&lt;br /&gt;
&lt;br /&gt;
Constructor account schema parameter have been changed from MAcctSchema[] to MAcctSchema. This can break extensions that modify accounting, solution is simple, just change it to use new method and accomodate code.&lt;br /&gt;
&lt;br /&gt;
=== 2Pack ===&lt;br /&gt;
&lt;br /&gt;
The new 2pack format is not backward compatible&lt;br /&gt;
&lt;br /&gt;
=== AD_WF_Node ===&lt;br /&gt;
&lt;br /&gt;
The xposition and yposition column now stored the node's position in a grid instead of absolute pixel value.&lt;br /&gt;
&lt;br /&gt;
=== Change Log Configuration ===&lt;br /&gt;
&lt;br /&gt;
The change log is now enabled by default in most of the tables.&lt;br /&gt;
&lt;br /&gt;
Enabling the change log is done with the script 201306261840_EnableChangeLog.sql&lt;br /&gt;
&lt;br /&gt;
If you have already tuned your change log configuration, you can skip that script - or run it and then recover your specific fine tuning changes.&lt;br /&gt;
&lt;br /&gt;
Note also that enabling the change log it will increase the disk consumption - if that's a concern on your installation you must fine tune this configuration after running the script.&lt;br /&gt;
&lt;br /&gt;
=== Jasper ID parameters passed as BigDecimal now as Integer ===&lt;br /&gt;
&lt;br /&gt;
In some cases the ID parameters (table, table direct, search) were passed to jasper reports as BigDecimal, while in other cases same parameters were passed as Integer (like RECORD_ID or ranges), with [http://idempiere.atlassian.net/browse/IDEMPIERE-1422 IDEMPIERE-1422] that behavior is now consistent, always using Integer for _ID parameters.&lt;br /&gt;
&lt;br /&gt;
This change can break old jasper reports that defined the ID parameter as BigDecimal, the fix is simple, just change the jasper parameter to Integer and compile again.&lt;br /&gt;
&lt;br /&gt;
When this error is reached running the jasper report throws this exception:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
16:47:32.058===========&amp;gt; ProcessUtil.startJavaProcess: org.compiere.report.ReportStarter [17]&lt;br /&gt;
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:553)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:399)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter$1.visit(JRJdbcQueryExecuter.java:332)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter$QueryParameter.accept(JRAbstractQueryExecuter.java:157)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter.visitQueryParameters(JRAbstractQueryExecuter.java:646)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:317)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1281)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:900)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functional Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Inventory Document Types ===&lt;br /&gt;
&lt;br /&gt;
Because of [http://idempiere.atlassian.net/browse/IDEMPIERE-675 IDEMPIERE-675] you need to set manually the inventory document subtype for your inventory documents (internal use and physical inventory).&lt;br /&gt;
&lt;br /&gt;
In case you used the same document type for both cases - then recommendation is to inactivate the old mixed document and create new document types for each specific case.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated Functionalities ===&lt;br /&gt;
&lt;br /&gt;
With [http://idempiere.atlassian.net/browse/IDEMPIERE-362 IDEMPIERE-362], [http://idempiere.atlassian.net/browse/IDEMPIERE-170 IDEMPIERE-170], [http://idempiere.atlassian.net/browse/IDEMPIERE-247 IDEMPIERE-247] some functionalities that were not working properly where deprecated, please check the tickets and commits for details, most prominent are:&lt;br /&gt;
* Cash Journals (all cash functionalities can be modeled using payments)&lt;br /&gt;
* MRP Heavy Manufacturing (Light Manufacturing was integrated)&lt;br /&gt;
* Payroll (being developed as extension)&lt;br /&gt;
&lt;br /&gt;
=== Production ===&lt;br /&gt;
&lt;br /&gt;
If you used the old Production window (original from Compiere with three tabs) - please note some changes are required as noted in [http://idempiere.atlassian.net/browse/IDEMPIERE-521 IDEMPIERE-521]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Roles ===&lt;br /&gt;
&lt;br /&gt;
With [https://idempiere.atlassian.net/browse/IDEMPIERE-1160 IDEMPIERE-1160] a new security feature was implemented, when creating a new client the ClientAdmin role is configured as advanced role and the ClientUser role is not, after that you can use the ClientAdmin role to configure the rest of roles (advanced or not) and users.&lt;br /&gt;
&lt;br /&gt;
Please note that advanced role is not intended for end-users, is mostly intended for Information technology (IT) roles that administer the system - advanced roles have access to many fields that are documented and exposed security holes in the system.&lt;br /&gt;
&lt;br /&gt;
This new feature creates a problem when migrating databases with existing tenants - as we can't know in advance how the security was configured in an already existing client - we cannot set advanced role to one of the client roles in the database via migration script.  The consequence is that when migrating databases, all the roles on Clients (not GardenAdmin and System) are marked as non-advanced - and there is not a way to mark advanced role within the system, it's needed to mark your required advanced role directly via SQL with a command like:&lt;br /&gt;
 UPDATE AD_Role SET IsAccessAdvanced='Y' WHERE AD_Role_ID=?&lt;br /&gt;
where you replace the ? with the ID of the role you design as advanced (with access to security holes).&lt;br /&gt;
&lt;br /&gt;
= Migration Scripts =&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to ADempiere 361 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts-360lts.010?at=globalqss_adempiere361 360lts-360lts.010]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts.010-361.Final?at=globalqss_adempiere361 360lts.010-361.Final]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/361.Final-BUG_FIXES?at=globalqss_adempiere361 361.Final-BUG_FIXES]&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/360lts-i1.0a 360lts-i1.0a]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0a-i1.0b i1.0a-i1.0b]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0b-i1.0c i1.0b-i1.0c]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 361 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
You need to apply the migration scripts like migrating from 360, '''EXCLUDING''' those already applied when you migrated from 360 to 361.&lt;br /&gt;
&lt;br /&gt;
== Increasing speed of some scripts ==&lt;br /&gt;
&lt;br /&gt;
* Script &amp;lt;code&amp;gt;postgresql/789_GenerateUUIDColumns.sql&amp;lt;/code&amp;gt; can apply ALTER TABLE too slowly for big tables - this can be improved dropping the &amp;quot; DEFAULT NULL&amp;quot; at the end of each ALTER TABLE&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended to run &amp;quot;UUID Generator&amp;quot; process after migration to fill the empty UUID columns, but this can be a very slow process for big tables, a faster way can be achieved executing an update directly on the database, also you can consider deleting the related uuid index before the update and recreating it at the end, for example:&lt;br /&gt;
** &amp;lt;code&amp;gt;DROP INDEX ad_changelog_uu_idx;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;UPDATE AD_ChangeLog SET AD_ChangeLog_UU=generate_uuid() WHERE AD_ChangeLog_UU IS NULL;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;CREATE UNIQUE INDEX ad_changelog_uu_idx ON ad_changelog (ad_changelog_uu);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The script &amp;lt;code&amp;gt;processes_post_migration/postgresql/02_SynchronizeTerminology.sql&amp;lt;/code&amp;gt; tend to be slow on postgresql versions higher than 9.1 with the default memory.  In order to solve this is recommended to tune the memory for the database.&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere 370 =&lt;br /&gt;
&lt;br /&gt;
[[User:Pb_integratio|Pb_integratio]] is sharing and documenting experience about this at [[Migration from ADempiere 370 to iDempiere]]&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere pre-360 =&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
Migrating some Adempiere installations before 360 to iDempiere generates a problem when using postgresql 9.2 - applying the script 201309192024_IDEMPIERE-1370.sql:222 throws:&lt;br /&gt;
 ERROR:  cannot change name of input parameter &amp;quot;p_product_id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cause ==&lt;br /&gt;
&lt;br /&gt;
An issue has been detected migrating a database pre-360 to iDempiere using postgresql 9.2&lt;br /&gt;
&lt;br /&gt;
The function bomqtyonhand from the database seed doesn't match with the function bomqtyonhand present on the migration scripts (pre-360), the script 201309192024_IDEMPIERE-1370.sql fixes that situation, but postgresql 9.2 doesn't allow changing a parameter name for a function.&lt;br /&gt;
&lt;br /&gt;
== Solutions ==&lt;br /&gt;
&lt;br /&gt;
* You can do the migration using postgres 8.4 and at the end migrate to 9.2 (postgres 8.4 allows changing name of function parameters)&lt;br /&gt;
alternatively&lt;br /&gt;
* You can drop the old function bomqtyonhand (and all the associated views) and recreate them properly&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23835</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23835"/>
		<updated>2026-04-14T16:02:45Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_12&amp;diff=23834</id>
		<title>ChangeLog Release 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_12&amp;diff=23834"/>
		<updated>2026-04-14T16:00:49Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-12&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-13 ==&lt;br /&gt;
&lt;br /&gt;
* Revert &amp;quot;[https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6366 IDEMPIERE-6366] Generic Info window shows all columns exists on table and do not respect seqNoSelection [https://github.com/idempiere/idempiere/pull/2620 (#2620)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6719 IDEMPIERE-6719] Selected records in the info window are not being processed. [https://github.com/idempiere/idempiere/pull/2964 (#2964)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3155 (#3155)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6198 IDEMPIERE-6198] Incorrect Accumulated Amt and Accumulated Qty after reverse-correct a Physical Inventory [https://github.com/idempiere/idempiere/pull/2908 (#2908)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3158 (#3158)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824] Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6870 IDEMPIERE-6870] Fix NPE in callout when selecting product without cost [https://github.com/idempiere/idempiere/pull/3125 (#3125)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6876 IDEMPIERE-6876] Report parameters are overwritten when refreshing a previously opened tab of the same report [https://github.com/idempiere/idempiere/pull/3141 (#3141)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6879 IDEMPIERE-6879] WLocationDialog showing misleading error to user [https://github.com/idempiere/idempiere/pull/3145 (#3145)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6880 IDEMPIERE-6880] PO is NULL Issue When Clicking in Window Zoom [https://github.com/idempiere/idempiere/pull/3146 (#3146)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6865 IDEMPIERE-6865] Hashed password saved as plain text when SecureEngine.getSecureRandom fails [https://github.com/idempiere/idempiere/pull/3119 (#3119)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3110 (#3110)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6850 IDEMPIERE-6850] Change log not capture for delete of record with UUID Key or with Composite Key (DAD-205) [https://github.com/idempiere/idempiere/pull/3111 (#3111)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6845 IDEMPIERE-6845] BOM Price Functions Should Distinguish Between Explicit Zero and Missing Price [https://github.com/idempiere/idempiere/pull/3104 (#3104)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6843 IDEMPIERE-6843] Security Dashboard [https://github.com/idempiere/idempiere/pull/3099 (#3099)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6844 IDEMPIERE-6844] Prevent CSV Injection in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3102 (#3102)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6009 IDEMPIERE-6009] AllocationReset Not Working Correctly / fix trx leak [https://github.com/idempiere/idempiere/pull/3097 (#3097)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6833 IDEMPIERE-6833] Jar upgrades for Vulnerability fix [https://github.com/idempiere/idempiere/pull/3093 (#3093)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6837 IDEMPIERE-6837] Payment Selection window fails to update amounts and has incorrect field behavior [https://github.com/idempiere/idempiere/pull/3090 (#3090)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6435 IDEMPIERE-6435] Add &amp;quot;Hide on Zero&amp;quot; to Document Status (Activities) [https://github.com/idempiere/idempiere/pull/2688 (#2688)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3095 (#3095)] [https://github.com/idempiere/idempiere/pull/3098 (#3098)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6838 IDEMPIERE-6838] Allow a BP to pay invoices from a different BP [https://github.com/idempiere/idempiere/pull/3091 (#3091)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5985 IDEMPIERE-5985] Reactivation of Payments: Credit Manager - fix conflicts [https://github.com/idempiere/idempiere/pull/2832 (#2832)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - minor - avoid warning [https://github.com/idempiere/idempiere/pull/3088 (#3088)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6809 IDEMPIERE-6809] Session Fixation Vulnerability in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3082 (#3082)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6829 IDEMPIERE-6829] Accounting Fact Reconciliation must not allow to reset half reconciliation records [https://github.com/idempiere/idempiere/pull/3079 (#3079)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6831 IDEMPIERE-6831] In some cases, date registered is wrong [https://github.com/idempiere/idempiere/pull/3086 (#3086)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6834 IDEMPIERE-6834] Copy Tenant must validate image storage provider too [https://github.com/idempiere/idempiere/pull/3087 (#3087)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6840 IDEMPIERE-6840] Date format : allow d (for day) [https://github.com/idempiere/idempiere/pull/3092 (#3092)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3083 (#3083)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6809 IDEMPIERE-6809] Session Fixation Vulnerability in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3080 (#3080)] [https://github.com/idempiere/idempiere/pull/3081 (#3081)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6122 IDEMPIERE-6122] Query class to accept a list of columns to select [https://github.com/idempiere/idempiere/pull/3073 (#3073)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6545 IDEMPIERE-6545] Translation tabs must not allow delete - enable insert in Tenant Level Message [https://github.com/idempiere/idempiere/pull/3077 (#3077)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3071 (#3071)] [https://github.com/idempiere/idempiere/pull/3072 (#3072)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6822 IDEMPIERE-6822] Replace iDempiere Server Monitor Basic Authentication with Session Login Form [https://github.com/idempiere/idempiere/pull/3070 (#3070)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5067 IDEMPIERE-5067] Over Shipment getting reverse in generate shipment [https://github.com/idempiere/idempiere/pull/3029 (#3029)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6737 IDEMPIERE-6737] Attribute Set with &amp;quot;Use Guarantee Date for Material Policy&amp;quot; = &amp;quot;Y&amp;quot; recording wrong material policy date in window Physical Inventory, Inventory Move, and Inventory Decrease/Increase [https://github.com/idempiere/idempiere/pull/3053 (#3053)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6800 IDEMPIERE-6800] Wrong costing qty after purchase invoice for partial MR with identical Account Date in MR, shipment and invoice [https://github.com/idempiere/idempiere/pull/3051 (#3051)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6817 IDEMPIERE-6817] Sales Order printing Reversed Invoices [https://github.com/idempiere/idempiere/pull/3069 (#3069)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6818 IDEMPIERE-6818] Billboard chart showing D instead of day [https://github.com/idempiere/idempiere/pull/3061 (#3061)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6822 IDEMPIERE-6822] Replace iDempiere Server Monitor Basic Authentication with Session Login Form [https://github.com/idempiere/idempiere/pull/3067 (#3067)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3064 (#3064)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3014 (#3014)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-15 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/3059 (#3059)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6814 IDEMPIERE-6814] Notice count wrong for GardenUser [https://github.com/idempiere/idempiere/pull/3056 (#3056)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6377 IDEMPIERE-6377] Adding a quote to sales opportunity is impossible [https://github.com/idempiere/idempiere/pull/3016 (#3016)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6528 IDEMPIERE-6528] Archive Viewer loads every Archived Document after deleting one&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6572 IDEMPIERE-6572] Deactivating windows in WTF still allows windows to be accessed if window has been added to favourites [https://github.com/idempiere/idempiere/pull/3019 (#3019)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6600 IDEMPIERE-6600] Posting Error For No Cost Product On Physical Inventory [https://github.com/idempiere/idempiere/pull/2836 (#2836)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base and org.compiere.util [https://github.com/idempiere/idempiere/pull/3018 (#3018)] [https://github.com/idempiere/idempiere/pull/2989 (#2989)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6702 IDEMPIERE-6702] Error: Insufficient Stock Coverage for drop shipment to customer of product with existing transactions [https://github.com/idempiere/idempiere/pull/2975 (#2975)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6729 IDEMPIERE-6729] Favorites Tree breaking UI [https://github.com/idempiere/idempiere/pull/2981 (#2981)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Improvement for Env.parseContext [https://github.com/idempiere/idempiere/pull/2998 (#2998)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6742 IDEMPIERE-6742] Add Cache Reset after bulk Packin Processing [https://github.com/idempiere/idempiere/pull/2994 (#2994)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6744 IDEMPIERE-6744] fix NPE in DocumentSearchController [https://github.com/idempiere/idempiere/pull/2995 (#2995)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6751 IDEMPIERE-6751] Back-dated costing: physical inventory posting error in original document after reversal and new back-dated document [https://github.com/idempiere/idempiere/pull/3003 (#3003)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6753 IDEMPIERE-6753] Error installing plugins that create a _Trl_Key with a 2pack [https://github.com/idempiere/idempiere/pull/3017 (#3017)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6805 IDEMPIERE-6805] MUserRole should disallow assignment of role template to user [https://github.com/idempiere/idempiere/pull/3047 (#3047)]&lt;br /&gt;
&lt;br /&gt;
== 2025-12-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6802 IDEMPIERE-6802] MRoleIncluded should set SeqNo in beforeSave [https://github.com/idempiere/idempiere/pull/3044 (#3044)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2988 (#2988)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6734 IDEMPIERE-6734] Allow #User_Org to be available for all kind of session [https://github.com/idempiere/idempiere/pull/2984 (#2984)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/2990 (#2990)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6656 IDEMPIERE-6656] Unclear message when reactivating a document with reconciled posting [https://github.com/idempiere/idempiere/pull/2958 (#2958)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6694 IDEMPIERE-6694] 2 issues related to back-dated costing. Refer to details below [https://github.com/idempiere/idempiere/pull/2943 (#2943)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] Upgrade DB libraries (FHCA-7459) - fix packin broken [https://github.com/idempiere/idempiere/pull/2970 (#2970)] [https://github.com/idempiere/idempiere/pull/2960 (#2960)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6717 IDEMPIERE-6717] Support French when searching for constraint names [https://github.com/idempiere/idempiere/pull/2957 (#2957)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6718 IDEMPIERE-6718] GridTabTest leaves residual records in C_Order and C_OrderLine tables due to missing transaction context [https://github.com/idempiere/idempiere/pull/2959 (#2959)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6720 IDEMPIERE-6720] Copy Tenant fails when there is a report archived [https://github.com/idempiere/idempiere/pull/2962 (#2962)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6721 IDEMPIERE-6721] Incorrect M_AttributeInstance.Value when setting integer for number attribute type [https://github.com/idempiere/idempiere/pull/2963 (#2963)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6722 IDEMPIERE-6722] Infinite loop with a SEVERE error in MIssue.create [https://github.com/idempiere/idempiere/pull/2969 (#2969)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6295 IDEMPIERE-6295] Fix logout issue when SSO provider is selected from multiple SSO providers [https://github.com/idempiere/idempiere/pull/2950 (#2950)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage for PO and create unit test class for cross tenant safety feature [https://github.com/idempiere/idempiere/pull/2948 (#2948)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6706 IDEMPIERE-6706] Error installing 2Pack using ALL-CLIENTS approach [https://github.com/idempiere/idempiere/pull/2947 (#2947)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/2956 (#2956)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6714 IDEMPIERE-6714] Calculation Fields Disabled in Print Format but Enabled in Report Wizard for non-Field Items [https://github.com/idempiere/idempiere/pull/2955 (#2955)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/2925 (#2925)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2944 (#2944)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6705 IDEMPIERE-6705] PackIn failing silently when the zip has wrong folder hierarchy [https://github.com/idempiere/idempiere/pull/2942 (#2942)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6695 IDEMPIERE-6695] AP Credit Memo for Landed Cost: Wrong side of inventory account against Suspense balancing [https://github.com/idempiere/idempiere/pull/2932 (#2932)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6697 IDEMPIERE-6697] Rename Master Role as Role Template and split to Role Template window [https://github.com/idempiere/idempiere/pull/2934 (#2934)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6699 IDEMPIERE-6699] Portable SQL insert script not working for Location, Account, etc [https://github.com/idempiere/idempiere/pull/2936 (#2936)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2937 (#2937)] [https://github.com/idempiere/idempiere/pull/2939 (#2939)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6701 IDEMPIERE-6701] RUN_SyncDB.sh with parameter failing on server [https://github.com/idempiere/idempiere/pull/2938 (#2938)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6506 IDEMPIERE-6506] Translation cache not reset after update by user [https://github.com/idempiere/idempiere/pull/2931 (#2931)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6698 IDEMPIERE-6698] Enhance Print Invoices Process to Support Multi-Select Document Type Parameter [https://github.com/idempiere/idempiere/pull/2935 (#2935)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2929 (#2929)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6680 IDEMPIERE-6680] Back-dated costing bug related to re-posting of matched PO [https://github.com/idempiere/idempiere/pull/2915 (#2915)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6690 IDEMPIERE-6690] Error when clicking UU-based reference field with null value - org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = integer [https://github.com/idempiere/idempiere/pull/2926 (#2926)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6691 IDEMPIERE-6691] org.idempiere.bouncy.castle-feature: Name in .project is not org.idempiere.bouncy.castle-feature [https://github.com/idempiere/idempiere/pull/2927 (#2927)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6692 IDEMPIERE-6692] Archive Viewer is adding .pdf to any file - and showing always as PDF [https://github.com/idempiere/idempiere/pull/2928 (#2928)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6685 IDEMPIERE-6685] MColumn.getReferenceTableName not working for ChosenMultipleSelectionTable and ChosenMultipleSelectionSearch [https://github.com/idempiere/idempiere/pull/2924 (#2924)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6122 IDEMPIERE-6122] Query class to accept a list of columns to select - fix support order by virtual column not in select [https://github.com/idempiere/idempiere/pull/2918 (#2918)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6659 IDEMPIERE-6659] Estimated Landed Cost Scenarios for Purchase Orders and Incorrect Product Costs [https://github.com/idempiere/idempiere/pull/2905 (#2905)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6666 IDEMPIERE-6666] fix getShipmentReceiptDocType in MDocType [https://github.com/idempiere/idempiere/pull/2921 (#2921)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6683 IDEMPIERE-6683] Concurrent client requests can cause &amp;quot;key already exists&amp;quot; errors for user preference [https://github.com/idempiere/idempiere/pull/2919 (#2919)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6684 IDEMPIERE-6684] Unable to save a record via Rest API when a column is set to Record UUID display type [https://github.com/idempiere/idempiere/pull/2922 (#2922)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6685 IDEMPIERE-6685] MColumn.getReferenceTableName not working for ChosenMultipleSelectionTable and ChosenMultipleSelectionSearch [https://github.com/idempiere/idempiere/pull/2923 (#2923)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2916 (#2916)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6670 IDEMPIERE-6670] Refactoring: make CLogMgt.reInit public [https://github.com/idempiere/idempiere/pull/2903 (#2903)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6671 IDEMPIERE-6671] Replace MD5 digest with SHA-256 digest (DAD-61) - fix Secure.convertHexString [https://github.com/idempiere/idempiere/pull/2917 (#2917)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/2909 (#2909)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6682 IDEMPIERE-6682] Plugin : editor which extends WButtonEditor doesn't work when tab in grid mode [https://github.com/idempiere/idempiere/pull/2914 (#2914)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6646 IDEMPIERE-6646] Customize toolbar button enable/disable based on current tab data status [https://github.com/idempiere/idempiere/pull/2891 (#2891)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6668 IDEMPIERE-6668] Field holding invalid data [https://github.com/idempiere/idempiere/pull/2902 (#2902)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6671 IDEMPIERE-6671] Replace MD5 digest with SHA-256 digest (DAD-61) [https://github.com/idempiere/idempiere/pull/2904 (#2904)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6672 IDEMPIERE-6672] The same event triggered in less than 200ms prevents callouts from being executed [https://github.com/idempiere/idempiere/pull/2906 (#2906)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6676 IDEMPIERE-6676] Review the PO.getKeyColumns for UUID tables [https://github.com/idempiere/idempiere/pull/2913 (#2913)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6663 IDEMPIERE-6663] More reliable discovery of key store service [https://github.com/idempiere/idempiere/pull/2899 (#2899)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6667 IDEMPIERE-6667] Secure could be using wrong provider with idempiere-ks.properties and IKeyStore service [https://github.com/idempiere/idempiere/pull/2901 (#2901)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6124 IDEMPIERE-6124] Add Quantity field to Invoice &amp;gt; Invoice Line &amp;gt; Landed Cost for allocations to Product [https://github.com/idempiere/idempiere/pull/2892 (#2892)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6662 IDEMPIERE-6662] Proper length for LoginPanel Name/EMail field [https://github.com/idempiere/idempiere/pull/2897 (#2897)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6664 IDEMPIERE-6664] Secure engine extensibility improvements [https://github.com/idempiere/idempiere/pull/2898 (#2898)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6662 IDEMPIERE-6662] Email field length mismatch between LoginPanel and database [https://github.com/idempiere/idempiere/pull/2895 (#2895)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6663 IDEMPIERE-6663] More reliable discovery of key store service (DAD-61) [https://github.com/idempiere/idempiere/pull/2896 (#2896)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6645 IDEMPIERE-6645] Error message being cleared due to concurrency issue [https://github.com/idempiere/idempiere/pull/2878 (#2878)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2881 (#2881)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6304 IDEMPIERE-6304] Multiple SSO provider support [https://github.com/idempiere/idempiere/pull/2811 (#2811)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Extend Unit Tests for MRole [https://github.com/idempiere/idempiere/pull/2879 (#2879)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6648 IDEMPIERE-6648] Ensure all scripts can run with an alternate db admin user (DAD-62) [https://github.com/idempiere/idempiere/pull/2886 (#2886)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6654 IDEMPIERE-6654] Passwords must not be shown in logs (DAD-63) [https://github.com/idempiere/idempiere/pull/2885 (#2885)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6657 IDEMPIERE-6657] Setup error when the DB password is 57 chars or longer [https://github.com/idempiere/idempiere/pull/2888 (#2888)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2874 (#2874)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6614 IDEMPIERE-6614] Performance improvement for back-dated costing process [https://github.com/idempiere/idempiere/pull/2860 (#2860)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6648 IDEMPIERE-6648] Ensure all scripts can run with an alternate db admin user (DAD-62) [https://github.com/idempiere/idempiere/pull/2882 (#2882)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5651 IDEMPIERE-5651] Validate VFormat regex on WStringEditor [https://github.com/idempiere/idempiere/pull/2641 (#2641)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing - fix references [https://github.com/idempiere/idempiere/pull/2869 (#2869)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6617 IDEMPIERE-6617] Add InputStream interface to image storage provider [https://github.com/idempiere/idempiere/pull/2852 (#2852)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6637 IDEMPIERE-6637] Wrong Default Logic for Migration Storage Provider parameter AD_AllClients_V_ID in Oracle [https://github.com/idempiere/idempiere/pull/2864 (#2864)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6639 IDEMPIERE-6639] OFXFileBankStatementLoader - ErrorReadingData - Stream closed [https://github.com/idempiere/idempiere/pull/2866 (#2866)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6641 IDEMPIERE-6641] Cryptic error on silent-setup-alt.sh when ADEMPIERE_DB_SERVER is not reachable [https://github.com/idempiere/idempiere/pull/2868 (#2868)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6644 IDEMPIERE-6644] Fix some wrong defaults for EntityType [https://github.com/idempiere/idempiere/pull/2876 (#2876)]&lt;br /&gt;
&lt;br /&gt;
== 2025-07-26 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6564 IDEMPIERE-6564] Add InputStream interface to archive storage provider [https://github.com/idempiere/idempiere/pull/2805 (#2805)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6618 IDEMPIERE-6618] added Maven 3.9.10 wrapper [https://github.com/idempiere/idempiere/pull/2853 (#2853)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6635 IDEMPIERE-6635] Makes the DataProvider a priority for search of context variables and restores '[https://idempiere.atlassian.net/browse/IDEMPIERE-6473 IDEMPIERE-6473]' [https://github.com/idempiere/idempiere/pull/2863 (#2863)]&lt;br /&gt;
&lt;br /&gt;
== 2025-07-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2841 (#2841)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6229 IDEMPIERE-6229] 2Pack / Data : fill table field using SQL Statement content - fix java.lang.StringIndexOutOfBoundsException [https://github.com/idempiere/idempiere/pull/2834 (#2834)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6314 IDEMPIERE-6314] Issues with attachment on System records [https://github.com/idempiere/idempiere/pull/2839 (#2839)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6553 IDEMPIERE-6553] Add logs to investigate why the model event handler isn't being triggered [https://github.com/idempiere/idempiere/pull/2801 (#2801)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6570 IDEMPIERE-6570] Improve attachment support for large file [https://github.com/idempiere/idempiere/pull/2809 (#2809)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6591 IDEMPIERE-6591] Can't delete records created through Recurring [https://github.com/idempiere/idempiere/pull/2825 (#2825)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6592 IDEMPIERE-6592] T_Spool wrongly defined as view in dictionary [https://github.com/idempiere/idempiere/pull/2826 (#2826)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6595 IDEMPIERE-6595] Enable Using Virtual Columns as Report Parameters [https://github.com/idempiere/idempiere/pull/2830 (#2830)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6596 IDEMPIERE-6596] Implement $sysconfig. prefix for access to AD_SysConfig value in context variable expression [https://github.com/idempiere/idempiere/pull/2831 (#2831)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6597 IDEMPIERE-6597] PackIn error importing record with variable organization [https://github.com/idempiere/idempiere/pull/2833 (#2833)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6599 IDEMPIERE-6599] Enable mail session debug based on mail.debug [https://github.com/idempiere/idempiere/pull/2835 (#2835)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6602 IDEMPIERE-6602] Excessive logging of Invalid Column [https://github.com/idempiere/idempiere/pull/2837 (#2837)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6607 IDEMPIERE-6607] Support Debian Installer in arm [https://github.com/idempiere/idempiere/pull/2845 (#2845)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6611 IDEMPIERE-6611] Predefined Context Variables are not being cleared for forms [https://github.com/idempiere/idempiere/pull/2847 (#2847)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6615 IDEMPIERE-6615] Custom toolbar buttons shown wrongly in mobile [https://github.com/idempiere/idempiere/pull/2851 (#2851)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6619 IDEMPIERE-6619] Cannot enter multiple lines in fields in Grid View or Quick Form [https://github.com/idempiere/idempiere/pull/2856 (#2856)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6620 IDEMPIERE-6620] CSS style not working in info window [https://github.com/idempiere/idempiere/pull/2854 (#2854)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6626 IDEMPIERE-6626] ZoomConditions: missing parenthesis cause trouble when WhereClause has a OR operator [https://github.com/idempiere/idempiere/pull/2857 (#2857)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6629 IDEMPIERE-6629] Fixes username text wrapping in mobile layout [https://github.com/idempiere/idempiere/pull/2858 (#2858)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6631 IDEMPIERE-6631] Allow extra parameters in AD_AuthorizationProvider.AuthorizationEndpoint [https://github.com/idempiere/idempiere/pull/2862 (#2862)]&lt;br /&gt;
&lt;br /&gt;
== 2025-06-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6067 IDEMPIERE-6067] Reactivation of Invoices - fix OrderLine QtyInvoiced [https://github.com/idempiere/idempiere/pull/2812 (#2812)] [https://github.com/idempiere/idempiere/pull/2815 (#2815)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2819 (#2819)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6565 IDEMPIERE-6565] Forgot My Password from Login page doesn't send the temporary password [https://github.com/idempiere/idempiere/pull/2806 (#2806)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6580 IDEMPIERE-6580] Multiple tab records and cannot be closed [https://github.com/idempiere/idempiere/pull/2816 (#2816)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6581 IDEMPIERE-6581] Clean Orphan Cascade broken [https://github.com/idempiere/idempiere/pull/2814 (#2814)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6583 IDEMPIERE-6583] Env.parseVariable doesn't parse CreatedBy/UpdatedBy [https://github.com/idempiere/idempiere/pull/2817 (#2817)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6587 IDEMPIERE-6587] Product Info showing stock when no warehouse is selected [https://github.com/idempiere/idempiere/pull/2822 (#2822)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6588 IDEMPIERE-6588] Payment Discount excluding freight charges [https://github.com/idempiere/idempiere/pull/2823 (#2823)]&lt;br /&gt;
&lt;br /&gt;
== 2025-06-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method + [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] + [https://idempiere.atlassian.net/browse/IDEMPIERE-6547 IDEMPIERE-6547] [https://github.com/idempiere/idempiere/pull/2784 (#2784)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6550 IDEMPIERE-6550] Console setup enhancements [https://github.com/idempiere/idempiere/pull/2800 (#2800)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6563 IDEMPIERE-6563] Attach stacktrace and Unresolved to the 2pack as error_yyyymmddhhmmss.log (FHCA) [https://github.com/idempiere/idempiere/pull/2803 (#2803)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6546 IDEMPIERE-6546] Allow exporting tree definition with 2Pack [https://github.com/idempiere/idempiere/pull/2799 (#2799)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6545 IDEMPIERE-6545] Translation tabs must not allow delete [https://github.com/idempiere/idempiere/pull/2797 (#2797)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6546 IDEMPIERE-6546] Allow exporting tree definition with 2Pack [https://github.com/idempiere/idempiere/pull/2796 (#2796)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6549 IDEMPIERE-6549] - Add option to Disable Insufficient Inventory Popup [https://github.com/idempiere/idempiere/pull/2798 (#2798)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-15 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method [https://github.com/idempiere/idempiere/pull/2718 (#2718)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150] Support development with IntelliJ [https://github.com/idempiere/idempiere/pull/2774 (#2774)] [https://github.com/idempiere/idempiere/pull/2788 (#2788)] [https://github.com/idempiere/idempiere/pull/2789 (#2789)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5174 IDEMPIERE-5174] Disable System User [https://github.com/idempiere/idempiere/pull/2792 (#2792)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5795 IDEMPIERE-5795] DeveloperMode context variable - minor, move to SystemProperties [https://github.com/idempiere/idempiere/pull/2771 (#2771)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6067 IDEMPIERE-6067] Reactivation of Invoices [https://github.com/idempiere/idempiere/pull/2669 (#2669)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6413 IDEMPIERE-6413] Visually differentiate environments [https://github.com/idempiere/idempiere/pull/2668 (#2668)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6433 IDEMPIERE-6433] Fill Getting Started box [https://github.com/idempiere/idempiere/pull/2773 (#2773)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6521 IDEMPIERE-6521] Create RUN_ImportIdempiereDev.sh and RUN_DBRestoreDev.sh [https://github.com/idempiere/idempiere/pull/2765 (#2765)] [https://github.com/idempiere/idempiere/pull/2791 (#2791)] [https://github.com/idempiere/idempiere/pull/2793 (#2793)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6526 IDEMPIERE-6526] Performance improvement exporting to XLSX [https://github.com/idempiere/idempiere/pull/2768 (#2768)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6527 IDEMPIERE-6527] Read value of ZK_BROWSER_ICON and ZK_BROWSER_TITLE from the server [https://github.com/idempiere/idempiere/pull/2770 (#2770)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6529 IDEMPIERE-6529] Wrong cache for Window Names [https://github.com/idempiere/idempiere/pull/2778 (#2778)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6530 IDEMPIERE-6530] Mail Template parsing : Issues when no value and when searching for email address [https://github.com/idempiere/idempiere/pull/2776 (#2776)] [https://github.com/idempiere/idempiere/pull/2780 (#2780)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6531 IDEMPIERE-6531] _TabInfo_AD_Table_ID / _TabInfo_AD_Table_UU are missing from context [https://github.com/idempiere/idempiere/pull/2777 (#2777)] [https://github.com/idempiere/idempiere/pull/2779 (#2779)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6532 IDEMPIERE-6532] Regression: For Tab 0, Env.parseContext is always getting value from window context instead of from tab 0 context [https://github.com/idempiere/idempiere/pull/2781 (#2781)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6536 IDEMPIERE-6536] Find window sometime uses wrong GridTab to find search field [https://github.com/idempiere/idempiere/pull/2783 (#2783)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6537 IDEMPIERE-6537] MFA cookie is a session cookie [https://github.com/idempiere/idempiere/pull/2786 (#2786)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6538 IDEMPIERE-6538] Info Window error sorting by ASI [https://github.com/idempiere/idempiere/pull/2785 (#2785)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6539 IDEMPIERE-6539] Role Access Update - Created by / Updated by [https://github.com/idempiere/idempiere/pull/2787 (#2787)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6540 IDEMPIERE-6540] Import/Export script doesn't support Oracle running as Docker Container [https://github.com/idempiere/idempiere/pull/2790 (#2790)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6543 IDEMPIERE-6543] Error with Post-It on AD_User_Roles (FHCA) [https://github.com/idempiere/idempiere/pull/2795 (#2795)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6544 IDEMPIERE-6544] Chat window hides thread on Reply [https://github.com/idempiere/idempiere/pull/2794 (#2794)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6425 IDEMPIERE-6425] service cache make wrong order of service ranking (IInfoFactory case) [https://github.com/idempiere/idempiere/pull/2689 (#2689)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6476 IDEMPIERE-6476] Payment schedule is not getting updated with header record organization [https://github.com/idempiere/idempiere/pull/2734 (#2734)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6493 IDEMPIERE-6493] Error when executing Add or Copy Accounts [https://github.com/idempiere/idempiere/pull/2746 (#2746)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6496 IDEMPIERE-6496] Dynamic Validation not functioning in Attribute Set Instance (ASI) window: attribute dependency not respected [https://github.com/idempiere/idempiere/pull/2757 (#2757)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6498 IDEMPIERE-6498] Error when trying to register a time slot to a resource with an UoM without symbol [https://github.com/idempiere/idempiere/pull/2749 (#2749)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6502 IDEMPIERE-6502] Mobile UI enhancements [https://github.com/idempiere/idempiere/pull/2754 (#2754)] [https://github.com/idempiere/idempiere/pull/2769 (#2769)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6506 IDEMPIERE-6506] Translation cache not reset after update by user [https://github.com/idempiere/idempiere/pull/2756 (#2756)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6507 IDEMPIERE-6507] Issue using mail template / searching data on linked table [https://github.com/idempiere/idempiere/pull/2758 (#2758)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6508 IDEMPIERE-6508] Inconsistencies on images for detail panel in Single Mode [https://github.com/idempiere/idempiere/pull/2759 (#2759)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6509 IDEMPIERE-6509] Inconsistency on arrow to navigate on Detail Pane [https://github.com/idempiere/idempiere/pull/2762 (#2762)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6510 IDEMPIERE-6510] NPE on login : Cannot invoke &amp;quot;org.compiere.model.MCountry.getC_Country_ID()&amp;quot; because the return value of &amp;quot;org.compiere.model.MCountry.getDefault()&amp;quot; is null [https://github.com/idempiere/idempiere/pull/2760 (#2760)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6513 IDEMPIERE-6513] Error installing Cascade Delete plugin in release-12 [https://github.com/idempiere/idempiere/pull/2761 (#2761)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6520 IDEMPIERE-6520] Allow to use barcode in print format items for script types [https://github.com/idempiere/idempiere/pull/2764 (#2764)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6522 IDEMPIERE-6522] Re-packin a column can cause an error related to AD_Column_Trl [https://github.com/idempiere/idempiere/pull/2766 (#2766)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6523 IDEMPIERE-6523] Migration script comment is not appearing in Preference [https://github.com/idempiere/idempiere/pull/2767 (#2767)]&lt;br /&gt;
&lt;br /&gt;
== 2025-04-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150] Support development with IntelliJ [https://github.com/idempiere/idempiere/pull/2721 (#2721)] [https://github.com/idempiere/idempiere/pull/2750 (#2750)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6241 IDEMPIERE-6241] Print item on next line not working in HTML incl Datatable. Adjusted both specification of HTML and DataTable reports to specification of PDF report. [https://github.com/idempiere/idempiere/pull/2743 (#2743)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6387 IDEMPIERE-6387] Asset Expense for the same period becomes two after asset addition [https://github.com/idempiere/idempiere/pull/2731 (#2731)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2755 (#2755)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6423 IDEMPIERE-6423] A field in the process dialog evaluates 'Default Logic' differently from 'ReadOnly/Display Logic, Mandatory Logic, GridField.backupValue' [https://github.com/idempiere/idempiere/pull/2737 (#2737)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6471 IDEMPIERE-6471] Prevent data corruption if a plugin is missing [https://github.com/idempiere/idempiere/pull/2736 (#2736)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6472 IDEMPIERE-6472] Payment - Amounts not recalculated if no BP/Inv leaving corrupt data [https://github.com/idempiere/idempiere/pull/2744 (#2744)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6478 IDEMPIERE-6478] InvoiceGenerate Consolidating Sales Order from Different Organizations [https://github.com/idempiere/idempiere/pull/2735 (#2735)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6483 IDEMPIERE-6483] repeat Callout annotation isn't working [https://github.com/idempiere/idempiere/pull/2738 (#2738)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6487 IDEMPIERE-6487] Make InfoPanel.ROW_ID_CTX_VARIABLE_NAME public [https://github.com/idempiere/idempiere/pull/2740 (#2740)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6488 IDEMPIERE-6488] Standardize what is triggered when a form is closed after being from an InfoWindow [https://github.com/idempiere/idempiere/pull/2741 (#2741)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6492 IDEMPIERE-6492] Various little fixes on User Panel [https://github.com/idempiere/idempiere/pull/2745 (#2745)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6495 IDEMPIERE-6495] Use SysConfig from css files [https://github.com/idempiere/idempiere/pull/2747 (#2747)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6497 IDEMPIERE-6497] Search for non business days on ScheduleUtil fails on Oracle [https://github.com/idempiere/idempiere/pull/2748 (#2748)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6500 IDEMPIERE-6500] Support Users vs Roles: problem when same user or role in several tenants [https://github.com/idempiere/idempiere/pull/2751 (#2751)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6501 IDEMPIERE-6501] Info Window error when a column has a FROM clause [https://github.com/idempiere/idempiere/pull/2752 (#2752)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6503 IDEMPIERE-6503] The calculator’s initial value carries over from the previous row at the grid view. [https://github.com/idempiere/idempiere/pull/2753 (#2753)]&lt;br /&gt;
&lt;br /&gt;
== 2025-04-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6441 IDEMPIERE-6441] Add default fallback foreign key to Copy Client (FHCA-6009) [https://github.com/idempiere/idempiere/pull/2722 (#2722)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6470 IDEMPIERE-6470] Fixed NPE when users search for a non-existing menu entry and hit enter [https://github.com/idempiere/idempiere/pull/2733 (#2733)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6472 IDEMPIERE-6472] Payment - Amounts not recalculated if no BP/Inv leaving corrupt data [https://github.com/idempiere/idempiere/pull/2728 (#2728)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6473 IDEMPIERE-6473] display logic on parameter that depend on field on window always return false (hot fix only) [https://github.com/idempiere/idempiere/pull/2730 (#2730)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5657 IDEMPIERE-5657] Postgresql 15 errors on import GL Journal [https://github.com/idempiere/idempiere/pull/2716 (#2716)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6408 IDEMPIERE-6408] Problem when sorting columns in an Info Window with Distinct [https://github.com/idempiere/idempiere/pull/2664 (#2664)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6457 IDEMPIERE-6457] Asterisk always colored in red for mandatory fields [https://github.com/idempiere/idempiere/pull/2719 (#2719)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6459 IDEMPIERE-6459] Improve test coverage of org.adempiere.base.ds and ImportEventDelegate [https://github.com/idempiere/idempiere/pull/2713 (#2713)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6461 IDEMPIERE-6461] Improve test coverage of org.compiere.util.Util [https://github.com/idempiere/idempiere/pull/2714 (#2714)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6462 IDEMPIERE-6462] Zoom to loaded data after Import File Loader [https://github.com/idempiere/idempiere/pull/2717 (#2717)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6464 IDEMPIERE-6464] Hide Jetty version from test.idempiere.org/adempiere [https://github.com/idempiere/idempiere/pull/2727 (#2727)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6466 IDEMPIERE-6466] IProcessParameterListener - add onInit method [https://github.com/idempiere/idempiere/pull/2723 (#2723)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6467 IDEMPIERE-6467] NPE on CalloutA_Depreciation_Workfile when set empty for number field [https://github.com/idempiere/idempiere/pull/2724 (#2724)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6468 IDEMPIERE-6468] Unit Test: add mockito support [https://github.com/idempiere/idempiere/pull/2725 (#2725)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-19 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6422 IDEMPIERE-6422] Remove calls for external dependencies [https://github.com/idempiere/idempiere/pull/2715 (#2715)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6419 IDEMPIERE-6419] Replacing environment values with dummy values in the Validate Info window does not work for timestamps [https://github.com/idempiere/idempiere/pull/2712 (#2712)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6422 IDEMPIERE-6422] Remove calls for external dependencies [https://github.com/idempiere/idempiere/pull/2709 (#2709)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6456 IDEMPIERE-6456] GridWindowVO.AD_Table_ID is not initialized when window is loaded from cache [https://github.com/idempiere/idempiere/pull/2710 (#2710)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4827 IDEMPIERE-4827] Unify Evaluatee Implementation - fix import CSV process [https://github.com/idempiere/idempiere/pull/2703 (#2703)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6421 IDEMPIERE-6421] Make the &amp;quot;Server started&amp;quot; email configurable to enable/disable [https://github.com/idempiere/idempiere/pull/2705 (#2705)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6437 IDEMPIERE-6437] remove dup line in sonarqube.yml&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6445 IDEMPIERE-6445] SimplePDFViewer don't respect agrument title (file name) [https://github.com/idempiere/idempiere/pull/2699 (#2699)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6448 IDEMPIERE-6448] Fix some issues from SonarQube analysis [https://github.com/idempiere/idempiere/pull/2702 (#2702)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6449 IDEMPIERE-6449] Target platform state is missing org.jvnet.mimepul.mimepull:1.9.14 with Eclipse 2024-12 [https://github.com/idempiere/idempiere/pull/2704 (#2704)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6450 IDEMPIERE-6450] Servlets should not have mutable instance fields java:S2226 [https://github.com/idempiere/idempiere/pull/2706 (#2706)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6451 IDEMPIERE-6451] missing linkedin icon on idempiere 12 homepage [https://github.com/idempiere/idempiere/pull/2707 (#2707)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6452 IDEMPIERE-6452] Import of Bank Statements is in random order [https://github.com/idempiere/idempiere/pull/2708 (#2708)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method - fix java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. [https://github.com/idempiere/idempiere/pull/2697 (#2697)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4925 IDEMPIERE-4925] Fixed bug cause by original commit that made QtyCount and InternalQty read only on inventory windows [https://github.com/idempiere/idempiere/pull/2700 (#2700)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6385 IDEMPIERE-6385] [QuickForm] - Problem with quickform sorting [https://github.com/idempiere/idempiere/pull/2698 (#2698)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6443 IDEMPIERE-6443] address(C_Location) is not print when city is empty(null) [https://github.com/idempiere/idempiere/pull/2696 (#2696)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6446 IDEMPIERE-6446] Problem detected after update.sh and update-prd.sh is ran several times [https://github.com/idempiere/idempiere/pull/2701 (#2701)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-28 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5570 IDEMPIERE-5570] Zk: Improve readability of code [https://github.com/idempiere/idempiere/pull/2693 (#2693)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6347 IDEMPIERE-6347] Update default font-family setting - decrease 1px [https://github.com/idempiere/idempiere/pull/2673 (#2673)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6437 IDEMPIERE-6437] Change sonarqube analysis to manual workflow [https://github.com/idempiere/idempiere/pull/2691 (#2691)] [https://github.com/idempiere/idempiere/pull/2692 (#2692)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6440 IDEMPIERE-6440] Sequence Check is creating ID sequence for non-existing column [https://github.com/idempiere/idempiere/pull/2695 (#2695)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6442 IDEMPIERE-6442] can't edit org_info of org &amp;quot;*&amp;quot; [https://github.com/idempiere/idempiere/pull/2694 (#2694)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6329 IDEMPIERE-6329] Bug in BOM* SQL functions not getting the correct BOM children [https://github.com/idempiere/idempiere/pull/2683 (#2683)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6428 IDEMPIERE-6428] v12 - Issue with custom toolbar buttons (Action) which are not shown [https://github.com/idempiere/idempiere/pull/2682 (#2682)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6429 IDEMPIERE-6429] Missing images in iceblue_c theme [https://github.com/idempiere/idempiere/pull/2681 (#2681)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6431 IDEMPIERE-6431] missing field suggestion icon image on popup menu [https://github.com/idempiere/idempiere/pull/2684 (#2684)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6432 IDEMPIERE-6432] Fix links in Home server page [https://github.com/idempiere/idempiere/pull/2685 (#2685)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6436 IDEMPIERE-6436] Error inserting permission record for System Administrator role (FHCA-6351) [https://github.com/idempiere/idempiere/pull/2690 (#2690)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] Could not invoke Toolbar listener method: onSave - NPE on GridTab.fireDataStatusChanged [https://github.com/idempiere/idempiere/pull/2672 (#2672)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2981 IDEMPIERE-2981] Add missing header in new WJsonEditor class [https://github.com/idempiere/idempiere/pull/2678 (#2678)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6387 IDEMPIERE-6387] Asset Expense for the same period becomes two after asset addition [https://github.com/idempiere/idempiere/pull/2677 (#2677)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2674 (#2674)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6407 IDEMPIERE-6407] Payment Selection (Manual) - NPE when there is no conversion rate [https://github.com/idempiere/idempiere/pull/2663 (#2663)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6409 IDEMPIERE-6409] Charts not rendered on certain conditions [https://github.com/idempiere/idempiere/pull/2665 (#2665)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6420 IDEMPIERE-6420] The Info column description is incorrect because it uses [https://github.com/idempiere/idempiere/pull/2676 (#2676)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6426 IDEMPIERE-6426] Implement CrossTenantExceptions to manage tenant access restrictions errors [https://github.com/idempiere/idempiere/pull/2679 (#2679)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4580 IDEMPIERE-4580] Update credits file with new dev&amp;amp;Co name and logo [https://github.com/idempiere/idempiere/pull/2661 (#2661)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6397 IDEMPIERE-6397] PostgreSQL json datatype doesn't works well with JSON field editor [https://github.com/idempiere/idempiere/pull/2654 (#2654)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6398 IDEMPIERE-6398] Server crash after a user without report permission tries to run a report [https://github.com/idempiere/idempiere/pull/2655 (#2655)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6399 IDEMPIERE-6399] Deadlock at Web service [https://github.com/idempiere/idempiere/pull/2656 (#2656)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2660 (#2660)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6403 IDEMPIERE-6403] Drafted payment cannot be deleted after printing [https://github.com/idempiere/idempiere/pull/2659 (#2659)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6406 IDEMPIERE-6406] Create AD_message for errors in import csv [https://github.com/idempiere/idempiere/pull/2662 (#2662)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6412 IDEMPIERE-6412] Improve MChart.getData response by using camel case [https://github.com/idempiere/idempiere/pull/2667 (#2667)]&lt;br /&gt;
* Revert &amp;quot;[https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] NPE on GridTab.m_DataStatusEvent / change approach from volatile to synchronized [https://github.com/idempiere/idempiere/pull/2623 (#2623)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 2025-01-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4827 IDEMPIERE-4827] Unify Evaluatee Implementation [https://github.com/idempiere/idempiere/pull/2652 (#2652)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4925 IDEMPIERE-4925] Adding column for UOM and QtyEntered on Inventory Move [https://github.com/idempiere/idempiere/pull/2636 (#2636)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5647 IDEMPIERE-5647] Allow definition of context variables by Role [https://github.com/idempiere/idempiere/pull/2649 (#2649)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2653 (#2653)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6389 IDEMPIERE-6389] Move test done in AmtInWords_ES.main to the unit tests package [https://github.com/idempiere/idempiere/pull/2646 (#2646)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6396 IDEMPIERE-6396] Adding Support for context variable in HTML_REPORT_THEME sys config [https://github.com/idempiere/idempiere/pull/2650 (#2650)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2651 (#2651)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3031 IDEMPIERE-3031] Tooltips cannot be set on column headers in some forms [https://github.com/idempiere/idempiere/pull/2638 (#2638)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5136 IDEMPIERE-5136] Set Messages at tenant level - Add Title Logic to the Window [https://github.com/idempiere/idempiere/pull/2647 (#2647)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6365 IDEMPIERE-6365] RefTable with not ID as KeyColumn can't be translated [https://github.com/idempiere/idempiere/pull/2619 (#2619)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6383 IDEMPIERE-6383] Create Message Record for &amp;quot;Total Base Value is 0&amp;quot; [https://github.com/idempiere/idempiere/pull/2639 (#2639)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6384 IDEMPIERE-6384] Implement GenericPO UUID constructors [https://github.com/idempiere/idempiere/pull/2640 (#2640)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2643 (#2643)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6388 IDEMPIERE-6388] Fix some errors in AmtInWords_ES [https://github.com/idempiere/idempiere/pull/2644 (#2644)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6391 IDEMPIERE-6391] SaveError when Create Bank Transfer Via REST [https://github.com/idempiere/idempiere/pull/2645 (#2645)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4302 IDEMPIERE-4302] remove unnecessary code [https://github.com/idempiere/idempiere/pull/2625 (#2625)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Costing details by Account Date [https://github.com/idempiere/idempiere/pull/2435 (#2435)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6314 IDEMPIERE-6314] Issues with attachment on System records [https://github.com/idempiere/idempiere/pull/2626 (#2626)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6339 IDEMPIERE-6339] Focused button is not highlighted with the new theme [https://github.com/idempiere/idempiere/pull/2633 (#2633)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6355 IDEMPIERE-6355] Virtual UI column type date field cause record to display as not saved [https://github.com/idempiere/idempiere/pull/2615 (#2615)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6361 IDEMPIERE-6361] Document being closed when user does not have read and write access [https://github.com/idempiere/idempiere/pull/2621 (#2621)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6364 IDEMPIERE-6364] Make Menu Search Highlight Accent Insensitive [https://github.com/idempiere/idempiere/pull/2618 (#2618)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6369 IDEMPIERE-6369] iDempiere 12 server startup error on Windows [https://github.com/idempiere/idempiere/pull/2635 (#2635)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6370 IDEMPIERE-6370] Improve Menu Tree Filter Popup options by showing the item name next to the image&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6371 IDEMPIERE-6371] testPrintWithLocalFile unit test failed on windows [https://github.com/idempiere/idempiere/pull/2628 (#2628)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6373 IDEMPIERE-6373] Update IDempiere Home Page [https://github.com/idempiere/idempiere/pull/2629 (#2629)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6375 IDEMPIERE-6375] Add missing quantities to RV_Storage_per_product view [https://github.com/idempiere/idempiere/pull/2631 (#2631)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6379 IDEMPIERE-6379] Charts not honoring Display Legend flag [https://github.com/idempiere/idempiere/pull/2634 (#2634)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6380 IDEMPIERE-6380] MRoleOrgAccess and MUserOrgAccess .get are returning inactive records [https://github.com/idempiere/idempiere/pull/2632 (#2632)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-05 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] NPE on GridTab.m_DataStatusEvent / change approach from volatile to synchronized [https://github.com/idempiere/idempiere/pull/2623 (#2623)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6350 IDEMPIERE-6350] ToolbarProcessButton doesn't use process Process Customization for Name and Description [https://github.com/idempiere/idempiere/pull/2603 (#2603)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6351 IDEMPIERE-6351] Process called from Info Window do not use process Process Customization for Name and Description [https://github.com/idempiere/idempiere/pull/2604 (#2604)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6362 IDEMPIERE-6362] Update SyncDB for MacOsx Compatibility [https://github.com/idempiere/idempiere/pull/2616 (#2616)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6367 IDEMPIERE-6367] Problem rendering info window columns vs gridfields [https://github.com/idempiere/idempiere/pull/2622 (#2622)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6368 IDEMPIERE-6368] Improve execution of Task [https://github.com/idempiere/idempiere/pull/2624 (#2624)]&lt;br /&gt;
&lt;br /&gt;
== 2024-12-27 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3989 IDEMPIERE-3989] fast entity type identification - backward compatibility [https://github.com/idempiere/idempiere/pull/2606 (#2606)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6349 IDEMPIERE-6349] Add M49 country codes to the C_Country table (FHCA-6138) [https://github.com/idempiere/idempiere/pull/2609 (#2609)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6352 IDEMPIERE-6352] Missing @Deprecated annotation [https://github.com/idempiere/idempiere/pull/2607 (#2607)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6354 IDEMPIERE-6354] User Locking mechanism broken [https://github.com/idempiere/idempiere/pull/2610 (#2610)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6336 IDEMPIERE-6336] Fix NPE on MRefList.getList [https://github.com/idempiere/idempiere/pull/2613 (#2613)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23833</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23833"/>
		<updated>2026-04-14T15:51:26Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-04-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6970 IDEMPIERE-6970] - Posting Production with Standard Costing ends in unbalanced accounting [https://github.com/idempiere/idempiere/pull/3233 (#3233)]&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23832</id>
		<title>IDempiere World Conference 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23832"/>
		<updated>2026-04-14T15:39:38Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The iDempiere World Conference 2026 in Venice&lt;br /&gt;
&lt;br /&gt;
https://venice.idempiere.org/&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
14-19 September 2026 &lt;br /&gt;
&lt;br /&gt;
14-15 September &lt;br /&gt;
iDempiere World conference - 2 Days&lt;br /&gt;
* Talks &lt;br /&gt;
&lt;br /&gt;
16 September &lt;br /&gt;
Free Day&lt;br /&gt;
&lt;br /&gt;
17 September&lt;br /&gt;
End User Day&lt;br /&gt;
&lt;br /&gt;
18-19 September&lt;br /&gt;
Developer&lt;br /&gt;
&lt;br /&gt;
= Organization =&lt;br /&gt;
[[User:Longo.Marco|Marco Longo]] - &lt;br /&gt;
&lt;br /&gt;
= I plan to attend =&lt;br /&gt;
1. [[User:CarlosRuiz|Carlos Ruiz]], BX Service GmbH, Colombia&amp;lt;br&amp;gt;&lt;br /&gt;
2. [[User:Diego.ruiz|Diego Ruiz]], BX Service GmbH, Colombia&amp;lt;br&amp;gt;&lt;br /&gt;
3. [[User:TBayen|Thomas Bayen]], BX Service GmbH, Germany&amp;lt;br&amp;gt;&lt;br /&gt;
4. [[User:Laydasalasc|Layda Salas]], BX Service GmbH, Colombia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Previous conferences=&lt;br /&gt;
* [[IDempiere workshop 2025]]&lt;br /&gt;
* [[IDempiere_World_Conference_2023]]&lt;br /&gt;
* [[IDempiere_World_Conference_2019]]&lt;br /&gt;
* [[IDempiere_World_Conference_2015]]&lt;br /&gt;
* [[IDempiere_World_Conference_2013]]&lt;br /&gt;
* [[IDempiere_Workshop_2014]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23829</id>
		<title>IDempiere World Conference 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23829"/>
		<updated>2026-04-14T15:10:55Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The iDempiere World Conference 2026 in Venice&lt;br /&gt;
&lt;br /&gt;
https://venice.idempiere.org/&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
14-19 September 2026 &lt;br /&gt;
&lt;br /&gt;
14-15 September &lt;br /&gt;
iDempiere World conference - 2 Days&lt;br /&gt;
* Talks &lt;br /&gt;
&lt;br /&gt;
16 September &lt;br /&gt;
Free Day&lt;br /&gt;
&lt;br /&gt;
17 September&lt;br /&gt;
End User Day&lt;br /&gt;
&lt;br /&gt;
18-19 September&lt;br /&gt;
Developer&lt;br /&gt;
&lt;br /&gt;
= I plan to attend =&lt;br /&gt;
1. [[User:CarlosRuiz|Carlos Ruiz]], BX Service GmbH, Colombia&amp;lt;br&amp;gt;&lt;br /&gt;
2. [[User:Diego.ruiz|Diego Ruiz]], BX Service GmbH, Colombia&amp;lt;br&amp;gt;&lt;br /&gt;
3. [[User:TBayen|Thomas Bayen]], BX Service GmbH, Germany&amp;lt;br&amp;gt;&lt;br /&gt;
4. [[User:Laydasalasc|Layda Salas]], BX Service GmbH, Colombia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Workshop =&lt;br /&gt;
&lt;br /&gt;
After the conference days there was the [[IDempiere workshop 2025]]&lt;br /&gt;
&lt;br /&gt;
=Previous conferences=&lt;br /&gt;
* [[IDempiere_World_Conference_2023]]&lt;br /&gt;
* [[IDempiere_World_Conference_2019]]&lt;br /&gt;
* [[IDempiere_World_Conference_2015]]&lt;br /&gt;
* [[IDempiere_World_Conference_2013]]&lt;br /&gt;
* [[IDempiere_Workshop_2014]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23828</id>
		<title>IDempiere World Conference 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23828"/>
		<updated>2026-04-14T15:09:46Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The iDempiere World Conference 2026 in Venice&lt;br /&gt;
&lt;br /&gt;
https://venice.idempiere.org/&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
14-19 September 2026 &lt;br /&gt;
&lt;br /&gt;
14-15 September &lt;br /&gt;
iDempiere World conference - 2 Days&lt;br /&gt;
* Talks &lt;br /&gt;
&lt;br /&gt;
16 September &lt;br /&gt;
Free Day&lt;br /&gt;
&lt;br /&gt;
17 September&lt;br /&gt;
End User Day&lt;br /&gt;
&lt;br /&gt;
18-19 September&lt;br /&gt;
Developer&lt;br /&gt;
&lt;br /&gt;
= I plan to attend =&lt;br /&gt;
1. [[User:CarlosRuiz|Carlos Ruiz]], BX Service GmbH, Colombia&amp;lt;br&amp;gt;&lt;br /&gt;
2. Diego Ruiz, BX Service GmbH, Colombia&amp;lt;br&amp;gt;&lt;br /&gt;
3. Thomas Bayen, BX Service GmbH, Germany&amp;lt;br&amp;gt;&lt;br /&gt;
4. [[User:Laydasalasc|Layda Salas]], BX Service GmbH, Colombia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Workshop =&lt;br /&gt;
&lt;br /&gt;
After the conference days there was the [[IDempiere workshop 2025]]&lt;br /&gt;
&lt;br /&gt;
=Previous conferences=&lt;br /&gt;
* [[IDempiere_World_Conference_2023]]&lt;br /&gt;
* [[IDempiere_World_Conference_2019]]&lt;br /&gt;
* [[IDempiere_World_Conference_2015]]&lt;br /&gt;
* [[IDempiere_World_Conference_2013]]&lt;br /&gt;
* [[IDempiere_Workshop_2014]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23825</id>
		<title>IDempiere World Conference 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23825"/>
		<updated>2026-04-14T14:50:36Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: I plan to attend&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The iDempiere World Conference 2026 in Venice&lt;br /&gt;
&lt;br /&gt;
https://venice.idempiere.org/&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
14-19 September 2026 &lt;br /&gt;
&lt;br /&gt;
14-15 September &lt;br /&gt;
iDempiere World conference - 2 Days&lt;br /&gt;
* Talks &lt;br /&gt;
&lt;br /&gt;
16 September &lt;br /&gt;
Free Day&lt;br /&gt;
&lt;br /&gt;
17 September&lt;br /&gt;
End User Day&lt;br /&gt;
&lt;br /&gt;
18-19 September&lt;br /&gt;
Developer&lt;br /&gt;
&lt;br /&gt;
= I plan to attend =&lt;br /&gt;
1. [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Workshop =&lt;br /&gt;
&lt;br /&gt;
After the conference days there was the [[IDempiere workshop 2025]]&lt;br /&gt;
&lt;br /&gt;
=Previous conferences=&lt;br /&gt;
* [[IDempiere_World_Conference_2023]]&lt;br /&gt;
* [[IDempiere_World_Conference_2019]]&lt;br /&gt;
* [[IDempiere_World_Conference_2015]]&lt;br /&gt;
* [[IDempiere_World_Conference_2013]]&lt;br /&gt;
* [[IDempiere_Workshop_2014]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23824</id>
		<title>Migration Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Migration_Notes&amp;diff=23824"/>
		<updated>2026-04-13T14:56:09Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* WebSocket as default Server Push in zkwebui */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Features]]&lt;br /&gt;
[[Category:Migration]] &lt;br /&gt;
[[Category:Installation|M]] &lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[Category:Updated2022]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 13 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 13 ==&lt;br /&gt;
&lt;br /&gt;
=== WebSocket as default Server Push in zkwebui ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_13#2026-04-13|Release-13-2026-04-13]] this has been rolled back and the default is again atmosphere, leaving the instructions here in case somebody wants to use Websocket with release-13:&lt;br /&gt;
&lt;br /&gt;
The default server push mechanism was set initially to WebSocket and reverted back to Atmosphere.&lt;br /&gt;
&lt;br /&gt;
Websocket improves performance and reduces overhead in standard environments.&lt;br /&gt;
&lt;br /&gt;
However, WebSocket connectivity may fail in certain infrastructure configurations. Three known scenarios are affected.&lt;br /&gt;
&lt;br /&gt;
* LXC containers: WebSocket connections may not work correctly depending on the host kernel and network configuration of the LXC environment&lt;br /&gt;
* Port redirection via iptables: Redirecting port 8443 to 443 using iptables rules can break WebSocket handshake negotiation&lt;br /&gt;
* Connecting using a ssh tunnel for port 8443 doesn't work&lt;br /&gt;
&lt;br /&gt;
'''To use Websocket:'''&lt;br /&gt;
&lt;br /&gt;
When running iDempiere setup add the following to the &amp;quot;Java Options&amp;quot;: &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=websocket&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To use Atmosphere you can use &amp;lt;code&amp;gt;-Dorg.idempiere.ui.zk.serverpush=atmosphere&amp;lt;/code&amp;gt;, or simply don't set it at all.&lt;br /&gt;
&lt;br /&gt;
=== MAttachment.setTitle driven by list ===&lt;br /&gt;
&lt;br /&gt;
The column AD_Attachment.Title was managed as a free text field, but in reality it contained a list of values.&lt;br /&gt;
&lt;br /&gt;
So, with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6640 IDEMPIERE-6640] the column was changed to a List, and the values are now restricted.  So, if you have used MAttachment.setTitle in a plugin or test for a different purpose, this plugin will threw an error if the value is not one of the allowed in the list.&lt;br /&gt;
&lt;br /&gt;
=== UUID native type in PostgreSQL and UUIDv7 ===&lt;br /&gt;
&lt;br /&gt;
A big change for PostgreSQL was implemented with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650]:&lt;br /&gt;
All the UUID columns in the database were converted from VARCHAR to the native UUID type.&lt;br /&gt;
This is a big recommendation from postgresql that impacts positively performance and database size.&lt;br /&gt;
&lt;br /&gt;
Also the UUIDs generated in iDempiere were moved to the [https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_7_(timestamp_and_random) UUIDv7 standard], this is also a performance recommendation, as well as it allows to order by UUID and have the same order as the creation of the records, which was something possible with the _ID columns too.&lt;br /&gt;
&lt;br /&gt;
There are some implications about this change:&lt;br /&gt;
&lt;br /&gt;
1 - the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function uses the function &amp;lt;code&amp;gt;gen_random_uuid&amp;lt;/code&amp;gt; which is available natively in postgresql since version 13.&lt;br /&gt;
&lt;br /&gt;
Previous versions will throw an error when applying the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For versions 11 and 12 you can still use it enabling the pgcrypto extension:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
CREATE EXTENSION pgcrypto;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 - the script &amp;lt;code&amp;gt;postgresql/202510101902_IDEMPIERE-6650-uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using a UUID column and at the same time having the UNION clause.&lt;br /&gt;
&lt;br /&gt;
If this happens then you must take care of dropping those views (and their dependencies) before applying the script, and then recreating them back at the end.&lt;br /&gt;
&lt;br /&gt;
3 - the script &amp;lt;code&amp;gt;postgresql/202510101903_IDEMPIERE-6650-generate_uuid.sql&amp;lt;/code&amp;gt; can throw an error if you have custom views using the &amp;lt;code&amp;gt;generate_uuid&amp;lt;/code&amp;gt; function&lt;br /&gt;
&lt;br /&gt;
You need to apply the same solution as the previous point, drop those views before and recreate them after.&lt;br /&gt;
&lt;br /&gt;
This script can also fail on versions 11 and 12, and as explained above the solution is to install the pgcrypto extension.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated PO getters on X_ classes ===&lt;br /&gt;
The X_ classes have getter methods for every foreign key, for example &amp;lt;code&amp;gt;X_C_Order.getC_DocType()&amp;lt;/code&amp;gt; - the usage of these getters is very handy and because of that it has been widely used historically.  The problem is that the way these methods are implemented is very expensive in performance, and it cannot use caches at all.  So with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6642 IDEMPIERE-6642] we decided to deprecate.  What you probably see when migrating to release-13 is a lot of deprecate warnings in your custom and plugins code, these warnings are harmless, but is recommended to migrate to better methods that have a better performance and use cache when possible.&lt;br /&gt;
&lt;br /&gt;
=== Removal of old deprecated code ===&lt;br /&gt;
This release removes several classes and methods that were deprecated more than two major versions ago.&amp;lt;br&amp;gt;&lt;br /&gt;
Custom plugins and customizations that still call these classes and methods '''will no longer compile and must be updated'''.&amp;lt;br&amp;gt;&lt;br /&gt;
See the full commit here: [https://idempiere.atlassian.net/browse/IDEMPIERE-6735 IDEMPIERE-6735]  &lt;br /&gt;
&lt;br /&gt;
==== Removed Classes ====&lt;br /&gt;
* org.compiere.process.BOMValidate&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookup&lt;br /&gt;
* com.akunagroup.uk.postcode.AddressLookupInterface&lt;br /&gt;
* com.akunagroup.uk.postcode.Postcode&lt;br /&gt;
* com.akunagroup.uk.postcode.package-info&lt;br /&gt;
* org.adempiere.util.GenerateModel&lt;br /&gt;
* org.adempiere.util.GenerateModelJPA&lt;br /&gt;
* org.compiere.db.SecurityPrincipal&lt;br /&gt;
* org.compiere.model.MBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBOMProduct and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MBlackListCheque and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.model.MProductBOM and its X_ and I_ related classes&lt;br /&gt;
* org.compiere.util.CallableResult&lt;br /&gt;
* org.compiere.util.ExecuteResult&lt;br /&gt;
* org.compiere.util.ExtensionFileFilter&lt;br /&gt;
* org.compiere.util.FileUpload&lt;br /&gt;
* org.compiere.util.Queue&lt;br /&gt;
* org.adempiere.webui.DelegatingServlet&lt;br /&gt;
* org.adempiere.webui.event.TouchEventHelper&lt;br /&gt;
* org.adempiere.webui.panel.ChatPanel&lt;br /&gt;
* org.adempiere.webui.panel.ConfigurationPanel&lt;br /&gt;
* org.adempiere.webui.panel.FooterPanel&lt;br /&gt;
* org.adempiere.webui.panel.RequestNoticePanel&lt;br /&gt;
* org.adempiere.webui.window.FDialog&lt;br /&gt;
&lt;br /&gt;
==== Removed Methods ====&lt;br /&gt;
'''AbstractADWindowContent'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void executeASync(ProcessInfo pi)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ADSortTab'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void editRecord(boolean b)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''AEnv'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void exit (int status)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean isTablet()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CConnection'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public InitialContext getInitialContext(boolean useCache)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''CustomizerGridViewDialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean onCustomize(ADTabpanel tabPanel)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean showCustomize(int WindowNo, int AD_Tab_ID, Map &amp;amp;lt;Integer, String&amp;amp;gt; columnsWidth, ArrayList &amp;amp;lt;Integer&amp;amp;gt; gridFieldIds, GridView gridPanel, QuickGridView quickGridView, boolean isQuickForm)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Dialog'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static boolean ask(int windowNo, String adMessage, String additionalMessage)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''diff_match_patch'''&lt;br /&gt;
* &amp;lt;code&amp;gt;@Deprecated public LinkedList&amp;amp;lt;Patch&amp;amp;gt; patch_make(String text1, String text2, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Env'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties getRemoteCallCtx(Properties ctx)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''GridTable'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isSortedAscending()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getSortColumnIndex()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''I_C_Country'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean isPostcodeLookup()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClassName()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupClientID()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupPassword()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public String getLookupUrl()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setIsPostcodeLookup(boolean IsPostcodeLookup)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClassName(String LookupClassName)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupClientID(String LookupClientID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupPassword(String LookupPassword)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setLookupUrl(String LookupUrl)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''LayoutUtils'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void sendDeferLayoutEvent(org.zkoss.zul.Borderlayout layout, int timeout)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Login'''&lt;br /&gt;
* &amp;lt;code&amp;gt;private KeyNamePair[] getRoles(String app_user, String app_pwd, boolean force)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;protected KeyNamePair[] getRoles(CConnection cc, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(Principal app_user)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public KeyNamePair[] getRoles(String app_user, String app_pwd)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static Properties initTest (boolean isClient)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MAging'''&lt;br /&gt;
* &amp;lt;code&amp;gt;MAging (Properties ctx, int AD_PInstance_ID, Timestamp StatementDate, int C_BPartner_ID, int C_Currency_ID, int C_Invoice_ID, int C_InvoicePaySchedule_ID, int C_BP_Group_ID, Timestamp DueDate, boolean IsSOTrx, String trxName)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartner'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getAD_OrgBP_ID_Int()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MBPartnerLocation'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MBPartnerLocation[] getForBPartner(Properties ctx, int C_BPartner_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCharge'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MAccount getAccount (int C_Charge_ID, MAcctSchema as, BigDecimal amount)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MCountry'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static void setDisplayLanguage (String AD_Language)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MPaySelectionLine'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void xsetInvoice(int C_Invoice_ID, boolean isSOTrx, BigDecimal OpenAmt, ...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MWFEventAudit'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID, int AD_WF_Node_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public static MWFEventAudit[] get (Properties ctx, int AD_WF_Process_ID)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WCreateFromWindow'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setStatusBar(StatusBarPanel statusBar)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WListItemRenderer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setRO(int colIndex, Boolean readOnly)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WLocatorEditor'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setField(org.compiere.model.GridField mField)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WTableColumn'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public boolean getResizable()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMaxWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getMinWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getPreferredWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public int getWidth()&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMaxWidth(int maxWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setMinWidth(int minWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setPreferredWidth(int preferredWidth)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setResizable(boolean isResizable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public void setWidth(int width)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''WindowContainer'''&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab addWindow(Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertAfter(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;public Tab insertBefore(Tab refTab, Component comp, String title, boolean closeable, boolean enable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Required developer actions ====&lt;br /&gt;
* Rebuild your custom plugins and note any compilation errors related to missing classes or methods.&lt;br /&gt;
* For each error, replace the removed deprecated API with its recommended alternative (standard getters/setters, services, or cache‑aware access patterns).&lt;br /&gt;
* Re‑run your test suite (or perform manual regression tests) to validate that business logic continues to work as expected.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Only APIs that had been deprecated for more than two major releases were removed, following the project deprecation policy.''&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 13 ==&lt;br /&gt;
With the [https://idempiere.atlassian.net/browse/IDEMPIERE-6575 IDEMPIERE-6575] ticket, on the AD_Sequence_No.CalendarYearMonth column was renamed to SequenceKey, this means for the  getCalendarYearMonth and  setCalendarYearMonth methods the adequate replacement is getSequenceKey and setSequenceKey.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 12 =&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
&lt;br /&gt;
As reported by Robert Green [https://groups.google.com/g/idempiere/c/iFtEV_6mwf0/m/GejbvQhOAwAJ on forums], there are problems running iDempiere '''as a server''' on windows.&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== JDBC libraries upgraded ===&lt;br /&gt;
&lt;br /&gt;
Three libraries related to JDBC were upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] on [[ChangeLog_Release_12#2025-11-10|release-12.2025-11-10]]&lt;br /&gt;
&lt;br /&gt;
* PostgreSQL from 42.7.3 to 42.7.8&lt;br /&gt;
* Oracle from ojdbc10 19.21.0.0 to ojdbc17 23.26.0.0.0&lt;br /&gt;
* HikariCP from 5.1.0 to 7.0.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PostgreSQL 42.7.8 has a change that could break previous working code:&lt;br /&gt;
* previously the DatabaseMetaData.get* methods worked with any catalog name, that parameter was simply ignored&lt;br /&gt;
* since 42.7.5 the catalog is used as a filter, so it must be passed as the database name, or null&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3394&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/issues/3389&lt;br /&gt;
* https://github.com/pgjdbc/pgjdbc/pull/3390&lt;br /&gt;
&lt;br /&gt;
=== Session Fingerprinting ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-02-08|release-12-20260208]] session fingerprinting was added to the zkwebui.&lt;br /&gt;
&lt;br /&gt;
Please read carefully [[NF12 Session Fingerprinting]] to see the options being checked.&lt;br /&gt;
&lt;br /&gt;
It's possible your users will be logged out when changing the language '''of the browser''' during and iDempiere session, or if the browser is updated.&lt;br /&gt;
&lt;br /&gt;
It's also possible that changes of IP address will be logged in logs and in AD_Issue.  This can happen when connecting to a VPN, changing wifi, or using mobile.  But it can also be the indication of attempts to hijack the session.  It is recommended to keep an eye on these alerts and verify for suspicious activity.&lt;br /&gt;
&lt;br /&gt;
=== New Env.parseContext parameter ===&lt;br /&gt;
&lt;br /&gt;
In [[ChangeLog_Release_12#2026-01-04|release-12-20260104]] a new parameter was added to Env.parseContext:&lt;br /&gt;
&lt;br /&gt;
* '''forSQL''': if true, the parsed value is intended for SQL statement, so it replaces quotes accordingly&lt;br /&gt;
&lt;br /&gt;
It is recommended to review your plugins and use the new parameter when the Env.parseContext is intended to be used in SQL clauses, this is very important to prevent SQL Injection attacks.&lt;br /&gt;
&lt;br /&gt;
=== New SQLFragment approach ===&lt;br /&gt;
&lt;br /&gt;
In many places of iDempiere direct SQL clauses were added with parameters replaced directly within the where clause, this can open doors for SQL Injection attacs that we want to avoid.&lt;br /&gt;
&lt;br /&gt;
To solve that, the new org.idempiere.db.util.SQLFragment was added in [[ChangeLog_Release_12#2026-01-16|release-12-20260116]], this approach allows to define a where clause with binding parameters and associate a List of parameters to the clause.&lt;br /&gt;
&lt;br /&gt;
Many methods were deprecated to encourage the usage of the new SQLFragment approach instead of adding directly where clauses.&lt;br /&gt;
&lt;br /&gt;
It is encouraged to check carefully your plugins using these deprecated methods and migrate to the new SQLFragment approach.&lt;br /&gt;
&lt;br /&gt;
== Functional Notes from 12 ==&lt;br /&gt;
&lt;br /&gt;
=== Promotions functionality was removed from core to a plugin ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-2826 IDEMPIERE-2826] it was decided to move the Promotions functionality out of core to a plugin.&lt;br /&gt;
&lt;br /&gt;
So, if you have been using this functionality, when migrating to release-12 is necessary to install the plugin.&lt;br /&gt;
&lt;br /&gt;
The plugin documentation can be found at: [[Plugin:_Promotions]]&lt;br /&gt;
&lt;br /&gt;
== Theme ==&lt;br /&gt;
&lt;br /&gt;
Default theme was changed from ''breeze'' to ''iceblue_c''. &lt;br /&gt;
&lt;br /&gt;
To reflect that, the ''ZK_THEME'' SysConfig has been forced to 'iceblue_c'.&lt;br /&gt;
&lt;br /&gt;
So, once your customized theme is updated (as it will probably require some adaptations), you can update the SysConfig to use it.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 11 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 11 ==&lt;br /&gt;
&lt;br /&gt;
=== Java 17 required ===&lt;br /&gt;
For the release-11 we decided to move to the next Long Term Supported version of java.  As java 11 is too close to its end of life, the release-11 requires java-17 for running and compiling.&lt;br /&gt;
&lt;br /&gt;
=== Storage size increase because of new Record_UU columns ===&lt;br /&gt;
As explained in [[NF11 UUID Key Tables#Enabled Features for tables with UUID key and without ID key|UUID Key Tables documentation page]]: a number of Record_UU columns have been added to core tables, which can represent an increase in storage size and backup size in implementations that have many records on these tables, for example many attachments, or heavy usage of chat, post-it or labels.  Also the Change Log can be affected by size depending on the System Configurator key AD_CHANGELOG_SAVE_UUID&lt;br /&gt;
&lt;br /&gt;
=== New MPInstance constructors to manage the new column AD_PInstance.AD_Table_ID ===&lt;br /&gt;
The table AD_PInstance table had a Record_ID column without the corresponding AD_Table_ID.  This is an anomaly and it created a problem as it was not possible to figure out which table triggered a process, and use the Record_ID field to navigate to the originating record.&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5567 IDEMPIERE-5567] the column was added, and the migration script 202309111844_IDEMPIERE-5567_ADPInstance.sql tries the best to fill the new column AD_Table_ID discovering the related table from column, toolbar button, print formats, etc.&lt;br /&gt;
&lt;br /&gt;
However, it is very possible that not all relationships can be figured out, after migration you can review which records were left on AD_PInstance table with null AD_Table_ID and Record_ID&amp;gt;0, and decide if you want to fill it for your specific cases (sometimes is not possible to discover it at the end (for example the process org.compiere.process.BankStatementMatcher could have been called from three different tables and there is no trace about that).&lt;br /&gt;
&lt;br /&gt;
Additionally, it is possible that your plugins call processes filling AD_PInstance without the table, the old constructors for MPInstance are marked as deprecated to ease the task to find them in your plugins and migrate to use the new methods.&lt;br /&gt;
&lt;br /&gt;
=== Constructor MPaymentBatch(Properties, String, String) changed ===&lt;br /&gt;
&lt;br /&gt;
There was a constructor MPaymentBatch(Properties, String, String) that was not used in the official core.&lt;br /&gt;
&lt;br /&gt;
The second parameter of this constructor was the Name and it was intended to create a new record and set the Name of the Payment Batch record.&lt;br /&gt;
&lt;br /&gt;
This constructor conflicts with the [[NF11_UUID_Key_Tables#New_UUID_based_constructors|new UUID based constructor]], so it was replaced by the UUID constructor and its behavior is now completely different.&lt;br /&gt;
&lt;br /&gt;
Most probably nobody is using this old constructor, but in case you use MPaymentBatch constructor in your plugins, please review that you are not using this constructor, if used, please change it to a normal constructor with zero as ID parameter and then set the Name.&lt;br /&gt;
&lt;br /&gt;
=== Product Info toolbar button deactivated in Core. ===&lt;br /&gt;
The community discussion was that most people is not using that toolbar button. However, if you miss it after upgrading. You can go to the Toolbar Button window and activate it again.&lt;br /&gt;
&lt;br /&gt;
=== Export Button not exporting Official Dictionary entries ===&lt;br /&gt;
Since [https://idempiere.atlassian.net/browse/IDEMPIERE-6018 IDEMPIERE-6018] the Export button on windows does not export official dictionary entries, to export dictionary is needed to configure and use a PackOut.&lt;br /&gt;
&lt;br /&gt;
=== Hazelcast defaults to disable auto-detection ===&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-6279 IDEMPIERE-6279] the hazelcast automatic detection of other servers within the network was disabled, if you plan to use Hazelcast in a multi-server or load balanced scenario, the hazelcast-template.xml needs to be customized.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 10 =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 10 ==&lt;br /&gt;
&lt;br /&gt;
=== System user with ID zero deprecated ===&lt;br /&gt;
&lt;br /&gt;
The user System with ID=0 was inactivated and replaced with a similar user with ID=10&lt;br /&gt;
&lt;br /&gt;
Implementors that use System in any way must check if there is impact with this change, the migration script 202202072157_IDEMPIERE-5174.sql copies the information from AD_User, but it doesn't copy custom columns.  Also, it replaces AD_User_ID in some core tables, but implementors must take care if is needed in other custom tables.&lt;br /&gt;
&lt;br /&gt;
=== Change on Schedule behaviour ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5093 IDEMPIERE-5093] changed the way the schedule works:&lt;br /&gt;
* Before this ticket when you had a schedule configured to run at 9AM, the job was executed at 9AM of the server timezone.&lt;br /&gt;
* This ticket changed this behaviour and now the job is executed at 9AM '''of the tenant timezone''' where the job is defined.&lt;br /&gt;
&lt;br /&gt;
=== Terminology changed from Client to Tenant ===&lt;br /&gt;
&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4586 IDEMPIERE-4586] changed the terminology for Client to be known as Tenant in the whole application.&lt;br /&gt;
&lt;br /&gt;
This have little impact from user perspective, but it can have a big impact on documentation.&lt;br /&gt;
&lt;br /&gt;
=== Backward compatibility issue with TimeUtil.getBusinessDaysBetween ===&lt;br /&gt;
Before v10, the method was counting the last day of the period in the total of non business days.&lt;br /&gt;
&lt;br /&gt;
Now, the last day is excluded. In order to fix that, a new method with a new parameter has been added ''includeEndDate,'' so you must use that new method with your plugin if you want to preserve behaviour prior to v10.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade to Hazelcast ===&lt;br /&gt;
The hazelcast library was upgraded with ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5816 IDEMPIERE-5816], the &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; configuration file is not compatible with previous version, so it is needed to run setup again to use the new template.  In case your &amp;lt;code&amp;gt;hazelcast.xml&amp;lt;/code&amp;gt; is customized, you need to take the template for version 5.3 and apply your changes.  NOTE: This was integrated into release-11, and also into release-10 at 2023-07-29&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 9 Horizon =&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 9 Horizon ==&lt;br /&gt;
&lt;br /&gt;
=== Deprecated direct http usage ===&lt;br /&gt;
&lt;br /&gt;
iDempiere 9 Horizon doesn't support anymore direct http usage of the webui interface.  Workaround is simply to use port https.&lt;br /&gt;
&lt;br /&gt;
If you use http the system doesn't allow login in webui.&lt;br /&gt;
&lt;br /&gt;
Note that http can still be used for proxy forwarding, but the configuration requires to forward the header X-Forwarded-Proto to https.&lt;br /&gt;
&lt;br /&gt;
In nginx you must add the following line to the definition of the locations /webui and /webui/zkau/comet:&lt;br /&gt;
 proxy_set_header  X-Forwarded-Proto $scheme;&lt;br /&gt;
As described in [[Proxy iDempiere Through Nginx]]&lt;br /&gt;
&lt;br /&gt;
=== All core views imported to dictionary ===&lt;br /&gt;
&lt;br /&gt;
With ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-5059 IDEMPIERE-5059] the definition of the 149 core views was imported to the dictionary.&lt;br /&gt;
&lt;br /&gt;
In the migration scripts there is code to recreate all these views, so it is very possible that all the custom columns that were added to views by the implementor will present problems when applying the scripts.&lt;br /&gt;
&lt;br /&gt;
Two possible cases that you need to take care about:&lt;br /&gt;
* the script doesn't show errors, but your customization for the view is lost. You must check all the core views that you customized to see if they are having problems and apply the corresponding fixes in release 9&lt;br /&gt;
* the script show errors when applying (usually postgres complains because it cannot change the columns)&lt;br /&gt;
In both cases it is required that you fix the views, do not create the view by hand in SQL, the best way is to add your customized columns to the dictionary and then use the iDempiere process to validate/create the view in the database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Take care of AD_Window.PredefinedContextVariables ===&lt;br /&gt;
Ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4837 IDEMPIERE-4837] will erase changes done on AD_Window.PredefinedContextVariables for Order, Invoices.&lt;br /&gt;
Make a backup of the content of those fields if you have customized them and reapply them.&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL Default to Native Dialect ===&lt;br /&gt;
Release-9 comes by default with Native PostgreSQL dialect.  The SQLs in core were changed to make them compatible for Oracle and PostgreSQL.  Because of that is possible that some plugins can be broken, for example if using NATIVE_PostgreSQL_KEYWORK.&lt;br /&gt;
&lt;br /&gt;
To solve that, the best option is to change your plugin to use SQL standard (compatible with both databases).&lt;br /&gt;
&lt;br /&gt;
See [[NF9 PostgreSQL Default To Native Dialect]] for information about how to disable it (not recommended).&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 8.2 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 8.2 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
For migration script issues see [[Note Upgrade 8.2]] from [[User:Hieplq|Hiep]]&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 8.2 ==&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4421 IDEMPIERE-4421] it was implemented a mechanism for versioning the themes.&lt;br /&gt;
&lt;br /&gt;
We tried to preserve backward compatibility with pre-8.2 themes, but still you'll find problems when the following conditions are in your plugin&lt;br /&gt;
* if the old plugin has references to /theme/default, because the URL of /theme/default was changed to the versioning approach&lt;br /&gt;
** Recommended solution: migrate your theme to 8.2 approach&lt;br /&gt;
** Or change the pointers to /theme/default to point to your own theme&lt;br /&gt;
** Or change the pointers to ~./theme/default/ (this is not recommended, is preferable to maintain your own theme assets)&lt;br /&gt;
* if your plugin referenced the public variable ITheme.THEME_PATH_PREFIX, that variable was dropped&lt;br /&gt;
** Solution is to change the variable to ThemeManager.THEME_PATH_PREFIX&lt;br /&gt;
&lt;br /&gt;
You can find additional instructions to migrate your theme at this ticket comment: https://idempiere.atlassian.net/browse/IDEMPIERE-4421?focusedCommentId=46667&lt;br /&gt;
&lt;br /&gt;
=== PO is immutable ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about not writing objects retrieved from cache.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids writing to these objects to prevent multi-threading issues with these objects.  The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4287 IDEMPIERE-4287]&lt;br /&gt;
&lt;br /&gt;
=== Cross-tenant reading/writing forbidden by default ===&lt;br /&gt;
&lt;br /&gt;
Plugin developers must take care about avoiding reading or writing records from a different tenant than the tenant that was used in login.&lt;br /&gt;
&lt;br /&gt;
iDempiere now has a mechanism that forbids reading/writing records from a different tenant.&lt;br /&gt;
&lt;br /&gt;
Reading can be done from the current tenant or System tenant.  Writing can be done just on the current tenant.&lt;br /&gt;
&lt;br /&gt;
The workaround that must be implemented in code is simply to read the object directly from database (f.e. with ctx+ID+trx constructor), also there are some classes that implemented a getCopy method that can be used to get an updateable copy from the cache.&lt;br /&gt;
&lt;br /&gt;
How to avoid this condition?&lt;br /&gt;
* Always read/write records within the tenant&lt;br /&gt;
* for example filter &amp;lt;code&amp;gt;AD_Client_ID=?&amp;lt;/code&amp;gt;&lt;br /&gt;
* or filter &amp;lt;code&amp;gt;AD_Client_ID IN (0,?)&amp;lt;/code&amp;gt;&lt;br /&gt;
* with Query consider using the method setClient_ID&lt;br /&gt;
&lt;br /&gt;
If, for any reason, it is absolutely necessary to read or write a record in a different tenant, the following code can be used:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
    PO.setCrossTenantSafe();&lt;br /&gt;
    // write here the Query.list or PO.saveEx that is cross tenant safe&lt;br /&gt;
} finally {&lt;br /&gt;
    PO.clearCrossTenantSafe();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://idempiere.atlassian.net/browse/IDEMPIERE-4268 IDEMPIERE-4268]&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 7.1 =&lt;br /&gt;
&lt;br /&gt;
== Multi-server schedulers ==&lt;br /&gt;
&lt;br /&gt;
Because of ticket [https://idempiere.atlassian.net/browse/IDEMPIERE-4056 IDEMPIERE-4056], the schedulers running in all servers are not supported anymore.&lt;br /&gt;
&lt;br /&gt;
This is, in previous versions when a scheduler didn't have a RunOnlyOnIP defined it was executed in all servers, after the implementation of IDEMPIERE-4056 the schedulers without an IP defined are executed on just one server (randomly).&lt;br /&gt;
&lt;br /&gt;
How to configure now:&lt;br /&gt;
* The RunOnlyOnIP keeps working as usual, so the easiest workaround is to configure one scheduler per each server&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old versions to 3.1 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes from 3.1 ==&lt;br /&gt;
&lt;br /&gt;
=== Keystore moved ===&lt;br /&gt;
&lt;br /&gt;
As the web server was changed from tomcat to jetty the keystore file was moved from &amp;lt;code&amp;gt;idempiere-server/keystore/myKeystore&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;idempiere-server/jettyhome/etc/keystore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Themes ===&lt;br /&gt;
&lt;br /&gt;
With the upgrade of zk to version 7 the file &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/theme.css.dsp&amp;lt;/code&amp;gt; was split in fragments located at folder &amp;lt;code&amp;gt;org.adempiere.ui.zk/theme/default/css/fragment&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;about.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;adwindow.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;application-menu.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;borderlayout.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;button.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;desktop.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;field-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;find-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;form.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;gadget.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;grid.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;group.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;help-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;info-window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;input-element.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;login.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;menu-tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;setup-wizard.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tab-editor.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;toolbar-popup.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;tree.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;window.css.dsp&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Theme developers must take care of migrating the themes to be compliant with this new schema.&lt;br /&gt;
&lt;br /&gt;
=== Migration Notes from [[User:Hieplq|Hieplq]] ===&lt;br /&gt;
&lt;br /&gt;
Please take a look to the migration notes provided by hiep at [[Update_your_development_environment_zk7_branch#known_issues|Known issues when updating your development environment zk7 branch]]&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.1 to iDempiere 3.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1z i2.1z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i3.1 i3.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 2.0 to iDempiere 2.1 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0 i2.0]  # just the scripts still not applied&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.0z i2.0z]&lt;br /&gt;
* [https://github.com/idempiere/idempiere/tree/master/migration-historic/i2.1 i2.1]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= From iDempiere 1.0 to iDempiere 2.0 =&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following three folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]  # just the scripts still not applied&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0z i1.0z]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i2.0 i2.0]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
= Version iDempiere 1.0 =&lt;br /&gt;
&lt;br /&gt;
When migrating from old systems to iDempiere 1.0 you must take into account the following migration notes:&lt;br /&gt;
&lt;br /&gt;
== Technical Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== org.compiere.acct.Doc ===&lt;br /&gt;
&lt;br /&gt;
Constructor account schema parameter have been changed from MAcctSchema[] to MAcctSchema. This can break extensions that modify accounting, solution is simple, just change it to use new method and accomodate code.&lt;br /&gt;
&lt;br /&gt;
=== 2Pack ===&lt;br /&gt;
&lt;br /&gt;
The new 2pack format is not backward compatible&lt;br /&gt;
&lt;br /&gt;
=== AD_WF_Node ===&lt;br /&gt;
&lt;br /&gt;
The xposition and yposition column now stored the node's position in a grid instead of absolute pixel value.&lt;br /&gt;
&lt;br /&gt;
=== Change Log Configuration ===&lt;br /&gt;
&lt;br /&gt;
The change log is now enabled by default in most of the tables.&lt;br /&gt;
&lt;br /&gt;
Enabling the change log is done with the script 201306261840_EnableChangeLog.sql&lt;br /&gt;
&lt;br /&gt;
If you have already tuned your change log configuration, you can skip that script - or run it and then recover your specific fine tuning changes.&lt;br /&gt;
&lt;br /&gt;
Note also that enabling the change log it will increase the disk consumption - if that's a concern on your installation you must fine tune this configuration after running the script.&lt;br /&gt;
&lt;br /&gt;
=== Jasper ID parameters passed as BigDecimal now as Integer ===&lt;br /&gt;
&lt;br /&gt;
In some cases the ID parameters (table, table direct, search) were passed to jasper reports as BigDecimal, while in other cases same parameters were passed as Integer (like RECORD_ID or ranges), with [http://idempiere.atlassian.net/browse/IDEMPIERE-1422 IDEMPIERE-1422] that behavior is now consistent, always using Integer for _ID parameters.&lt;br /&gt;
&lt;br /&gt;
This change can break old jasper reports that defined the ID parameter as BigDecimal, the fix is simple, just change the jasper parameter to Integer and compile again.&lt;br /&gt;
&lt;br /&gt;
When this error is reached running the jasper report throws this exception:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
16:47:32.058===========&amp;gt; ProcessUtil.startJavaProcess: org.compiere.report.ReportStarter [17]&lt;br /&gt;
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:553)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:399)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter$1.visit(JRJdbcQueryExecuter.java:332)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter$QueryParameter.accept(JRAbstractQueryExecuter.java:157)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter.visitQueryParameters(JRAbstractQueryExecuter.java:646)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:317)&lt;br /&gt;
	at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1281)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:900)&lt;br /&gt;
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functional Notes for iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
=== Inventory Document Types ===&lt;br /&gt;
&lt;br /&gt;
Because of [http://idempiere.atlassian.net/browse/IDEMPIERE-675 IDEMPIERE-675] you need to set manually the inventory document subtype for your inventory documents (internal use and physical inventory).&lt;br /&gt;
&lt;br /&gt;
In case you used the same document type for both cases - then recommendation is to inactivate the old mixed document and create new document types for each specific case.&lt;br /&gt;
&lt;br /&gt;
=== Deprecated Functionalities ===&lt;br /&gt;
&lt;br /&gt;
With [http://idempiere.atlassian.net/browse/IDEMPIERE-362 IDEMPIERE-362], [http://idempiere.atlassian.net/browse/IDEMPIERE-170 IDEMPIERE-170], [http://idempiere.atlassian.net/browse/IDEMPIERE-247 IDEMPIERE-247] some functionalities that were not working properly where deprecated, please check the tickets and commits for details, most prominent are:&lt;br /&gt;
* Cash Journals (all cash functionalities can be modeled using payments)&lt;br /&gt;
* MRP Heavy Manufacturing (Light Manufacturing was integrated)&lt;br /&gt;
* Payroll (being developed as extension)&lt;br /&gt;
&lt;br /&gt;
=== Production ===&lt;br /&gt;
&lt;br /&gt;
If you used the old Production window (original from Compiere with three tabs) - please note some changes are required as noted in [http://idempiere.atlassian.net/browse/IDEMPIERE-521 IDEMPIERE-521]&lt;br /&gt;
&lt;br /&gt;
=== Advanced Roles ===&lt;br /&gt;
&lt;br /&gt;
With [https://idempiere.atlassian.net/browse/IDEMPIERE-1160 IDEMPIERE-1160] a new security feature was implemented, when creating a new client the ClientAdmin role is configured as advanced role and the ClientUser role is not, after that you can use the ClientAdmin role to configure the rest of roles (advanced or not) and users.&lt;br /&gt;
&lt;br /&gt;
Please note that advanced role is not intended for end-users, is mostly intended for Information technology (IT) roles that administer the system - advanced roles have access to many fields that are documented and exposed security holes in the system.&lt;br /&gt;
&lt;br /&gt;
This new feature creates a problem when migrating databases with existing tenants - as we can't know in advance how the security was configured in an already existing client - we cannot set advanced role to one of the client roles in the database via migration script.  The consequence is that when migrating databases, all the roles on Clients (not GardenAdmin and System) are marked as non-advanced - and there is not a way to mark advanced role within the system, it's needed to mark your required advanced role directly via SQL with a command like:&lt;br /&gt;
 UPDATE AD_Role SET IsAccessAdvanced='Y' WHERE AD_Role_ID=?&lt;br /&gt;
where you replace the ? with the ID of the role you design as advanced (with access to security holes).&lt;br /&gt;
&lt;br /&gt;
= Migration Scripts =&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to ADempiere 361 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts-360lts.010?at=globalqss_adempiere361 360lts-360lts.010]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/360lts.010-361.Final?at=globalqss_adempiere361 360lts.010-361.Final]&lt;br /&gt;
* [https://bitbucket.org/CarlosRuiz_globalqss/adempiere361/src/tip/migration/361.Final-BUG_FIXES?at=globalqss_adempiere361 361.Final-BUG_FIXES]&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 360 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
Apply migration scripts from the following folders:&lt;br /&gt;
&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/360lts-i1.0a 360lts-i1.0a]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0a-i1.0b i1.0a-i1.0b]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0b-i1.0c i1.0b-i1.0c]&lt;br /&gt;
* [http://bitbucket.org/idempiere/idempiere/src/tip/migration/i1.0c i1.0c]&lt;br /&gt;
&lt;br /&gt;
NOTE: The folder specified above can vary on every release - the idea is to apply all migration scripts until you arrive to the release you're migrating to.&lt;br /&gt;
&lt;br /&gt;
== From ADempiere 361 to iDempiere 1.0 ==&lt;br /&gt;
&lt;br /&gt;
You need to apply the migration scripts like migrating from 360, '''EXCLUDING''' those already applied when you migrated from 360 to 361.&lt;br /&gt;
&lt;br /&gt;
== Increasing speed of some scripts ==&lt;br /&gt;
&lt;br /&gt;
* Script &amp;lt;code&amp;gt;postgresql/789_GenerateUUIDColumns.sql&amp;lt;/code&amp;gt; can apply ALTER TABLE too slowly for big tables - this can be improved dropping the &amp;quot; DEFAULT NULL&amp;quot; at the end of each ALTER TABLE&lt;br /&gt;
&lt;br /&gt;
* It is highly recommended to run &amp;quot;UUID Generator&amp;quot; process after migration to fill the empty UUID columns, but this can be a very slow process for big tables, a faster way can be achieved executing an update directly on the database, also you can consider deleting the related uuid index before the update and recreating it at the end, for example:&lt;br /&gt;
** &amp;lt;code&amp;gt;DROP INDEX ad_changelog_uu_idx;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;UPDATE AD_ChangeLog SET AD_ChangeLog_UU=generate_uuid() WHERE AD_ChangeLog_UU IS NULL;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;CREATE UNIQUE INDEX ad_changelog_uu_idx ON ad_changelog (ad_changelog_uu);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The script &amp;lt;code&amp;gt;processes_post_migration/postgresql/02_SynchronizeTerminology.sql&amp;lt;/code&amp;gt; tend to be slow on postgresql versions higher than 9.1 with the default memory.  In order to solve this is recommended to tune the memory for the database.&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere 370 =&lt;br /&gt;
&lt;br /&gt;
[[User:Pb_integratio|Pb_integratio]] is sharing and documenting experience about this at [[Migration from ADempiere 370 to iDempiere]]&lt;br /&gt;
&lt;br /&gt;
= Note about migrating from ADempiere pre-360 =&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
Migrating some Adempiere installations before 360 to iDempiere generates a problem when using postgresql 9.2 - applying the script 201309192024_IDEMPIERE-1370.sql:222 throws:&lt;br /&gt;
 ERROR:  cannot change name of input parameter &amp;quot;p_product_id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cause ==&lt;br /&gt;
&lt;br /&gt;
An issue has been detected migrating a database pre-360 to iDempiere using postgresql 9.2&lt;br /&gt;
&lt;br /&gt;
The function bomqtyonhand from the database seed doesn't match with the function bomqtyonhand present on the migration scripts (pre-360), the script 201309192024_IDEMPIERE-1370.sql fixes that situation, but postgresql 9.2 doesn't allow changing a parameter name for a function.&lt;br /&gt;
&lt;br /&gt;
== Solutions ==&lt;br /&gt;
&lt;br /&gt;
* You can do the migration using postgres 8.4 and at the end migrate to 9.2 (postgres 8.4 allows changing name of function parameters)&lt;br /&gt;
alternatively&lt;br /&gt;
* You can drop the old function bomqtyonhand (and all the associated views) and recreate them properly&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_12&amp;diff=23821</id>
		<title>ChangeLog Release 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_12&amp;diff=23821"/>
		<updated>2026-04-13T11:18:13Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-12&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-13 ==&lt;br /&gt;
&lt;br /&gt;
* Revert &amp;quot;[https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6366 IDEMPIERE-6366] Generic Info window shows all columns exists on table and do not respect seqNoSelection [https://github.com/idempiere/idempiere/pull/2620 (#2620)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6719 IDEMPIERE-6719] Selected records in the info window are not being processed. [https://github.com/idempiere/idempiere/pull/2964 (#2964)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3155 (#3155)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6198 IDEMPIERE-6198] Incorrect Accumulated Amt and Accumulated Qty after reverse-correct a Physical Inventory [https://github.com/idempiere/idempiere/pull/2908 (#2908)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3158 (#3158)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824] Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6870 IDEMPIERE-6870] Fix NPE in callout when selecting product without cost [https://github.com/idempiere/idempiere/pull/3125 (#3125)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6876 IDEMPIERE-6876] Report parameters are overwritten when refreshing a previously opened tab of the same report [https://github.com/idempiere/idempiere/pull/3141 (#3141)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6879 IDEMPIERE-6879] WLocationDialog showing misleading error to user [https://github.com/idempiere/idempiere/pull/3145 (#3145)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6880 IDEMPIERE-6880] PO is NULL Issue When Clicking in Window Zoom [https://github.com/idempiere/idempiere/pull/3146 (#3146)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6865 IDEMPIERE-6865] Hashed password saved as plain text when SecureEngine.getSecureRandom fails [https://github.com/idempiere/idempiere/pull/3119 (#3119)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3110 (#3110)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6850 IDEMPIERE-6850] Change log not capture for delete of record with UUID Key or with Composite Key (DAD-205) [https://github.com/idempiere/idempiere/pull/3111 (#3111)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6845 IDEMPIERE-6845] BOM Price Functions Should Distinguish Between Explicit Zero and Missing Price [https://github.com/idempiere/idempiere/pull/3104 (#3104)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6843 IDEMPIERE-6843] Security Dashboard [https://github.com/idempiere/idempiere/pull/3099 (#3099)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6844 IDEMPIERE-6844] Prevent CSV Injection in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3102 (#3102)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6009 IDEMPIERE-6009] AllocationReset Not Working Correctly / fix trx leak [https://github.com/idempiere/idempiere/pull/3097 (#3097)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6833 IDEMPIERE-6833] Jar upgrades for Vulnerability fix [https://github.com/idempiere/idempiere/pull/3093 (#3093)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6837 IDEMPIERE-6837] Payment Selection window fails to update amounts and has incorrect field behavior [https://github.com/idempiere/idempiere/pull/3090 (#3090)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-09 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6435 IDEMPIERE-6435] Add &amp;quot;Hide on Zero&amp;quot; to Document Status (Activities) [https://github.com/idempiere/idempiere/pull/2688 (#2688)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3095 (#3095)] [https://github.com/idempiere/idempiere/pull/3098 (#3098)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6838 IDEMPIERE-6838] Allow a BP to pay invoices from a different BP [https://github.com/idempiere/idempiere/pull/3091 (#3091)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5985 IDEMPIERE-5985] Reactivation of Payments: Credit Manager - fix conflicts [https://github.com/idempiere/idempiere/pull/2832 (#2832)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - minor - avoid warning [https://github.com/idempiere/idempiere/pull/3088 (#3088)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6809 IDEMPIERE-6809] Session Fixation Vulnerability in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3082 (#3082)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6829 IDEMPIERE-6829] Accounting Fact Reconciliation must not allow to reset half reconciliation records [https://github.com/idempiere/idempiere/pull/3079 (#3079)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6831 IDEMPIERE-6831] In some cases, date registered is wrong [https://github.com/idempiere/idempiere/pull/3086 (#3086)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6834 IDEMPIERE-6834] Copy Tenant must validate image storage provider too [https://github.com/idempiere/idempiere/pull/3087 (#3087)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6840 IDEMPIERE-6840] Date format : allow d (for day) [https://github.com/idempiere/idempiere/pull/3092 (#3092)]&lt;br /&gt;
&lt;br /&gt;
== 2026-02-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3083 (#3083)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6809 IDEMPIERE-6809] Session Fixation Vulnerability in iDempiere WebUI [https://github.com/idempiere/idempiere/pull/3080 (#3080)] [https://github.com/idempiere/idempiere/pull/3081 (#3081)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6122 IDEMPIERE-6122] Query class to accept a list of columns to select [https://github.com/idempiere/idempiere/pull/3073 (#3073)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6545 IDEMPIERE-6545] Translation tabs must not allow delete - enable insert in Tenant Level Message [https://github.com/idempiere/idempiere/pull/3077 (#3077)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3071 (#3071)] [https://github.com/idempiere/idempiere/pull/3072 (#3072)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6822 IDEMPIERE-6822] Replace iDempiere Server Monitor Basic Authentication with Session Login Form [https://github.com/idempiere/idempiere/pull/3070 (#3070)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5067 IDEMPIERE-5067] Over Shipment getting reverse in generate shipment [https://github.com/idempiere/idempiere/pull/3029 (#3029)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6737 IDEMPIERE-6737] Attribute Set with &amp;quot;Use Guarantee Date for Material Policy&amp;quot; = &amp;quot;Y&amp;quot; recording wrong material policy date in window Physical Inventory, Inventory Move, and Inventory Decrease/Increase [https://github.com/idempiere/idempiere/pull/3053 (#3053)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6800 IDEMPIERE-6800] Wrong costing qty after purchase invoice for partial MR with identical Account Date in MR, shipment and invoice [https://github.com/idempiere/idempiere/pull/3051 (#3051)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6817 IDEMPIERE-6817] Sales Order printing Reversed Invoices [https://github.com/idempiere/idempiere/pull/3069 (#3069)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6818 IDEMPIERE-6818] Billboard chart showing D instead of day [https://github.com/idempiere/idempiere/pull/3061 (#3061)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6822 IDEMPIERE-6822] Replace iDempiere Server Monitor Basic Authentication with Session Login Form [https://github.com/idempiere/idempiere/pull/3067 (#3067)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3064 (#3064)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/3014 (#3014)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-15 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/3059 (#3059)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6814 IDEMPIERE-6814] Notice count wrong for GardenUser [https://github.com/idempiere/idempiere/pull/3056 (#3056)]&lt;br /&gt;
&lt;br /&gt;
== 2026-01-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6377 IDEMPIERE-6377] Adding a quote to sales opportunity is impossible [https://github.com/idempiere/idempiere/pull/3016 (#3016)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6528 IDEMPIERE-6528] Archive Viewer loads every Archived Document after deleting one&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6572 IDEMPIERE-6572] Deactivating windows in WTF still allows windows to be accessed if window has been added to favourites [https://github.com/idempiere/idempiere/pull/3019 (#3019)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6600 IDEMPIERE-6600] Posting Error For No Cost Product On Physical Inventory [https://github.com/idempiere/idempiere/pull/2836 (#2836)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base and org.compiere.util [https://github.com/idempiere/idempiere/pull/3018 (#3018)] [https://github.com/idempiere/idempiere/pull/2989 (#2989)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6702 IDEMPIERE-6702] Error: Insufficient Stock Coverage for drop shipment to customer of product with existing transactions [https://github.com/idempiere/idempiere/pull/2975 (#2975)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6729 IDEMPIERE-6729] Favorites Tree breaking UI [https://github.com/idempiere/idempiere/pull/2981 (#2981)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Improvement for Env.parseContext [https://github.com/idempiere/idempiere/pull/2998 (#2998)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6742 IDEMPIERE-6742] Add Cache Reset after bulk Packin Processing [https://github.com/idempiere/idempiere/pull/2994 (#2994)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6744 IDEMPIERE-6744] fix NPE in DocumentSearchController [https://github.com/idempiere/idempiere/pull/2995 (#2995)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6751 IDEMPIERE-6751] Back-dated costing: physical inventory posting error in original document after reversal and new back-dated document [https://github.com/idempiere/idempiere/pull/3003 (#3003)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6753 IDEMPIERE-6753] Error installing plugins that create a _Trl_Key with a 2pack [https://github.com/idempiere/idempiere/pull/3017 (#3017)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6805 IDEMPIERE-6805] MUserRole should disallow assignment of role template to user [https://github.com/idempiere/idempiere/pull/3047 (#3047)]&lt;br /&gt;
&lt;br /&gt;
== 2025-12-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6802 IDEMPIERE-6802] MRoleIncluded should set SeqNo in beforeSave [https://github.com/idempiere/idempiere/pull/3044 (#3044)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2988 (#2988)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6734 IDEMPIERE-6734] Allow #User_Org to be available for all kind of session [https://github.com/idempiere/idempiere/pull/2984 (#2984)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog [https://github.com/idempiere/idempiere/pull/2990 (#2990)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6656 IDEMPIERE-6656] Unclear message when reactivating a document with reconciled posting [https://github.com/idempiere/idempiere/pull/2958 (#2958)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6694 IDEMPIERE-6694] 2 issues related to back-dated costing. Refer to details below [https://github.com/idempiere/idempiere/pull/2943 (#2943)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6716 IDEMPIERE-6716] Upgrade DB libraries (FHCA-7459) - fix packin broken [https://github.com/idempiere/idempiere/pull/2970 (#2970)] [https://github.com/idempiere/idempiere/pull/2960 (#2960)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6717 IDEMPIERE-6717] Support French when searching for constraint names [https://github.com/idempiere/idempiere/pull/2957 (#2957)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6718 IDEMPIERE-6718] GridTabTest leaves residual records in C_Order and C_OrderLine tables due to missing transaction context [https://github.com/idempiere/idempiere/pull/2959 (#2959)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6720 IDEMPIERE-6720] Copy Tenant fails when there is a report archived [https://github.com/idempiere/idempiere/pull/2962 (#2962)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6721 IDEMPIERE-6721] Incorrect M_AttributeInstance.Value when setting integer for number attribute type [https://github.com/idempiere/idempiere/pull/2963 (#2963)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6722 IDEMPIERE-6722] Infinite loop with a SEVERE error in MIssue.create [https://github.com/idempiere/idempiere/pull/2969 (#2969)]&lt;br /&gt;
&lt;br /&gt;
== 2025-11-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6295 IDEMPIERE-6295] Fix logout issue when SSO provider is selected from multiple SSO providers [https://github.com/idempiere/idempiere/pull/2950 (#2950)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage for PO and create unit test class for cross tenant safety feature [https://github.com/idempiere/idempiere/pull/2948 (#2948)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6706 IDEMPIERE-6706] Error installing 2Pack using ALL-CLIENTS approach [https://github.com/idempiere/idempiere/pull/2947 (#2947)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/2956 (#2956)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6714 IDEMPIERE-6714] Calculation Fields Disabled in Print Format but Enabled in Report Wizard for non-Field Items [https://github.com/idempiere/idempiere/pull/2955 (#2955)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/2925 (#2925)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2944 (#2944)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6705 IDEMPIERE-6705] PackIn failing silently when the zip has wrong folder hierarchy [https://github.com/idempiere/idempiere/pull/2942 (#2942)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6695 IDEMPIERE-6695] AP Credit Memo for Landed Cost: Wrong side of inventory account against Suspense balancing [https://github.com/idempiere/idempiere/pull/2932 (#2932)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6697 IDEMPIERE-6697] Rename Master Role as Role Template and split to Role Template window [https://github.com/idempiere/idempiere/pull/2934 (#2934)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6699 IDEMPIERE-6699] Portable SQL insert script not working for Location, Account, etc [https://github.com/idempiere/idempiere/pull/2936 (#2936)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6700 IDEMPIERE-6700] GridTable.dataSavePO is not working correctly for UUID table [https://github.com/idempiere/idempiere/pull/2937 (#2937)] [https://github.com/idempiere/idempiere/pull/2939 (#2939)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6701 IDEMPIERE-6701] RUN_SyncDB.sh with parameter failing on server [https://github.com/idempiere/idempiere/pull/2938 (#2938)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-14 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6506 IDEMPIERE-6506] Translation cache not reset after update by user [https://github.com/idempiere/idempiere/pull/2931 (#2931)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6698 IDEMPIERE-6698] Enhance Print Invoices Process to Support Multi-Select Document Type Parameter [https://github.com/idempiere/idempiere/pull/2935 (#2935)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-08 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2929 (#2929)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6680 IDEMPIERE-6680] Back-dated costing bug related to re-posting of matched PO [https://github.com/idempiere/idempiere/pull/2915 (#2915)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6690 IDEMPIERE-6690] Error when clicking UU-based reference field with null value - org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = integer [https://github.com/idempiere/idempiere/pull/2926 (#2926)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6691 IDEMPIERE-6691] org.idempiere.bouncy.castle-feature: Name in .project is not org.idempiere.bouncy.castle-feature [https://github.com/idempiere/idempiere/pull/2927 (#2927)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6692 IDEMPIERE-6692] Archive Viewer is adding .pdf to any file - and showing always as PDF [https://github.com/idempiere/idempiere/pull/2928 (#2928)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6685 IDEMPIERE-6685] MColumn.getReferenceTableName not working for ChosenMultipleSelectionTable and ChosenMultipleSelectionSearch [https://github.com/idempiere/idempiere/pull/2924 (#2924)]&lt;br /&gt;
&lt;br /&gt;
== 2025-10-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6122 IDEMPIERE-6122] Query class to accept a list of columns to select - fix support order by virtual column not in select [https://github.com/idempiere/idempiere/pull/2918 (#2918)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6659 IDEMPIERE-6659] Estimated Landed Cost Scenarios for Purchase Orders and Incorrect Product Costs [https://github.com/idempiere/idempiere/pull/2905 (#2905)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6666 IDEMPIERE-6666] fix getShipmentReceiptDocType in MDocType [https://github.com/idempiere/idempiere/pull/2921 (#2921)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6683 IDEMPIERE-6683] Concurrent client requests can cause &amp;quot;key already exists&amp;quot; errors for user preference [https://github.com/idempiere/idempiere/pull/2919 (#2919)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6684 IDEMPIERE-6684] Unable to save a record via Rest API when a column is set to Record UUID display type [https://github.com/idempiere/idempiere/pull/2922 (#2922)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6685 IDEMPIERE-6685] MColumn.getReferenceTableName not working for ChosenMultipleSelectionTable and ChosenMultipleSelectionSearch [https://github.com/idempiere/idempiere/pull/2923 (#2923)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2916 (#2916)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6670 IDEMPIERE-6670] Refactoring: make CLogMgt.reInit public [https://github.com/idempiere/idempiere/pull/2903 (#2903)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6671 IDEMPIERE-6671] Replace MD5 digest with SHA-256 digest (DAD-61) - fix Secure.convertHexString [https://github.com/idempiere/idempiere/pull/2917 (#2917)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6673 IDEMPIERE-6673] Jasper Linked to Print Format Being Generated Blank [https://github.com/idempiere/idempiere/pull/2909 (#2909)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6682 IDEMPIERE-6682] Plugin : editor which extends WButtonEditor doesn't work when tab in grid mode [https://github.com/idempiere/idempiere/pull/2914 (#2914)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6646 IDEMPIERE-6646] Customize toolbar button enable/disable based on current tab data status [https://github.com/idempiere/idempiere/pull/2891 (#2891)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6668 IDEMPIERE-6668] Field holding invalid data [https://github.com/idempiere/idempiere/pull/2902 (#2902)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6671 IDEMPIERE-6671] Replace MD5 digest with SHA-256 digest (DAD-61) [https://github.com/idempiere/idempiere/pull/2904 (#2904)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6672 IDEMPIERE-6672] The same event triggered in less than 200ms prevents callouts from being executed [https://github.com/idempiere/idempiere/pull/2906 (#2906)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6676 IDEMPIERE-6676] Review the PO.getKeyColumns for UUID tables [https://github.com/idempiere/idempiere/pull/2913 (#2913)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6663 IDEMPIERE-6663] More reliable discovery of key store service [https://github.com/idempiere/idempiere/pull/2899 (#2899)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6667 IDEMPIERE-6667] Secure could be using wrong provider with idempiere-ks.properties and IKeyStore service [https://github.com/idempiere/idempiere/pull/2901 (#2901)]&lt;br /&gt;
&lt;br /&gt;
== 2025-09-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6124 IDEMPIERE-6124] Add Quantity field to Invoice &amp;gt; Invoice Line &amp;gt; Landed Cost for allocations to Product [https://github.com/idempiere/idempiere/pull/2892 (#2892)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6662 IDEMPIERE-6662] Proper length for LoginPanel Name/EMail field [https://github.com/idempiere/idempiere/pull/2897 (#2897)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6664 IDEMPIERE-6664] Secure engine extensibility improvements [https://github.com/idempiere/idempiere/pull/2898 (#2898)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6662 IDEMPIERE-6662] Email field length mismatch between LoginPanel and database [https://github.com/idempiere/idempiere/pull/2895 (#2895)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6663 IDEMPIERE-6663] More reliable discovery of key store service (DAD-61) [https://github.com/idempiere/idempiere/pull/2896 (#2896)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6645 IDEMPIERE-6645] Error message being cleared due to concurrency issue [https://github.com/idempiere/idempiere/pull/2878 (#2878)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6649 IDEMPIERE-6649] Upgrade Jetty to 12.0.24 and add support for Bouncy Castle FIPS 140-3 Level 1 compliance bundles [https://github.com/idempiere/idempiere/pull/2881 (#2881)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6304 IDEMPIERE-6304] Multiple SSO provider support [https://github.com/idempiere/idempiere/pull/2811 (#2811)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Extend Unit Tests for MRole [https://github.com/idempiere/idempiere/pull/2879 (#2879)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6648 IDEMPIERE-6648] Ensure all scripts can run with an alternate db admin user (DAD-62) [https://github.com/idempiere/idempiere/pull/2886 (#2886)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6654 IDEMPIERE-6654] Passwords must not be shown in logs (DAD-63) [https://github.com/idempiere/idempiere/pull/2885 (#2885)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6657 IDEMPIERE-6657] Setup error when the DB password is 57 chars or longer [https://github.com/idempiere/idempiere/pull/2888 (#2888)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2874 (#2874)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6614 IDEMPIERE-6614] Performance improvement for back-dated costing process [https://github.com/idempiere/idempiere/pull/2860 (#2860)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6648 IDEMPIERE-6648] Ensure all scripts can run with an alternate db admin user (DAD-62) [https://github.com/idempiere/idempiere/pull/2882 (#2882)]&lt;br /&gt;
&lt;br /&gt;
== 2025-08-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5651 IDEMPIERE-5651] Validate VFormat regex on WStringEditor [https://github.com/idempiere/idempiere/pull/2641 (#2641)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing - fix references [https://github.com/idempiere/idempiere/pull/2869 (#2869)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6617 IDEMPIERE-6617] Add InputStream interface to image storage provider [https://github.com/idempiere/idempiere/pull/2852 (#2852)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6637 IDEMPIERE-6637] Wrong Default Logic for Migration Storage Provider parameter AD_AllClients_V_ID in Oracle [https://github.com/idempiere/idempiere/pull/2864 (#2864)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6639 IDEMPIERE-6639] OFXFileBankStatementLoader - ErrorReadingData - Stream closed [https://github.com/idempiere/idempiere/pull/2866 (#2866)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6641 IDEMPIERE-6641] Cryptic error on silent-setup-alt.sh when ADEMPIERE_DB_SERVER is not reachable [https://github.com/idempiere/idempiere/pull/2868 (#2868)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6644 IDEMPIERE-6644] Fix some wrong defaults for EntityType [https://github.com/idempiere/idempiere/pull/2876 (#2876)]&lt;br /&gt;
&lt;br /&gt;
== 2025-07-26 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6564 IDEMPIERE-6564] Add InputStream interface to archive storage provider [https://github.com/idempiere/idempiere/pull/2805 (#2805)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6618 IDEMPIERE-6618] added Maven 3.9.10 wrapper [https://github.com/idempiere/idempiere/pull/2853 (#2853)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6635 IDEMPIERE-6635] Makes the DataProvider a priority for search of context variables and restores '[https://idempiere.atlassian.net/browse/IDEMPIERE-6473 IDEMPIERE-6473]' [https://github.com/idempiere/idempiere/pull/2863 (#2863)]&lt;br /&gt;
&lt;br /&gt;
== 2025-07-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2841 (#2841)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6229 IDEMPIERE-6229] 2Pack / Data : fill table field using SQL Statement content - fix java.lang.StringIndexOutOfBoundsException [https://github.com/idempiere/idempiere/pull/2834 (#2834)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6314 IDEMPIERE-6314] Issues with attachment on System records [https://github.com/idempiere/idempiere/pull/2839 (#2839)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6553 IDEMPIERE-6553] Add logs to investigate why the model event handler isn't being triggered [https://github.com/idempiere/idempiere/pull/2801 (#2801)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6570 IDEMPIERE-6570] Improve attachment support for large file [https://github.com/idempiere/idempiere/pull/2809 (#2809)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6591 IDEMPIERE-6591] Can't delete records created through Recurring [https://github.com/idempiere/idempiere/pull/2825 (#2825)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6592 IDEMPIERE-6592] T_Spool wrongly defined as view in dictionary [https://github.com/idempiere/idempiere/pull/2826 (#2826)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6595 IDEMPIERE-6595] Enable Using Virtual Columns as Report Parameters [https://github.com/idempiere/idempiere/pull/2830 (#2830)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6596 IDEMPIERE-6596] Implement $sysconfig. prefix for access to AD_SysConfig value in context variable expression [https://github.com/idempiere/idempiere/pull/2831 (#2831)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6597 IDEMPIERE-6597] PackIn error importing record with variable organization [https://github.com/idempiere/idempiere/pull/2833 (#2833)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6599 IDEMPIERE-6599] Enable mail session debug based on mail.debug [https://github.com/idempiere/idempiere/pull/2835 (#2835)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6602 IDEMPIERE-6602] Excessive logging of Invalid Column [https://github.com/idempiere/idempiere/pull/2837 (#2837)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6607 IDEMPIERE-6607] Support Debian Installer in arm [https://github.com/idempiere/idempiere/pull/2845 (#2845)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6611 IDEMPIERE-6611] Predefined Context Variables are not being cleared for forms [https://github.com/idempiere/idempiere/pull/2847 (#2847)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6615 IDEMPIERE-6615] Custom toolbar buttons shown wrongly in mobile [https://github.com/idempiere/idempiere/pull/2851 (#2851)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6619 IDEMPIERE-6619] Cannot enter multiple lines in fields in Grid View or Quick Form [https://github.com/idempiere/idempiere/pull/2856 (#2856)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6620 IDEMPIERE-6620] CSS style not working in info window [https://github.com/idempiere/idempiere/pull/2854 (#2854)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6626 IDEMPIERE-6626] ZoomConditions: missing parenthesis cause trouble when WhereClause has a OR operator [https://github.com/idempiere/idempiere/pull/2857 (#2857)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6629 IDEMPIERE-6629] Fixes username text wrapping in mobile layout [https://github.com/idempiere/idempiere/pull/2858 (#2858)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6631 IDEMPIERE-6631] Allow extra parameters in AD_AuthorizationProvider.AuthorizationEndpoint [https://github.com/idempiere/idempiere/pull/2862 (#2862)]&lt;br /&gt;
&lt;br /&gt;
== 2025-06-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6067 IDEMPIERE-6067] Reactivation of Invoices - fix OrderLine QtyInvoiced [https://github.com/idempiere/idempiere/pull/2812 (#2812)] [https://github.com/idempiere/idempiere/pull/2815 (#2815)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/2819 (#2819)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6565 IDEMPIERE-6565] Forgot My Password from Login page doesn't send the temporary password [https://github.com/idempiere/idempiere/pull/2806 (#2806)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6580 IDEMPIERE-6580] Multiple tab records and cannot be closed [https://github.com/idempiere/idempiere/pull/2816 (#2816)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6581 IDEMPIERE-6581] Clean Orphan Cascade broken [https://github.com/idempiere/idempiere/pull/2814 (#2814)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6583 IDEMPIERE-6583] Env.parseVariable doesn't parse CreatedBy/UpdatedBy [https://github.com/idempiere/idempiere/pull/2817 (#2817)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6587 IDEMPIERE-6587] Product Info showing stock when no warehouse is selected [https://github.com/idempiere/idempiere/pull/2822 (#2822)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6588 IDEMPIERE-6588] Payment Discount excluding freight charges [https://github.com/idempiere/idempiere/pull/2823 (#2823)]&lt;br /&gt;
&lt;br /&gt;
== 2025-06-02 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method + [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] + [https://idempiere.atlassian.net/browse/IDEMPIERE-6547 IDEMPIERE-6547] [https://github.com/idempiere/idempiere/pull/2784 (#2784)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6550 IDEMPIERE-6550] Console setup enhancements [https://github.com/idempiere/idempiere/pull/2800 (#2800)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6563 IDEMPIERE-6563] Attach stacktrace and Unresolved to the 2pack as error_yyyymmddhhmmss.log (FHCA) [https://github.com/idempiere/idempiere/pull/2803 (#2803)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-17 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6546 IDEMPIERE-6546] Allow exporting tree definition with 2Pack [https://github.com/idempiere/idempiere/pull/2799 (#2799)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-16 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6545 IDEMPIERE-6545] Translation tabs must not allow delete [https://github.com/idempiere/idempiere/pull/2797 (#2797)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6546 IDEMPIERE-6546] Allow exporting tree definition with 2Pack [https://github.com/idempiere/idempiere/pull/2796 (#2796)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6549 IDEMPIERE-6549] - Add option to Disable Insufficient Inventory Popup [https://github.com/idempiere/idempiere/pull/2798 (#2798)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-15 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method [https://github.com/idempiere/idempiere/pull/2718 (#2718)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150] Support development with IntelliJ [https://github.com/idempiere/idempiere/pull/2774 (#2774)] [https://github.com/idempiere/idempiere/pull/2788 (#2788)] [https://github.com/idempiere/idempiere/pull/2789 (#2789)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5174 IDEMPIERE-5174] Disable System User [https://github.com/idempiere/idempiere/pull/2792 (#2792)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5795 IDEMPIERE-5795] DeveloperMode context variable - minor, move to SystemProperties [https://github.com/idempiere/idempiere/pull/2771 (#2771)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6067 IDEMPIERE-6067] Reactivation of Invoices [https://github.com/idempiere/idempiere/pull/2669 (#2669)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6413 IDEMPIERE-6413] Visually differentiate environments [https://github.com/idempiere/idempiere/pull/2668 (#2668)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6433 IDEMPIERE-6433] Fill Getting Started box [https://github.com/idempiere/idempiere/pull/2773 (#2773)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6521 IDEMPIERE-6521] Create RUN_ImportIdempiereDev.sh and RUN_DBRestoreDev.sh [https://github.com/idempiere/idempiere/pull/2765 (#2765)] [https://github.com/idempiere/idempiere/pull/2791 (#2791)] [https://github.com/idempiere/idempiere/pull/2793 (#2793)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6526 IDEMPIERE-6526] Performance improvement exporting to XLSX [https://github.com/idempiere/idempiere/pull/2768 (#2768)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6527 IDEMPIERE-6527] Read value of ZK_BROWSER_ICON and ZK_BROWSER_TITLE from the server [https://github.com/idempiere/idempiere/pull/2770 (#2770)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6529 IDEMPIERE-6529] Wrong cache for Window Names [https://github.com/idempiere/idempiere/pull/2778 (#2778)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6530 IDEMPIERE-6530] Mail Template parsing : Issues when no value and when searching for email address [https://github.com/idempiere/idempiere/pull/2776 (#2776)] [https://github.com/idempiere/idempiere/pull/2780 (#2780)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6531 IDEMPIERE-6531] _TabInfo_AD_Table_ID / _TabInfo_AD_Table_UU are missing from context [https://github.com/idempiere/idempiere/pull/2777 (#2777)] [https://github.com/idempiere/idempiere/pull/2779 (#2779)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6532 IDEMPIERE-6532] Regression: For Tab 0, Env.parseContext is always getting value from window context instead of from tab 0 context [https://github.com/idempiere/idempiere/pull/2781 (#2781)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6536 IDEMPIERE-6536] Find window sometime uses wrong GridTab to find search field [https://github.com/idempiere/idempiere/pull/2783 (#2783)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6537 IDEMPIERE-6537] MFA cookie is a session cookie [https://github.com/idempiere/idempiere/pull/2786 (#2786)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6538 IDEMPIERE-6538] Info Window error sorting by ASI [https://github.com/idempiere/idempiere/pull/2785 (#2785)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6539 IDEMPIERE-6539] Role Access Update - Created by / Updated by [https://github.com/idempiere/idempiere/pull/2787 (#2787)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6540 IDEMPIERE-6540] Import/Export script doesn't support Oracle running as Docker Container [https://github.com/idempiere/idempiere/pull/2790 (#2790)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6543 IDEMPIERE-6543] Error with Post-It on AD_User_Roles (FHCA) [https://github.com/idempiere/idempiere/pull/2795 (#2795)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6544 IDEMPIERE-6544] Chat window hides thread on Reply [https://github.com/idempiere/idempiere/pull/2794 (#2794)]&lt;br /&gt;
&lt;br /&gt;
== 2025-05-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6425 IDEMPIERE-6425] service cache make wrong order of service ranking (IInfoFactory case) [https://github.com/idempiere/idempiere/pull/2689 (#2689)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6476 IDEMPIERE-6476] Payment schedule is not getting updated with header record organization [https://github.com/idempiere/idempiere/pull/2734 (#2734)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6493 IDEMPIERE-6493] Error when executing Add or Copy Accounts [https://github.com/idempiere/idempiere/pull/2746 (#2746)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6496 IDEMPIERE-6496] Dynamic Validation not functioning in Attribute Set Instance (ASI) window: attribute dependency not respected [https://github.com/idempiere/idempiere/pull/2757 (#2757)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6498 IDEMPIERE-6498] Error when trying to register a time slot to a resource with an UoM without symbol [https://github.com/idempiere/idempiere/pull/2749 (#2749)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6502 IDEMPIERE-6502] Mobile UI enhancements [https://github.com/idempiere/idempiere/pull/2754 (#2754)] [https://github.com/idempiere/idempiere/pull/2769 (#2769)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6506 IDEMPIERE-6506] Translation cache not reset after update by user [https://github.com/idempiere/idempiere/pull/2756 (#2756)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6507 IDEMPIERE-6507] Issue using mail template / searching data on linked table [https://github.com/idempiere/idempiere/pull/2758 (#2758)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6508 IDEMPIERE-6508] Inconsistencies on images for detail panel in Single Mode [https://github.com/idempiere/idempiere/pull/2759 (#2759)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6509 IDEMPIERE-6509] Inconsistency on arrow to navigate on Detail Pane [https://github.com/idempiere/idempiere/pull/2762 (#2762)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6510 IDEMPIERE-6510] NPE on login : Cannot invoke &amp;quot;org.compiere.model.MCountry.getC_Country_ID()&amp;quot; because the return value of &amp;quot;org.compiere.model.MCountry.getDefault()&amp;quot; is null [https://github.com/idempiere/idempiere/pull/2760 (#2760)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6513 IDEMPIERE-6513] Error installing Cascade Delete plugin in release-12 [https://github.com/idempiere/idempiere/pull/2761 (#2761)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6520 IDEMPIERE-6520] Allow to use barcode in print format items for script types [https://github.com/idempiere/idempiere/pull/2764 (#2764)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6522 IDEMPIERE-6522] Re-packin a column can cause an error related to AD_Column_Trl [https://github.com/idempiere/idempiere/pull/2766 (#2766)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6523 IDEMPIERE-6523] Migration script comment is not appearing in Preference [https://github.com/idempiere/idempiere/pull/2767 (#2767)]&lt;br /&gt;
&lt;br /&gt;
== 2025-04-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5150 IDEMPIERE-5150] Support development with IntelliJ [https://github.com/idempiere/idempiere/pull/2721 (#2721)] [https://github.com/idempiere/idempiere/pull/2750 (#2750)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6241 IDEMPIERE-6241] Print item on next line not working in HTML incl Datatable. Adjusted both specification of HTML and DataTable reports to specification of PDF report. [https://github.com/idempiere/idempiere/pull/2743 (#2743)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6387 IDEMPIERE-6387] Asset Expense for the same period becomes two after asset addition [https://github.com/idempiere/idempiere/pull/2731 (#2731)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2755 (#2755)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6423 IDEMPIERE-6423] A field in the process dialog evaluates 'Default Logic' differently from 'ReadOnly/Display Logic, Mandatory Logic, GridField.backupValue' [https://github.com/idempiere/idempiere/pull/2737 (#2737)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6471 IDEMPIERE-6471] Prevent data corruption if a plugin is missing [https://github.com/idempiere/idempiere/pull/2736 (#2736)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6472 IDEMPIERE-6472] Payment - Amounts not recalculated if no BP/Inv leaving corrupt data [https://github.com/idempiere/idempiere/pull/2744 (#2744)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6478 IDEMPIERE-6478] InvoiceGenerate Consolidating Sales Order from Different Organizations [https://github.com/idempiere/idempiere/pull/2735 (#2735)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6483 IDEMPIERE-6483] repeat Callout annotation isn't working [https://github.com/idempiere/idempiere/pull/2738 (#2738)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6487 IDEMPIERE-6487] Make InfoPanel.ROW_ID_CTX_VARIABLE_NAME public [https://github.com/idempiere/idempiere/pull/2740 (#2740)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6488 IDEMPIERE-6488] Standardize what is triggered when a form is closed after being from an InfoWindow [https://github.com/idempiere/idempiere/pull/2741 (#2741)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6492 IDEMPIERE-6492] Various little fixes on User Panel [https://github.com/idempiere/idempiere/pull/2745 (#2745)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6495 IDEMPIERE-6495] Use SysConfig from css files [https://github.com/idempiere/idempiere/pull/2747 (#2747)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6497 IDEMPIERE-6497] Search for non business days on ScheduleUtil fails on Oracle [https://github.com/idempiere/idempiere/pull/2748 (#2748)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6500 IDEMPIERE-6500] Support Users vs Roles: problem when same user or role in several tenants [https://github.com/idempiere/idempiere/pull/2751 (#2751)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6501 IDEMPIERE-6501] Info Window error when a column has a FROM clause [https://github.com/idempiere/idempiere/pull/2752 (#2752)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6503 IDEMPIERE-6503] The calculator’s initial value carries over from the previous row at the grid view. [https://github.com/idempiere/idempiere/pull/2753 (#2753)]&lt;br /&gt;
&lt;br /&gt;
== 2025-04-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6441 IDEMPIERE-6441] Add default fallback foreign key to Copy Client (FHCA-6009) [https://github.com/idempiere/idempiere/pull/2722 (#2722)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6470 IDEMPIERE-6470] Fixed NPE when users search for a non-existing menu entry and hit enter [https://github.com/idempiere/idempiere/pull/2733 (#2733)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6472 IDEMPIERE-6472] Payment - Amounts not recalculated if no BP/Inv leaving corrupt data [https://github.com/idempiere/idempiere/pull/2728 (#2728)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6473 IDEMPIERE-6473] display logic on parameter that depend on field on window always return false (hot fix only) [https://github.com/idempiere/idempiere/pull/2730 (#2730)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-29 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5657 IDEMPIERE-5657] Postgresql 15 errors on import GL Journal [https://github.com/idempiere/idempiere/pull/2716 (#2716)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6408 IDEMPIERE-6408] Problem when sorting columns in an Info Window with Distinct [https://github.com/idempiere/idempiere/pull/2664 (#2664)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6457 IDEMPIERE-6457] Asterisk always colored in red for mandatory fields [https://github.com/idempiere/idempiere/pull/2719 (#2719)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6459 IDEMPIERE-6459] Improve test coverage of org.adempiere.base.ds and ImportEventDelegate [https://github.com/idempiere/idempiere/pull/2713 (#2713)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6461 IDEMPIERE-6461] Improve test coverage of org.compiere.util.Util [https://github.com/idempiere/idempiere/pull/2714 (#2714)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6462 IDEMPIERE-6462] Zoom to loaded data after Import File Loader [https://github.com/idempiere/idempiere/pull/2717 (#2717)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6464 IDEMPIERE-6464] Hide Jetty version from test.idempiere.org/adempiere [https://github.com/idempiere/idempiere/pull/2727 (#2727)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6466 IDEMPIERE-6466] IProcessParameterListener - add onInit method [https://github.com/idempiere/idempiere/pull/2723 (#2723)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6467 IDEMPIERE-6467] NPE on CalloutA_Depreciation_Workfile when set empty for number field [https://github.com/idempiere/idempiere/pull/2724 (#2724)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6468 IDEMPIERE-6468] Unit Test: add mockito support [https://github.com/idempiere/idempiere/pull/2725 (#2725)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-19 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6422 IDEMPIERE-6422] Remove calls for external dependencies [https://github.com/idempiere/idempiere/pull/2715 (#2715)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-18 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6419 IDEMPIERE-6419] Replacing environment values with dummy values in the Validate Info window does not work for timestamps [https://github.com/idempiere/idempiere/pull/2712 (#2712)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6422 IDEMPIERE-6422] Remove calls for external dependencies [https://github.com/idempiere/idempiere/pull/2709 (#2709)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6456 IDEMPIERE-6456] GridWindowVO.AD_Table_ID is not initialized when window is loaded from cache [https://github.com/idempiere/idempiere/pull/2710 (#2710)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4827 IDEMPIERE-4827] Unify Evaluatee Implementation - fix import CSV process [https://github.com/idempiere/idempiere/pull/2703 (#2703)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6421 IDEMPIERE-6421] Make the &amp;quot;Server started&amp;quot; email configurable to enable/disable [https://github.com/idempiere/idempiere/pull/2705 (#2705)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6437 IDEMPIERE-6437] remove dup line in sonarqube.yml&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6445 IDEMPIERE-6445] SimplePDFViewer don't respect agrument title (file name) [https://github.com/idempiere/idempiere/pull/2699 (#2699)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6448 IDEMPIERE-6448] Fix some issues from SonarQube analysis [https://github.com/idempiere/idempiere/pull/2702 (#2702)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6449 IDEMPIERE-6449] Target platform state is missing org.jvnet.mimepul.mimepull:1.9.14 with Eclipse 2024-12 [https://github.com/idempiere/idempiere/pull/2704 (#2704)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6450 IDEMPIERE-6450] Servlets should not have mutable instance fields java:S2226 [https://github.com/idempiere/idempiere/pull/2706 (#2706)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6451 IDEMPIERE-6451] missing linkedin icon on idempiere 12 homepage [https://github.com/idempiere/idempiere/pull/2707 (#2707)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6452 IDEMPIERE-6452] Import of Bank Statements is in random order [https://github.com/idempiere/idempiere/pull/2708 (#2708)]&lt;br /&gt;
&lt;br /&gt;
== 2025-03-04 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3040 IDEMPIERE-3040] Invoice Price Variations for Average PO costing method - fix java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. [https://github.com/idempiere/idempiere/pull/2697 (#2697)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4925 IDEMPIERE-4925] Fixed bug cause by original commit that made QtyCount and InternalQty read only on inventory windows [https://github.com/idempiere/idempiere/pull/2700 (#2700)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6385 IDEMPIERE-6385] [QuickForm] - Problem with quickform sorting [https://github.com/idempiere/idempiere/pull/2698 (#2698)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6443 IDEMPIERE-6443] address(C_Location) is not print when city is empty(null) [https://github.com/idempiere/idempiere/pull/2696 (#2696)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6446 IDEMPIERE-6446] Problem detected after update.sh and update-prd.sh is ran several times [https://github.com/idempiere/idempiere/pull/2701 (#2701)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-28 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5570 IDEMPIERE-5570] Zk: Improve readability of code [https://github.com/idempiere/idempiere/pull/2693 (#2693)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6347 IDEMPIERE-6347] Update default font-family setting - decrease 1px [https://github.com/idempiere/idempiere/pull/2673 (#2673)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6437 IDEMPIERE-6437] Change sonarqube analysis to manual workflow [https://github.com/idempiere/idempiere/pull/2691 (#2691)] [https://github.com/idempiere/idempiere/pull/2692 (#2692)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6440 IDEMPIERE-6440] Sequence Check is creating ID sequence for non-existing column [https://github.com/idempiere/idempiere/pull/2695 (#2695)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6442 IDEMPIERE-6442] can't edit org_info of org &amp;quot;*&amp;quot; [https://github.com/idempiere/idempiere/pull/2694 (#2694)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-24 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6329 IDEMPIERE-6329] Bug in BOM* SQL functions not getting the correct BOM children [https://github.com/idempiere/idempiere/pull/2683 (#2683)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6428 IDEMPIERE-6428] v12 - Issue with custom toolbar buttons (Action) which are not shown [https://github.com/idempiere/idempiere/pull/2682 (#2682)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6429 IDEMPIERE-6429] Missing images in iceblue_c theme [https://github.com/idempiere/idempiere/pull/2681 (#2681)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6431 IDEMPIERE-6431] missing field suggestion icon image on popup menu [https://github.com/idempiere/idempiere/pull/2684 (#2684)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6432 IDEMPIERE-6432] Fix links in Home server page [https://github.com/idempiere/idempiere/pull/2685 (#2685)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6436 IDEMPIERE-6436] Error inserting permission record for System Administrator role (FHCA-6351) [https://github.com/idempiere/idempiere/pull/2690 (#2690)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] Could not invoke Toolbar listener method: onSave - NPE on GridTab.fireDataStatusChanged [https://github.com/idempiere/idempiere/pull/2672 (#2672)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2981 IDEMPIERE-2981] Add missing header in new WJsonEditor class [https://github.com/idempiere/idempiere/pull/2678 (#2678)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6387 IDEMPIERE-6387] Asset Expense for the same period becomes two after asset addition [https://github.com/idempiere/idempiere/pull/2677 (#2677)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2674 (#2674)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6407 IDEMPIERE-6407] Payment Selection (Manual) - NPE when there is no conversion rate [https://github.com/idempiere/idempiere/pull/2663 (#2663)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6409 IDEMPIERE-6409] Charts not rendered on certain conditions [https://github.com/idempiere/idempiere/pull/2665 (#2665)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6420 IDEMPIERE-6420] The Info column description is incorrect because it uses [https://github.com/idempiere/idempiere/pull/2676 (#2676)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6426 IDEMPIERE-6426] Implement CrossTenantExceptions to manage tenant access restrictions errors [https://github.com/idempiere/idempiere/pull/2679 (#2679)]&lt;br /&gt;
&lt;br /&gt;
== 2025-02-01 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4580 IDEMPIERE-4580] Update credits file with new dev&amp;amp;Co name and logo [https://github.com/idempiere/idempiere/pull/2661 (#2661)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6397 IDEMPIERE-6397] PostgreSQL json datatype doesn't works well with JSON field editor [https://github.com/idempiere/idempiere/pull/2654 (#2654)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6398 IDEMPIERE-6398] Server crash after a user without report permission tries to run a report [https://github.com/idempiere/idempiere/pull/2655 (#2655)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6399 IDEMPIERE-6399] Deadlock at Web service [https://github.com/idempiere/idempiere/pull/2656 (#2656)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6400 IDEMPIERE-6400] Hide Print, Archive and report menu options and buttons for roles that cannot report [https://github.com/idempiere/idempiere/pull/2660 (#2660)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6403 IDEMPIERE-6403] Drafted payment cannot be deleted after printing [https://github.com/idempiere/idempiere/pull/2659 (#2659)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6406 IDEMPIERE-6406] Create AD_message for errors in import csv [https://github.com/idempiere/idempiere/pull/2662 (#2662)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6412 IDEMPIERE-6412] Improve MChart.getData response by using camel case [https://github.com/idempiere/idempiere/pull/2667 (#2667)]&lt;br /&gt;
* Revert &amp;quot;[https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] NPE on GridTab.m_DataStatusEvent / change approach from volatile to synchronized [https://github.com/idempiere/idempiere/pull/2623 (#2623)]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 2025-01-25 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4827 IDEMPIERE-4827] Unify Evaluatee Implementation [https://github.com/idempiere/idempiere/pull/2652 (#2652)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4925 IDEMPIERE-4925] Adding column for UOM and QtyEntered on Inventory Move [https://github.com/idempiere/idempiere/pull/2636 (#2636)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5647 IDEMPIERE-5647] Allow definition of context variables by Role [https://github.com/idempiere/idempiere/pull/2649 (#2649)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2653 (#2653)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6389 IDEMPIERE-6389] Move test done in AmtInWords_ES.main to the unit tests package [https://github.com/idempiere/idempiere/pull/2646 (#2646)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6396 IDEMPIERE-6396] Adding Support for context variable in HTML_REPORT_THEME sys config [https://github.com/idempiere/idempiere/pull/2650 (#2650)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-23 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2651 (#2651)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-22 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3031 IDEMPIERE-3031] Tooltips cannot be set on column headers in some forms [https://github.com/idempiere/idempiere/pull/2638 (#2638)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5136 IDEMPIERE-5136] Set Messages at tenant level - Add Title Logic to the Window [https://github.com/idempiere/idempiere/pull/2647 (#2647)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6365 IDEMPIERE-6365] RefTable with not ID as KeyColumn can't be translated [https://github.com/idempiere/idempiere/pull/2619 (#2619)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6383 IDEMPIERE-6383] Create Message Record for &amp;quot;Total Base Value is 0&amp;quot; [https://github.com/idempiere/idempiere/pull/2639 (#2639)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6384 IDEMPIERE-6384] Implement GenericPO UUID constructors [https://github.com/idempiere/idempiere/pull/2640 (#2640)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6386 IDEMPIERE-6386] Detail tabs don't have control over slow or big queries (FHCA-6139) [https://github.com/idempiere/idempiere/pull/2643 (#2643)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6388 IDEMPIERE-6388] Fix some errors in AmtInWords_ES [https://github.com/idempiere/idempiere/pull/2644 (#2644)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6391 IDEMPIERE-6391] SaveError when Create Bank Transfer Via REST [https://github.com/idempiere/idempiere/pull/2645 (#2645)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-10 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4302 IDEMPIERE-4302] remove unnecessary code [https://github.com/idempiere/idempiere/pull/2625 (#2625)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Costing details by Account Date [https://github.com/idempiere/idempiere/pull/2435 (#2435)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6314 IDEMPIERE-6314] Issues with attachment on System records [https://github.com/idempiere/idempiere/pull/2626 (#2626)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6339 IDEMPIERE-6339] Focused button is not highlighted with the new theme [https://github.com/idempiere/idempiere/pull/2633 (#2633)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6355 IDEMPIERE-6355] Virtual UI column type date field cause record to display as not saved [https://github.com/idempiere/idempiere/pull/2615 (#2615)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6361 IDEMPIERE-6361] Document being closed when user does not have read and write access [https://github.com/idempiere/idempiere/pull/2621 (#2621)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6364 IDEMPIERE-6364] Make Menu Search Highlight Accent Insensitive [https://github.com/idempiere/idempiere/pull/2618 (#2618)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6369 IDEMPIERE-6369] iDempiere 12 server startup error on Windows [https://github.com/idempiere/idempiere/pull/2635 (#2635)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6370 IDEMPIERE-6370] Improve Menu Tree Filter Popup options by showing the item name next to the image&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6371 IDEMPIERE-6371] testPrintWithLocalFile unit test failed on windows [https://github.com/idempiere/idempiere/pull/2628 (#2628)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6373 IDEMPIERE-6373] Update IDempiere Home Page [https://github.com/idempiere/idempiere/pull/2629 (#2629)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6375 IDEMPIERE-6375] Add missing quantities to RV_Storage_per_product view [https://github.com/idempiere/idempiere/pull/2631 (#2631)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6379 IDEMPIERE-6379] Charts not honoring Display Legend flag [https://github.com/idempiere/idempiere/pull/2634 (#2634)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6380 IDEMPIERE-6380] MRoleOrgAccess and MUserOrgAccess .get are returning inactive records [https://github.com/idempiere/idempiere/pull/2632 (#2632)]&lt;br /&gt;
&lt;br /&gt;
== 2025-01-05 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-2449 IDEMPIERE-2449] NPE on GridTab.m_DataStatusEvent / change approach from volatile to synchronized [https://github.com/idempiere/idempiere/pull/2623 (#2623)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6350 IDEMPIERE-6350] ToolbarProcessButton doesn't use process Process Customization for Name and Description [https://github.com/idempiere/idempiere/pull/2603 (#2603)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6351 IDEMPIERE-6351] Process called from Info Window do not use process Process Customization for Name and Description [https://github.com/idempiere/idempiere/pull/2604 (#2604)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6362 IDEMPIERE-6362] Update SyncDB for MacOsx Compatibility [https://github.com/idempiere/idempiere/pull/2616 (#2616)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6367 IDEMPIERE-6367] Problem rendering info window columns vs gridfields [https://github.com/idempiere/idempiere/pull/2622 (#2622)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6368 IDEMPIERE-6368] Improve execution of Task [https://github.com/idempiere/idempiere/pull/2624 (#2624)]&lt;br /&gt;
&lt;br /&gt;
== 2024-12-27 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-3989 IDEMPIERE-3989] fast entity type identification - backward compatibility [https://github.com/idempiere/idempiere/pull/2606 (#2606)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6349 IDEMPIERE-6349] Add M49 country codes to the C_Country table (FHCA-6138) [https://github.com/idempiere/idempiere/pull/2609 (#2609)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6352 IDEMPIERE-6352] Missing @Deprecated annotation [https://github.com/idempiere/idempiere/pull/2607 (#2607)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6354 IDEMPIERE-6354] User Locking mechanism broken [https://github.com/idempiere/idempiere/pull/2610 (#2610)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6336 IDEMPIERE-6336] Fix NPE on MRefList.getList [https://github.com/idempiere/idempiere/pull/2613 (#2613)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23820</id>
		<title>ChangeLog Release 13</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ChangeLog_Release_13&amp;diff=23820"/>
		<updated>2026-04-13T10:29:20Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Maintenance release-13&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintainer: [[User:CarlosRuiz|Carlos Ruiz]]&lt;br /&gt;
&lt;br /&gt;
Strategy: Integration of bug fixes, and some non-disruptive features&lt;br /&gt;
&lt;br /&gt;
Schedule: A new release is prepared approximately every 1 or 2 weeks&lt;br /&gt;
&lt;br /&gt;
== 2026-04-13 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6643 IDEMPIERE-6643] Refinement of WebSocket Server Push - restore back Atmosphere as default [https://github.com/idempiere/idempiere/pull/3224 (#3224)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6873 IDEMPIERE-6873] Enable Returning NULL Values When Using Negated Multi-Selection Filters [https://github.com/idempiere/idempiere/pull/3217 (#3217)] [https://github.com/idempiere/idempiere/pull/3130 (#3130)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6926 IDEMPIERE-6926] Financial Report Blank Lines are not Blank [https://github.com/idempiere/idempiere/pull/3213 (#3213)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6954 IDEMPIERE-6954] Error when saving a new tree node are not reflected on WTreeMaintenance [https://github.com/idempiere/idempiere/pull/3218 (#3218)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6956 IDEMPIERE-6956] Bug in Favorites with two folders [https://github.com/idempiere/idempiere/pull/3222 (#3222)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6957 IDEMPIERE-6957] Export Translation is failing to export System and GardenWorld at the same time + invalid DTD comment [https://github.com/idempiere/idempiere/pull/3221 (#3221)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6961 IDEMPIERE-6961] Make MUser.cleanValue public [https://github.com/idempiere/idempiere/pull/3226 (#3226)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6962 IDEMPIERE-6962] Receipt completion is slow or times out when invoice is created before receipt [https://github.com/idempiere/idempiere/pull/3227 (#3227)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6963 IDEMPIERE-6963] Env.parseContextForSql create wrong parameter type for _ID context variable with default value [https://github.com/idempiere/idempiere/pull/3229 (#3229)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-30 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-4877 IDEMPIERE-4877] In Financial Report PDF format, Footer is overlay on content [https://github.com/idempiere/idempiere/pull/3208 (#3208)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-5939 IDEMPIERE-5939] If Financial report marked as List Source and List Transactions both with Report cube, it throw SQL exceptions [https://github.com/idempiere/idempiere/pull/2910 (#2910)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6203 IDEMPIERE-6203] Back-dating costing [https://github.com/idempiere/idempiere/pull/3085 (#3085)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6650 IDEMPIERE-6650] Performance - Implement support for using the uuid postgres datatype (FHCA-7074) [https://github.com/idempiere/idempiere/pull/3199 (#3199)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6888 IDEMPIERE-6888] Add index on PA_DashboardPreference : AD_User_ID/AD_Role_ID/PA_DashboardContent_ID [https://github.com/idempiere/idempiere/pull/3160 (#3160)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6909 IDEMPIERE-6909] NPE in Material Transactions form [https://github.com/idempiere/idempiere/pull/3203 (#3203)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6911 IDEMPIERE-6911] MDunningRun.getEntries should return only active records [https://github.com/idempiere/idempiere/pull/3209 (#3209)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-20 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6712 IDEMPIERE-6712] Improve algorithm for password hashing and salt (DAD-103) [https://github.com/idempiere/idempiere/pull/3192 (#3192)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6738 IDEMPIERE-6738] Problem in Find Dialog - fix equal query with int instead of String [https://github.com/idempiere/idempiere/pull/3202 (#3202)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6871 IDEMPIERE-6871] Field/Label color fails to evaluate context correctly when switching between records [https://github.com/idempiere/idempiere/pull/3165 (#3165)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6887 IDEMPIERE-6887] WPAttributeDialog Missing M_Product_ID in Context [https://github.com/idempiere/idempiere/pull/3182 (#3182)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6904 IDEMPIERE-6904] Fixed typo in MSetup causing non-localized Msg.getElement string [https://github.com/idempiere/idempiere/pull/3197 (#3197)]&lt;br /&gt;
* Revert [https://idempiere.atlassian.net/browse/IDEMPIERE-6824 IDEMPIERE-6824]: Stack overflow on login if user substitute exists and role has non master role as included role [https://github.com/idempiere/idempiere/pull/3128 (#3128)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-12 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3190 (#3190)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6828 IDEMPIERE-6828] Matched PO Status &amp;quot;Deferred&amp;quot; not being posted upon MR match [https://github.com/idempiere/idempiere/pull/3151 (#3151)]&lt;br /&gt;
&lt;br /&gt;
== 2026-03-11 ==&lt;br /&gt;
&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6647 IDEMPIERE-6647] Improve test coverage of org.adempiere.base [https://github.com/idempiere/idempiere/pull/3186 (#3186)]&lt;br /&gt;
* [https://idempiere.atlassian.net/browse/IDEMPIERE-6820 IDEMPIERE-6820] Add multi tenant support to SSO (DAD-209) [https://github.com/idempiere/idempiere/pull/3177 (#3177)]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Marketing_Committee_Meeting_20260410&amp;diff=23815</id>
		<title>Marketing Committee Meeting 20260410</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Marketing_Committee_Meeting_20260410&amp;diff=23815"/>
		<updated>2026-04-10T13:36:01Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: Marketing Meeting Summary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''''Date''''': 2026-04-10&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Time''''': 12:00 UTC&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Venue''''': Mattermost - Channel: Marketing&amp;lt;br&amp;gt;&lt;br /&gt;
'''''Called by''''': [[Marketing Committee]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
[[Category:Marketing]]&lt;br /&gt;
[[Category:Marketing Committee Meetings]]&lt;br /&gt;
[[Category:Meetings|0]]&lt;br /&gt;
[[Category:Meetings 2026]]&lt;br /&gt;
&lt;br /&gt;
You can find the detailed meeting here:&amp;lt;br&amp;gt;&lt;br /&gt;
https://mattermost.idempiere.org/idempiere/pl/hj4fcnz5ztnafb4eycaouujcga&lt;br /&gt;
&lt;br /&gt;
Summary of the day&amp;lt;br&amp;gt;&lt;br /&gt;
Participation&amp;lt;br&amp;gt;&lt;br /&gt;
Meeting led by: [[User:Diego.ruiz|Diego]]&amp;lt;br&amp;gt;&lt;br /&gt;
Meeting notes and follow-up actions: [[User:Diego.ruiz|Diego]]&amp;lt;br&amp;gt;&lt;br /&gt;
Attendance list: [[User:Chuckboecking|Chuck]], [[User:Dpansheriya|Deepak]], [[User:Diego.ruiz|Diego]], [[User:CarlosRuiz|Carlos]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# What's new since last meeting&lt;br /&gt;
#* CORE&lt;br /&gt;
#* Bug fixes&lt;br /&gt;
#** IDEMPIERE-4877 In Financial Report PDF format, Footer is overlay on content&lt;br /&gt;
#** IDEMPIERE-6643 Refinement of WebSocket Server Push - restore back Atmosphere as default&lt;br /&gt;
#** IDEMPIERE-6956 Bug in Favorites with two folders&lt;br /&gt;
#* Development Improvements&lt;br /&gt;
#** IDEMPIERE-6793 Move Accounting Implementation Classes to org.idempiere.acct - fix unit tests failing&lt;br /&gt;
#** IDEMPIERE-6961 Make MUser.cleanValue public&lt;br /&gt;
#* Functional Improvements&lt;br /&gt;
#** IDEMPIERE-6873 Enable Returning NULL Values When Using Negated Multi-Selection Filters&lt;br /&gt;
#* Usability Improvements&lt;br /&gt;
#** IDEMPIERE-6908 Implement iDempiere Extension Management&lt;br /&gt;
#** IDEMPIERE-6926 Financial Report Blank Lines are not Blank&lt;br /&gt;
#* Community News&lt;br /&gt;
#** Conference in Venice confirmed! You can buy your tickets now at https://venice.idempiere.org/.&lt;br /&gt;
#** Call for proposals now open: Submit your session idea and become part of the team! Speakers receive a 10% discount on the conference ticket. Apply now and join the community on stage. &lt;br /&gt;
#** Financial report published&lt;br /&gt;
# Conference 2026 in Venice (follow up)&lt;br /&gt;
#* We need to improve the website because it is not showing up on search engines&lt;br /&gt;
#* We reply to ZK positively with the suggestion made by Carlos Ruiz &lt;br /&gt;
# Marketplace&lt;br /&gt;
#* We continue the discussion next week&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23814</id>
		<title>IDempiere World Conference 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_World_Conference_2026&amp;diff=23814"/>
		<updated>2026-04-10T12:37:53Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: add URL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The iDempiere World Conference 2026 in Venice&lt;br /&gt;
&lt;br /&gt;
https://venice.idempiere.org/&lt;br /&gt;
---------------------------------------------&lt;br /&gt;
14-19 September 2026 &lt;br /&gt;
&lt;br /&gt;
14-15 September &lt;br /&gt;
iDempiere World conference - 2 Days&lt;br /&gt;
* Talks &lt;br /&gt;
&lt;br /&gt;
16 September &lt;br /&gt;
Free Day&lt;br /&gt;
&lt;br /&gt;
17 September&lt;br /&gt;
End User Day&lt;br /&gt;
&lt;br /&gt;
18-19 September&lt;br /&gt;
Developer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Workshop =&lt;br /&gt;
&lt;br /&gt;
After the conference days there was the [[IDempiere workshop 2025]]&lt;br /&gt;
&lt;br /&gt;
=Previous conferences=&lt;br /&gt;
* [[IDempiere_World_Conference_2023]]&lt;br /&gt;
* [[IDempiere_World_Conference_2019]]&lt;br /&gt;
* [[IDempiere_World_Conference_2015]]&lt;br /&gt;
* [[IDempiere_World_Conference_2013]]&lt;br /&gt;
* [[IDempiere_Workshop_2014]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Conference]]&lt;br /&gt;
[[Category:Community|M]]&lt;br /&gt;
[[Category:Meetings|9]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Payments_into_Batch_(Window_ID-200031)&amp;diff=23812</id>
		<title>Payments into Batch (Window ID-200031)</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Payments_into_Batch_(Window_ID-200031)&amp;diff=23812"/>
		<updated>2026-04-09T10:09:08Z</updated>

		<summary type="html">&lt;p&gt;CarlosRuiz: /* Contributions / Posts */ link to docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- breadcrumb --&amp;gt;&lt;br /&gt;
&amp;lt;font size=-2&amp;gt;&lt;br /&gt;
&amp;amp;lArr;&lt;br /&gt;
[[Manual|Table of Contents]]&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Manual|W]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Note to editors: DON'T MODIFY THIS CODE --&amp;gt;&lt;br /&gt;
[[Category: Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
{{Payments_into_Batch_(Window_ID-200031_V1.0.0)}}&lt;br /&gt;
&amp;lt;!-- END Note to editors: DON'T MODIFY THIS CODE --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contributions / Posts==&lt;br /&gt;
&lt;br /&gt;
See [[NF1.0 Payment Batch]] and [[NF12 Multiple Payments against statement line by Payment Batch]]&lt;/div&gt;</summary>
		<author><name>CarlosRuiz</name></author>
	</entry>
</feed>