Sybase Business Intelligence Solutions - Database Management, Data Warehousing Software, Mobile Enterprise Applications and Messaging
Sybase Brand Color Bar
  blank

PBTV – How to Migrate Your PowerBuilder Applications

- English Session -
Date: Thursday February 9th at 11am EST (New York) / 17h00 CET (Paris)

PBTVLogo

After the success of the French version, we offer an English version of “How to migrate your PowerBuilder applications.”

What are the advantages of migrating to PB 12.x Classic and PB 12.x .NET? What are the costs and difficulties related to migration?
To learn step by step how to migrate your applications and in order to answer any question you may have, join us February 9, 2012 on PowerBuilderTV.

Presenter : Bassam Tannouri
Register: https://www2.gotomeeting.com/register/682532730

Our Blogroll – Matt Balent

You’ve probably noticed our blogroll links in the right hand margin of this PowerBuilder blog. We’ve included those links whose content can advance you to being a more powerful developer. But just who are the people behind these resources? We’re starting a series featuring each of these expert sources of developer knowledge…starting with Matt Balent, an engineer in the Paragon Development team at McKesson Provider Technologies and an organizer of the North Carolina PowerBuilder User Group who brings us a special DataWindow enhancement technique…

PowerBuilder – Treeview-Like Tooltips for DataWindows

The treeview control has a very neat piece of functionality built in called Tooltips. When this property is checked your application will automatically display all the text on a treeview item if it is cut off by the edge of the control when the mouse pointer goes over that row. If the row text is not cut off, no tip, if it is, a tip displays. The following is an implementation of this type of functionality for datawindows. Although it is geared more towards grid type datawindows it could be used on others as well. This code is done in PB11.5, which has a tooltip property on datawindow columns, but the basic ideas can be adapted to earlier versions without this.

The code is available here within an Archive File which also includes exports of the objects. Basically you will need to define the ‘mousemove’ event on your datawindow control (mapped to pbm_dwnmousemove) along with an string instance variable that tracks which row/column combination the mouse pointer is over. The instance variable is very important since it prevents the code from constantly being executed when the user keeps the pointer on the same row/column. Within the mouse move the position and width of the datawindow object column being pointed to is compared to the width of the datawindow control and the position of the horizontal scrollbar. Left and Right positioning of the column is also taken into consideration. If the text in the pointed at column is not completely within the control, it it placed into the Tooltip Text of the column. All columns have Tooltips enabled so once the Tip text has a value, the tip appears.

The code to derive the text and determine its length is encapsulated in an non visual object and uses a variety of API calls.

The sample application datawindow has columns of all Edit types as well as a couple of computed columns. One periodic issue is with dropdown datawindows and listboxed which have ‘Display all columns’ on. Another is with the ‘Always show arrow’ option which sometimes keeps the tooltip coming on even though all the text is visible.

Sample Screenshots:

This shows the bubblehelp for a Checkbox column. If the column has three states the text will show either ‘On’, ‘Off’, or ‘Other’.

This shows the right side of the datawindow control with no bubblehelp.

This shows the bubblehelp on a computed column.

At the bottom of the sample application are text boxes which display various position and size information which was useful in creating the checking logic. Since this is a grid datawindow you can re-order the columns as you wish. Also note the datawindow conrol can be resized which makes testing easier.

Code from mousemove event

// listview tooltips functionality for datawindow
//
// check to see if datawindow column text is cut off by either the size of the datawindow
// control or the position of the horizontal scrollbar
// if the text is cut off, put the text into the tooltip for the datawindow column so it
// will display.
Long    ll_hScrollPos, ll_width
Long    ll_colX, ll_colW, ll_colXW, ll_textwidth
datawindow ldw
string ls_mod, ls_value, ls_err, ls_checkname, ls_oldcolname, ls_alignment
s_dwbubble lstr_bubble
 
ldw = THIS
IF  row > 0 AND dwo.name <> ‘datawindow’ THEN
          ls_checkname = (dwo.Name  + ‘/’ + string(row))
          // only do this if mouse moved to new row/column since last time
          IF(is_curcol <> ls_checkname) THEN
                   IF Len(is_curcol) > 0 THEN // blank out previous tip
                             ls_oldcolname = Left(is_curcol, Pos(is_curcol,’/') – 1)
                             ls_mod = ls_oldcolname + ‘.Tooltip.Tip = “”‘
                             ls_err = this.modify(ls_mod)
                   END IF
                   ll_width = w_dwbubblehelp.dw_1.width
                   ll_hScrollPos = Long( THIS.Describe(”DataWindow.HorizontalScrollPosition”) )
                   ls_mod = dwo.name + ‘.x’
                   ll_colX = Long( THIS.Describe(ls_mod) )
                   ls_mod = dwo.name + ‘.width’
                   ll_colW = Long( this.Describe(ls_mod) )
                   ll_colXW = ll_colX + ll_colW
                   IF ll_colXW < ll_hScrollPos THEN
                              // “Not visible”
                   ELSE
                              IF ( ll_colX < ll_hScrollPos ) AND ( ll_colXW > ll_hScrollPos ) THEN
                                       // Partially Visible Left
                                       // get the text value and its length
                                      lstr_bubble = idw.uf_get_width_of_data(row, dwo.name, ldw, iw_parent)
                                      ll_textwidth = lstr_bubble.i_width
                                      ls_value = lstr_bubble.s_value
                                      ls_mod = dwo.name + ‘.Alignment’
                                      ls_alignment = this.describe(ls_mod)
                                      IF ls_alignment = ‘1′ THEN // right alighment
                                                IF ll_textwidth > ll_colw THEN // text wider than column
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “‘ + ls_value + ‘”‘
                                                          ls_err = this.modify(ls_mod)
                                                ELSEIF ll_colXW – ll_textwidth <  ll_hScrollPos THEN
                                                           // text cut off by datawindow control or scrollbar
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “‘ + ls_value + ‘”‘
                                                          ls_err = this.modify(ls_mod)
                                                ELSE
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “”‘
                                                          ls_err = this.modify(ls_mod)
                                                END IF
                                      ELSE // other alignments
                                                IF ll_textwidth > ll_colw THEN
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “‘ + ls_value + ‘”‘
                                                          ls_err = this.modify(ls_mod)
                                                ELSEIF ll_textwidth > (ll_colXW – (ll_width + ll_hScrollPos)) THEN
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “‘ + ls_value + ‘”‘
                                                          ls_err = this.modify(ls_mod)
                                                ELSE
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “”‘
                                                          ls_err = this.modify(ls_mod)
                                                END IF
                                      END IF
 
                             ELSEIF (ll_colXW >  ll_hScrollPos) AND (ll_colXW > (ll_width + ll_hScrollPos) ) THEN
                                      // Partially Visible Right
                                      // get the text value and its length
                                      lstr_bubble = idw.uf_get_width_of_data(row, dwo.name, ldw, iw_parent)
                                      ll_textwidth = lstr_bubble.i_width
                                      ls_value = lstr_bubble.s_value
                                      ls_mod = dwo.name + ‘.Alignment’
                                      ls_alignment = this.describe(ls_mod)
                                      IF ls_alignment = ‘0′ THEN // left alighment
                                                IF ll_textwidth > ll_colw THEN // text wider than column
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “‘ + ls_value + ‘”‘
                                                          ls_err = this.modify(ls_mod)
                                                ELSEIF ll_width + ll_hScrollPos – ll_colX < ll_textwidth + Round((ll_textwidth / 10), 0) THEN
                                                          // text cut off by datawindow control or scrollbar
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “‘ + ls_value + ‘”‘
                                                          ls_err = this.modify(ls_mod)
                                                ELSE
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “”‘
                                                          ls_err = this.modify(ls_mod)
                                                END IF
                                      ELSE
                                                IF ll_textwidth > ll_colw THEN // text wider than column width
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “‘ + ls_value + ‘”‘
                                                          ls_err = this.modify(ls_mod)
                                                ELSEIF ll_textwidth > (ll_colW – (ll_width + ll_hScrollPos)) THEN
                                                          // text cut off by datawindow control or scrollbar
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “‘ + ls_value + ‘”‘
                                                          ls_err = this.modify(ls_mod)
                                                ELSE
                                                          ls_mod = dwo.name + ‘.Tooltip.Tip = “”‘
                                                          ls_err = this.modify(ls_mod)
                                                END IF
                                      END IF
                              ELSE
                                      // “Visible”
                                      // this could be modifed for grid columns resized smaller than text value
                                      ls_mod = dwo.name + ‘.Tooltip.Tip = “”‘
                                      ls_err = this.modify(ls_mod)
                              END IF
                   END IF
          END IF
          is_curcol = dwo.Name + ‘/’ + string(row)
END IF

Thanks to Adam Simmonds for his assistance on this.

Comment Migrer Vos Applications PowerBuilder / How to Migrate Your PowerBuilder Applications

Présenté en FRANÇAIS / Presented in FRENCH

Date: Thursday January 19th at 11am EST (New York) / 17h00 CET (Paris)

PBTVLogo

Quels sont les avantages d’une migration vers PB 12.x Classic ou PB 12.x .NET ? Quel sont les coûts et les difficultés liés à la migration ?
Pour apprendre à migrer vos applications pas à pas et répondre à toutes ses questions, rejoignez-nous le 19 janvier 2011 sur PowerBuilderTV.

What are the advantages of migrating to PB 12.x Classic and PB 12.x .NET? What are the costs and difficulties related to migration?
To learn step by step how to migrate your applications and in order to answer any question you may have, join us January 19, 2012 on PowerBuilderTV.

Presenter : Bassam Tannouri

Register – https://www2.gotomeeting.com/register/663938618

North Carolina Sybase User Group Meeting

Thursday, January 12th
6:00pm – 8:00pm

Offices of: McKesson
10735 David Taylor Drive
Suite 100
Charlotte, NC 28262

SQL Performance Improvements

Jerry Day of McKesson will speak about improving your sql with an eye towards performance tuning, aggregate reporting, and overall maintenance improvement.  Microsoft SQLServer 2008 is the topic database but the discussion will center on ANSI SQL.

Source Control for the Home User

Matt Balent will demonstrate the use of WIzsource, a full featured source control system available from TopWiz Software, which is free for single use.  Written in Powerbuilder, it supports the SCC API and can be used with SQL Anywhere, Sybase ASE, Microsoft SQL Server, and Oracle 9/10.

Register: http://my.isug.com/e/in/eid=127

In-Depth Review of .NET Language Enhancements

Date: Thursday January 12th at 11am EST (New York) / 17h00 CET (Paris)

PBTVLogo

As a .NET language, PowerBuilder 12 supports the Microsoft Common Language Specification (CLS.) We’ll review the CLS, learn how to utilize external .NET resources, how to create .NET Consumer Role compatible applications using the PowerBuilder 12 Classic IDE, and how to create .NET compatible extenders using the PowerBuilder .NET IDE.

Presenter: Don Clayton

Register – https://www2.gotomeeting.com/register/642801058

PBTV: Building Modern PowerBuilder Applications

Wednesday December 14th 2011
at 11am EST (New York) / 17h CET (Paris)

PBTVLogo

PowerBuilder 12 remains a potent application development platform that arguably remains the highest-level programming environment for .NET available. But times change: user interfaces are now “User Experiences”, and Windows 7 was a UX game changer. The Internet is ubiquitous, and today, application access is taken for granted. Yet users still want applications that are both powerful and pleasant to use, as well as systems that leverage their computing platforms of choice effectively. In this session, a real-world development project to build an entirely modern, Enterprise-class PowerBuilder application from the ground up will be explored. Topics will include the strategic decisions made regarding platforms, architecture, appropriate reuse, and designing a look and feel with an eye towards for the future. So long MDI, hello WPF. In addition to showing this groundbreaking development effort, the speaker will discuss a variety of ways to update older PowerBuilder applications to achieve higher user satisfaction and productivity, and how to leverage the Sybase design and development tools appropriately. A variety of Sybase tools, including PowerDesigner, PowerBuilder 12 Classic and WPF, and Appeon 6.5 will be demonstrated.

Presenter: Don Clayton

REGISTER: http://powerbuilder.tv/index.php/en/upcoming-webinars/1-upcoming-webinars/135-building-modern-powerbuilder-applications

Webcast: GeoEnviron – A Practical Look at Simplifying a PowerBuilder User Interface

Thursday, December 8th at noon ET

PB12FlamingGuitarWithSAP50

 

 

 

 There is still time to join us on Thursday, December 8th at noon ET for the webcast “GeoEnviron – A Practical Look at Simplifying a PowerBuilder User Interface” featuring Geokon’s innovative PowerBuilder Development Manager, Michael Kramer.

Geokon was honored with the 2010 ComputerWorld Honors Laureate for its GeoEnviron product for identifying, documenting, analyzing and planning environmental clean-up projects in less time and with greater accuracy. By taking full advantage of PowerBuilder’s DataWindow technology and time-saving coding features, the GeoEnviron team was able to revamp their user interface across 2,400 DataWindows in less than a week.

In this webcast, Michael will give you a guided tour through the award-winning GeoEnviron application, discuss the reasoning and process behind its design, quantify the cost-savings of using the PowerBuilder platform, and share the actual production code as he covers:

  • How to create a simplified, yet highly intuitive user experience using PowerBuilder for native Windows applications including how to integrate with 3rd party applications
  • How the user interface implements a modern look within an MDI frame using numerous coding techniques and design elements
  • DataWindow techniques from tool tips to Google® maps on a report to query-by-example
  • Developer tooling – setting up the PowerBuilder IDE, writing developer tools in PowerBuilder, and auto-converting UI using dwModify

Don’t miss this interview style, interactive webinar! Register now! It’s a convenient, easy, way to learn how you can update and modernize your applications from award-winning PowerBuilder “Rock Star” Michael Kramer, from Geokon.

REGISTER: http://response.sybase.com/forms/NAO11Q4PBWBCSTGeokon?mc=bl

PBTV: Add Single Sign-On to PowerBuilder Applications

Thursday December 8th 2011
at 11am EST (New York) / 17h CET (Paris)

PBTVLogo

It is essential to list all the important points to take into account when creating a Single Sign-On system. The principle of SSO may seem simple to explain, but in reality it implies numerous functionalities. Additionally, your system may need to support certain complex technical specifications that will add to the functional complexity. During this webinar we will list these points and present a solution that will ensure the success of your project. This solution will be illustrated with concrete examples and case studies. We will also include information allowing attendees to calculate the ROI of each solution: software and material costs, implementation times, etc…

Presenter: Christophe Dufourmantelle

REGISTER: http://powerbuilder.tv/index.php/en/upcoming-webinars/1-upcoming-webinars/136-add-single-sign-on-to-powerbuilder-applications

Webcast: GeoEnviron – Simplifying a PowerBuilder User Interface

Thursday, December 8 at noon Eastern Time
REGISTER TODAY: http://response.sybase.com/forms/NAO11Q4PBWBCSTGeokon?mc=bl

Join us on Thursday, December 8th at noon ET for the webcast “GeoEnviron – A Practical Look at Simplifying a PowerBuilder User Interface” featuring Geokon’s innovative PowerBuilder Development Manager, Michael Kramer.

Geokon was honored with the 2010 ComputerWorld Honors Laureate for its GeoEnviron product for identifying, documenting, analyzing and planning environmental clean-up projects in less time and with greater accuracy. By taking full advantage of PowerBuilder’s DataWindow technology and time-saving coding features, the GeoEnviron team was able to revamp their user interface across 2400 DataWindows in less than a week.

In this webcast, Michael will give you a guided tour through the award-winning GeoEnviron application, discuss the reasoning and process behind its design, quantify the cost-saving of using the PowerBuilder platform, and share the actual production code as he covers:

  • How to create a simplified, yet highly intuitive user experience using PowerBuilder for native Windows applications including how to integrate with 3rd party applications
  • How the user interface implements a modern look within an MDI frame using numerous coding techniques and design elements
  • DataWindow techniques from tool tips to Google® maps on a report to query-by-example
  • Developer tooling – setting up the PowerBuilder IDE, writing developer tools in PowerBuilder, and auto-converting UI using dwModify

Don’t miss this interview style, interactive webinar! Register now! It’s a convenient, easy, way to learn how you can update and modernize your applications from award-winning PowerBuilder “Rock Star” Michael Kramer, from Geokon.

PBTV: Fast Track to Web-enabling PowerBuilder with Appeon 6.5

Tuesday November 15th 2011
at 11am EST (New York) / 17h CET (Paris)

PBTVLogoSome of you may have heard about Appeon and how well it works, but you may not know exactly how to use it. This seminar walks you through the process of migrating an actual PowerBuilder application with Appeon 6.5. You will learn from concrete examples as well as case studies. Also, we will equip you to run ROI calculation for your specific scenario, including software and material costs as well as implementation times.

Presenter: Christophe Dufourmantelle

Register: https://www2.gotomeeting.com/register/683949106

Session in Spanish
Martes 22 de noviembre del 2011
a las 10:00 de la Ciudad de México / 17:00 Madrid
Presentadóra: Carmina Garcia
Inscripción: https://www2.gotomeeting.com/register/368354402

Session in French
Mercredi 16 novembre 2011
11h00 EST (New York) / 17h00 CET (Paris)
Intervenant : Christophe Dufourmantelle
Inscription
https://www2.gotomeeting.com/register/338522042