顯示具有 PB 標籤的文章。 顯示所有文章
顯示具有 PB 標籤的文章。 顯示所有文章

2012年8月7日 星期二

powerdesigner 15 merge model

在powerdesigner 15中,提供了二個PDM的比對後合併.

1.先開啟二個要合併的PDM

2. 在Workspace Test1.pdm上按右鍵點選Merge Model (shift+F6)


3.選擇要合併及被合併PDM後,點選Options


 4.勾選需要比較合併的項目. (因為項目頗多,測了一下, Physical Data Model似乎要選擇最後才  能出現合併項目)

勾選Table及要比較合併的Attributes, 在此我勾選了Code、Comment、DataType及Name
在Collection 則勾選Columns 及Databases

   
勾選Column及要比較合併的Attributes, 在此我勾選了Code、Comment、Name及DataType
在Collections 勾選Database
5.完成後,按下Ok鍵,就會列二個 Model 的差異性,  在此,你可以再決定要合併哪些項目,不需要的可以uncheck

另外,如果你不想保留test1.pdm有但test2.pdm沒有的表格, 則可勾選Test1下的產品檔.(預設是未勾選)

6.最後完成後, 合併就完成了. 是不是很方便呢.



2011年7月20日 星期三

powerdesigner 15 產生SQL指令

設計好PDM,接下來就要在DB上把物件都建立起來.

到  Database >> Generate Database  產生create 語法檔

結果出錯了,原來產生出來的create table  syntax中, 欄位的data type都變成了domain name 了

到 Database >> Edit Current DMBS >> Script >> Objects >> Domain >> Enable , 將Value點選為No即可

  
但問題又來了, 明明是int和smallint的欄位, 怎麼create table 中變成後加collate ??

/*==============================================================*/
/* Table: BatchLog                                              */
/*==============================================================*/
create table dbo.BatchLog (
   BatchLogID             int                  identity(1, 1),
   StartDateTime        datetime             not null,
   EndDateTime          datetime             null,
   Status                      smallint             collate Chinese_Taiwan_Stroke_CI_AS  not null,
   ProjectCode          nvarchar(256)        collate Chinese_Taiwan_Stroke_CI_AS null,
   StartDate               int                  collate Chinese_Taiwan_Stroke_CI_AS null,
   EndDate                int                  collate Chinese_Taiwan_Stroke_CI_AS null,
   constraint PK_BatchLog primary key (BatchLogID)
         on "PRIMARY"
)
on "PRIMARY"
go

有夠奇怪啦...找了半天, 才發現原來剛開始這些table是由現存DB反向轉成PDM的
轉入時,字串欄位在Microsoft 頁籤,都會將Collation name一起轉入

後來當把某些字串欄位分別改成了smallint及int型態時, PD15並未將其Collation name 給清空, 所以在generate script時,就變成了上面那樣了.

最後一個個欄位調整, 重建一下script就OK了.



所以如果有指定collation時,當改變資料型態時要記得自已去刪掉collation 定義.

2011年7月14日 星期四

powerdesigner 15 取消欄位 Code = Name

新增表格定義時,輸入欄位Name有時不想要同步到Code,

可在Tools >> General Options , 點選左方選單Dialog, 反勾選Name to Code mirroring



如果table要顯示的是code而不是name
Tools >> Model Options >> Naming Conventions >> Display 改成Name即可


每次必忘的設定, 每次都要找一下....

2011年7月13日 星期三

powerdesigner 15 文件範本

powerdesigner功能愈來愈多,表示使用上也愈來愈複雜

產生文件時,通常會先編輯好文件範本.
不然使用內定的範本後,產生出來的文件內容挺不實用的

PD15中,文件的功能也多了許多,常用的

1.希望物件依code排序,
在item 按mouse 右鍵,選 selection 進入後, 第一行S 就是排序選項, 勾選你要排序的欄位為Code即可

  
2.table 產出格式

 在item 按mouse 右鍵,選Layoyt進入後, 可勾選要顯示的Attribute, 同時也可設定欄位寬度
通常會選的就是下面這幾項




2011年7月11日 星期一

powerdesigner 轉出五個meta data table

如果手上只有PDM,..想要產生 meta data table

Tools >> powerbuilder >>Generate Extended Attributes...


當然要先匯入powerbuilder extension,
Tool >>Extension >>Import an Extension,勾選powerbuilder

同時先準備好五個meta data table schema, 欄位名稱不能更改,但字串欄型態可加長.


CREATE TABLE [dbo].[pbcatcol](
    [pbc_tnam] [char](30) NOT NULL,
    [pbc_tid] [int] NULL,
    [pbc_ownr] [char](30) NULL,
    [pbc_cnam] [char](30) NOT NULL,
    [pbc_cid] [smallint] NULL,
    [pbc_labl] [nvarchar](254) NULL,
    [pbc_lpos] [smallint] NULL,
    [pbc_hdr] [nvarchar](254) NULL,
    [pbc_hpos] [smallint] NULL,
    [pbc_jtfy] [smallint] NULL,
    [pbc_mask] [nvarchar](31) NULL,
    [pbc_case] [smallint] NULL,
    [pbc_hght] [smallint] NULL,
    [pbc_wdth] [smallint] NULL,
    [pbc_ptrn] [nvarchar](31) NULL,
    [pbc_bmap] [char](1) NULL,
    [pbc_init] [nvarchar](254) NULL,
    [pbc_cmnt] [nvarchar](4000) NULL,
    [pbc_edit] [nvarchar](31) NULL,
    [pbc_tag] [nvarchar](254) NULL,
 CONSTRAINT [PK_pbcatcol] PRIMARY KEY CLUSTERED
(
    [pbc_tnam] ASC,
    [pbc_cnam] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
 
 GO
 
CREATE TABLE [dbo].[pbcatedt](
    [pbe_name] [nvarchar](30) NOT NULL,
    [pbe_edit] [nvarchar](254) NULL,
    [pbe_type] [smallint] NOT NULL,
    [pbe_cntr] [int] NULL,
    [pbe_seqn] [smallint] NOT NULL,
    [pbe_flag] [int] NULL,
    [pbe_work] [char](32) NULL,
 CONSTRAINT [PK_pbcatedt] PRIMARY KEY CLUSTERED
(
    [pbe_name] ASC,
    [pbe_seqn] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
 
CREATE TABLE [dbo].[pbcattbl](
    [pbt_tnam] [char](30) NOT NULL,
    [pbt_tid] [int] NULL,
    [pbt_ownr] [char](30) NULL,
    [pbd_fhgt] [smallint] NULL,
    [pbd_fwgt] [smallint] NULL,
    [pbd_fitl] [char](1) NULL,
    [pbd_funl] [char](1) NULL,
    [pbd_fchr] [smallint] NULL,
    [pbd_fptc] [smallint] NULL,
    [pbd_ffce] [char](32) NULL,
    [pbh_fhgt] [smallint] NULL,
    [pbh_fwgt] [smallint] NULL,
    [pbh_fitl] [char](1) NULL,
    [pbh_funl] [char](1) NULL,
    [pbh_fchr] [smallint] NULL,
    [pbh_fptc] [smallint] NULL,
    [pbh_ffce] [char](32) NULL,
    [pbl_fhgt] [smallint] NULL,
    [pbl_fwgt] [smallint] NULL,
    [pbl_fitl] [char](1) NULL,
    [pbl_funl] [char](1) NULL,
    [pbl_fchr] [smallint] NULL,
    [pbl_fptc] [smallint] NULL,
    [pbl_ffce] [char](32) NULL,
    [pbt_cmnt] [nvarchar](4000) NULL,
 CONSTRAINT [PK_pbcattbl] PRIMARY KEY CLUSTERED
(
    [pbt_tnam] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO


 
CREATE TABLE [dbo].[pbcatvld](
    [pbv_name] [nvarchar](30) NOT NULL,
    [pbv_vald] [nvarchar](254) NOT NULL,
    [pbv_type] [smallint] NOT NULL,
    [pbv_cntr] [int] NULL,
    [pbv_msg] [nvarchar](254) NULL,
 CONSTRAINT [PK_pbcatvld] PRIMARY KEY CLUSTERED
(
    [pbv_name] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

轉出過程中, 其實PD會產生insert 及update 語法, 所以上述五個table應設立PK或Unique Index,以避免重覆轉入

若手動修改了五個table的內容想要反向更新PDM時,則

Tools >> powerbuilder >>Reverse Engineering Extended Attributes...就轉回來了.

powerdesigner 反向轉出PDM

剛開始寫程式是由powerbuilder 6.0開始的.
所以理所當然,剛開始使用case tool也就是使用powerdesigner 6.0


二者結合後有個很不錯的功能就是可以將做好的PDM直接轉出powerbuilder設計時使用的五個meta data table ,分別是
pbcatcol ,放置表格欄位, 類似sql server 2005 的sys.columns
pbcatedt,放置powerbuilder design時用的edit style, 如果開發過pb的應用系統,你會很高興有這個
pbcatfmt,放置powerbuilder design時用的foramt,也是用在開發pb
pbcattb,放置資料表, 類似sql server 2005 的sys.tables
pbcatvld,放置驗證原則.

以上幾個table,除了pbcatvld沒使用過外,其他4個在開發powerbuilder的程式時,一定是SA/SD必備且必要的設計工具了. 不然programmer在coding設計UI時真的會叫苦連天

時過多年,我已經久違powerbuilder多年, 但每次在交付資料庫設計文件時, 一定都不忘附上PDM以及相關的report, 所以無論如何, 不管是先設計PDM還是先設計資料庫開表格, 到最後一定都會產出這幾個table

powerdesigner在敝公司真是個老牌的case tool, 許多同事時至今日仍然在使用pd 6.0, 即便這個產品已經進化到15.0的版本了.但大家仍舊喜愛使用pd 6.0來進行SA/SD. 因為他算是所有pd的版本中最容易使用,最容易理解的一版了.


對我而言, 因為很習慣直接在sql server 中先design,所以通常我都會先在sqlserver先編輯好欄位中文後, 然後再於pd中反向產出PDM .因為主要都是想利用pd產出資料庫的文件.

然而,其他同事則是習慣在pd中新建PDM,然後再產生實體資料庫.

powerdesigner從6.0開始就提供了正向與反向產生PDM或db table schema的功能

在pd 15中,如果要由DB產出PDM,則在File >>Reverse Engineer>>Database
連接到要轉出的DB類型後,
 先在Extension頁籤, 勾選PowerBuilder (為了日後可幾進行正反向轉換)
如果要事後匯入,可以在開啟PDM後, 在Tool >>Extension >>Import an Extension,勾選powerbuilder
 選擇要轉入的資料庫連線
 這樣就完成PDM.

最後,如果你是像我一樣,習慣在sql server description 維護資料表及欄位 中文說明,則產生完PDM後, 可利用 Tools >>Execute Command >>Edit/Run Script執行下列指令碼, 將comment轉換成name, 這樣你的PDM就同時可呈現欄位名稱及中文說明了.



Option Explicit

ValidationMode = True
InteractiveMode = im_Batch 

Dim mdl   
Set mdl = ActiveModel

If (mdl Is Nothing) Then
 MsgBox "There   is   no   current   Model "
ElseIf ( Not mdl.IsKindOf(PdPDM.cls_Model) ) Then
 MsgBox "The   current   model   is   not   an   Physical   Data   model. "
Else
 ProcessFolder mdl
End If

Private Sub ProcessFolder(folder)

 On Error Resume Next

 Dim tbl 'table
 For Each tbl In folder.tables
 
  If (Not tbl.IsShortcut) Then
   tbl.name = tbl.comment 
   Dim col 'column
   For Each col In tbl.columns
    If col.comment = "" Then
    Else
     col.name = col.comment
    End If
   Next
  End If
 Next

 Dim view 'view
 For Each view In folder.views
  If (Not view.IsShortcut) Then
   view.name = view.comment
  End If
 Next

 Dim f
 For Each f In folder.Packages
  If (Not f.IsShortcut) Then
   ProcessFolder f
  End If
 Next

End Sub


無論用什麼工具, 前提就是利用PD提供的正反向功能將苦差事做一次就好吧.

2010年8月12日 星期四

有長進的powerbuilder 12

因為公司玩PB的人都不在,所以今天被指派去聽PowerBuilder 12 巡迴發表會.
半天下來, 這個帶我CODING入門生涯的開發工具, 真讓人驚奇
最早開始是由PB6.0開始, 那時有位天才高手,在沒有CODING經驗的倩況下,在很短的時間就寫了一套template,有點類似像PFC的架構,但完全是自行架構的一套, 當時, 我還記得我也貢獻了一點CODING, 參考了PB附的PFC程式碼,寫了一些功能.

那時覺得PB在處理資料那塊,有玩過都應該知道DataWindow吧...做得真的很棒
雖然界面UI一點都不吸引人,但以做一個OLTP的APPLICATION而言, PowerBuilder簡直帥呆了, 到現在為此, 儘管市面上一堆開發工具, 但我仍然認為他是個快速開發Client-Server OLTP系統的好工具.

template歷經PB7,8,9,10,11,還真不是蓋的, 歷久不衰咧.

今天比較吸人的是用PB.Net寫.Net WPF, 光看到WPF三個字,就可以想𢠽到PB終於也可以寫出美美的UI囉, 再加上很久很久以前參加過PB10 Datawindow.Net, 二者一比較,簡直不像是同一父母生出來的孩子一樣, 怎麼差那麼多.
所以今天看了講師的DEMO後, 真是令人躍躍欲試啊
整個PB .Net用 Visual Studio Isolated Shell 的開發環境,
晝面設計會有相對應的xaml, code behind還是power script咧.
CODING的界面倒是做到了我以前的幻想... 就是把PB coding的界面搬到.Net上
PB依元件及事件分得好好的,要找要看挺容易的,在.Net 的codebehind檔找事件, 有時是個麻煩,如果程式碼很多,又沒做好分類的話

今天的研討會,我想唯一的缺點就是, 以Roadmap來看..如果我沒看錯, PB.Net大概落後真正的.Net技術二年,因為2012年才支援完整的sliverlight. 而陸續他也會援雲端開發. 是有在跟隨時代的潮流,只不過慢了點..

積於年少對PB的熱愛, PB.Net我想應該要來玩一下

IIS 網站無法下載中文檔名檔案因為取消高位元字元

 網址+中文檔案名稱方式下載檔案顯示 404 - 找不到檔案或目錄。 但英數字檔案名稱則可下載。 因為設定GCB IIS,其中1項 將高位元字元預設取消勾選了。 27 TWGCB-04-014-0028 要求篩選與其他限制模組 允許高位元字元 這項原則設定決定查詢...