Avant de migrer à PowerBuilder 2022, il est essentiel d'identifier les fonctionnalités existantes qui ne sont pas compatibles avec cette nouvelle version et les conséquences sur le reste de l'application.
Ouvrez un projet PowerBuilder → Dans la vue principale, sélectionnez Problèmes d'inspection du code (1) → Cliquez sur [Tous les problèmes par groupe] dans la barre de navigation (2) → Examinez la section [Migration à PB 2022] dans la vue principale (3).

Consultez la documentation des règles d'inspection du code de Visual Expert pour en savoir plus sur chaque règle.
Règle 1: L'appel à la classe Java dans PowerBuilder n'est plus supporté
Exemple de code non conforme :
global function void ejbconnectionSample3 ();
JavaVM l_jvm //Non compliant code
EJBConnection l_ejbconn //Non compliant code
EJBTransaction trans //Non compliant code
java_integer val
l_jvm = CREATE JavaVM //Non compliant code
l_EJBConn = CREATE EJBConnection //Non compliant code
TRY
IF l_jvm.createJavaVM("", false) >= 0 THEN //Non compliant code
string ls_props[]
ls_props[1] = "javax.naming.Context.INITIAL_CONTEXT_FACTORY=
weblogic.jndi.WLInitialContextFactory"
ls_props[2] ="javax.naming.Context.PROVIDER_URL=t3://svr1:7001"
ls_props[3] = "javax.naming.Context.SECURITY_PRINCIPAL=myid"
ls_props[4] = "javax.naming.Context.SECURITY_CREDENTIALS=mypass"
l_EJBConn.connectToServer(ls_props) //Non compliant code
l_EJBConn.createJavaInstance(val, "java_integer") //Non compliant code
val.java_integer(17)
trans = conn.GetEjbTransaction //Non compliant code
trans.begin() //Non compliant code
MessageBox("The value is", val.IntValue())
ELSE
MessageBox("createJavaVM", "Failed", StopSign!)
END IF
CATCH (Throwable g)
MessageBox("Exception in createJavaInstance", g.getMessage())
END TRY
end function
Règle 2: DDE Functions and events are obsolete
Exemple de code non conforme :
global function void loadDDEMethodsAndEvents ();
long handle
string s_regiondata[3]
handle = OpenChannel("Excel", "REGION.XLS", & //Non compliant code
Handle(w_ddewin))
GetRemote("R1C2", s_regiondata[1], handle, & //Non compliant code
Handle(w_ddewin))
GetRemote("R1C3", s_regiondata[2], handle, & //Non compliant code
Handle(w_ddewin))
GetRemote("R1C4", s_regiondata[3], handle, & //Non compliant code
Handle(w_ddewin))
CloseChannel(handle, Handle(w_ddewin)) //Non compliant code
end function
Règle 3 : Les objets SOAP et INET ne devraient pas être utilisés
Exemple de code non conforme :
global function string hyperlinktourl (integer id)
integer li_rc
inet iinet_base
veinet veiinet_base
iinet_base = CREATE inet
veiinet_base = CREATE veinet
SetPointer(HourGlass!)
li_rc = &iinet_base.HyperlinkToURL("https://www.visual-expert.com")
li_rc = veiinet_base.HyperlinkToURL("https://www.visual-expert.com")
DESTROY iinet_base
Return ""
end function
Règle 4: L'interface de la base de données JDBC est supprimée du database painter
Exemple de code non conforme :
SQLCA.DBMS = "JDBC" //Non compliant code SQLCA.AutoCommit = False SQLCA.DBParm = "Driver='cdata.jdbc.sybase.SybaseDriver',URL='jdbc:sybase:User=myuser;Password=mypassword;Server=localhost;Database=mydatabase;Charset=iso_1;"; //Non compliant code CONNECT USING SQLCA; dw_master.SetTransObject(SQLCA); dw_master.Retrieve();
Règle 5 : L'interface de la base de données OData est supprimée du database painter
Exemple de code non conforme :
SQLCA.DBMS = "JDBC" SQLCA.AutoCommit = False SQLCA.DBParm = "Driver='cdata.jdbc.odata.ODataDriver',URL='jdbc:odata:URL=http://services.odata.org/V4/Northwind/Northwind.svc;UseIdUrl=True;OData Version=4.0;Data Format=ATOM;"; //Non compliant code CONNECT USING SQLCA; dw_master.SetTransObject(SQLCA); dw_master.Retrieve(); SQLCA.DBMS = "ODT" //Non compliant code SQLCA.DBParm = "ConnectString='URI=http://esx2-appserver/TestDataService/Employee.svc'" //connect to the service connect using SQLCA; dw_master.SetTransObject(SQLCA); dw_master.Retrieve();
Règle 6: la méthode XSLFOP! PDF est supprimée de Power Script
Exemple de code non conforme :
int li_ret dw_master.Object.DataWindow.Export.PDF.Method = XSLFOP! //Non compliant code dw_master.Object.DataWindow.Export.PDF.xslfop.print='Yes' //Non compliant code li_ret = dw_master.saveas("printed.pdf", PDF!, true) int li_ret dw_master.Modify("DataWindow.Export.PDF.Method = XSLFOP! ") //Non compliant code dw_master.Modify("DataWindow.Export.PDF.xslfop.print='1'") //Non compliant code li_ret = dw_master.saveas("printed.pdf", PDF!, true)
Règle 7 : Utilisez la fonction LoadWithDotNet au lieu des fonctions LoadWithDotNetFramework et LoadWithDotNetCore
Exemple de code non conforme :
global function void loadDotNetDLLSample ();
Long ll_return
String ls_dll
DotNetAssembly lcs_ass
//Specifies a DLL in the relative path
Ls_dll = "Appeon.Simple.dll"
//Instantiates the DotNetAssembly object
Lcs_ass = create DotNetAssembly
//Loads the DLL
Ll_return = lcs_ass.LoadWithDotNetFramework(ls_dll) //Non compliant code
//Checks the result
If ll_return < 0 then
Messagebox("Load "+ls_dll+" Failed", lcs_ass.ErrorText)
Return ll_return
End if
end function