Lianja 6.0 will be the next general release expected in March.

I have uploaded Lianja 6.0RC20 for Windows, Linux and MacOS for those of you who have access to pre-release versions.

This is pre-release software so it should not be used in production.

Changes since 5.5.1...

  1. Added several new cursoradaptor properties (for Virtual Tables). "includememos" and "includeblobs". These cause long varchar and varbinary fields in VTs to be saved to remote database servers in desktop apps. Currently supports MySQL, MSSQL and POSTGRES.
  2. LIanja 6 now "Requires a runtime distribution license for Desktop/LAN App distribution". These are sold in packs of 25. Pricing will be made available on launch.
  3. Further enhancements to split grid editing in Desktop and Web Apps.
  4. Split screen grid editing now works in web apps. See this forum post for details.
  5. SQL SELECT can be used now to create the navigation panel in web just as it can in desktop. All low-code. Minimum coding. See this forum post for details.
  6. Console tool: lianja-lpk now handles 'build', 'add' and 'refresh' options.
  7. Help Table is now supported in Web Apps.
  8. Support for dynamically loadable LianjaScript modules as described here.
  9. Added several new methods to custom grids. hideRow(nIndex), showRow(nIndex), hideAllRows(), showAllRows(). nIndex is 1 based.
  10. Simplified One click deployment of packages to Lianja Cloud Server (local and remote) in the "Deploy" workspace. If you have "Autoupdate" checked on the server the packages will be auto installed/upgraded. Make sure you test your Apps in "Live Preview" before uploading. When deploying using http(s) and an API Key, the package to be deployed is rebuilt before deployment.
  11. Added LIST LIBRARY to list all libraries currently loaded.
  12. Added split screen script editing with doc as described here.
  13. Fixed SQL issue with SQL SELECT name, count(*) as cnt GROUP BY name HAVING cnt =1
  14. Fixed an issue with SQL INNER JOIN.
  15. The SQL SELECT MIN() and MAX() aggregate functions now handle a list of arguments e.g min(x,y,z). They now also handle Numeric, Date, Datetime, Currency and Character data types.
  16. Improved COMPARE DATABASE. An optimized upgrade.prg file is now generated.
  17. App Doc and Database Doc improvements. App Doc now contains Grid columns.
  18. The section attributes "VisibleWhen" and "ReadonlyWhen" can now reference "this" and "thisform" e.g readonlywhen could be set to !this.editing which causes the section to be readonly unless in edit mode.
  19. Exposed the "state" and "uistate" attributes for LIanja, page and section objects. "State" is a comma separated list of states that the UI element handles. "uistate" is the last state the UI element was put into.
  20. The "Enabled when Editing" attribute is now active on "Canvas", "Form", "grid" "attachments" sections. This is only effective in runtime mode. It causes sections to be readonly until editing is in effect.
  21. Added Lianja.args in desktop and web.
  22. Enhanced PWA support with payment processing and other improvements.
  23. Added some new delegates for web apps. OrientationChanged, DeviceMotionChanged, ConnectionChanged.
  24. Added lianja-comp command line tool.
  25. The MacOS Lianja distribution is now notarized by Apple.

    "Notarization gives users more confidence that the Developer ID-signed software distributed has been checked by Apple for malicious components. When the user first installs or runs your software, the presence of a ticket (either online or attached to the executable) tells Gatekeeper that Apple notarized the software. Gatekeeper then places descriptive information in the initial launch dialog to help the user make an informed choice about whether to launch the app."
  26. Enhanced "Lianja Command Line Tools". These are run as commands in Terminal on MacOS and Linux and in a command window on Windows.

    lianja filename.lpk

    The lianja command now allows Lianja packages to be installed and run. it assumes that an app with the same name as the package is included in the package. It it has already been installed and the version is the same them the app will be run without being updated. Additionally, on installation lpk files are associated with the Lianja executable. Double click an lpk file in explorer and it will be (optionally) installed and run.


    Improved error reporting to help troubleshoot licensing issues.


    lianja-lm --validate

    This can be used to run scripts or execute a ; separated list of commands (the -c option). If —runtime is specified the commands operate against the runtime otherwise they operate within the context of the app builder.


    lianjarun -c " select * from southwind!customers where customerid='blond' "

    This new command can be used to “list” the contents of a package or “install” a package from the command line.


    lianja-lpk list c:\lianja\packages\myapp-1.0.lpk
  27. Added improved package management for "Team Development and Release Management" in the "Deploy" workspace. You create packages in the "Deploy" workspace and publish them in the "Team" or "Release" repositories. You can now "Unpublish" a published package and "List" packages that have been published.
  28. Grid section "Summary" can now (optionally) include Min, Max, Average, Total. See example_webapp1 for an example of this in operation.
  29. Added "Responsive UI" breakpoint attributes to the App doc generated.
  30. Faster loading of Apps with Virtual Tables that have parameterized views.
  31. SET RUSHMORE ON enables rushmore-style index scanning optimization in all NoSQL commands and SQL commands.
  32. Improved SQL optimizer with filtered indexes. (Hint: use the EXPLAIN command to see what's happening).
  33. Added the IN clause to all NoSQL commands that operate on work areas (cursors). This should be placed after the command keyword; USE, REPLACE, APPEND, REPLACE, COUNT, SUM, AVERAGE, CALCULATE, SCAN, LOCATE, CONTINUE.
  34. Added BACKUP/RESTORE DATABASE [FROM "<backup-datetime>"] and LIST BACKUPS commands.
  35. Performance improvements when bulk loading tables using APPEND FROM, APPEND BLANK <nExpr> and GENERATE <nExpr>. SET SYSTIMELINE OFF is automatically executed and turned back on afterwards.
  36. Performance improvement when using the COUNT command with no filter condition.
  37. Added additional information to DIR command when no database open.
  38. Added additional information to the LIST STRUCTURE command with VTs.
  39. Added new App attribute "Enable PerfMeter" which shows the perfmeter in the "Console" workspace for long operations.
  40. Added a StatusBar to the console workspace. SET PERFMETER ON if you want to see a progress bar displayed in the StatusBar when performing long operations.
  41. Fixed a caching issue with very large SQL queries (millions of records) that would cause a crash.
  42. Mailing label printing now supported as described here.
  43. Improved error reporting.
  44. Enhanced "image strip" section with editable notes.
  45. Page, section and formitems names can now contain _ in desktop/web/mobile apps.
  46. Virtual Tables bound to sections have much improved performance of section relationships. No need for custom code in the parentdatachanged delegate any more. The relationship is now satisfied using requery() on the child data source.
  47. Grid columns. New attribute, “Visible When Editing”. Columns are hidden until the grid row is being edited. This provides a better UI grid for mobile devices.
  48. Switching between Pages, Sections, Formitems and GridColumn attributes now maintains the “search” text. This speeds up the reviewing of attributes during development.
  49. When using the debugger with LianjaScript, clicking the “Stop” icon now cancels execution when the debugger is active.
  50. Lianja.showDialog() and Lianja.showDialogPanel() are now responsive in web / mobile. This can be seen when using the “QueryBuilder” on mobile devices.
  51. *new* App UiLibs. Design pages visually then add them to the App UiLib enabling them to be used with lianja.showDialog() and Lianja.showDialogPanel(). Check the page attribute “Register in UiLib”. The pages are not included in the pages menu but can be used with dialogs by specifying “page: pagename” as the file name.
  52. DialogPanels can be be shown on top of existing ones. So for example if a page in the UiLib contains a grid section, then editing a row in the grid will overlay the grid with the “EDIT FORM” and clicking “Done” or “Cancel” will switch back to the previous DialogPanel i.e the grid section. This provides smoother UI transitions and a better mobile experience when screen size is limited.
  53. Added two new delegates to "Grid" sections, "Interactive Change" and "Row/Col Change". Both of these delegates are passed three arguments.
    (nRow, nColumn, cValue)
    These correspond to the cell row, column and value in the cell which is always passed as a character string.
  54. Added some new VT properties:


    This is called to translate a native Lianja SQL WHERE condition for a target SQL database syntax. Called with cWhereCondition, cDBtype.
    This should reside in the database container.


    Use this to correct ODBC interpretation of BIT field in MySQL


    Where options are database specific.

    e.g. for ODBC to increase packet size

  55. Various UI tweaks and improvements.
  56. Performance and stability improvements.
  57. Various bug fixes.