Jun 22, 2012

What Is PowerBuilder and How do I learn how to use it.

Congratulations on getting to work in a great environment!
Powerbuilder (PB) is an Object Oriented, Event Driven, Graphical User Interface (GUI) environment primarily geared for client / server applications.  PowerBuilder uses its own language, called PowerScript. Powerbuilder is considered a 4th generation language.  (C++ and Java are considered 3rd generation languages.)  With Powerbuilder, you get the object oriented power of the 3rd generation languages along with the GUI front-end of 4th generation languages.

1. Powerbuilder's  first true strength is an object called  the "Datawindow". It will be important for you to learn how to truly use this object and its related control, the datawindow control.  If you become a good programmer
who understands Powerbuilder, you should almost never have to embed SQL in your Powerbuilder applications, as there is virtually no need.  Datawindows allow you to encapsulate your SQL (along with a display format) into an object that can be used throughout your application.

2.  Powerbuilder's second major strength is that it is truly object-oriented - Inheritance, Polymorphism, Encapsulation.  In Powerbuilder, Learn how to create your own classes and inherit from them, making your programs much more robust and often easier to maintain.

3.  Powerbuilder's third major strength is that it can connect to most databases.  Unlike vendor specific tools, Powerbuilder allows the developer the freedom to develop on any database and often through native drivers.  (Much faster, more stable, and better than using ODBC connections, for example.) For example, I created one application for an Access database and was able to place it directly onto an Oracle database without making 30 minutes worth of changes.  Had I used embedded sql, this task would have taken weeks.

There is no other environment that I have used which even comes close to Powerbuilder in client/server.  VB is not object oriented (no inheritance, though VB.Net makes claims that it now has that capability) and does not have near the database manipulation power that Powerbuilder provides.  However, if you have used VB before, then you will be familar with some of the standard controls found in Powerbuilder. Java and C++ may provide a bit more flexibility, performance, and fewer limitations but the design and maintenance costs would be extremely higher than a 4th generation language like Powerbuilder.

PB Books and Tips: 

1. Make sure PowerBuilder's "ONLINE BOOKS" are installed onto your work computer!  This will become your life's blood.

2. Utilize the software package that comes with the PB software (if purchased) called "Infobase".  Infobase will provide you with a lot of great examples of how to implement your code.

3. Get some good PB books and get old issues of Powerbuilder Journal Magazine.  You did not say which version of PB you will be using.  There were some changes with the interface from version 6.5 to 7, but there is an incredible amount of changes from 7 to 8.  You should get a basic fundamentals book and any of the unleashed books.  Start off with the basic book and graduate to the unleashed. (Go to amazon.com and type in powerbuilder to get a list of available books.)
Amazon or Book Pool

4.  Learn your datawindow - Know your datawindow - Love your datawindow. There is an entire book devoted to the datawindow in powerbuilder - get it. :)

5.  Once you have the fundamentals down, begin learning the proper techniques for implementing good Object Oriented Programming.  Learn to create user objects, custom user objects, and non-visual user objects.  Inherit from those user objects rather than recreating a new controls like VB programmers typically do.  (Powerbuilder is only object oriented if the programmer codes that way!)

6.  Graduate into learning Powerbuilder's PFC's (Powerbuilder Foundation Classes) and using "Services".

7.  Did I say Know your datawindow?

8.  Know your SQL.  Powerbuilder offers a nice GUI interface for creating your SQL statements for your Datawindows but it is always best to know how to do it yourself.

9.  Check your local junior colleges for courses on Powerbuilder.

10.  SHIFT-F1 in the script painter brings up Help.  Learn how to use it!

Good Luck and Welcome to Powerbuilder.


Source : Tek-Tips Community

Powerbuilder - Open Window As String

Example for open window as string.

string ls_name
window lw_sheet
ls_name = "w_customer"
open(lw_sheet,ls_name)

As simple as that.
Cheers..

May 10, 2012

Javascript round() Method

function roundNumber(num, dec) {
 var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
 return result;
}

and then write code something like this :
roundNumber(dec_number,2)

As simple as that!


Cheers..

May 3, 2012

Simple Query to Calculate FIFO

I assume that you have table below :
tbl_purchasing
-------------------------------------------------------------------------------------
purchase_number - item_id - date_purchase - unit_cost - qty  - last_qty
-------------------------------------------------------------------------------------
001 - A2 -11/11/2012 - 1000 - 120 - 50
002 - A2 -11/11/2012 - 1100 - 100 - 100
003 - A2 -13/11/2012 - 1350 - 10 - 10
-------------------------------------------------------------------------------------
Note : last_qty is available qty to sale. In this case, it mean 70 was sold.

Sample case :
at 14/11/2012 we need to input sales invoice with item A2 and qty = 152.
How to calculate price using FIFO method?
Aha! as easy as you think.. :p lol
A simple query will solve that :

set @param:=40;
set @counter:=40;

select purchasing.purchase_number, purchasing.sisa,purchasing.unit_cost,
case when @param <= purchasing.sisa then @param else purchasing.sisa end * unit_cost harga,

@param := @param - purchasing.sisa as sampah_masyarakat

from
   (
        select doc_id,sum(last_qty) sisa,unit_cost
        from tbl_purchasing
        where item_id = 'A2'
        group by unit_cost
    order by date_purchase,purchase_number
     ) purchasing
having (harga > 0)

just change 40,A2 into variable and ..
Done!

Very simple, even dont need to create func,proc,trigger, whatever..
Juat a simple single query!
Created by me with some reference from stackoverflow.com

Enjoy..
Cheers!


Note : tested in mysql not sure run in another..

Jan 16, 2012

Replace string function

Sample : f_replace(powerbuilder,r,s) will return powesbuildes


f_replace(string as_text,string as_before,string as_after)  returns string

integer li_Posisi
string ls_return

li_Posisi = pos(as_text,as_before)
do while li_Posisi > 0
    ls_return += mid(as_text,1,li_Posisi - 1) + as_after
    as_text = mid(as_text, li_Posisi + Len(as_before))
    li_Posisi = pos(as_text,as_before)
loop
ls_return += as_text

return ls_text

cheers..

Export Datawindow to Excel

Export Datawindow to excel files without dw2xls
First, create a global function

f_excel(datawindow idw)
int li_rtn
string xlsname,nama, ls_alamat
//Check for row(s) in datawindow
if idw.rowcount( ) <= 0 then
        messagebox(' Export Excel','No rows to export!')
        return
end if
//excel file save directory
li_rtn   =   GetFileSaveName( "Select   File",   &  
            xlsname,   nama,   "",   &  
            "Excel 97-2003 Workbook(*.xls) ,*.*,")
if idw.saveas( xlsname+'.xls' , htmltable!, TRUE ) = -1 then
    MessageBox(" Warning", "error!",Exclamation! )
    return ;
end if ;
oleobject excel ;
excel = create oleobject ;
if excel.connecttoobject(xlsname+ '.xls' ) = 0 then
   Excel.Application. DisplayAlerts = false ;
   Excel.Application. Workbooks( 1 ).Parent.Windows
   Excel.Application. workbooks( 1 ).Name ).Visible true ;
   Excel.Application. Workbooks( 1 ).SaveAs(xlsname+ '.xls', 39 ) ;
   Excel.Application. Workbooks( 1 ).close() ;
   messagebox(' Export Excel','datawindow exported succesfully!')
        run("c:\windows\ explorer. exe "+xlsname+'. xls')
end if ;
destroy excel

Sample usage : f_excel(dw_customer)

Cheers..

Jan 15, 2012

Keycode to string

With most objects, you can trap the key strokes using user events.
For example, on a datawindow object,
you can create a user event using Event Id = pbm_dwnkey.
In this event, you'll find a parameter of type keycode.
This is a predefined enumerated data type with values such as KeyA!, KeyB!, etc.
But if you want to convert this value to a string,
you'll find your choices are limited.
It looks something like this :

choose case a_key
       case keyA!
            ls_string = "A"
       case keyB!
            ls_string = "B"
       case keyC!
           ls_string = "C"
...
end choose




As simple as that!
Cheers..

Are legacy 4GL applications keeping you from embracing modern technologies?

As the competitive advantages offered by cloud, mobile, and other new technologies become more apparent, the decision to migrate legacy 4GL ...