1. Alexander Strelkov
  2. PowerBuilder
  3. Friday, 1 September 2017 11:56 AM UTC

Hi,

Not long ago I've written a PBNI (PBX) library that enables closely integration of Java and PB languages. The library allows to make communication of this languages in both directions: PB can create Java objects and call its methods and Java in turn can do the exact same things with PB objects in the same shared session. Unlike from PB EJB approach to call Java methods, this library may not use PB Proxy objects at all (although it may) - sufficient to indicate required signature for Java method when calling it from PB. On Java side the same approach has being applied but only with PB method signatures. For further simplicity such calls was wrapped into methods with names that matches to the counterpart on PB side.

Stop talking and consider some simple example. Suppose we have some PB window:

We have created and initialized PB global variable with name jvm tentatively and connection to DemoEAS DB was established via SQLCA object. To DataWindow control's  (dw_main) property with name DataObject was assigned a reference to dw-object "d_customers" (grid-style). Next, in the open event of our window object we will create and initialize inv_jobject instance variable of java_object class that will present some Java Controller class. Then I receive a reference to java_method object by its Java signature, set it argument/s (if any) and at last call/invoke it.

dw_main.SetTransObject(SQLCA)
dw_main.SetFocus()

any params[]
java_method jm

//try
inv_jobject = jvm.CreateJavaObject("Controller")
jm = inv_jobject.getMethod("open", "(Lcom/powerbuilder/runtime/classes/PBDatawindow;)V")
params[1] = dw_main
jm.Invoke( params )
//catch (RunTimeError err)
//	MessageBox("Error", err.GetMessage(), Exclamation!)
//end try

The source of Controller.java file is follow:

import java.util.Date;
import com.powerbuilder.runtime.*;
import com.powerbuilder.runtime.enums.*;
import com.powerbuilder.runtime.classes.*;
import com.powerbuilder.utils.*;

public class Controller
{
    protected PBDatawindow dwo;
    
    public void open(PBDatawindow dw)
    {
        dwo = dw;
        int rows = dwo.retrieve();
    }

    public String getProperties(String expr)
    {
        return dwo.describe(expr);
    }

    public void enumFirst(int rows)
    {
        int i;
        String txt = "";
        int nCount = dwo.rowCount();
        for (i = 1; i
            txt +=  (int)dwo.getItemNumber(i, 1)+ ".\t" +
                dwo.getItemString(i, "fname") + "\t" +
                                   dwo.getItemString(i, "lname") + "\n";
        }

        Dialog.info("First "+rows+" records are:", txt);
    }

    public int setFilter(String filter)
    {
        dwo.setFilter(filter);
        return dwo.filter();
    }

    public void close()
    {
        Dialog.messageBox("Close", "ByBy", Icon.Exclamation);
    }
}

As we can see on Java side we'll work with the same instance of PB DataWindow object  But its type (class) in Java is PBDatawindow - mirrored class for work with any dw-objects.

Other event sources of PB Window are follows:

close event:
any params[]
inv_jobject.getMethod("close", "()V").Invoke(params)

NY'ers button clicked event:
inv_jobject &
    .getmethod("setFilter", "(Ljava/lang/String;)I") &
    .invoke({"state='NY'"})
dw_main.POST SetFocus()

Top 20 button clicked event
inv_jobject &
    .getmethod("enumFirst", "(I)V") &
    .invoke({20})

As a result First 20 records are message box was displayed

This library is in beta testing mode yet. So if anybody has some practical interest to this functionality I can give a reference to download pbx/pbd files and source of Java package with a purpose of collaborative testing this library and obtaining its fully workable version. Naturally you will have all rights to use it freely in any projects in future.

 

 


Responses (12)
  1. Likes
  2. Latest
  3. Oldest
Loading...

Find Questions by Tag

.EXE .NET 6.0 .NET Assembly .NET Core 3.1 .NET Core Framework .NET DataStore .NET Std Framework 32-bit 64-bit ADO.NET AEM AI Algorithm Amazon AWS Android Apache API APK App Store App Store (Apple) Appeon Workspace Appeon Xcelerator Plug-in Architecture Array ASE Asynchronous Methods Authentication AutoBuild AutoCompiler Automated Testing Automation AutoScript Azure Barcode Base64 Batch BigData BLOB Branch & Merge Browser Bug Build Button C# C# Class Importer C# Editor C# Model generator Calendar Camera Certificate Chrome Citrix Class Client Client/Server Cloud Cluster Collection COM Command Line Compiler Compression Computed Field Configuration Controls Cookies Cordova Crash Cross-Platform Crosstab CSharpAssembly CSharpObject CSS CSV Cursor Data Database Database Driver Database Painter Database Profile Database Provider DataObject DataSource DataStore DataStore (C#) DataStore (PS) DataType DataWindow DATE DATETIME DB2 Debug Debugger Debugging Deployment Design DLL DO-WHILE Dockable Docker Documentation DOUBLE Download DragDrop Edge Edit Style Editor Elevate Conference Email Embedded SQL Emulator Encoding Encryption Enhancement Request Entity Entity Framework ERP Error Event Event Handler Event Handling Excel Exception Export Expression External Functions F# Field File File Access Filter Firefox Firewall Font FOR-NEXT Foreground Format Function Garbage Collection GeoLocation Git Graph HANA Hash Header HTML/5 HTTP/S HTTPClient Icon IDE Identity IIS IMAPI Import InfoMaker Inheritance Installation Integer IntelliSense Interface Internet Internet Explorer iOS IPA iPad iPhone IWA J# Java JavaScript JBoss JDBC JOIN JSON JSONGenerator JSONParser Kestrel Label Lambda Large File LDAP Library License LINQ Linux OS Load Balancing Localization Localized PBVM Log In Log Out Logging LONG LONGLONG macOS MAPI Maps MDI Memory Memory Leak Menu Merge MessageBox Messagging Method Migration MIME TYPE Mobile Model ModelStore ModelStore (C#) MSOLEDBSQL Multi Threading MVC MySQL n-Tier Namespace NativePDF NVO OAuth ODATA ODBC Office Offline OLE OLEDB Online Open Source OpenAPI OpenSSL Oracle OrcaScript Other Outlook Output Package Parameter Patch PayPal PB Classic PB Native PB.NET PBC PBD PBDOM PBG PBJVM PBL PBNI PBORCA PBVM PBX PDF Performance Permission PFC Picture Pipeline Play Store (Google) Plugin Popup Port POST PostgreSQL PowerBuilder PowerBuilder (Appeon) PowerBuilder (SAP) PowerBuilder Compiler PowerBuilder Runtime PowerClient PowerScript (PS) PowerScript IDE PowerScript Migrator PowerServer PowerServer Mobile PowerServer Toolkit PowerServer Web PowerServerLabel Print Properties Proxy Publish PULL PUSH Query Regression Release Renew Resize Response REST Retrieve RibbonBar RibbonBar Builder Rich Text Roadmap RPC Runtime Packager SaaS Scaffolding Script SDI SDK Security Server Service Session Single Sign-on Size SMTP SMTPClient SnapDevelop SOAP Sort Source Code Speech Recognition SQL SQL Anywhere SQL Server SqlBuilder SqlExecutor SQLite SqlModelMapper Storage Stored Procedure Subscription SVN Swagger Syntax TabbedBar TabbedView Tablet TabPage Target TE Control Testing Text TFS Theme TIME Timer TLS/SSL Tomcat TortoiseGit TortoiseSVN Transaction Transparency Trial Trigger TRY-CATCH TX Control Type UI ULONG UltraLite Uninstall Unit Test Unit Testing UNIX OS Update Upgrade Upload URL User Center User Object UWP Validation VARCHAR Variable Versioning Visual Studio Visual Studio Code VM Voice Warning WCF Web API Web Extensions Web Service WebBrowser WebForms WebLogic WebSphere WildFly WinAPI Window Windows OS WinForms Wizard Workgroup Workspace WPF XCODE XHTML XML Zoom

Helpful?

If a reply or comment is helpful for you, please don’t hesitate to click the Helpful button. This action is further confirmation of their invaluable contribution to the Appeon Community.