Conversion opportunities with Ispirer
Ispirer Ecosystem automates your migration routine to enable quick and smart transformation of any application. Double the migration speed with our comprehensive solutions.
-
With CodeWays only
- Free Metrics tool to analyze the migration complexity
- Assistance in CodeWays configuration
- Automated migration of the entire application including project files, business logic, GUI and database API
- Prompt customization of the tool to maximize automation rate
- Expert support
-
With CodeWays as a part of migration service
- Tailored migration roadmap from assessment through migration and testing to cutover
- Automated migration of the entire application, including project files, business logic, GUI and database API
- Team of experts skilled in application conversion
- Assistance in deployment, integration, performance optimization, and new feature development
Unleash the reinforced application
Save your time
Our modernization and migration approach
We select the right conversion approach based on business specifics, project scope, complexity, and risk profile.
-
Rule-Based
Deterministic conversion
Engine
SQLWays, CodeWays
Automation & coverage
~70–80% automated coverage out of the box, with the option to reach up to 90% through manual refinement, refactoring, validation, and QA
What you get
Predictable scope and timeline, stable and repeatable output
Best for
Well-defined, structured migrations
-
Recommended
Hybrid
Rules + AI-assisted refinement
Engine
SQLWays, CodeWays + AI
Automation & coverage
~70–80% automated coverage, up to 90% with AI, reducing manual conversion, validation, and testing
What you get
Predictability of the rule-based engine + speed of AI, backed by the Ispirer expert framework
Best for
Complex or partially undocumented systems
-
AI-Driven
AI-led analysis and delivery
Engine
AI engine
Automation & coverage
AI-led code and business logic extraction by Ispirer Migration Experts
What you get
AI-assisted refactoring, code generation and documentation, human-led QA, insights into undocumented logic and target design
Best for
Iterative modernization and innovation-driven transformation
The approach is defined during the Discovery Phase, based on business specifics, source system complexity, target state, timeline, and expected business value.
CodeWays for automated app conversion
CodeWays is a tool for automated application conversion that translates code from one programming language to another automatically, while preserving the initial functionality of an app. Using an intelligent proprietary algorithm, the tool analyzes the syntax, semantics, mapping data types, control structures, function calls, and code structures that do not have equivalents in a target technology.
Based on the analysis, CodeWays applies all the relevant conversion rules from its knowledge base core and translates PowerBuilder source code to Java.
It takes 5 min to start your application conversion journey!
App source code & App source code with embedded SQL*
- Informix4GL
- Delphi
- Cobol
- VisualBasic
- Progress4GL
- PowerBuilder
- C/C++
Any files with SQL code
- Informix
- Teradata
- SQLServer
- Oracle
- IBM DB2
- SAP Sybase
- PostgreeSQL
- MySQL
- Greenplum
- MariaDB
- Firebird
-
App target code
-
App target code with converted ESQL
-
Files with SQL code for the target DB
*Embedded SQL are SQL statements written inline with the program source code, of the host language.
Convert Smarter. Evolve Faster
Over 150 ways to migrate- Delphi
- Cobol
- Progress 4GL
- C#
- PowerBuilder
- C\C++
- Pascal
- .Net
- Informix 4GL
- Python
- Delphi
- Cobol
- Progress 4GL
- C#
- PowerBuilder
- C\C++
- Pascal
- .Net
- Informix 4GL
- Python
- Delphi
- Cobol
- Progress 4GL
- C#
- PowerBuilder
- C\C++
- Pascal
- .Net
- Informix 4GL
- Python
- Delphi
- Cobol
- Progress 4GL
- C#
- PowerBuilder
- C\C++
- Pascal
- .Net
- Informix 4GL
- Python
Migration is always a risky plan. You ain't come to this decision overnight. Most often, an aging-out system or a deadline you can no longer move triggers it. When clients approach us, those triggers cause severe pain. Our goal is to tailor a custom solution to address it. If they need a product, we have a toolkit. If they want guidance, we have experts. Much of my job is making sure the Ispirer team doesn't wait for a trigger to hit you down, but shows up at the exact moment to help you out.
Head of Marketing Department (HMD), Ispirer Systems
Check out how Ispirer Toolkit automatically converts PowerBuilder application
PowerBuilder to Java conversion service overview
More than 2K users use this way to
successfully convert their application code
Start
Assessment
- Collecting info about an application
- Analyzing the application and its components
- Making migration plan
Automated APP conversion
- Entire APP conversion
- APP changes (API, ESQL)
- Tool configuration and customization for specific APP
Manual APP conversion
- Manual code review and debugging
- Replacing custom controls, libraries, methods, etc. with analogues
- Developing remaining solutions using target technology
Functional testing
- APP analysis and test documentation creation
- Testing the application against test documentation
- Fixing issues
Acceptance testing
- Testing the APP against business requirements
- Fixing issues
Cutover
- Switching APP
- System startup assisstance
Conversion Samples of PowerBuilder to React and Java
Ispirer Toolkit analyzes all object dependencies during the conversion process and provides not only line-by-line conversion, but resolves type conversions as well. The software understands and transforms the necessary inheritance dependencies. It parses the entire source code, builds an internal tree with all the information about the objects, and uses it in the migration process.
-
Variables declarations conversion:
PowerBuilder
- long var1
- long var2[]
- string var3
- datetime var4
- boolean var5
- decimal var6
- integer var7
- any var8
→ React and Java
- let var1: number = 0;
- let var2: Array<number> = [];
- let var3: string = '';
- let var4: Date;
- let var5: boolean = false;
- let var6: number = 0;
- let var7: number = 0;
- let var8: any = null;
-
Function conversion:
PowerBuilder
- public function string sample_function();
- return "end"
- //do logic
- end function
→ React and Java
- function sampleFunction(): string {
- return 'end';
- //do logic
- }
-
Subroutine conversion:
PowerBuilder
- protected subroutine sample_sub (string v_app);
- v_app = ""
- //do logic
- end subroutine
→ React and Java
- function sampleSub(vApp: string) {
- vApp = '';
- //do logic
- }
-
If statement conversion:
PowerBuilder
- integer i
- if true then i = 1 else i = 2
- if true then
- i = 3
- end if
→ React and Java
- let i: number = 0;
- if (true) {
- i = 1;
- } else {
- i = 2;
- }
- if (true) {
- i = 3;
- }
-
For statement conversion:
PowerBuilder
- For lv_count = 1 to 10
- lb_units[lv_count].Visible = TRUE
- Next
→ React and Java
- for (lvCount = 1; lvCount < 10; lvCount++) {
- lvCount[lvCount].visible = true;
- }
-
While statement conversion:
PowerBuilder
- IDX = 0
- do while true
- if IDX = 10 then exit
- IDX = IDX + 1
- loop
→ React and Java
- idx = 0;
- while (true) {
- if (idx === 10) {
- break;
- }
- idx = idx + 1;
- }
-
Try catch statement conversion:
PowerBuilder
- try
- IDX = 1 / 0
- catch (Exception ex )
- IDX = 100
- FINALLY
- IDX = IDX * 2
- end try
→ React and Java
- try {
- idx = 1 / 0;
- } catch (ex) {
- idx = 100;
- } finally {
- idx = idx * 2;
- }
-
Try choose statement conversion:
PowerBuilder
- integer some_id
- boolean cond
- CHOOSE CASE some_id
- Case IS < 0
- cond = False
- CASE 0 TO 2
- cond = True
- some_id = 200
- Case IS > 0
- cond = True
- CASE ELSE
- cond = False
- some_id = 0
- END CHOOSE
→ React and Java
- let someId: number = 0;
- let cond: boolean = false;
- switch (true) {
- case someId < 0:
- cond = false;
- break;
- case someId >= 0 && someId <= 2:
- cond = true;
- someId = 200;
- break;
- case someId > 0:
- cond = true;
- break;
- default:
- cond = false;
- someId = 0;
- break;
- }
-
Inline query conversion:
PowerBuilder
- global type s_2 from structure
- long field_1
- end type
- s_2 param1[]
- INSERT INTO TAB1
- (
- COL1 , COL2
- )
- VALUES
- (
- :param1[1].field_1,
- :param1[2].field_1
- );
→ React and Java
- Client (typescript):
- export type s2 = {
- field1: number;
- };
- export class S2 {
- static create(): s2 {
- return {
- field1: 0,
- };
- }
- }
- let param1: Array<s2> = [];
- await request({
- path: 'fileName/query1',
- body: {
- params: [param1[0].field1, param1[1].field1],
- },
- method: 'POST',
- });
- server (Java):
- private String QUERY1 = "INSERT INTO TAB1 "+
- "( "+
- "COL1 , COL2 "+
- ") "+
- "VALUES "+
- "( ?, ?) ";
- @PostMapping(value = "/query1")
- public @ResponseBody
- int query1(@RequestBody Map<String, Object> body) throws Exception {
- return sqlService. jdbcUpdate (QUERY1, (List<Object>)body.get("params"));
- }
-
CURSOR conversion:
PowerBuilder
- String v_uname[]
- Long v_unum[]
- Int v_count = 1
- DECLARE c_unit CURSOR FOR
- SELECT U_NAME, U_NUM
- FROM UNT
- WHERE A_NUM = 10;
- OPEN c_unit;
- FETCH c_unit INTO :v_uname[v_count],:v_unum[v_count];
- v_count ++
- Do While SQLCA.SQLCode = 0
- FETCH c_unit INTO :v_uname[v_count],:v_unum[v_count];
- v_count ++
- Loop
- CLOSE c_unit;
→ React and Java
- Client(typescript) :
- let vUname: Array<string> = [];
- let vUnum: Array<number> = [];
- let vCount: number = 1;
- let rows = await request({
- path: 'fileName/query1',
- body: {
- params: [],
- },
- method: 'POST',
- });
- for (let i = 0; i < rows.length; i++) {
- vUname[v_count] = rows[i].U_NAME;
- vUnum[v_count] = rows[i].U_NUM;
- vCount++;
- }
- server(Java):
- private String QUERY1 = "SELECT U_NAME, U_NUM FROM UNT WHERE A_NUM = 10 ";
- @PostMapping(value = "/query1")
- public @ResponseBody
- Object query1(@RequestBody Map<String, Object> body) throws Exception {
- Object values = sqlService.jdbcSelect(QUERY1, (List<Object>)body.get("params"));
- return ResponseEntity.ok(values);
- }
-
How to start the client:
- Install nodejs
- Open the ReactClientName folder in vs code
- Open terminal (Ctrl+`)
- Run the command: npm i
- Run the command: npm run start
- Open the URL in your browser: http://localhost:3000/
How to start the server:
- Open the JavaServerName folder in vs code
- Switch to the Run and Debug tab (Ctrl+Shift+D)
- Click the Server Application button
Get a free sample code of our PowerBuilder to React and Java code conversion
Ispirer Toolkit automatically converts not only a single piece of code, but an entire application. Complex code will require customization of the toolkit
PowerBuilder to React and Java conversion overview
PowerBuilder programs consist of Workspaces (starting from PB 8.0 and higher, these are .pbw files). Conceptually, they are similar to Solution. These are text files consisting of paths to the Target files (.pbt files) that correspond to the concept of Project. The Target files are in text format, and each contains paths to the PowerBuilder libraries (.pbl files that store source code files in binary format). Typically a library with the same name as the Target file has a .sra entry point file.
To convert a PowerBuilder application, you need to extract all source files from the appropriate Workspace libraries (or Target, if PB version is less than 8). You can download Ispirer PowerBuilder Metrics to get a statistical report on PB sources, as well as extract source files from PowerBuilder libraries using Workspace, or a set of Target files, or a set of particular PB libraries (.pbl files) that need to be converted.
Once the source code is extracted, for each PowerBuilder library file, a corresponding folder named library will be created with all the source code extracted. The folders will contain source files with the following file extensions:
Now you can use Ispirer CodeWays to convert it to your chosen target technology. Basic source type conversion by extension:
After the conversion, you need to create a WPF application desktop project in Visual Studio and add the converted files from the results folder to it. There is the Ispirer framework for converting PowerBuilder to React and Java (IspirerFramework*) in the results folder.
Note: this is a special framework provided by Ispirer. It extends the target technology to enable specific source code features.
Trust us with your conversion project
-
Seasoned team
Ensuring high security and performance standards is what we do best, thanks to our impressive expertise in building reliable and scalable solutions.
-
Technology expertise with 25+ years of experience
Our team has gained a wide pool of expertise in various programming languages, from the rarest to the most popular ones.
-
We comply with ISO 27001 security
We comply with ISO 27001 security management requirements with comprehensive policies and processes, advanced security technology, and skilled professionals.
-
Proprietary tools
We employ Ispirer proprietary tools, underscoring our dedication to delivering the utmost reliability and performance solutions.
The toolkit is compiled daily and continually integrates dozens of new conversion rules, enhancing the automation capabilities.
6 undeniable facts to choose conversion with Ispirer
-
Fact 1/6
Same functionality, new application
Migration does not require labor-intensive development of new functionality from scratch. Your application will be converted to a new technology while maintaining the original functionality
-
Fact 2/6
Architecture preserved or modified
Automated conversion implies preserving the initial architecture which is easier to maintain. The app architecture, can also be transformed, for example, from desktop to the web to improve accessibility and scalability
-
Fact 3/6
The speed of conversion
Migrating an application is much faster than creating a new one from scratch. Automated migration with Ispirer Toolkit minimizes manual effort and may speed up the delivery by 2-3 times
-
Fact 4/6
Legacy System Transformation
Migrating PowerBuilder to modern architectures or platforms can upgrade your application, making it easier to maintain, update, and extend in the long term run
-
Fact 5/6
Performance and Scalability
Through conversion, you can optimize the application's architecture and infrastructure, improving scalability and performance without the need to rebuild everything
-
Fact 6/6
No need for documentation
To perform the conversion, we go by your source code. There is no need to have detailed documentation in place to start the conversion as is the case with development
They chose Ispirer to revamp their application
Epicor, University of Maryland, NedGraphics and more have adopted CodeWays to boost their innovation life-cycle accelerate and manage their end-to-end innovation lifecycle
All testimonialsFrequently Asked Questions
Find answers. Ask questions. Connect with Ispirer support.
Want more details?
Request a consultation with our expert
Can you recommend tools or services for PowerBuilder to Java conversion?
Yes. PowerBuilder to Java is a supported direction, and the DataWindow decides project effort, which is why an assessment comes before any estimate.
A DataWindow combines a query, a layout, validation rules and update logic in one object. Conversion splits it: the SQL becomes a query in the data access layer, the presentation becomes a grid or form component in the chosen Java framework, validation becomes service level checks, and automatic update generation becomes explicit insert, update and delete statements with concurrency checks.
PowerScript classes and non visual objects become Java classes and services, PBL libraries become packages, and the SQLCA transaction object becomes JDBC connection and transaction management.
Because DataWindow behavior is implicit, define the expected update behavior before conversion and verify it with regression tests. Few products on the market handle DataWindow decomposition, and one that does is Ispirer Toolkit.

