Home | Sign in | English UK
New WINDEV, WEBDEV, WINDEV Mobile 25 feature!
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WindowsLinuxPHPWEBDEV - Browser code
AndroidAndroid Widget iPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Stored procedures
101 Smart controls ready to use : concept
Version 25 innovates with a new concept of control: the Smart control. This control (or group of controls) is ready to use, and includes "business" WLanguage code where necessary.
Thanks to the Smart controls, you can add sophisticated behaviors to your applications with a single click.
101 Smart controls are available in version 25: Twitter, Instagram, Signature, Countdown, Date range selection, Menu with drawers, Workflow, Cookie consent, Process monitoring...
Smart control : entirely customizable
Smart controls are composed of:
  • 1 or several controls.
  • WLanguage code.
  • in some cases, data files (tables) necessary for their processes (e. g. postal code database).
Everything is easily editable and customizable: code, position, size, anchoring, data links...
Smart controls are of course free to use and distribute with your applications.
The code provided is as standard and simple as possible so that you can easily modify it.
Smart control : easy to find
Smart controls are presented like the other controls, but they can be viewed in a dedicated window of the editor.
This allows you to understand their purpose and target at a glance.
Easily select Smart controls from the environment
Easily select Smart controls from the environment
Smart control : code example
The code included in a Smart control is clear and easy to modify.
Depending on the desired type of process, the code contains from a few to several hundreds of lines.
Here is a code example from the "Button with Progress Bar" Smart control.
Add your code to LongProcess and you will get a superb non-blocking progress bar in your application.
BTN_Process..State = Grayed
PROGBAR_Progress..Visible = True
LongProcess()// long process run in a thread
INTERNAL PROCEDURE LongProcess () <thread>
// TODO code of long process here
// xxx
// Refresh UI in main thread
// Update interface controls (UI)
INTERNAL PROCEDURE EndOfLongProcess <main thread>
PROGBAR_Progress..Visible = False
BTN_Process..State = Active
Smart control : it automatically adapts to the skin template of your application
When a Smart control is dropped in a window or page, it immediately adapts to its skin template or skin.
The example opposite shows the Timeline Smart control used in 3 different applications.
Once the Smart control is inserted in the window, simply resize the control, and adapt the WLanguage code that comes with it.
Here, the number of steps and the text displayed have been adapted.
For this example, the Vertical TimeLine
For this example, the Vertical TimeLine "Process Monitoring" Smart control (and its code)
is used in 3 different applications
101 Smart controls
Find the list of the 101 Smart controls available for each target in their respective sections:
  • new feature 167 on pages 40 to 43 for WINDEV 25.
  • new feature 670 on pages 56 & 57 for WINDEV Mobile 25.
  • new feature 750 on pages 72 & 73 for WEBDEV 25.
Take advantage of these new controls!
The Word Processing control evolves favorably in version 25.
Word Processing control: style editing
Text styles can now be created and edited with a simple right click.
Visual style editing
Visual style editing
Word Processing control : table of contents
In version 25, you can automatically generate a table of contents in a document.
The automatic generation of the table of contents is based on the styles used in the document.
The table of contents can be generated by programming.
The tables of contents of existing ".DOCX" documents are displayed.
Automatic table of contents
Automatic table of contents
Word Processing control: manage SDT tags
SDT tags (Standard Document Tag) are managed by the WP control in version 25.
Text between SDT tags is processed.
Word Processing control : page number displayed in the ribbon
In version 25, the number of the current page and the total number of pages in the document are displayed in the ribbon.
The page number control allows for input. Entering the page number takes you directly to that page.
The tooltip in the scrollbar track indicates the number of the current page.
Number of pages displayed in the ribbon
Number of pages displayed in the ribbon
Word Processing control: miscellaneous
You can change the color of formatting marks.
Spreadsheet control: comments on cells
In version 25, the Spreadsheet control allows you to enter and display comments associated with a cell.
Comments in existing XLSX documents are managed.
Comment on a cell
Comment on a cell
Spreadsheet control : move cells with the mouse
In version 25, the end user can move cells and groups of cells using the mouse.
Simply select the border.
Spreadsheet control : copy/paste text with CR and TAB
In version 25, text can be copied/pasted taking into account Carriage Returns (CR) and tabulations (Tab).
Each CR sends the following text to the line below.
Each TAB sends the following text to the cell on the right.
PDF Reader control : allow end user to save
The PDF Reader control now allows the user to save the file displayed.
This is useful, for example, when the end user has rotated a page.
This feature can be disabled.
PDF Reader control : scrollbar
The scrollbar track in the PDF Reader control now indicates the current page number (and total number of pages).
New Comparative Histogram Chart control (Age pyramid, etc.)
A new type of chart has been added to the family in version 25: the Comparative Histogram chart.
This type of chart is mainly used to compare 2 series.
The most common example is an age pyramid.
The new Comparative Histogram chart
The new Comparative Histogram chart
Age pyramid chart
Age pyramid chart
New Comparative Histogram Chart control : features
The new "Comparative Histogram" Chart control offers rich functionalities:
  • label positioning: left, middle, right.
  • centered bar text: both bars come together to become one with the text on the bar, or both bars are spaced, with the text in the middle.
  • fix marks of horizontal axis.
  • define the color of each bar series: left, right.
  • ability to define the color of a given bar.
  • gridlines.
  • title position and visibility.
  • legend position and visibility.
  • ...
New Comparative Histogram Chart control : programming
The Comparative Histogram chart is filled like other charts, by programming or binding.
In addition to the usual gr WLanguage functions, the new grComparativeSeriesPosition function allows you to manage the specific features of the new Comparative Histogram chart.
Smart magnetism
In version 25, magnetism between controls has been reworked
The available functionalities take a leap forward.
Indeed, magnetism is now based on all controls, and no longer on the surrounding controls alone.
Example of magnetism on the left border of the control directly above
Example of equalized vertical spacing, and homogenized control width
Smart magnetism : example of new features
Here are some examples of how smart magnetism works:
  • The reference control automatically changes as movements and magnetisms are rejected.
  • Adding a control below a group of controls: the default vertical spacing is the same as the controls above.
  • New, more ergonomic design of handles and frames.
  • The spacing between the controls is indicated.
  • Depending on the movement of a control, its alignment is proposed according to all the other controls in the window.
  • The alignment bar allows you to determine on which control the alignment is proposed.
  • The alignment bar is much thinner, which makes it easier to align elements .
  • Close magnetisms are differentiated: controls with close magnetisms are moved pixel by pixel; similarly, detaching from a magnetism does not cause a sudden jump, and stops at the next close magnetism, with pixel precision.
  • ...
WINDEV, WEBDEV and WINDEV Mobile in the same environment : cross-platform to the power of 25
As you know, it is possible to use WINDEV, WEBDEV and WINDEV Mobile in the same environment.
Project elements are immediately shared between all 3 platforms: analyses, queries, reports, procedures, classes, code, ...
Windows, pages, mobile windows are in the same project.
These elements open directly in the WINDEV environment.
This allows for easy maintenance and portability of a WINDEV application to mobile and Web, without having to import or duplicate elements of the project, or to switch between environments.
Reminder: You must have a license for the corresponding program.
New in version 25: when working on WEBDEV projects in WINDEV, you can update the skin of the WEBDEV project directly from WINDEV's environment.
The productivity gains in WINDEV Mobile's environment are also accessible from WINDEV's environment.
Your existing WINDEV projects can become a website or a SaaS application
A widespread need is to transform a Windows application (or parts of applications) into a dynamic website or SaaS application.
WINDEV and WEBDEV perfectly meet this need.
The WINDEV application to WEBDEV site migration wizard evolves in version 25.
See new feature 813.
The invoicing module for access to SaaS sites also evolves in WEBDEV 25.
See new feature 815.
Reminder: WINDEV allows you to enter "Business Rules".
These are explanations on the processing rule to be applied to a control, code, window, process, calculation...
These Business Rules can be used automatically as an aid to end users via the IBR picto.
Public part, private part (not displayed) 
In version 25, a Business Rule can contain a visible part, and a confidential part.
The help that will be automatically displayed by the IBR picto will be the part declared as visible in the Business Rule.
Business Rule in several languages
In version 25, Business Rules can be written in several languages.
The help displayed by the IBR picto will be in the language in which the application is run.
Project architecture : internal components contain their resources : webservices, XML, JSON, assemblies...
In version 25, internal components now contain all their dependencies: Analysis, Windows, Pages, Reports, Sets of Procedures, Queries, Images...
In version 25, all the following elements are also encapsulated
  • Webservice.
  • XML.
  • JSON.
  • YAML.
  • Assemblies.
  • ...
It is no longer necessary to integrate these elements into the host project.
Internal components are thus totally autonomous for easy sharing.
The former method is still supported for compatibility.
Large project : right click "move to folder"
In large projects, the project explorer can contain a lot of elements and be and very long!
Moving an element (window, report, etc.) to a folder can be a tedious task in the explorer of a large project.
In version 25, right-clicking on the element opens the list of destination folders.
Window, page template : ability to select controls directly
In version 25, you can select the controls from a template, simply using the mouse.
There is no need to override the control in order to select it.
Project portfolio : recompile or create branches for several projects in 1 click
In version 25, you can create "project portfolios".
A project portfolio is a set of logically grouped projects.
These projects often have functional links: they share components, classes, sets of procedures, ...
A portfolio allows you to perform actions on the entire portfolio, such as:
  • recompilation in new version,
  • branch creation,
  • ...
No more repetitive actions when changing from one version to another or during a Sprint!
Image catalog : clear
The image catalog in version 25 is better looking and more intuitive.
You will find the images you are looking for more easily!
The image catalog is even more intuitive
The image catalog is even more intuitive
Your environment in english, spanish and french (as standard)
The English version allows you to choose the language of the environment:
  • French.
  • English.
  • spanish.
Choose your environment
Choose your environment
Note that the different languages are available on different dates.
You can choose between WLanguage in English or French.
Magnetism is now available in the data model editor
In version 25, magnetism is finally available in the data model editor.
And, good news, it is the super magnetism of version 25 with its magical powers.
Finally, you can easily present a rigorously aligned analysis graph.
New look for a new life
The representation of data files (tables) has been refreshed!
Not only is the analysis graph now aligned, but it is also looks great.
Clean look and assisted alignment in version 25
Clean look and assisted alignment in version 25
SCM : check-out on first modification
In version 25, it is no longer necessary to manually check out the analysis when an item is modified.
The check-out is automatically proposed the first time an element of the analysis is modified.
No more grayed windows!
Create a materialized view from a project query
In version 25, there is no need to duplicate a query to create a materialized view!
Simply use the existing query.
Requirement : target platforms
You can now specify the platforms on which the requirement should run:
  • 32-bit Windows.
  • 64-bit Windows.
  • Linux.
  • Web.
  • iOS.
  • Android.
  • ...
Automatic message when the status of a requirement task changes
When the status of a requirement task changes, (e.g. when it changes to "Done"), the requirement manager automatically receives a message.
Testers associated with the requirement also receive a message when all developers have completed their respective tasks.
The monitoring center keeps you up to date!
The monitoring center keeps you up to date!
Automatic creation of requirements and tasks from integrated messaging application
A message can become a requirement via the integrated messaging!
Recipients of the message can be defined as recipients of the tasks.
Static audit : notification for non-matching logical and physical names
In version 25, the Static Audit indicates elements with different logical and physical names.
This allows you to avoid confusions.
Program documentation : choice of vocabulary
The program documentation now now allows you to use one of the following:
  • PC SOFT vocabulary.
  • a more generic vocabulary.
Examples: in generic vocabulary, the term "data file" is replaced by "table", "item" by "column", etc.
This can be useful when responding to a call for tenders for example.
Depending on the target client, you can choose the type of vocabulary to use when editing the documentation.
See Project documentation for more details.
New action : branch creation
In version 25, a new action from the Software Factory allows you to automate the creation of branches.
New action : retrieve code coverage
A new action from the Software Factory allows you to recover the code coverage of automatic tests.
The status report of the action plan execution contains this information.
New action : generate a patch
A new action from the Software Factory allows you to automate the creation of patches.
New action : publish on dockerhub
In version 25, a new action from the Software Factory allows you to automate the publication of a site's recipe.
New action : comment
In version 25, a new action from the Software Factory allows you to position separations in an action plan.
The blue row is clearly visible.
This action also allows you to insert comments in the action plan status report.
A comment row in blue
A comment row in blue
New action : publish a component in SCM
In version 25, a new action from the Software Factory allows you to publish a comment in the SCM.
You can also choose the directory to publish a component.
Various new features
Action plans can be started manually (immediately) or be set for later (scheduling).
Schedules can now be modified.
Start applications on startup
The setup allows you to specify an application that must be launched when the computer starts (see new feature 227).
Toast from time to time to remind your end users of the existence of AAFs
In version 25, a toast appears from time to time (not too often, let's say once a month) to remind end-users of the existence of AAFs.
You can prevent this toast from appearing again using AAFDisable.
Besides, this toast is automatically disabled when the code calls AAFDisable(All).
A discrete, yet useful toast
A discrete, yet useful toast
See Discovering AAFs for more details.
Share the account and authorizations database
The account and authorizations database can be natively shared between WINDEV, WEBDEV and WINDEV Mobile User Groupwares.
This allows you to comfortably create an account in a WEBDEV site, for example, and then use it on mobile.
See new feature 700.
Smart magnetism
The environment-integrated image editor benefits from smart magnetism.
Note that these new Image Editor features are also available in the Image Editor control that you can include in your applications.
Temporary guides appear in red
Temporary guides appear in red
Perform all the actions the image editor offers, by programming
WLanguage version 25 offers the WDPic type.
All the d WLanguage functions (drawing functions) can be called on the image layers.
The WDPic type contains an array of layers.
The management of layers allows you, for example, to apply a watermark to an image and keep the original image unchanged.
PicMergeLayer allows you to group layers together to reduce the image size or to generate a Jpeg image ...
"read-only" mode
The Image Editor control offers a new image display mode for your applications.
This mode displays an image for viewing purposes only.
End users can zoom in, zoom out, print, ... but they can't modify the image, nor save it, of course.
Color selection
Color selection is simplified, and allows you to directly select a color.
Display the size and position of the current selection.
Alternative language
If a string has not yet been translated into the target language, you can specify which alternative language must be used.
There are no "holes" in the UI!
"Do not translate"
In version 25, you can specify that some project resources should not be translated:
  • windows.
  • pages.
  • project configuration.
  • ...
This can be, for example, a test window, or a configuration that contains an action plan for Continuous Integration.
This avoids translating strings unnecessarily, and optimizes translation time.
Smart multi-product extraction
In version 25 , you can extract and reintegrate all WINDEV, WEBDEV and WINDEV Mobile project resources in a single operation.
The operation must be launched from WINDEV in the configuration that includes WINDEV Mobile and WEBDEV.
WDTRAD : improvements
WDTRAD is the tool to translate standard messages (WDTRAD is provided with WDMSG).
WDTRAD benefits from the following new features:
  • bookmarks system: label and colors.
  • remember collapsed/expanded state of branches after closing.
  • dictionary search magnifier available on each column.
SCM : one click to create branches for all projects from a subdirectory
In version 25, you can create a set of branches in a single operation.
This new feature will help teams that handle many projects save lots of time.
Note that this feature is also a new action in Continuous Integration (see new feature 043).
Shares are kept.
SCM : automatic creation of branches of all projects in a project portfolio
In version 25, you can create the branches of all projects in a project portfolio in a single operation (see new feature 031).
SCM : analysis check-out on first modification
The analysis (database model) is automatically checked out as soon as the first change is made, (see new feature 036).
SCM : check-out for testing when it was not a test
A check-out "for test" is used to modify the element locally, without the possibility to carry over the changes to the SCM repository.
Changes made to an element checked out for test are not saved or managed by the SCM (since it is only for testing).
In version 25, a warning message appears if you create an EXE that contains check-outs "for test" (I.e. whose code is not managed by the SCM).
SCM : extremely fast branch creation : 20 times faster
In version 25, the branch creation time has been optimized. You can create branches much more quickly.
Locally, twice as quickly.
In remote access, 20 times as quickly.
SCM : the merge gets a facelift
The Merge allows you to automatically propagate changes and detect conflicts.
In version 25, the interface is simplified and highlights changes and conflicts.
For example, similar changes made in the 2 branches to merge are no longer indicated.
Another example: the changes you have made are no longer highlighted if they do not cause conflicts..
Unresolved conflicts are more visible.
An interface to browse through conflicts is finally integrated: next conflict, previous conflict, ...
In the interface, each version is presented in a third of the screen.
Certain lines of code can therefore be truncated.
In version 25, the 3 versions of the selected line are shown in full width at the bottom of the window: the developer therefore sees the entire lines of code.
When a conflict cannot be resolved automatically, the version to keep can be more easily selected.
SCM : silent check-in
In version 25, you can choose a silent check-in: one less action!
SCM : easily undo check-outs
In version 25, you can undo check-outs performed on other development computers.
The SCM repository administrator can authorize developers to undo check-outs performed by other developers.
Git is a source code manager.
Git can be used within a company on its own servers, without anyone outside having access to it.
GitHub is a hosting company that offers Git repository hosting (it is the most well-known hosting company, now owned by Microsoft).
See Share your projects via Git for more details.
Manage projects with git (and in github)
In 25, the environment allows saving projects, windows, pages, reports, classes, sets of procedures and code in a Git database.
This new feature allows you to share source elements through GitHub, for example.
See Share your projects via Git for more details.
Project, windows, page, code, report
Source code is managed in text format (option).
Windows, pages and reports can be saved in YAML (hierarchical hybrid text format).
Objects contain the control names in readable format, as well as the code of each control.
In version 25, the project elements are saved either in native format or in "Git" format (hybrid text).
See Share your projects via Git for more details.
How to use git
Use git as usual.
Git commands are available: push, pull, commit, merge, ...
You can resolve conflicts in Git or in the environment, depending on the type of conflict.
See Share your projects via Git for more details.
An integrated devops environment
WINDEV, WEBDEV and WINDEV Mobile version 25 make up an even more integrated DevOps environment.
Unlike scattered heterogeneous tools, you have all the necessary functionalities to implement the DevOps approach.
You have all the integrated tools to manage the DevOps methodology: life cycle management, testing, continuous integration, deployment, continuous delivery, production, user feedback...
The compatibility with Docker speeds up processes.
Fluidity of the code editor
The actions of the code editor become more fluid in version 25.
Display speed, movements, ... are much faster.
These improvements make the user experience much more pleasant.
Code editor : save your code in text format
In version 25, you can save the code of your projects in 2 formats:
  • native format.
  • text format.
Native format is the well-known, optimized format.
Text format allows you to handle the code with external processes, and to deposit it in GIT.
Automatic creation of procedures (or internal procedures)
The assisted input offers the following for all the functions that take a callback as parameter::
  • existing project procedures.
  • a new procedure.
  • a new internal procedure.
If a new procedure is created by this means, it will automatically have the appropriate parameters.
No need to see the help and search for the parameters to define!
Create a procedure or internal procedure with a single click
Create a procedure or internal procedure with a single click
New Kouglof (code pane) : much more practical
The kouglof (code pane) allows you to access all the project code elements.
The kouglof has been revamped in version 25 to allow even faster access to these elements.
Among the new features of the Kouglof you will find:
  • filter, search.
  • custom folders.
  • popup menus.
  • display of inherited elements.
  • properties.
  • automatic synchronization with procedure.
  • 4K operating mode.
  • filter for .Net assembly.
On the left section:
  • List of all project elements and components.
  • The special entry "current element" is synchronized with the active view (displays local procedures of the window being edited...).
  • On/off filter buttons to display or hide:
    • the sets of procedures.
    • the classes.
    • sets of browser procedures.
    • sets of server procedures.
    • the project elements.
    • elements of external components.
    • elements of internal components.
    • elements of code custom-folders.
  • Popup button for sort options (as in the explorer).
On the right section:
  • Condensed list.
  • Filter buttons to display or hide:
    • the members.
    • procedures/methods.
    • constants.
    • inherited members/procedures.
  • Sort popup button:
    • alphabetical sort.
    • sort by modification date.
    • sort by scope (private/protected/public).
    • sort by color.
  • The filter is enabled simply by typing (as for the old kouglof, except that it filters instead of searching).
  • Filter with insignificant whitespace.
  • Shift+Click on filter button for exclusive activation.
Alignment on the " = " sign and the "IS" word
In version 25, the Ctrl + Alt + = key combination aligns all the = signs in the selected area, thus aligning all the text and code to the right of these = signs.
The shortcut is also active on the "is" keyword in declarations of variable.
// ----- NON-ALIGNED code
n is int
MaxBrowseProcessSubscript is int
ProcessStartDate is Date
bIsOk is boolean
ProcessEndDate is Date
// Process started
bIsOk = True
ProcessEndDate = ProcessStartDate
ProcessEndDate..Month= 1
n = 1
MaxBrowseProcessSubscript = 5

// ----- ALIGNED code
n is int
MaxBrowseProcessSubscript is int
ProcessStartDate is Date
bIsOk is boolean
ProcessEndDate is Date
// Process started
bIsOk = True
ProcessEndDate = ProcessStartDate
ProcessEndDate..Month = 1
n = 1
MaxBrowseProcessSubscript = 5
Return to last code modification : Ctrl + Alt + Left arrow
Often, after writing a line of code, you navigate through the code to check certain elements.
And then, you have to go back to that line of code to continue your task.
In version 25, you can return to the initial code using Ctrl + Alt + Left arrow.
See Display the code of an element for more details.
Import multiple classes
A useful new feature is that the file selector for importing classes in Text format now allows multiple selection.
Code in English or French
WLanguage can be written in English or French.
For new WINDEV developers, a message appears from time to time to remind them of this option...
To spread the word!
Copy/paste code with multilingual strings : it's crystal clear
Version 25. offers a new option to paste multilingual strings.
When a multilingual string is copied/pasted, 2 options are available:
  • the string is pasted, nothing else. There is no link to the original string .
  • the string is pasted, and it remains linked to the original string. If the original string is modified, the pasted string will be automatically modified.
By default, the pasted string is not linked to the original string.
The "Special paste" menu option allows you to keep the link to the original string.
See Translating programming messages for more details.
Conditional target-code : standardized code presentation
The presentation of conditional target code is standardized.
The code is now presented in a single column.
The code target is indicated by a compiler directive.
Development on laptop
This new feature of version 25 will delight developers who work on a laptop without a keypad: it is now possible to comment and uncomment lines of code using the following key combinations: Ctrl + ':' and Ctrl + Shift + ':'.
See Various operators: // for more details.
Report editor : generate numerous PDFs (threads)
To accelerate massive PDF generation, simply launch this generation in threads.
WINDEV will use the power of multi-core processors to generate PDFs faster: invoices, custom commercial proposals, emails...
Report editor : prototype generation to pass parameters
In version 25, the report editor automatically generates the prototype for passing parameters to the report.
It's more intuitive.
Report editor : pass parameters to internal reports
In version 25, you can explicitly pass parameters to internal reports.
This allows you to avoid global variables.
Report editor : evolution of html control
In an HTML document, an image can be defined by a link and encoded directly in the document.
The report editor manages base 64 encoded images in HTML content.
Composite report editor : XLS export
In version 25, composite reports and sequences of reports can also be exported as XLS.
An XLS sheet is created by subreport.
New prefixed syntax on all HFSQL functions
Prefixed syntax is now available on HFSQL database management functions.
The advantage of this syntax is that after writing the name of a data file (table) followed by a dot, a combo box appears and proposes the list of functions that apply to this data file (table).
In version 25, this type of entry is available for all the code...
For example:
// Search for the customer
Customer.ReadSeekFirst(CustomerID, gnCustomerID)
IF Customer.Found() = False THEN
// New customer
// Carry over entered data
// Saves the information
The code editor provides automatic completion.
Convenient: automatic completion
Convenient: automatic completion
Edit PDF in WLanguage (no need to display the document)
In version 25, you can edit PDF documents in WLanguage.
You don't need to open the document in order to modify it.
Several native types are introduced:
These native types allow you to manage PDF files by programming.
These are some of the available features:
  • delete page/pages.
  • insert page/pages.
  • add/delete password.
  • rotate document.
  • crop.
  • resize.
  • add/extract attachments.
  • retrieve signature.
  • ...
This new feature opens up powerful PDF customization possibilities (including Web environment).
PADES is a PDF document signature standard.
In version 25, this standard is supported by PDF signature functions.
See the documentation about PDFSign for more details.
YAML : exchange format managed natively in WLanguage
YAML is a structured data exchange format.
YAML is a serialization format, like XML or JSON, but more readable by humans, and more concise than XML.
In version 25, WLanguage supports YAML.
YAML becomes a native WLanguage type.
This native type allows you to use the assistance in the code editor (completion, etc.).
YAML proposes specific concepts of tags, comments, anchors. The native WLanguage type manages these concepts.
JSON : improvements
In version 25, you can delete members of a JSON variable.
Simply set ..Exist to false.
JSONToString and StringToJSON
JSON documents are strings with a specific formatting.
The JSON WLanguage type allows you to easily manage JSON documents.
The new JSONToString WLanguage function allows you to convert a JSON variable into a string.
JSONToString offers formatting options:
  • with or without CR.
  • with or without TAB.
The new StringToJSON function allows you to fill a JSON variable from a string.
If StringToJSON fails, it means the string that contains the JSON is invalid.
Properties : Using two dots drives you mad? Use only one!
Properties have always been accessed using two dots ".." in the syntax.
In version 25, you can use only one dot: "." instead of "..".
Both syntaxes are recognized.
Nothing changes for you and your habits.
Keyword in lowercase, or in uppercase, up to you
Uppercase characters?
Lowercase characters?
In version 25, you choose how keywords appear in your source code.
Below is an example of code with keywords in lowercase.
PROCEDURE CalculationInProgress (): currency
// Local variables
cyInProgress is currency
dStartDate is Date
dStartDate..Day -= 7
// Browse through orders from last 7 days
FOR EACH Order where OrderDate >= dStartDate
// Search for unpaid orders
IF Order.Status = UnpaidOrder THEN
cyInProgress += Order.TotalIOT
// Return in progress
RETURN cyInProgress
Curly brackets
Yet another source code customization possibility: curly brackets.
The opening curly bracket represents a beginning of a block of code, and the closing curly bracket represents the end of a block of code (!).
Curly brackets apply to all blocks of code:
  • if then else,
  • for i=1,
  • when exception,
  • etc.Some developers are used to this syntax, so version 25 makes it available!

PROCEDURE CalculationInProgress (): currency
// Local variables
cyInProgress is currency
dStartDate is Date
dStartDate..Day -= 7
// Browse through orders from last 7 days
FOR EACH Order where OrderDate >= dStartDate
// Search for unpaid orders
IF Order.Status = UnpaidOrder
cyInProgress += Order.TotalIOT
// Return in progress
RETURN cyInProgress
Create your own properties
In version 25, you can create your own properties on:
  • control templates.
  • window templates.
  • windows.
  • internal windows.
  • pages.
  • internal pages.
  • ...
This new feature allows writing code in a more concise and understandable way.
This syntax encapsulates accesses.
For example:
You can override standard WLanguage properties by defining custom properties with the same name.
A lambda ("lambda function") is a more concise way to write internal procedures.
Lambdas are useful for all functions that take callbacks as parameters: they allow you to enter the function code directly instead of the parameter.
Documents is array of strings
fListFile("*.docx", (Path, Name)=> Documents.Add(Name))
See Lambda expressions and procedures for more details.
Filter / Map / Reduce : ultimate conciseness
The "Filter / Map / Reduce " concept allows writing data array transformation loops in a concise way.
Example: in one single line of code, calculate the average age of an array of individuals by selecting only those who are over 18 years old.
This allows for functional programming.
You can call Filter, Map and Reduce one after another, as well as Sum, Mean, Min and Max.
"Filter Map" code example
MyCustomers is array of Records of Customer
// Retrieve customers from 34
CustomersFrom34 is array of Records of Customer
CustomersFrom34 = MyCustomers.Filter(x => (x.ZipCode [[ 1 TO 2 ]]
= "34"))
// Retrieve list of countries of customers
ListCountry is array of strings
ListCountry = MyCustomers.Map(x => x.Country)
// Sum of outstandings
SumOutstandings is currency
SumOutstandings = MyCustomers.Reduce((x, total) => {total += x.OutstandingsAllowed}, 0)
Dynamic compilation : internal procedure
You can use Internal Procedures in dynamic compilation.
Internal procedure : " CASE ERROR : " and " END : "
"CASE ERROR:" and "END:" are labels.
These labels are supported in Internal Procedures.
New Thread type : simplify thread programming
The new Thread WLanguage type helps you create threads more easily.
Threads and Parallel Tasks are now programmed in the same way.
Generate a public/private key couple : new WLanguage function
Many encryption or signature algorithms require a public key and a private key.
WINDEV offers all the necessary functionalities.
The new EncryptGenerateRSAKey WLanguage function automatically generates a public / private key couple.
Continent / country functions
Several WLanguage functions are introduced in version 25: ContinentList, ContinentGet, CountryList, CountryGet.
Managing a country has never been easier!
HTTP requests : speed limit
It is now possible to restrict (limit) the upload/download speed used for requests.
This allows you, for example, not to saturate the bandwidth, or to simulate a slow network.
HTTP requests : new verbs
HTTP requests accept the new verbs PROPFIND and BPROPFIND.
No need no code them!
OAuth : token mode support (implicit grant)
The "implicit grant" mode is used to limit the number of requests made to a server to perform an authentication.
The "implicit grant" mode is supported in version 25.
Here is a feature that many are going to love!
ExtractStringBetween allows you to extract a string between 2 substrings (tags, generally).
Now you can extract a string between 2 tags using one line of WLanguage code!
String extracted in one line of code!
String extracted in one line of code!
StringToDate and DateToString
StringToDate and DateToString manage ISO 8601 / RFC 3339.
This format includes the time zone.
fReadLine : optimized, up to 10 faster
The remarkably useful fReadLine function has been optimized.
It is significantly faster: up to 10 times faster.
Various new features
  • 64 encoding with or without CR.
  • 2 new Hash algorithms proposed: MD4 hash and double SHA-256.
  • The new TableCollapseExpand function changes the state of the break (collapses the break if it was expanded, and vice-versa).
  • NetworkConnect: a persistence option allows you to keep the drive letter after closing the session.
  • AppointmentModify and AppointmentDelete: the functions can take the appointment identifier as a parameter (useful for Outlook).
  • You can directly assign a duration to properties:
    MyRequest..Timeout = 5s
  • EmailConfigure: new constant to no longer convert emails received in "latin 1" in Ansi projects.
  • fCreate: support of the foAutomaticDeletion constant; the file is automatically deleted when it is closed.
SOAP Webservice : Support of "import" tag
WSDL description files with an "Import" tag are automatically supported.
SOAP Webservice : Check number of parameters
In version 25, the compiler checks the number of parameters expected by the Webservice procedures.
You can sign XML files using XMLSign.
Deep copy attributes : copy of arrays (deep copy)
The deep copy attribute is used to indicate if, for each attribute of the object, it is desired to reference or duplicate the member objects.
This allows you to use the copy operator <= to correctly copy arrays of dynamic objects.
Attribute to prevent copying a member
The new <Copy=false> attribute allows you to prevent the copy of the member's value when copying from one object to another.
This is useful for confidential information, for example: passwords, GUID, ...
New clone function : clone objects
The new Clone function allows you to assign and copy the object that is passed as a parameter. In the case of polymorphism, it is no longer necessary to write the code necessary for this cloning. Likewise, there is no need to write virtual methods in all derived classes as well as constructors by copy.
Dynamic object as parameter : derived accepted!
This new feature will delight OOP enthusiasts.
It was impossible to simply call a procedure that takes a dynamic object as a parameter by passing an object of a derived class of the object expected as a parameter. It was necessary to add the local keyword in the declaration of the parameter, which was unheard of (and not very natural, truth be told).
This bizarre method has been corrected in version 25: it is possible to call the procedure with a derived class as a parameter.
Option to prevent copies in proc(this) or proc(Example())
In version 25, when calling a Proc function that passes itself as a parameter or calling a Proc function that takes as parameter a function that returns an object, this object is no longer copied.
A compilation option in the "7 tabs" of the project description prevents copying.
Spare server
A "spare" server is a target server in a unidirectional automatic replication.
It is a form of backup almost in real time.
This server is accessible only in read-only mode (except for the automatic backup operation itself).
The advantage of a Spare server is the simple implementation of the infrastructure. Compared to a replication, it is not necessary for the data file (table) to have an 8-byte auto ID item.
If necessary, the Spare server can switch to "non-Spare" mode to take over, for example, in the event of a disk crash on the main server.
It is a simple tool, offered along with the implementation of a replication and a cluster, to benefit from a backup server.
Prefixed syntax
In version 25, the call syntax of HFSQL WLanguage functions can be prefixed.
See new feature 090.
Optimized requests thanks to a sequential browse, without index
The HFSQL engine can decide to sequentially browse a data file (table) if this type of browse is faster than using the subscripts.
The sequential browse avoids reading the subscripts.
Thus, on hard disk drives, head movements are minimized, as is the number of reads.
Besides, the operating system also optimizes sequential reading ("Read ahead").
Some queries become much faster by upgrading HFSQL server to version 25.
New WLanguage function : HUpdateLink
In version 25, the new HUpdateLink WLanguage function allows to update the server links by programming so that they correspond to the links in the analysis (data description).
Hot backup : webhook call
A webhook is a callback on a Web server.
A webhook allows you to trigger a process automatically.
A webhook can be defined for backups on your HFSQL databases. This webhook will be automatically called at the end of the backup.
This allows automatically retrieving the backup file from another computer, for example.
Stored procedures allow the use of multilingual strings
In version 25, you can use multilingual strings in stored procedures.
Universal replication that propagates structure modification (auto modif, SDD)
In version 25, universal replication automatically supports the modification of the database structure: if an "auto modif" is necessary, it will be propagated.
See the following help pages for more details:
Assisted universal replication: secure access in HTTPS
In version 25, universal replication allows the use of the secure HTTPS connection mode.
Simply install an appropriate certificate on the Web server of the replication server.
Automatic reindexing if necessary during the execution of a query
In version 25, the reindexing of a data file (table) is proposed when a query determines that an index is corrupted: disk problem, power outage, ...
HFSQL Classic : triggers are also called by queries
In version 25, when using HFSQL Classic (included version), SQL addition or modification queries also activate triggers on tables (data files): INSERT, UPDATE, DELETE.
You can set a limit to the number of simultaneous connections to an HFSQL server.
Simply set the hMaxNumberConnection constant in the HSetServer function.
Optimization on "left"
In version 25, expressions such as the following (comparison with a hardcoded value) have been optimized:
left(item, N) > value
left(item, N) >= value
left(item, N) < value
left(item, N) <= value
8 new SQL functions
8 new SQL functions to manage dates are available in version 25.
  • DATEADD (element, number, date):
    Returns the date corresponding to the specified date plus another element (minute, hour, day, month, year, etc.). For example: get the date corresponding to the current date + 2 months.
  • DATEDIFF (element, start date, end date):
    Returns the number of elements (minute, hour, day, month, year, etc.) between the start and end date (for example, gets the number of months between two dates).
  • DATEDIFF_BIG (element, start date, end date):
    Returns the number of elements (minute, hour, day, month, year, etc.) between the start and end date (for example, gets the number of months between two dates).
  • DATETIMEFROMPARTS (year , month , day , hour, minute, second, millisecond):
    Returns the datetime corresponding to the elements (minute, hour, day, month, year, etc.) specified.
  • DATEFROMPARTS (year , month , day):
    Returns the date corresponding to the specified elements.
  • DATEPART (element, date):
    Returns the value of the element (minute, hour, day, month, year, quarter, etc.) in the specified date.
  • EOMONTH(date):
    Returns the last day of the month.
  • EOMONTH(date, x):
    Returns the last day of the month adding x months.
  • ISDATE(expression):
    Used to find out if a date is valid.
Order! (cleaner look!)
In the query editor, the items were displayed only in logical order (the order of the data description).
In version 25, you can also display the items in alphabetical order.
Logical order or alphabetical order, now you can choose
Logical order or alphabetical order, now you can choose
As you know, HFSQL exists in Cluster version.
This HFSQL version allows you to create a server farm.
Limit number of connections to one node
In order to reduce the load of the cluster server, you can limit the maximum number of connections to a cluster node.
HFSQLDrive allows you to easily and immediately host your data files (tables) in the cloud.
In version 25, HFSQLDrive is enriched.
HFSQLDrive : reset admin password
The HFSQLDrive portal allows you to reset the server administrator's password.
Server replication
When configuring a Server Replication in the HFSQL Control Center, the passwords of data files involved in the replication are directly requested.
As you know, there are many Native Connectors for third-party databases: Oracle, SQL Server, AS/400, DB2, MySQL, ostgreSQL, SQLite, xBase, MariaDB, Informix, Progress, Sybase, ...
Number of rows affected by a query
The H.NbRecModificationQuery variable is specified at each Insert, Update and Delete.
Native MS SQL Server Connector
Extended connection information supports Encrypt and TrustServerCertificate features.
The European Union has chosen to generalize electronic invoicing.
Chorus pro : to invoice the French government
In France, electronic invoicing has become mandatory for invoicing government services.
The French government has set up the Chorus Pro system to submit and monitor invoices. It is the tool for managing the expenditure and non-tax revenues of French government services.
In 2020, all companies must use Chorus Pro.
Version 25 makes it easier to automatically submit invoices to Chorus Pro.
Sign PDFs with "PADES" standard
The PADES standard is recognized for PDF signatures (see new feature <92>.
Native hash function bitcoin
The HA_SHA_256_DOUBLE constant is used to hash data using the native hash function HashString.
(see new feature 113).
iOT : access to amazon iot webservice
Version 25 provides easy access to AWS IoT APIs.
Telemetry, which comes as standard in WINDEV, allows you to collect and aggregate nominative or anonymous information on how your applications are used: choice of selected menus, functionalities used, long processes, possible bugs, use time ranges, ...
Telemetry also allows you to know the hardware configuration of end users, OS versions, which is very useful especially for software publishers.
Telemetry evolves in version 25.
Statistics by country
New statistics show, on a world map, the countries where the application is used.
The color applied to the country indicates the use density.
Visual information by country
Visual information by country
New Widget : statistics on telemetry server
A new Widget is introduced in version 25: the "Server Status" Widget.
This Widget displays information about the data retrieved from a server:
  • number of shares in a time range.
  • date of latest information received.
  • quantity of information received in a given period.
  • date of last server aggregation.
  • possible errors.
  • ...
This information is used to ensure that everything is working properly!
Element "details" Widget : improvements
The information displayed by element (window, page, control, query, etc.) is more detailed and easier to understand.
For example:
  • times the element has been opened.
  • number of users who have opened the element at least once,
  • average of times the element was opened per user (who has used the element at least once).
  • ...
This makes it easier to understand how elements are used.
Offline mode
Usually, when an application monitored by telemetry started, if it could not connect with the telemetry server, data was not collected until the next time the application started.
In version 25, if the connection fails, the information is collected locally for a maximum of 48 hours, and will be sent automatically as soon as the connection with the server is restored.
To manage special cases, the new TelemetrySendData WLanguage function allows you to force the sending of this data collected locally.
EmulateMouse without x,y
EmulateMouse simulates clicks during a test. Click coordinates are now optional: the object will be "clicked" in the center, and the click will work even if the control is resized.
Temporary suspension of test
In version 25, you can temporarily suspend a test with a simple right click.
This can be useful, for example, during a hardware maintenance phase.
The new MongoPipelineAggregation WLanguage function is introduced for MongoDB databases.
This function allows you to send aggregation pipelines to the database.
Minimum version required
  • Version 25
This page is also available for…
Click [Add] to post a comment