Règles de migration vers PowerBuilder 2022

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).

Select Migration PB 2022 Group

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 
     

 

PowerBuilder Migration, Code Quality, Code Inspection, PowerBuilder 2022