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