perspectives on application development using sybase tools
DESCRIPTION
Perspectives On Application Development Using Sybase Tools. Donald D. Clayton President, Intertech Consulting, Inc. [email protected] (713) 586-6481 April 27, 2004. Objectives. Review some decision frameworks regarding the use of Sybase tools - PowerPoint PPT PresentationTRANSCRIPT
Perspectives On Application Development Using Sybase Tools
Donald D. ClaytonPresident, Intertech Consulting, [email protected] (713) 586-6481April 27, 2004
Objectives
Review some decision frameworks regarding the use of Sybase tools
Understand the Sybase tools strategy for application development
PowerBuilder PowerBuilder in a .Net World Next Generation Web DataWindow
PowerDesigner PowerDesigner For PowerBuilder Developers and PowerDesigner Futures
Audience Review
Which version of PowerBuilder are you on? How many applications are you supporting? How many of those are PFC? What do your enhancement requests look like?
Bug fixes only New functionality Need to move functionality to Web
What are your company’s current development standards?
Decision Framework #1
Maintenance vs. New Requirements Web vs. Non Web Looking for a Silver Bullet? It is important to have an effective baseline and know where
you want to go Step 1: Know your PowerBuilder Code
Maintenance Mode Only
If it isn’t broken, don’t try to fix it. There is lots of maintenance mode PB out there, mostly PB
6.5.1, with post Y2K fixes, etc. But what if there are new requirements?
Stick with PB 6.5, which seems to work… Or …move to newer version of PowerBuilder
Deployment Concerns
A major reason for moving to web-based computing is the elimination of deployment concerns
How many of you would like to eliminate the tedious installation of new and upgraded software onto the many PCs in your far-flung company? Many companies use CITRIX or Terminal Services There are other options available
Softricity's SoftGrid
Exent Technologies
Stream Theory
Appstream
Egenera
Do You Need to Get To The Web?
There are numerous ways to get to the web with Sybase products PowerBuilder/EAServer Combo HTML DataWindow Web Services Tools in EAServer 3rd Party Code Generators or Migrators
Appeon
Metex
Decision Framework #2
What development tools do your strategic and tactical application development platforms call for?
Sybase sees the App Dev World splitting into two large camps with several smaller camps around them
Large Camps Microsoft Visual Studio and .Net Java
Small Camps Borland Delphi PowerBuilder Centura Oracle Forms
The .NET World of Microsoft
Microsoft’s vision of Windows application development is an all encompassing environment with many benefits
Common runtime system Type safe programming Easy communication between different languages Massive class library, from soup to nuts.
.The Future According to Microsoft
The .Net Cool-aid
Microsoft intends to do all their applications development and more under .NET.
C# will be the language of choice for everything that is not of the kernel, which will remain in C/C++.
The scope of the runtime system and the class libraries is almost breath taking.
Microsoft believes in this architecture strongly enough to have upset their very large base of Visual Basic developers with a radically (for them) new version Visual Basic.
Powerbuilder’s Place in .NET
Powerbuilder offers alternatives to Microsoft’s vision. Sybase announced and has committed to a 4 phased .Net
strategy Release 9.0
Supports Web Services and XML
Release 10.0 More support for Web Services DataWindow .NET
Release 11.0 PB 11.0 will introduce compiler support for .NET, compiling Powerscript
directly to MSIL Powerbuilder access to .NET class libraries Allow .NET applications to access Powerbuilder objects.
Powerbuilder’s Place in .NET
The DataWindow .NET Will be a citizen of the .NET world The DataWindow technology will be extended to all languages supported in
the Common Language Runtime Visual Basic.NET, C#, C++
For the Visual Basic programmer A worthy competitor to the DataGrid control The DataWindow offers features that will be enticing to VB programmers
For the Powerbuilder programmer Where development in .NET is mandated, the investment in DataWindows is
protected. The DataWindow will be familiar
Coming in the next release
The DataWindow .NET initiative
A .NET data aware control Drop it on a Window Form It supports the familiar set of DataWindow properties, events and methods
The .NET data aware object Instantiated using “new”. Like the DataWindowControl, it will expose DataStore methods events and
properties.
The Powerbuilder database drivers The DataWindow Builder
For DataWindow creation without Powerbuilder
What is the DataWindow.NET?
The DataWindow .NET Initiative
The DataWindowControl Is a custom authored Windows Form. Can be dropped on a Windows Form Backed up by a C# class library that maps DataWindow functionality to
applications running within the Common Language Runtime This class library includes the DataStore.
The DataWindow engine (server) Powerbuilder DataWindow engine Loads DataWindow definitions from pbls and pbrs Communicates with the database drivers Processes UI events in the screen real estate of the DataWindowControl Does the screen painting.
Implementation
The DataWindow .NET Implementation
From the Visual Studio .NET toolbox Select and drop the DataWindowControl onto a Windows Form. Two important properties are exposed: Enter the name of the DataWindow Object to use in the DataWindowControl Enter a library name from where to load the DataWindow Object
.
How do you use it
DataWindow .NET Implementation
DataWindow Events.. The DataWindowControl will support the same set of events as the
DataWindow
How do you use it?
Powerbuilder’s place in .NET
A future release of Powerbuilder will: Compile Powerscript code to MSIL Allow Powerscript to run under the Common Language Runtime
Allow Powerscript access to .NET class libraries Allow Powerscript to consume both Microsoft and other .NET objects
Allow .NET objects to access Powerbuilder objects NVO etc.
Powerbuilder futures
PowerScript.NET
Create a .NET target When creating a PB target, you will be able to create a .NET target. In this
target you can import and extend .NET classes written in other languages.
Create a normal target and compile it into MSIL When creating a PB target, if you choose to create a normal target, you can
create a project to compile the target into a .NET application. However, in this target, you cannot import or extend.NET classes written in other languages.
How to create a PB target for .NET?
PowerScript.NET
Compile a PowerBuilder target into a .NET application. Import and use .NET classes written in other languages. Extend .NET classes written in other languages.
What can you do with it?
PowerBuilder 10: The “XML Web DataWindow”
Solution
Utilize latest web technologies: XHTML Client-side XML Client-side XSLT Standalone CSS stylesheet (with cascaded absolute positioning)
XML Web DataWindow
Browsers targeted:
Browser XML parserXSLT processor
XSLT version
Internet Explorer 5, 5.5 MSXML 2.0 XSL-WD
Internet Explorer 6.0 MSXML 3.0 XSLT 1.0
Netscape 6+ TransforMiiX XSLT 1.0
Mozilla 1.0 TransforMiiX XSLT 1.0
Why Use XHTML?
Benefits: Separation of presentation markup from content
Most fundamental principle in web development
Use of XML-specific technologies in architecture DOM-based generation and parsing
Use of XML-specific tools for customizing TreeView-based editing
Separating Presentation from Content
Within DataWindow: Content = data values of column, compute, and text controls Presentation = visual and functional properties of DW controls
Benefits of Separating: Accessibility Targeted presentation using stylesheets Improved processing by browser
XHTML Benefits
XHTML’s separation of visual elements from actual content make page much more accessible to people with disabilities
XHTML more easily understood by people with visual impairments using screen readers and voice browsers
Presentation can now be stored in separate stylesheet documents (CSS and XSL) for XHTML page
Different stylesheets more easily generated for different browsers United States, Section 508 of the Usability Act
Accessibility
Client-Side XML
XML Content
CSSXHTML
XSLTDetermines structural
layout
Determines style ofelements as displayed
in browser
XSLT
Extensible Stylesheet Language Transformations Provides a way of transforming XML documents into other
document formats For XHTML (which is fundamentally XML), XSLT can be used to
transform an XML document into a styled XHTML web page for display in a browser
XSLT goes beyond CSS by allowing rules that change or infuse the content with layout and structure
Why Use Client-Side XSLT?
Benefits: Saves bandwidth Clients only need to download and cache XSLT code once for
DataWindow session Server processing is reduced with more work being done on client
XML Web DataWindow Design
JSP Page
Server-Side Client-Side
User request page
XML Web DWcomponent
DataStore
Step 1HTTP get
Step 2DataWindow generated in separate XML, XSLTCSS, JS, with transform script sent to client
Step 3HTTP response
Step 5User interacts with DataWindow, but next request only requires download of XML and JS rows
XHTML PageClient-Side
Step 4Client-side JavaScript
uses XSLT to transform XML into XHTML and
displays this in the <div> in the browser
XML
XSLT XHTML
JS rows
Client-side JavaScript
JS control
CSS
XML Web DataWindow Generator
1.) Invoked in the DataWindow engine from server-side code
2.) Generates an XHTML rendering of the DW in a DOM tree
3.) Concurrently generates a CSS stylesheet using a DOM tree with all styling information of the DW’s elements, including absolute positions in cascade
4.) Also generates separate client-side JavaScript files for instantiating the control object and array of row elements
Static client-side set of JavaScript files deployed as usual
5.) Reverse-transforms the XHTML DOM tree to XML and XSLT DOM trees for web publishing
XML = DataWindow data content for the page XSLT = DataWindow structural layout
6.) Ultimately generates small amount of script to perform explicit transformation on client-side
Server-Side
PowerBuilder 11: New Language Features
A language feature that allows programmers to organize their program into sets of modules.
Help avoid name conflicts. Support team programming efforts.
Packages can be nested.
Package
New Language Features
Usage 1Package mypackage
Usage 2Package FirstLevelPackage.SecondLevelPackage
Declare a package
New Language Features
Usage 1import system
Usage 2// import a package (actually a .NET namespace)import system.text.regularexpressions as st
Regex r = create st.Regex(“abc”)Match m = r.match("123abc456")String strIf m.success then
str = “The position of abc is at ” + string(m.index)end if
Import a package
PowerScript.NET
// use a .NET namespace
imports System.Text.RegularExpressions
// create an instance of a .NET class
Regex r = create Regex("abc")
Match m = r.Match("123abc456")
String str
If m.success then
str = “The position of abc is at ” + string(m.index)
end if
Import and use a .NET class
PowerScript.NET
// use a 3rd party namespace
imports ThirdPartyNameSpace
// Declare a class inheriting from a 3rd party class
type MyClass extends ThirdPartyClass
int ii_var
end
// overriding a function
forward prototypes
public function int doSomething(string s)
end
public function int doSomething(string s)
return doSomethingElse(s)
end
Extend a .NET class
New Language Features
A language feature that allows programmers to define constructors with parameters.
Constructor(string name, int id)
With parameterized constructors, you can create an instance in several different ways.
Employee e = create employee(“xxx”, 123)
Parameterized constructors
New Language Features
An interface declaration introduces a new reference type whose members are abstract methods.
Interfaces can help reduce the couplings between classes and packages, and improve testibility.
A class can implement more than one interfaces.
Interfaces
New Language Features
Public interface IEmployee
function string getName()
subroutine adjustSalary(real adjustment)
event companyClosed()
End
Interface IDeveloper extends IEmployee
subroutine assignProject(string projectName)
end
Declare an interface
New Language Features
A class can implement one or more interfaces. Interfaces can be used as parameters or return values.
Class Page implements IPrintable
public subroutine print()
public subroutine addItem(IItem item)
Public function IItem getItem(int x, int y)
End
Use an interface
New Language Features
User-defined enumerations Class methods Bit-wise operations New data types
Hashtable List Regular expression …
Other features
PB 11 Complier Framework
To lay a solid foundation for writing the PB p-code compiler, .NET compiler, and Java compiler.
To be able to write utilities, e.g. cross-referencing tool, based on the compiler framework.
Why have a new compiler framework
Pre-processor Parser
Java byte-codegenerator
P-code generator
.NET IL generator
Other tools
InstrumentedPS code PS code
AST
Complier FrameworkArchitecture
CompilerFramework
.NET Importer
.NET Emitter
IImporter
IEmitter
.NET Compiler
IPreprocessor
PreprocessorPreprocessor
IPSVisitor
Complier Framework
Syntactic analysis Parse the given source code and generate an Abstract Syntax Tree (AST).
Contextual analysis Identification – Resolve the identifiers, load other classes if necessary. Type checking – to ensure there is no type error.
What does the compiler framework do
Complier Framework
The compiler framework provides an interface IPSVisitor for traversing the AST tree.
With the visitor interface and the AST tree, many things can be done:
Emit PB p-code Emit .NET MSIL Emit Java byte code Create a cross-reference database PBDoc like javadoc Refactoring Reverse engineering …
Make use of the compiler framework
Complier Framework
A pre-processor can introduce some keywords to the PowerScript language.
A pre-processor is responsible for translating the keywords into “real” PowerScript code.
Examples: Design by Contract Aspect-Oriented Programming …
Pre-processor
Next-Generation PowerScript Langauge
Continue to be a productive language A general-purpose language More object-oriented A high-level language but can do low-level things Support both .NET and Java Extensible Lots of utilities
Going forward…
Agenda
PowerDesigner Overview PowerDesigner 9.5.2 for PowerBuilder PowerDesigner Roadmap PowerDesigner 10 and PowerBuilder 10 Together
TraditionalE/R DataModeling
(James Martin)
Object-orientedModeling
(UML techniques)
Business ProcessModeling
(emerging standards)
Designers/Analysts,DBAs, Database Developers
Design Tools Market Landscape
Designers/Analysts,Developers, Programmers
Business AnalystsLOBsCIOs
Three markets converging
Source Sybase
Rep
osito
ryBusiness
centric
ITcentric
PowerDesigner 9.5.2
Development
Analysis&
Design
BusinessAnalysis
Business-centric Control Flow diagram
Entity/Relationship modeling (and DW extensions)
UML modeling (all diagrams)
RDBMS structuresObject Relational mappingJava, .Net, XML, PB... supportIDEs & App Server support
Tem
plates, G
eneric G
enerato
rs,U
ML
pro
files, mo
del-to
-mo
del g
eneratio
n…
Integrated Enterprise Modeling Tool
Link and Synchronize All Models
PowerBuilder,Java, J2EEXML, WSDL
Forward Engineering
Reverse Engineering
Round-trip Engineering
Import/Export
ODBC
C++, C#, VB.Net,
Web Services, etc...
Business ProcessModel(BPM)
ebXML, MessageBroker,
Ohio
Database SQL Script(DDL)
O/R
Map
pin
g
Conceptual DataModel(CDM)
Physical DataModel(PDM)
Object-Oriented Model(OOM)
PowerDesigner for PowerBuilder Features Summary
PowerDesigner 9.5.2 introduces complete support for all PowerBuilder objects reverse engineering and generation
Support libraries (.pbl) and source files (.sr*) Support PowerBuilder 6, 7, 8 and 9 PowerBuilder tool palette for creating new objects Model verification Generate & reverse PowerBuilder extended attributes in PDM
PowerDesigner Value Proposition
Help users to understand how the application was developed. Help users to visually see the relationship between objects. Help users to improve existing code, refactor the code. Regenerate PowerBuilder application. Generate documentation (report) in HTML and RTF format.
Example of a Class Diagram
*iw_opensheets
<<menu>>
m_pbtutor_sheet
<<userObject>>
n_pbtutor_sheetmanager
++++
is_sheetsis_displayiw_opensheetsim_items
: string[]: string[]: w_pbtutor_basesheet[]: menu[]
+++++++++++
of_unregistersheet (..)of_sheetcount ()of_opensheet (..)of_sheetisclosing (..)of_classcount (..)of_openallsheets ()of_adjustmenu (..)of_resetmenu ()of_registersheets (..)of_addtomenu (..)of_registersheet (..)
: integer: long: integer: long: long: integer: integer: integer: integer: integer: integer
<<window>>
w_cust_pct
++
<<property>><<property>>
tagwidth
: string: integer
= "Customer Location" = 2392
++
uf_percentage (..)activate ()
: decimal
cbx_zerosle_resultcb_percentddlb_statest_2st_1
<<window>>
w_pbtutor_basesheet
++++++++++++
<<property>><<property>><<property>><<property>><<property>><<property>><<property>><<property>><<property>><<property>><<property>><<property>>
XYWidthHeightTitleBarTitleMenuNameBackColorControlMenuMinBoxMaxBoxResizable
: int: int: int: int: boolean: string: string: long: boolean: boolean: boolean: boolean
= 672 = 264 = 1582 = 1064 = true = "Sheet" = "m_pbtutor_sheet" = 79416533 = true = true = true = true
++++++++
ue_postopen ()ue_undo ()ue_cut ()ue_copy ()ue_paste ()ue_clear ()open ()close ()
Defining Inheritances
A parent class could be a shortcut representing a class defined in another model for example for system classes.
<<userObject>>
uo_cust_visual_1
++++++
<<property>><<property>><<property>><<property>><<property>><<property>>
widthheightbackcolortexttabtextcolorpicturemaskcolor
: integer: integer: long: string: long: long
= 1787 = 384 = 67108864 = "none" = 33554432 = 536870912
pb_1
UserObject(<PowerBuilder 9>)
++++++++++++++++++++++
EnabledHScrollBarVScrollBarBorderObjectTypeControlBackColorPointerClassNameLibraryNameTextStyleUnitsPerLineLinesPerPageUnitsPerColumnColumnsPerPageBorderStyleTabTextColorTabBackColorPictureNamePictureMaskColorPowerTipText
: boolean: boolean: boolean: boolean: UserObjects: WindowObject[]: long: string: string: string: string: long: integer: integer: integer: integer: BorderStyle: long: long: string: long: string
= true
= CustomVisual!
= 1073741824
= StyleBox!
= 67108864
= 25166016
+++++++++++++++
Constructor_event ()Destructor_event ()DragDrop_event ()DragEnter_event ()DragLeave_event ()DragWithin_event ()Other_event ()RButtonDown_event ()AddItem (..)DeleteItem (..)EventParmDouble (..)EventParmString (..)InsertItem (..)PageCreated ()CreatePage ()
: int: int: int: int: int: int: int: int: integer: integer: integer: integer: integer: boolean: integer
<<window>>
w_customers
++++
<<property>><<property>><<property>><<property>>
tagwidthheightx
: string: integer: integer: int
= "Maintain Customers" = 2940 = 2940 = 670
dw_detaildw_master
<<window>>
w_master_detail_ancestor
+++
<<property>><<property>><<property>>
widthheightmenuname
: integer: integer: string
= 2267 = 1732 = "m_my_sheet"
+++++
ue_retrieve ()ue_insert ()ue_update ()ue_delete ()open ()dw_detaildw_master
<<window>>
w_products
++
<<property>><<property>>
tagwidth
: string: integer
= "Maintain Products" = 2830
dw_detaildw_master
Overriding Properties
In the Attributes tab of the class property sheet, the Inherited button allows you to select the properties to override.
Previewing PowerBuilder Code
Open the properties of an object. Select the Preview tab. Change the code in the Preview window (add attributes, modify operations,
…), the model will be updated to reflect the changes. For DataWindow, Menu, Query, …, change the code in the Script tab
PowerDesigner and PowerBuilder Together
PowerDesigner: A Plugin Component in PowerBuilder 10 Reverse Engineer From PowerBuilder Design and Generate PowerBuilder Code Using
PowerDesigner Navigation Between PowerDesigner and PowerBuilder
Summary
PowerDesigner and PowerBuilder Together
Add Classes and Do Design Although PowerBuilder doesn’t support interfaces yet, user can define
interface in PowerDesigner, then implement interface in a PowerBuilder user object.
Design and Generate PowerBuilder Code Using PowerDesigner
PowerDesigner and PowerBuilder Together
Design in PowerDesigner
Modify in PowerBuilder
Generate PowerBuilder Code
Debug and Run
Reverse Engineer to Update Class Diagram
Future Direction
PowerDesigner 10.0 will support tight integration with PowerBuilder 10
PowerBuilder 10 will be able to embed PowerDesigner views inside PowerBuilder
PowerBuilder will be able to control PowerDesigner PowerDesigner will generate complete PowerBuilder
application code (post 10.0)
PowerDesigner Roadmap
PowerDesigner Athena (V10, December 2003) Integration with PowerBuilder Integration with Eclipse (Q1 2004) Major BPM improvements XML model Fully support MDA
PowerDesigner Minerva (end of 2004) Enterprise features (requirements, impact analysis, …) XML and Web Services in database UML 2.0 Design patterns
Other Athena Features
Support C# and VB .NET reverse engineering Improve Web Services support (support Apache Axis, …)