400 likes | 523 Views
.NET for Everyone. Peter van Dam pvd@netsetup.nl. PUG Norway - Lillehammer 2005. Why a .NET client?. Support more client types (PocketPC, SmartPhone, Linux) Easier to sell: Eliminate ‘Progress who?’ .NET framework already available on client Sell to Microsoft-only organizations
E N D
.NET for Everyone Peter van Dam pvd@netsetup.nl PUG Norway - Lillehammer 2005
Why a .NET client? • Support more client types (PocketPC, SmartPhone, Linux) • Easier to sell: • Eliminate ‘Progress who?’ • .NET framework already available on client • Sell to Microsoft-only organizations • Superior Windows user interface • Integration with Microsoft desktop
Downsides of .NET • No strong server-side offering • Low level 3GL language • Low productivity for Business Logic • High roundtrip time (+3 seconds over internet) • Limited scalability
Why Progress? • Best 4GL for business logic • Superior AppServer technology • Better scalability • Multiple database support • Multiple OS support
Best of Both Worlds • Progress on the Server • .NET on the Client Internet Internet Internet Internet .NET Progress or or or or Application data Application data Intranet Intranet Intranet Intranet
The Project Started with the OE 10 Beta program in August 2003 Partnered with a company that had some C++ and Java experience but no .Net experience Netsetup provided the server framework (DWP) Subsidized by the Dutch government (WSBO)
Internet orIntranet WebClient over inter/intranet AppServer AIA DB
The DWP API getscreen.p Repository ui.p Application data Dynamic client Application data update.p Appserver boundary
Internet orIntranet The ultimate goal:.Net over Inter/intranet AppServer AIA .NETproxy DB
The OE 10 Open Client Toolkit There were many problems with the .NET proxy during the beta Therefore we started with a Web Services approach The .NET proxy problems were eventually fixed in OE 10.0A SP1 However, the .NET proxy did not run with AIA until OE 10.0B ProDataSet was not mature until OE 10.0B
.NET communication ProxyGen generates an <application>.dll file This is a so-called .NET assembly (compiled library) It enables the .NET program to communicate with the Progress AppServer The data traffic is exactly the same as native Progress
Creating the .NET client Choose a .NET language C# seems to be the most logical choice because it is created for .NET If necessary, customers can create additional client-side code in different languages (i.e. Visual Basic .NET)
Connecting to the AppServer The .NET client connects to the Progress AppServer using the Connection and Application objects supplied in the proxy You connect justlike in Progress by supplying a URL, userid, passwordand extra info
Connecting to the AppServer If the connect succeeds, the proxy remembers the connection state and you can call the Application objects Just like in Progress, it is a problem to determine if the authentication failed or there is another problem with the connection
Regional settings PROGRESS programmers are used to dictating the date and numeric format to users (by specifying –d or DATE-FORMAT and –E or NUMERIC-FORMAT) for the client In the Windows world, the user is in charge of this The .NET client should use the user’s Regional settings
Representing dates Our .NET client uses the Short date format from the user’s Regional Settings The developer must allow for the maximum possible size of date fields In addition we represent each date field with a date picker in update mode
Representing Integers Integers are represented using the Regional Options Number settings This means that the Progress FORMAT is not used As a matter of fact the Progress FORMAT is not even available on the client And if you would make it available on the client, it would not make sense to .NET Therefore we must store the .NET format in the repository
Representing Decimals In Regional settings the Number format applies both to Integers and Decimals In addition to that a Currency format is defined as well In Progress we cannot distinguish between Decimals and Currency We display all Decimals according to the Number format We use the Progress FORMAT to find out the number of decimals to display
Sizing a field How do we determine the size of a field? We do not have the Progress FORMAT and if we had it we could not interpret it in C# We solved this issue temporarily by passing the BUFFER-FIELD:WIDTH property to the .NET client But the Progress width does not necessarily make sense in .NET
Showing field data In Windows, a disabled field is always grayed out We know that problem from COMBO-BOXES, RADIO-SETS and TOGGLE-BOXES in the 4GL We solved it in C# by making the fields Enabled and ReadOnly Added bonus is that you can also copy field data
Parsing VIEW-AS Our own C# Widget Factory parses the Progress VIEW-AS phrase This is how the C# client knows when to create a COMBO-BOX, RADIO-SET etc. We try to interpret the VIEW-AS phrase as good as possible Example: LIST-ITEM-PAIRS It would be better to store .NET formatting information in the repository as well
? The Unknown value (1) .NET has no concept of the Progress unknown value in variables The Progress unknown value maps to DBnull All .net code will generate errors if a variable contains DBnull somewhere Therefore you have to check for Dbnull everywhere in your code
? The Unknown value (2) You can also have Proxygen map these variables to special ‘holder’ classes (e.g. IntHolder instead of int) These are Progress supplied classes that can also hold unknown values The code is more verbose and less standard if you use these Try to avoid using the unknown value in your interface if you can
Web Service or .NET Progress proxy? Which communication method are we going to choose? The Web Service approach creates a lot of overhead but became available in 9.1D02+ .NET Proxygen was not available until Open Edge 10 This had some impact on the development of the C# rendering program
Internet orIntranet Web Service approach WSA AppServer DB .wsdl .wsm
Web Service approach .NET natively supports Web Services ProxyGen generates a .wsdl file and a .wsm file The WSDL file describes the Web Service (API and location) The .wsm file is needed to deploy the Web Service Communication is standard XML over HTTP/S ProDataSet not supported
Drawback of Web Services A Web Service is not very efficient for this purpose because it has too much overhead AppServer calls are converted to XML and wrapped in SOAP messages SOAP imposes severe limitation on the characters used (e.g. CHR(1)) Web Services are ideal for occasional inter-application communication Not ideal for running a single application over the internet
The .NET proxy in OE 10.0A After the introduction of OE 10.0A SP1 we switched from Web Services to a .net proxy (regrettably not yet with AIA) AppServer .NETproxy DB
uihooks.cs Internet orIntranet Code Hooks blhooks.p Repository ui.cs bl.p Application data Application data
After one year… Results were unsatisfactory We had wasted a lot of time on technical issues, including initial OpenEdge bugs Project progressed too slow Many communication problems between .NET and Progress people Not enough commitment from our partner No .NET added value from our partner We decided to start over
Lessons learned Proof of concept delivered It is very risky to be the first one to use new technology .NET experience essential 100% commitment essential Much more detailed specifications needed Do not try to make a 1:1 mapping from Progress UI to .NET
October 2004: A new start Experienced .NET partner selected OpenEdge is now mature (.NET proxies via HTTP, ProDataSet including update) Take advantage of ProDataSet Much more detailed specifications needed Pay more attention to .NET user interface DWP modifications needed Create test set during design stage
Grids .NET 1.1 has a basic grid It has more capabilities than the Progress browse but is pretty basic The Infragistics grid is very popular in the Progress .NET community .NET 2.0 will offer a much better grid
Current project status Already 100% over schedule (second time) You cannot plan a research project Even with our previous experience, a stable architecture and very detailed specifications There is a lot of communication and translation needed to bridge the gap between Progress 4GL and C# First pilot projects will start this Summer
THANK YOU FOR YOUR TIME! More information: • www.dynamicwebclient.com • www.netsetup.nl • dwp@peg.com (peg email group)