Comments
Transcript
PowerBuilder Foundation Class Library ユーザーズ ガイド
PowerBuilder Foundation Class Library ユーザーズ ガ イ ド PowerBuilder® 9 DOCUMENT ID: 37779-01-0900-01 LAST REVISED: March 2003 Copyright © 1989-2004 by Sybase, Inc. All rights reserved. 本書に記載 さ れてい る ソ フ ト ウ ェ アは、 Sybase ラ イ セ ン ス契約に基づいて Sybase, Inc. が提供 し 、 かか る 契約の条項に従 う 場合にのみ使用が許諾 さ れま す。 本書に記載 さ れてい る 内容は、 Sybase, Inc. お よ びその関連会社の書面に よ る 許可な く 、 いかな る 形態、 ま たは手段、 電子 的、 機械的、 手作業、 光学的お よ びその他にかかわ ら ず、 複製、 転載お よ び翻訳を禁 じ ます。 Sybase, Sybase ( ロ ゴ) , AccelaTrade, ADA Workbench, Adaptable Windowing Environment, Adaptive Component Architecture, Adaptive Server, Adaptive Server Anywhere, Adaptive Server Enterprise, Adaptive Server Enterprise Monitor, Adaptive Server Enterprise Replication, Adaptive Server Everywhere, Adaptive Server IQ, Adaptive Warehouse, Anywhere Studio, Application Manager, AppModeler, APT Workbench, APT-Build, APT-Edit, APT-Execute, APT-FORMS, APT-Translator, APT-Library, Backup Server, BizTracker, ClearConnect, Client-Library, Client Services, Convoy/DM, Copernicus, Data Pipeline, Data Workbench, DataArchitect, Database Analyzer, DataExpress, DataServer, DataWindow, DB-Library, dbQueue, Developers Workbench, Direct Connect Anywhere, Distribution Director, e-ADK, E-Anywhere, e-Biz Integrator, E-Whatever, EC Gateway, ECMAP, ECRTP, eFulfillment Accelerator, Embedded SQL, EMS, Enterprise Application Studio, Enterprise Client/Server, Enterprise Connect, Enterprise Data Studio, Enterprise Manager, Enterprise SQL Server Manager, Enterprise Work Architecture, Enterprise Work Designer, Enterprise Work Modeler, eProcurement Accelerator, EWA, Financial Fusion, Financial Fusion Server, Gateway Manager, GlobalFIX, ImpactNow, Industry Warehouse Studio, InfoMaker, Information Anywhere, Information Everywhere, InformationConnect, InternetBuilder, iScript, Jaguar CTS, jConnect for JDBC, MainframeConnect, Maintenance Express, MDI Access Server, MDI Database Gateway, media.splash, MetaWorks, MySupport, Net-Gateway, Net-Library, New Era of Networks, ObjectConnect, ObjectCycle, OmniConnect, OmniSQL Access Module, OmniSQL Toolkit, Open Biz, Open Client, Open ClientConnect, Open Client/ Server, Open Client/Server Interfaces, Open Gateway, Open Server, Open ServerConnect, Open Solutions, Optima++, PB-Gen, PC APT Execute, PC Net Library, Power++, power.stop, PowerAMC, PowerBuilder, PowerBuilder Foundation Class Library, PowerDesigner, PowerDimensions, PowerDynamo, PowerJ, PowerScript, PowerSite, PowerSocket, Powersoft, PowerStage, PowerStudio, PowerTips, Powersoft Portfolio, Powersoft Professional, PowerWare Desktop, PowerWare Enterprise, ProcessAnalyst, Rapport, Report Workbench, Report-Execute, Replication Agent, Replication Driver, Replication Server, Replication Server Manager, Replication Toolkit, Resource Manager, RW-DisplayLib, S-Designor, SDF, Secure SQL Server, Secure SQL Toolset, Security Guardian, SKILS, smart.partners, smart.parts, smart.script, SQL Advantage, SQL Anywhere, SQL Anywhere Studio, SQL Code Checker, SQL Debug, SQL Edit, SQL Edit/TPU, SQL Everywhere, SQL Modeler, SQL Remote, SQL Server, SQL Server Manager, SQL SMART, SQL Toolset, SQL Server/ CFT, SQL Server/DBM, SQL Server SNMP SubAgent, SQL Station, SQLJ, STEP, SupportNow, S.W.I.F.T. Message Format Libraries, Sybase Central, Sybase Client/Server Interfaces, Sybase Financial Server, Sybase Gateways, Sybase MPP, Sybase SQL Desktop, Sybase SQL Lifecycle, Sybase SQL Workgroup, Sybase User Workbench, SybaseWare, Syber Financial, SyberAssist, SyBooks, System 10, System 11, System XI ( ロ ゴ ), SystemTools, Tabular Data Stream, TradeForce, Transact-SQL, UltraLite.NET, UNIBOM, Unilib, Uninull, Unisep, Unistring, URK Runtime Kit for UniCode, Viewer, Visual Components, VisualSpeller, VisualWriter, VQL, WarehouseArchitect, Warehouse Control Center, Warehouse Studio, Warehouse WORKS, Watcom, Watcom SQL, Watcom SQL Server, Web Deployment Kit, Web.PB, Web.SQL, WebSights, WebViewer, WorkGroup SQL Server, XA-Library, XA-Server お よ び XP Server は Sybase, Inc. の登録商標です。 Unicode お よ び Unicode の ロ ゴは Unicode, Inc. の登録商標です。 本書で使用 さ れ る 会社名お よ び製品名はそれぞれの会社の商標お よ び登録商標です。 本書に記載 さ れてい る 内容は、 将来予告な し に変更す る こ と があ り ま す。 ま た、 本 ソ フ ト ウ ェ アお よ び説明書を使用 し た こ と に よ る 損害、 ま たは第三者か ら のいかな る 請求について も 、 サ イ ベー ス株式会社、 その親会社であ る 米国法人 Sybase, Inc. ま たはその関連会社は、 一切の責任を負わない も の と し ま す。 目次 本書について .................................................................................................................................. ix 第1部 PFC の概要 第1章 PowerBuilder Foundation Class Library....................................... 3 PFC の概要 ...................................................................................... 3 PowerBuilder につい ての理解.......................................................... 4 PowerBuilder ラ イ ブ ラ リ と PowerBuilder オ ブ ジ ェ ク ト ......... 4 オ ブ ジ ェ ク ト 指向プ ロ グ ラ ミ ン グ ............................................ 7 PFC におけ る オブ ジ ェ ク ト 指向 ...................................................... 9 PFC に よ る拡張 レベルの使い方 .................................................... 13 PFC コ ン ポーネ ン ト ...................................................................... 16 第2部 PFC ク ラ ス ラ イ ブ ラ リ のデザイ ン 第2章 ク ラ ス ラ イ ブ ラ リ のデザイ ン .............................................................................. ク ラ ス ラ イ ブ ラ リ のデザ イ ン におけ る PFC の使用 ..................... 拡張方法の選択 .............................................................................. 中間拡張レ ベル を作る方法 ..................................................... 既存の PFC 拡張 レ ベル を使用す る方法 ................................. 新規サー ビ スの定義 ....................................................................... 第3部 PFC プ ロ グ ラ ミ ン グ 第3章 PFC プ ロ グ ラ ミ ン グの基礎................................................................................... ア プ リ ケーシ ョ ン マネージ ャの設定............................................. ア プ リ ケーシ ョ ンの構築................................................................ 属性オ ブ ジ ェ ク ト の使い方 ............................................................ PFC 定数の使い方 ......................................................................... メ ッ セージ ルー タ ......................................................................... PFC Library ユーザーズ ガ イ ド 21 21 22 23 25 26 31 31 35 41 44 45 iii 目次 PFC に よ る ト ラ ンザ ク シ ョ ン管理 ................................................ 先祖の関数 と イ ベ ン ト の呼び出 し ................................................. ア プ リ ケーシ ョ ンへのオ ン ラ イ ン ヘルプの追加........................... PFC ア ッ プグ レー ド の イ ン ス ト ール............................................. 第4章 iv 47 49 50 51 PFC サービ スの使い方............................................................................................. 55 ア プ リ ケーシ ョ ン サービ ス ........................................................... 55 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス ................................. 56 デバ ッ グ サー ビ ス................................................................... 58 ア プ リ ケーシ ョ ン環境設定サービ ス ....................................... 59 最新使用オ ブ ジ ェ ク ト サービ ス ............................................. 60 エ ラ ー メ ッ セージ サービ ス ................................................... 63 セキ ュ リ テ ィ サー ビ ス ........................................................... 67 ト ラ ンザ ク シ ョ ン登録サービ ス .............................................. 68 デー タ ウ ィ ン ド ウ サービ ス ........................................................... 70 デー タ ウ ィ ン ド ウ サービ スの先祖 ......................................... 72 ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ検索サービ ス .................... 74 フ ィ ル タ サー ビ ス................................................................... 75 検索 / 置換サー ビ ス ................................................................. 77 リ ン ク サービ ス ...................................................................... 78 マルチ テーブル更新サー ビ ス .................................................. 82 印刷プ レ ビ ュ ー サー ビ ス ........................................................ 83 デー タ ウ ィ ン ド ウ プ ロパテ ィ サービ ス ................................. 84 ク エ リ モ ー ド サー ビ ス .......................................................... 85 レポー ト サー ビ ス................................................................... 86 必須 カ ラ ム サービ ス ............................................................... 89 行管理サービ ス ....................................................................... 90 行選択サービ ス ....................................................................... 92 デー タ ウ ィ ン ド ウ サ イ ズ変更サービ ス .................................. 93 ソ ー ト サービ ス ...................................................................... 95 ウ ィ ン ド ウ サービ ス ...................................................................... 97 基本ウ ィ ン ド ウ サー ビ ス ........................................................ 98 環境設定サー ビ ス.................................................................. 101 シー ト 管理サービ ス .............................................................. 102 ステ ー タ スバー サー ビ ス ...................................................... 103 メ ニ ュ ー サー ビ ス ....................................................................... 104 サ イズ変更サービ ス ..................................................................... 105 デー タ 型変換サー ビ ス ................................................................. 107 日付 / 時刻サービ ス...................................................................... 108 フ ァ イル サー ビ ス ....................................................................... 110 INI フ ァ イル サービ ス .................................................................. 111 数値サー ビ ス................................................................................ 113 プ ラ ッ ト フ ォ ーム サービ ス ......................................................... 114 選択サー ビ ス................................................................................ 116 PowerBuilder 目次 SQL 解析サービ ス ....................................................................... 文字列処理サー ビ ス ..................................................................... メ タ ク ラ ス サー ビ ス .................................................................... 論理的作業単位サービ ス.............................................................. 自己更新オブ ジ ェ ク ト の実装................................................ リ ス ト サー ビ ス ........................................................................... 基本 リ ス ト の使い方 .............................................................. ス タ ッ ク の使い方.................................................................. キ ュ ーの使い方 ..................................................................... ツ リ ーの使い方 ..................................................................... 比較オブ ジ ェ ク ト の作成 ....................................................... タ イ ミ ン グ サー ビ ス .................................................................... 117 119 120 121 122 123 124 128 130 131 134 136 第5章 PFC ビ ジ ュ アル コ ン ト ロールの使い方...................................................... PFC ビ ジ ュ アル コ ン ト ロールについて ...................................... 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 .......................... 基本機能の使い方.................................................................. 高度な機能の使い方 .............................................................. カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 ................... 計算機 コ ン ト ロ ールの使い方................................................ カ レ ン ダ コ ン ト ロ ールの使い方 ........................................... ス プ リ ッ ト バー コ ン ト ロールの使い方 ................................ プ ロ グ レ ス バーの使い方 ...................................................... 139 139 140 140 146 183 183 187 196 198 第6章 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方............................................................ PFC ウ ィ ン ド ウの使い方............................................................. ウ ィ ン ド ウの基本的な使い方................................................ レ スポ ン ス ウ ィ ン ド ウの使い方 ........................................... pfc_Save プ ロ セ スの使い方.................................................. PFC での メ ニ ュ ーの使い方 ......................................................... メ ニ ュ ー継承の 2 つの方法 ................................................... PFC メ ニ ュ ーの拡張の し かた............................................... プ ロ グ ラ マ自身で メ ニ ュ ー を作成する ................................. 標準 メ ニ ュ ー項目の使い方 ................................................... ポ ッ プ ア ッ プ メ ニ ュ ーの使い方 ........................................... 207 207 208 210 212 217 218 218 219 220 223 第7章 PFC ユー テ ィ リ テ ィ .............................................................................................. デー タ ウ ィ ン ド ウ プ ロパテ ィ ウ ィ ン ド ウ .................................. SQL スパ イ .................................................................................. セキ ュ リ テ ィ ................................................................................ ユーザ と グルー プ を定義す る方法 ........................................ セキ ュ リ テ ィ スキ ャ ナの実行の し かた ................................ ユーザ と グルー プのセキ ュ リ テ ィ を定義する方法 ............... 225 225 229 232 233 236 240 PFC Library ユーザーズ ガ イ ド v 目次 ア プ リ ケーシ ョ ン で セキ ュ リ テ ィ を実行する方法 ............... セキ ュ リ テ ィ デー タ ベースの管理の し かた ......................... ラ イ ブ ラ リ エ ク ス テ ン ダ............................................................. マ イ グ レ ーシ ョ ン ア シ ス タ ン ト .................................................. 242 243 244 246 第8章 PFC ア プ リ ケーシ ョ ンの配布........................................................................... 配布方針の選定 ............................................................................ PBR フ ァ イ ルの使い方 ................................................................ デー タ ベース テーブルの配布方法 .............................................. PFC ダ イ ア ロ グボ ッ ク ス ヘルプの配布 ...................................... 247 247 249 249 250 第4部 PFC チ ュ ー ト リ アル レッ スン 1 PFC ア プ リ ケーシ ョ ンの生成 ....................................................... 253 PFC ア プ リ ケーシ ョ ンの作成 ..................................................... 254 ア プ リ ケーシ ョ ン マネージ ャ の修正........................................... 257 グ ローバル変数の再定義 と イ ベ ン ト の検証 ................................. 262 PFC ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト サー ビ スの使い方 ............ 265 レッ スン 2 フ レ ーム ウ ィ ン ド ウの作成........................................................... 267 子孫 フ レ ーム ウ ィ ン ド ウの作成 .................................................. 268 ウ ィ ン ド ウ を開 く 前の処理 と 開いた後の処理の定義 .................. 270 フ レーム ウ ィ ン ド ウ を開 く ためのス ク リ プ ト の追加 ................. 272 ア プ リ ケーシ ョ ンの実行.............................................................. 273 レッ スン 3 メ ニ ュ ーの作成.............................................................................. 275 子孫 メ ニ ュ ーの作成 ..................................................................... 276 項目の追加 と 修正 ........................................................................ 277 フ レーム メ ニ ュ ーの作成............................................................. 283 フ レーム ウ ィ ン ド ウ と メ ニ ュ ーの関連付け ................................ 286 w_products シー ト 用 メ ニ ュ ーの作成 .......................................... 287 w_product_report シ ー ト 用 メ ニ ュ ーの作成................................. 289 レッ スン 4 最初のシー ト ウ ィ ン ド ウの作成 ................................................... 291 ラ イ ブ ラ リ リ ス ト への ラ イ ブ ラ リ の追加 ................................... 292 子孫ウ ィ ン ド ウの作成 ................................................................. 293 デー タ ウ ィ ン ド ウ コ ン ト ロールの追加 ....................................... 295 デー タ ウ ィ ン ド ウ サービ スの利用 .............................................. 298 行の検索 ....................................................................................... 301 ア プ リ ケーシ ョ ンの実行.............................................................. 302 vi PowerBuilder 目次 レ ッ スン 5 第 2 シ ー ト ウ ィ ン ド ウの作成 ...................................................... 子孫ウ ィ ン ド ウの作成 ................................................................. デー タ ウ ィ ン ド ウ コ ン ト ロ ールの追加 ....................................... レ ポー ト サービ ス と 印刷プ レ ビ ュ ー サービ スの使用可能化...... ア プ リ ケーシ ョ ンの実行.............................................................. 307 308 310 312 314 索引.............................................................................................................................................. 317 PFC Library ユーザーズ ガ イ ド vii viii PowerBuilder 本書について 目的 こ の マ ニ ュ ア ル で は、 PowerBuilder Foundation Class ラ イ ブ ラ リ (PFC) の使用法について記述 し ま す。 対象者 こ のマ ニ ュ ア ルをお読みにな る 方には、 以下の こ と が前提 と な り ま す。 • Microsoft Windows のアプ リ ケーシ ョ ン に習熟 し てい る こ と • 現在 PowerBuilder を使用 し て アプ リ ケーシ ョ ン を開発 し てい て、 『ア プ リ ケーシ ョ ン テ ク ニ ッ ク 』 マニ ュ アルに記載 さ れて い る 概念 と 技法を理解 し てい る こ と • SQL お よ びサ イ ト 固有の DBMS の使用法を理解 し てい る こ と こ のマニ ュ アルは、 PFC ユーザのグループに応 じ て 4 つの部に分 かれてい ま す。 部 1 そのほかの情報 タイ トル 対象者 PFC の概要 全 PFC ユーザ 2 PFC ク ラ ス ラ イ ブ ラ リ のデザ イ ン オブジ ェ ク ト 管理者 3 PFC プ ロ グ ラ ミ ン グ ア プ リ ケーシ ョ ン開発者 4 PFC チ ュ ー ト リ アル 全 PFC ユーザ 製品に関す る そのほかの詳細情報については、 Sybase のテ ク ニ カ ル ラ イ ブ ラ リ CD、 お よ びテ ク ニ カル ラ イ ブ ラ リ 製品マニ ュ アル Web サ イ ト (英語) を参照 し て く だ さ い。 • ソ フ ト ウ ェ ア付属のテ ク ニ カル ラ イ ブ ラ リ CD には、 製品マ ニ ュ アルが収め ら れてい ま す。 製品マニ ュ アルは、PDF 形式に て提供 し てい ま す。 テ ク ニ カル ラ イ ブ ラ リ CD の使い方については、 テ ク ニ カル ラ イ ブ ラ リ CD 内の Readme.txt フ ァ イ ル を参照 し て く だ さ い。 • PFC Library ユーザーズ ガ イ ド テ ク ニ カル ラ イ ブ ラ リ 製品マニ ュ アルの Web サ イ ト (英語) に は、 Product Manuals http://www.sybase.com/support/manuals/ か ら ア ク セ ス で き ま す。 ix サポー ト につい て x 製品に同梱 し てい る 「サポー ト ハン ド ブ ッ ク 」 を参照 し て く だ さ い。 PowerBuilder 第 1 部 PFC の概要 第 1 部では、 PowerBuilder Foundation ク ラ ス ラ イ ブ ラ リ お よ び、 その前提 と な る PowerBuilder の概念につい て 説明 し ます。 第 1 部は、 すべての PFC ユーザを対象 と し てい ます。 第 1 章 PowerBuilder Foundation Class Library この章につい て こ の章では、 PowerBuilder Foundation Class ラ イ ブ ラ リ (PFC) の 概要を説明 し ま す。こ こ では PFC の基礎、前提 と な る PowerBuilder の概念、 お よ びオブ ジ ェ ク ト 指向の概念について説明 し 、 PFC を 構成す る 各 コ ン ポーネ ン ト を リ ス ト し ま す。 内容 PFC の概要 トピック ページ 3 PowerBuilder についての理解 4 PFC におけ る オブジ ェ ク ト 指向 9 PFC に よ る拡張 レベルの使い方 13 PFC コ ン ポーネ ン ト 16 PFC の概要 PowerBuilder Foundation Class ラ イ ブ ラ リ (PFC) は、 PowerBuilder オブジ ェ ク ト の集合で あ り 、 ク ラ ス ラ イ ブ ラ リ を作成す る 際にカ ス タ マ イ ズ し て使用す る も のです。 ユーザは、 こ れ ら のオブ ジ ェ ク ト を用いて会社内、 部門内での整合性や、 ア プ リ ケーシ ョ ン の 整合性を保つ こ と がで き ま す。 さ ら に、 PFC にはデバ ッ グ機能の よ う に、 ユーテ ィ リ テ ィ と し て その ま ま 使用す る オブ ジ ェ ク ト も あ り ま す。 PowerBuilder オ ブ ジ ェ ク ト PFC Library ユーザーズ ガ イ ド PFC は、 PowerBuilder で 書 か れ て お り 、 そ れ を サ ポ ー ト す る PowerScript ソ ー ス コ ー ド と と も に PowerBuilder オブ ジ ェ ク ト と し て提供 さ れ ま す。 PFC では高度な PowerBuilder オブ ジ ェ ク ト 指向 のプ ロ グ ラ ミ ン グ技法が使用 さ れ、 サービ ス 指向の設計が行われ てい ま す。 こ れに よ っ て、ユーザのアプ リ ケーシ ョ ン が使用す る コ ン ピ ュ ー タ リ ソ ース を最小限に抑え る こ と がで き る よ う にな っ て い ま す。 3 PowerBuilder についての理解 コ ー ド を読むには PFC で は 各 種 の 高 度 な プ ロ グ ラ ミ ン グ 技 法 が 用 い ら れ て い ま す。 PowerBuilder の PowerScript エデ ィ タ を使用 し て PFC 先祖オブ ジ ェ ク ト のオブ ジ ェ ク ト 、 イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び関数を調べ る こ と がで き ま す。 こ のマニ ュ アルの内容 こ のマニ ュ アルは、 PFC の概念 (PFC が ど う い う も ので、 ど う い う 利 点があ る か) お よ び使い方 (PFC を用いてプ ロ グ ラ ム を作成す る 方法) について説明 し ま す。 参考情報 PFC のオブ ジ ェ ク ト 、 イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び関数につ いての詳細は、 『PFC オブ ジ ェ ク ト リ フ ァ レ ン ス』 マニ ュ アル を参照 し て く だ さ い。 PowerBuilder についての理解 PFC は、 高度なオブジ ェ ク ト 指向の PowerBuilder ク ラ ス ラ イ ブ ラ リ を 作成す る ために用い ら れ ま す。 PFC と そ のオブ ジ ェ ク ト 指向機能を最 大限に活用す る には、 PowerBuilder と そ のオブ ジ ェ ク ト 指向機能を十 分に理解 し ておか なければな り ま せん。 こ の節では、 ユーザが理解 し てお く べ き PowerBuilder の概要について説明 し ま す。 PFC ア プ リ ケーシ ョ ンの作成 PFC は主に ク ラ ス ラ イ ブ ラ リ を 構築す る た めにデザ イ ン さ れて い ま す。 ただ し 、 PFC を その ま ま ア プ リ ケーシ ョ ン を構築す る ために使用 し て も か ま い ま せん。 PowerBuilder の概念の詳細については、 『PowerBuilder ユーザーズ ガ イ ド 』 マニ ュ アルを参照 し て く だ さ い。 PowerBuilder ラ イ ブ ラ リ と PowerBuilder オブ ジ ェ ク ト PFC は、 PowerBuilder ラ イ ブ ラ リ (PBL) の一式の中に含 ま れて配布 さ れ ま す。 こ れ ら の ラ イ ブ ラ リ には、 ア プ リ ケーシ ョ ン を作成す る 際 に使用 さ れ る 先祖オブ ジ ェ ク ト と 子孫オブ ジ ェ ク ト が入っ てい ま す。 4 PowerBuilder 第1章 PowerBuilder Foundation Class Library PowerBuilder ラ イ ブ ラリ PFC オブ ジ ェ ク ト を使用す る には、ま ず、PFC ラ イ ブ ラ リ を ア プ リ ケー シ ョ ン の ラ イ ブ ラ リ 探 索 パ ス に 追 加 し な け れ ば な り ま せ ん。 PowerBuilder は、 ( タ ーゲ ッ ト プ ロ パテ ィ シー ト で定義 し た) ラ イ ブ ラ リ 探索パ ス を使用 し て、 参照す る オブ ジ ェ ク ト を実行中に検索 し ま す。 PowerBuilder オ ブ ジェ ク ト PFC で使用す る 主な PowerBuilder オブジ ェ ク ト には、 以下の も のがあ り ま す。 PowerBuilder オ ブ ジ ェ ク ト 目的 ウィンドウ ユ ー ザ と PowerBuilder ア プ リ ケ ー シ ョ ン と の間の イ ン タ フ ェー ス メ ニ ュー 現行の ア ク テ ィ ブ ウ ィ ン ド ウ で ユーザが選 択で き る コ マ ン ド の リ ス ト デー タ ウ ィ ン ド ウ オ ブ ジ ェ クト デー タ の検索、 表示、 操作の ために使用 さ れ る オブ ジ ェ ク ト ユーザ オブ ジ ェ ク ト 一度定義 し ておけば、 何度で も 使用で き る 再 利用可能な コ ン ポーネ ン ト ユーザ オブ ジ ェ ク ト には、 以下の 2 種類が あ り ま す。 • ビ ジ ュ アル ユーザ オブ ジ ェ ク ト • ク ラ ス ユーザ オブジ ェ ク ト ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト ビ ジ ュ アル ユーザ オブジ ェ ク ト は、 1 つの再利用可能な ビ ジ ュ アル コ ン ト ロ ール ま たは、定義済みの動作形 態を も つ複数の ビ ジ ュ アル コ ン ト ロ ールの集ま り です。 PFC には、 以 下の 2 種類の ビ ジ ュ アル ユーザ オブ ジ ェ ク ト があ り ま す。 PFC では、 標準 ビ ジ ュ ア ル オ ブ ジ ェ ク ト の フ ルセ ッ ト が提供 さ れ ま す。 各 PFC 標準ビ ジ ュ アル ユーザ オブジ ェ ク ト は、 それぞれ 1 つの PowerBuilder ウ ィ ン ド ウ コ ン ト ロ ールに対応 し てい ま す。 こ れ ら のオブ ジ ェ ク ト には、 各 種 PFC サービ ス を完全に提供で き る よ う 定義済みの動作形態が含 ま れて い ま す。 特に、 u_dw デー タ ウ ィ ン ド ウ ユーザ オブ ジ ェ ク ト は、 広範囲にわた る 機能を提供 し 、 各種 PFC サービ ス と 統合 し て機能 し ま す。 • 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト • カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト PFC は、 カ ス タ ム ビ ジ ュ アル ユーザ オブ ジ ェ ク ト も 使用 し てい ま す。カ ス タ ム ビ ジ ュ アル ユーザ オブ ジ ェ ク ト には、 一群の ウ イ ン ド ウ コ ン ト ロ ールが あ り ま す。 こ れ ら のオブ ジ ェ ク ト は、 特定の状況下での使用を目的 と し た高度の機能を提供 し ま す。 PFC Library ユーザーズ ガ イ ド 5 PowerBuilder についての理解 PFC は、 外部ビ ジ ュ アル ユーザ オブジ ェ ク ト を使用 し ま せん。 ビ ジ ュ ア ル ユーザ オブ ジ ェ ク ト の詳細については、 『PowerBuilder ユーザー ズ ガ イ ド 』 マニ ュ アルを参照 し て く だ さ い。 ク ラ ス ユーザ オ ブ ジ ェ ク ト ク ラ ス ユーザ オ ブ ジ ェ ク ト は、 ビ ジ ュ ア ル コ ン ト ロ ールを使用 し ないで処理を行 う 場合に用い る 、 再利用可能 な非ビ ジ ュ アル コ ン ト ロ ールです。 PFC には、 以下の 2 種類の ク ラ ス ユーザ オブ ジ ェ ク ト があ り ま す。 組み込ま れてい る PowerBuilder シ ス テ ム オブ ジ ェ ク ト か ら 、 その定義を継承 し ま す。 PFC では、 ト ラ ンザ ク シ ョ ン、 エ ラ ーな ど 拡張可能な シ ス テ ム オブ ジ ェ ク ト が 提供 さ れてい ま す。 • 標準 ク ラ ス ユーザ オ ブ ジ ェ ク ト • PowerBuilder の NonVisualObject ク ラ ス か ら 、 その定義を継承 し ま す。 カ ス タ ム ク ラ ス ユーザ オブ ジ ェ ク ト は、 デー タ と コ ー ド を カ プセル化 し ま す。 こ の タ イ プの ク ラ ス ユーザ オブジ ェ ク ト を使用す る と 、 最初か ら オブ ジ ェ ク ト ク ラ ス を定義で き ま す。 カ ス タ ム ク ラ ス ユーザ オブ ジ ェ ク ト PFC は、 カ ス タ ム ク ラ ス オブ ジ ェ ク ト を使用 し て多 く のサービ ス を実装 し てお り 、 こ れ ら のサービ ス オブ ジ ェ ク ト の イ ン ス タ ン ス を使用可能にす る ための機能を提供 し てい ま す。 ま た、 PFC では、 イ ン ス タ ン ス 化 さ れた オブ ジ ェ ク ト へのポ イ ン タ と し て参照変数が提供 さ れて い ま す。 オブ ジ ェ ク ト の イ ン ス タ ン ス 変数、 関数、 イ ベン ト に ア ク セ ス す る には参照変数を使用 し ま す。 関数 PowerBuilder は、 グ ロ ーバル関数 と オブ ジ ェ ク ト 関数を サポー ト し て い ま す。 PFC は、 ユーザ オブ ジ ェ ク ト 関数を通 じ て多 く の処理を行い ま す。 関数 と は、 特定の処理を行 う PowerScript 文の集合です。 関数に 引数を渡す こ と に よ り (渡 さ ない こ と も あ る )、 関数は値を返 し ま す。 PFC オブジ ェ ク ト 関数の詳細については、『PFC オブジ ェ ク ト リ フ ァ レ ン ス』 マニ ュ アル を参照 し て く だ さ い。 イ ベ ン ト お よ びユーザ イ ベン ト ウ ィ ン ド ウ 、 ユーザ オブ ジ ェ ク ト 、 お よ び コ ン ト ロ ールは、 それぞれ 定義済み イ ベン ト の集合を持っ てい ま す。 PFC では、 多 く の PFC オブ ジ ェ ク ト に対 し て ユーザ イ ベ ン ト を定義す る こ と に よ り イ ベ ン ト の 種類を拡張 し ます。 イ ベン ト は、 引数を受け取 る こ と がで き 、 値を返 す こ と も で き ま す。 イ ベン ト には、 以下の 3 種類があ り ま す。 6 PowerBuilder 第1章 PowerBuilder Foundation Class Library イ ベ ン ト の種類 ユーザの操作に よ っ て実行 さ れ る ア ク シ ョ ン 定義済み PowerBuilder イ ベン ト オペ レ ーテ ィ ン グ シ ス テ ム に イ ベ ン ト を 呼び 出させる ア ク シ ョ ン 定義済みユーザ イ ベン ト PFC に ユーザ イ ベ ン ト を 起動 さ せ る ア ク シ ョ ン ( メ ニ ュー項目の選択な ど) 未記述の ユーザ イ ベ ン ト (ユーザが PowerScript コ ー ド を 追加) PFC に ユーザ イ ベ ン ト を 起動 さ せ る ア ク シ ョ ン ( メ ニ ュー項目の選択な ど) 定義済み イ ベ ン ト やユーザ イ ベ ン ト の呼出 し 、 起動、 ポ ス ト を 行 う コ ー ド を追加す る こ と も で き ま す。 このマニ ュ アルでは 特に断 り 書 き のない限 り 、 イ ベン ト と い う 語は、 上述の 3 種類のすべ て を指 し ま す。 関数 と イ ベ ン ト の比較 関数 と イ ベン ト は、 多 く の点で類似 し てい ま す。 ど ち ら も 引数を受入 れ、 値を返 し ま す。 いずれ も PowerScript 文で構成 さ れ ま す。 両方 と も 呼出 し 、 起動、 お よ びポ ス ト が可能です。 関数 と イ ベン ト の相違点を 以下に挙げ ま す。 機能 関数 イベン ト 存在 し な い メ ソ ッ ド の呼出 し 実在 し な い関数 を 実行時 に呼出す と エ ラ ーにな る 実在 し な い イ ベ ン ト を TriggerEvent で呼出す と -1 の戻 り 値が返 さ れ る 先祖 ス ク リ プ ト の 処理 関数が先祖の プ ロ セ ス を 上書 きす る (ただ し Super キ ー ワ ー ド を 使 っ て 先祖 関数 を 呼出す こ と は で き る) イ ベン ト は、 先祖のプ ロ セ ス を 拡張 な い し 上書 き で きる アクセス オ ブ ジ ェ ク ト 関数は、 パ イ ベン ト のア ク セ ス は、 常 ブ リ ッ ク 、 プ ラ イ ベー ト 、 にパブ リ ッ ク であ る プ ロ テ ク ト の いずれで も よい オーバー ロ ー ド 同 じ 名前の関数に異な る 引数を指定で き る イ ベ ン ト はオーバー ロ ー ド 不可能 オブ ジ ェ ク ト 指向プ ログ ラ ミ ング オブジ ェ ク ト 指向プ ロ グ ラ ミ ン グ ツールは、 継承、 カプセル化、 多相 性 (ポ リ モ フ ィ ズ ム) の 3 つの基本的な原則を サポー ト し てい ま す。 PFC Library ユーザーズ ガ イ ド 7 PowerBuilder についての理解 継承 継承 (Inheritance) と は、 既存のオブ ジ ェ ク ト か ら 、 新 し いオブ ジ ェ ク ト を派生 さ せ る こ と を いい ま す。 こ の際、 新 し いオブ ジ ェ ク ト は、 既存のオ ブ ジ ェ ク ト で定義 さ れ た ビ ジ ュ ア ル コ ン ポ ーネ ン ト 、 デー タ 、 お よ び コ ー ド に対す る ア ク セ ス の方法 も 引継ぎ ま す。 継承を利用 す る こ と に よ り 、 コ ーデ ィ ン グ 時間の短縮、 コ ー ド 再利用の効率化、 お よ び一貫性の向上を図 る こ と がで き ま す。 カ プ セル化 カプセル化 (Encapsulation) は、 情報隠蔽 と も 呼ばれ、 オブ ジ ェ ク ト 内に、 そのオブ ジ ェ ク ト 固有のデー タ と コ ー ド を入れてお き 、 適切 と 認め ら れた 場合に限 っ て外部か ら ア ク セ ス で き る よ う にす る こ と で す。 PFC では、 以下の よ う に し て カプセル化を行っ てい ま す。 多相性 • PFC は、 オブジ ェ ク ト 関数 と イ ン ス タ ン ス 変数を、 外部ア ク セ ス を ど の程度必要 と す る かに応 じ て、 パブ リ ッ ク ま たはプ ロ テ ク ト に定義。 プ ラ イ ベー ト ア ク セ ス レベルは使用 し ない • 読み取 り 可能な イ ン ス タ ン ス 変数の場合、 PFC は通常、 of_Getvariablename 関数 (variablename は イ ン ス タ ン ス 変数名。 以 下同様) を提供す る • ブール イ ン ス タ ン ス 変数の場合、PFC は通常、of_Isvariablename 関 数を提供す る • 修正可能なイ ン ス タ ン ス 変数の場合、PFC は通常、of_Setvariablename 関数を 提供する • PFC に よ っ て イ ン ス タ ン ス 変数をパブ リ ッ ク と し て定義 し 、 ユー ザが直接ア ク セ ス で き る よ う にす る 場合 も あ る 多相性 (Polymorphism) と は、 参照 さ れたオブ ジ ェ ク ト と 引数の数に 応 じ て、 同 じ 名前を も つ関数が異な る 動作をす る こ と です。 PFC は以 下の よ う な多相性をサポー ト し ま す。 • 8 独立 し たオブジ ェ ク ト 間の多相性 (operational polymorphism)。 独 立 し た無関係のオブ ジ ェ ク ト に対 し て、 同 じ 名前の関数を定義す る PowerBuilder 第1章 • 上書 き と 多重定義 PowerBuilder Foundation Class Library 継承オブ ジ ェ ク ト 間の多相性 (inclusional polymorphism) 。 継承 チ ェ ーン 内の各種オブ ジ ェ ク ト に対 し て同 じ 名前で異な る 引数を 定義す る PowerBuilder は、 関 数 の 上 書 き (overriding) と 、 関 数 の 多 重 定 義 (overloading) の両方を サポー ト し てい ま す。 • 関数の上書 き では、 子孫関数は同 じ 引数名 と 同 じ 引数デー タ 名 と を持つ • 関数の多重定義では、 子孫関数 ( ま たは同 じ オブ ジ ェ ク ト 内の同 一名の関数) は、 異な る 引数名や異な る デー タ 型を持つ PFC におけ る オブ ジ ェ ク ト 指向 PFC は、 PowerBuilder が持つオブ ジ ェ ク ト 指向機能のすべての側面を 活用 し てい ま す。 原理 PFC は、 オブジ ェ ク ト 指向の 3 つの原理を使用 し ま す。 PFC の機能 変換先 継承 ウ ィ ン ド ウ 、 メ ニ ュー、 お よ びユーザ オブ ジ ェ ク ト の階層 構造を実装す る カプセル化 各オブジ ェ ク ト のデー タ と コー ド を ほか と 隔離す る 多相性 同一のオブジ ェ ク ト 内、 同一の継承階層構造内、 お よ び複 数のオブジ ェ ク ト 間で、 同 じ 名前の関数 を使え る よ う にす る PFC Library ユーザーズ ガ イ ド 9 PFC におけ る オ ブ ジ ェ ク ト 指向 サー ビ ス PFC は、 ウ ィ ン ド ウ 、 標準 ク ラ ス ユーザ オブジ ェ ク ト 、 お よ びカ ス タ ム ク ラ ス ユーザ オブ ジ ェ ク ト を使用 し 、 関連す る 処理の種類 (た と えば、 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ 、 行選択、 ウ ィ ン ド ウ サ イ ズ変更 な ど ) を グループ化す る こ と に よ り 、 オブ ジ ェ ク ト 指向の設計を実現 し てい ま す。 こ れ ら の関連す る プ ロ セ ス グループ を、 サービ ス と 呼び ま す。 ほ と ん ど のサービ ス は、 カ ス タ ム ク ラ ス ユーザ オブ ジ ェ ク ト と し て実行 さ れ ま す。 PFC サービ ス には以下の種類があ り ま す。 サー ビ ス グループ サー ビ ス ア プ リ ケーシ ョ ン サービ ス ア プ リ ケーシ ョ ン環境設定 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ デバ ッ グ エ ラ ー メ ッ セージ 最新使用オブジ ェ ク ト セキ ュ リ テ ィ ト ラ ンザ ク シ ョ ン登録 ウ ィ ン ド ウ サー ビ ス 基本 環境設定 シー ト 管理 ス テー タ ス バー デー タ ウ ィ ン ド ウ サービ スデー タ ウ ィ ン ド ウ サービ ス 基本 デー タ ウ ィ ン ド ウ サ イ ズ変更 ド ロ ッ プダ ウ ン検索 フ ィルタ 検索 リンク マルチテーブル更新 プ ロ パテ ィ ク エ リ モー ド レ ポー ト 必須カ ラ ム サ イ ズ変更 行管理 行選択 ソー ト デー タ ス ト ア サービ ス 基本 マルチテーブル更新 10 PowerBuilder 第1章 サービ ス グループ PowerBuilder Foundation Class Library サービ ス 印刷プ レ ビ ュ ー レ ポー ト グ ロ ーバル サービ ス フ ァ イル INI フ ァ イ ル 論理ユニ ッ ト メ タ クラス メ ニ ュー 数値 プ ラ ッ ト フ ォ ーム サ イ ズ変更 RTE 検索 選択 SQL SQL ス パ イ 文字列型 サービ ス オブ ジ ェ ク ト を選択的に イ ン ス タ ン ス 化す る こ と に よ り 、 ア プ リ ケーシ ョ ン で使用す る PFC 機能に大 き な 柔軟性 を 持た せ る こ と がで き 、 ま た ア プ リ ケ ーシ ョ ン は使用す る リ ソ ー ス を減 ら す こ と がで き ま す。 ア プ リ ケーシ ョ ン で作成 さ れたサー ビ ス オブジ ェ ク ト は、 PFC に よ っ て自動的に破棄 さ れ ま す。 サー ビ スの選択的な利用 サービ ス を選択的に利用す る こ と で、以下の よ う な利点が得 ら れ ま す。 • 継承の階層構造が複雑にな ら ないので、 先祖オブ ジ ェ ク ト の数を 最小限にす る こ と が可能 • 必要なサービ ス だけ を使えば よ いので、 オーバーヘ ッ ド が減 る • 単純な ア プ リ ケーシ ョ ン で も 複雑な ア プ リ ケーシ ョ ン で も 構築で きる • 使用 と 管理が容易 (先祖処理を上書 き す る た めに複数の ス ク リ プ ト を書 く 必要がない) PFC のサー ビ ス には、 代行 (delegation) と い う オブ ジ ェ ク ト 指向の概念が反映 さ れてい ま す。 こ れは、 メ イ ン オブジ ェ ク ト と そ の実行部分 を 別々のオ ブ ジ ェ ク ト 階層に分け る と い う も の で す。 サー ビ スの代行 PFC では、 サービ ス の代行に以下の 2 種類の関係を使用 し ま す。 PFC Library ユーザーズ ガ イ ド 11 PFC におけ る オ ブ ジ ェ ク ト 指向 サービ ス オブ ジ ェ ク ト は、それ を所有 し てい る オブ ジ ェ ク ト か ら 独立 し て機能で き ま せん。 こ れ は 「一体関係」 (whole-part relationship) と も 呼ばれ ま す。 た と え ば、 u_dw デー タ ウ ィ ン ド ウ ビ ジ ュ ア ル ユーザ オブ ジ ェ ク ト は、 n_cst_dwsrv_querymode ユ ー ザ オ ブ ジ ェ ク ト を 使 用 し て ク エ リ モー ド サービ ス を行い ま す。 • 従属関係 (aggregate relationship) • 独立関係 (associative relationship) サービ ス オブジ ェ ク ト は、 単 独で機能で き ま す。 た と えば、文字列サービ ス は、n_cst_string ユー ザ オブジ ェ ク ト に よ っ て提供 さ れ、 ア プ リ ケーシ ョ ン内の ど のオ ブ ジ ェ ク ト か ら も 使用で き ま す。 PFC サービ ス の種類 と その使い方に関す る 詳細は第 4 章「 PFC サービ ス の使い方」 を参照 し て く だ さ い。 12 PowerBuilder 第1章 PowerBuilder Foundation Class Library PFC に よ る拡張レ ベルの使い方 ク ラ ス ラ イ ブ ラ リ を その ま ま 使用 し ただけでは、 ユーザの要件を満た す こ と はで き ま せん。 通常、 ア プ リ ケーシ ョ ン内の関数 と オブ ジ ェ ク ト を統合す る には、 PFC オブ ジ ェ ク ト を修正す る 必要が あ り ま す。 こ の場合、 PFC 拡張 レ ベルが使用で き な い と すれば、 問題が生 じ ま す。 すなわち、PFC の新バージ ョ ン が リ リ ー ス さ れてそれを適用 し た と き 、 旧バージ ョ ン で カ ス タ マ イ ズ し た部分が新バージ ョ ン に よ っ て上書 き さ れて し ま い、 も う 一度手作業で修正 し 直 さ なければな ら な く な る か ら です。 分離 さ れてい る拡張レ ベル PFC では、 すべての継承階層に拡張 レベル (extension level) を設け る こ と がで き ま す。 すべて の拡張オブ ジ ェ ク ト は別個の PBL に収容 さ れ、新バージ ョ ン が適用 さ れて も 影響を受け ない よ う にな っ てい ま す。 内容 ア プ リ ケ ーシ ョ ン お よ び グ ロ ー バル サービ ス 先祖 PBL PFCAPSRV.PBL 拡張レ ベル PFEAPSRV.PBL デー タ ウ ィ ン ド ウ サービ ス PFCDWSRV.PBL PFEDWSRV.PBL ビ ジ ュ ア ルお よ び標準 ク ラ ス ユーザ オブ ジ ェ ク ト PFCMAIN.PBL PFEMAIN.PBL ユーテ ィ リ テ ィ サービ ス PFCUTIL.PBL PFEUTIL.PBL ウ ィ ン ド ウ サービ ス PFCWNSRV.PBL PFEWNSRV.PBL 先祖レベルの ラ イ ブ ラ リ には、 すべての イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び関数が入っ てい ま す。 拡張レ ベルの ラ イ ブ ラ リ には、 先祖 ラ イ ブ ラ リ に対応す る オブ ジ ェ ク ト の子孫オブ ジ ェ ク ト が無修正で入っ て い ま す。 し か し 、 継承に よ っ て子孫は、 先祖の イ ン ス タ ン ス 変数、 イ ベ ン ト 、 お よ び関数にア ク セ ス で き ま す。 子孫オブ ジ ェ ク ト が使用で き る イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び 関数を見たい と き には、 PowerBuilder ブ ラ ウ ザ を使っ て く だ さ い。 拡張レベルを使用すれば、 以下の 2 つの利点が得 ら れ ま す。 • 拡張 レ ベルのオ ブ ジ ェ ク ト に、 サ イ ト 固有、 部門固有、 あ る いは ア プ リ ケーシ ョ ン固有の ロ ジ ッ ク を追加で き る • 最新バージ ョ ン にア ッ プ グ レー ド し て も 、 拡張 PBL は影響を受け ない PFC Library ユーザーズ ガ イ ド 13 PFC に よ る拡張レ ベルの使い方 旧式のオブ ジ ェ ク ト PFCOLD.PBL ラ イ ブ ラ リ には、旧式のオブ ジ ェ ク ト が含ま れてい ま す。 既存の PFC ア プ リ ケ ーシ ョ ン が あ る 場合、 こ の ラ イ ブ ラ リ を ア プ リ ケーシ ョ ン タ ーゲ ッ ト ラ イ ブ ラ リ リ ス ト に追加す る 必要があ る と き があ り ま す。 必要な作業 PFC アプ リ ケーシ ョ ン を カ ス タ マ イ ズす る 際には、 拡張 レベルでオブ ジ ェ ク ト を修正 し て く だ さ い。 先祖オブ ジ ェ ク ト を修正 し ないで く だ さ い。 ア プ リ ケー シ ョ ン の オ ブ ジ ェ ク ト は拡張 レ ベルのユーザ オ ブ ジ ェ ク ト を使用 し 、 拡張レベルの ウ ィ ン ド ウ か ら 継承 し ま す。 PFC オブ ジ ェ ク ト の 命名規則 PFC では、 以下の命名規則が用い ら れてい ま す。 レ ベル 名前 内容 先祖オブ ジ ェ クト 接頭辞 pfc_ を使用 すべ て の イ ン ス タ ン ス 変数、 イ ベン ト 、 関数 拡張 レ ベルの オブジ ェ ク ト 先祖 と 同名、 ただ し 接頭辞 pfc_ は除 く PFC 先祖 オ ブ ジ ェ ク ト の 未 修正子孫 た と え ば、 デ ー タ ウ ィ ン ド ウ 選 択 サ ー ビ ス の オ ブ ジ ェ ク ト は、 pfc_n_cst_dwsrv で あ り 、 拡 張 レ ベ ル の 子 孫 は、 n_cst_dwsrv で す。 pfc_n_cst_dwsrv には、こ のサービ ス のための コ ー ド がすべて あ り ま す。 n_cst_dwsrv は、 その未修正の子孫で あ り 、 こ こ にアプ リ ケーシ ョ ン固 有の イ ン ス タ ン ス や コ ー ド を追加す る こ と がで き ま す。 PFC 定義のユーザ イ ベン ト も pfc_ 接頭辞 を使い ま す。 こ れに よ り 、 アプ リ ケーシ ョ ン のユーザ イ ベン ト と PFC のユーザ イ ベン ト を容易に区別で き ま す。 PFC 定義のユーザ イ ベ ン ト 14 PowerBuilder 第1章 PowerBuilder Foundation Class Library PFC のマニ ュ アルでは、 拡張 レベルの名前 を使用 し ます PFC に関す る ド キ ュ メ ン テーシ ョ ン では、 サービ ス オブジ ェ ク ト を示 す際、 常に拡張 レベルの名前を使用 し ま す。 た と えば、 こ のマ ニ ュ ア ル で、 基本 ク ラ ス の ウ ィ ン ド ウ を 指す場合 に は、 w_master と 書 き 、 pfc_w_master と は書 き ま せん。 し か し 、 w_master に必要な イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び関数は、 実際には pfc_w_master で既に定義 さ れてい ま すので ご注意 く だ さ い。 PFC オ ブ ジ ェ ク ト の命名規則の詳細につい ては、 『PFC オブ ジ ェ ク ト リ フ ァ レ ン ス 』 マニ ュ アルを参照 し て く だ さ い。 拡張の例 PFC オブ ジ ェ ク ト の階層構造は、 ど の レベルにおいて も ロ ジ ッ ク を追 加で き る よ う に な っ て い ま す。 た と えば、 pfc_w_sheet は w_master か ら 継承 を行 う ので、 w_master に追加 さ れ た イ ン ス タ ン ス 変数、 関数、 お よ び イ ベン ト は、 すべて子孫ウ ィ ン ド ウ で使用で き ま す。 拡張 レ ベルの追加 拡張 レ イ ヤに よ っ て、 ア プ リ ケ ーシ ョ ン内の再使用可能度が増大 し 、 ま た PFC のア ッ プ グ レー ド の際に個々のア プ リ ケーシ ョ ン を効果的に 隔離で き ま す。 し か し 、 部門標準や全社標準を持つ大規模な シ ス テ ム においては、 部門全体あ る いは会社全体にわた る 標準ない し 業務規則 を カバーす る のに必要な レベルを さ ら に追加 し なければな り ま せん。 PFC Library ユーザーズ ガ イ ド 15 PFC コ ンポーネ ン ト PFC を あ る 組織全体で使用す る 場合、 拡張レベル を追加 し て全社的あ る いは部門単位で変数、 イ ベン ト 、 お よ び関数を持つ拡張 レベルを新 し く 作成す る 必要が生ず る こ と も あ り ま す。 こ の場合 も ア プ リ ケ ー シ ョ ン は拡張レベル ラ イ ブ ラ リ 内のオブ ジ ェ ク ト を使用 し ま すが、 同 時に先祖の持つ イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び関数にア ク セ ス す る こ と も で き ま す。 PFC コ ン ポーネ ン ト PFC は、 以下の コ ン ポーネ ン ト で構成 さ れてい ま す。 • 一組の PBL ( ラ イ ブ ラ リ ) こ れ ら の PBL のオブジ ェ ク ト を、アプ リ ケーシ ョ ン タ ーゲ ッ ト ラ イ ブ ラ リ リ ス ト に追加 し PFC ベース のアプ リ ケーシ ョ ン か ら 利用 で き る よ う に し てお く 必要があ り ま す。 PFC の PBL • デー タ ベース • コ ー ド の例 • サ ン プル アプ リ ケーシ ョ ン PFC は、 PBL と 一緒に出荷 さ れ ま すが、 PBL には、 先祖オブ ジ ェ ク ト の入っ てい る も の と 、 拡張レベル オブジ ェ ク ト の入っ てい る も の と が あ り ま す。 いずれの PBL も 、 関連す る サービ ス を実行す る オブ ジ ェ ク ト を備え てい ま す。 ライブラ リ PFCAPSRV.PBL PFEAPSRV.PBL PFCDWSRV.PBL PFEDWSRV.PBL PFCMAIN.PBL PFEMAIN.PBL 16 内容 アプ リ ケーシ ョ ン マネージ ャ 、 ア プ リ ケーシ ョ ン サー ビ ス オブジ ェ ク ト お よ びそ のほかの グ ロ ーバル サー ビ ス オブジ ェ ク ト デー タ ウ ィ ン ド ウ サービ ス。 ユーザ オブ ジ ェ ク ト お よ びユーテ ィ リ テ ィ ウ ィ ン ド ウ を含む 標準ビ ジ ュ アル ユーザ オブジ ェ ク ト 、 カ ス タ ム ビ ジ ュ アル ユーザ オブジ ェ ク ト お よ び標準 ク ラ ス ユーザ オブ ジェク ト PowerBuilder 第1章 ラ イブラ リ PFCUTIL.PBL PowerBuilder Foundation Class Library 内容 ユーテ ィ リ テ ィ オブジ ェ ク ト お よ びサー ビ ス PFEUTIL.PBL PFCWNSRV.PBL PFEWNSRV.PBL ウ ィ ン ド ウ サー ビ ス。 ユーザ オブ ジ ェ ク ト お よ びユー テ ィ リ テ ィ ウ ィ ン ド ウ を含む ラ イ ブ ラ リ ペ イ ン タ を使用する PFC の PBL に入っ てい る オブ ジ ェ ク ト を見 る には、 PFC ラ イ ブ ラ リ の すべての PowerBuilder ラ イ ブ ラ リ ペ イ ン タ を使用 し て く だ さ い。 PFC デー タ ベース PFC は、pfc.db ロ ーカル デー タ ベース と 一緒に出荷 さ れ ま す。こ のデー タ ベー ス には、 以下のテーブルが入っ てい ま す。 テーブル 用途 メ ッ セージ Security_apps エ ラ ー メ ッ セージ サー ビ ス Security_groupings セ キ ュ リ テ ィ サービ ス Security_info セ キ ュ リ テ ィ サービ ス Security_template セ キ ュ リ テ ィ サービ ス Security_users セ キ ュ リ テ ィ サービ ス セ キ ュ リ テ ィ サービ ス PFC ロ ーカル デー タ ベー ス は、 開発者専用 と し て用意 さ れてい る も の です。ア プ リ ケーシ ョ ン でエ ラ ー メ ッ セージやセキ ュ リ テ ィ サービ ス を使用す る 場合は、 249 ページ の「 データ ベース テーブルの配布方法」 で記述 さ れてい る よ う に、 こ れ ら のテーブル を サーバのデー タ ベー ス に コ ピーす る 必要があ り ま す。 PFC コ ー ド の例 実行中の PFC オブ ジ ェ ク ト と サービ ス を調べて、最 も 一般的な PFC 機 能の コ ーデ ィ ン グ と 実行の方法を習得す る には、 PFC コ ー ド の例を使 用 し て く だ さ い。 PFC コ ー ド の例にあ る イ ン タ フ ェー ス は、 広範囲の 相互参照 と 使用法に関す る 情報を提供 し ま す。 PFC サン プル ア プ リ ケーシ ョ ン プ ロ ジ ェ ク ト 見積お よ び ト ラ ッ キ ン グ シ ス テ ム に使用 さ れ る PFC の 例を 調べ る には、 PEAT (PFC サ ン プル ア プ リ ケーシ ョ ン) を使っ て く だ さ い。 PFC Library ユーザーズ ガ イ ド 17 PFC コ ンポーネ ン ト 18 PowerBuilder 第 2 部 PFC ク ラ ス ラ イ ブ ラ リ の デザイ ン 第 2 部では、 独自の ク ラ ス ラ イ ブ ラ リ を作成す る ために PFC を拡張す る方法について説明 し ます。 第 2 部は、 ク ラ ス ラ イ ブ ラ リ の保守、 機能向上、 お よび 実装を 担当す る、 オ ブ ジ ェ ク ト 管理者 を対象 と し て い ま す。 第 2 章 ク ラ ス ラ イ ブ ラ リ のデザ イ ン この章につい て こ の章では、 PFC を ユーザの ク ラ ス ラ イ ブ ラ リ の基礎 と し て使用 す る 方法を説明 し ま す。 内容 ク ラ ス ラ イ ブ ラ リ のデザ イ ン におけ る PFC の使用 トピック ページ 21 拡張方法の選択 22 新規サービ ス の定義 26 ク ラ ス ラ イ ブ ラ リ のデザイ ン におけ る PFC の使用 PFC は、 ク ラ ス ラ イ ブ ラ リ を構築す る 際の基礎 と な る も のです。 PFC の広汎なサービ ス 指向のアーキ テ ク チ ャ を利用 し て、 処理内 容を カ ス タ マ イ ズ し た り 、機能を拡張 し た り す る こ と がで き ま す。 さ ら に、 ユーザが自分でサービ ス を定義す る こ と も で き ま す。 オブ ジ ェ ク ト 管理者 PFC Library ユーザーズ ガ イ ド ク ラ ス ラ イ ブ ラ リ を構築す る ために PFC を使用す る PowerBuilder ユーザが、オブ ジ ェ ク ト 管理者です。以下の よ う な方々がオブジ ェ ク ト 管理者にな り ま す。 PFC をベー ス に し た ク ラ ス ラ イ ブ ラ リ を作成 し 、一貫性 と 機能の向上を図 り ま す。 • 企業 レベルま たは部門 レベルのアナ リ ス ト • コ ンサル タ ン ト PFC を ベー ス に し た ク ラ ス ラ イ ブ ラ リ を 作 成 し 、 サービ ス の価値を高め ま す。 • ベンダ 特定の開発者グループのニーズにマ ッ チ し た、高度の ク ラ ス ラ イ ブ ラ リ を作成す る ためのベー ス と し て PFC を使用 し ま す。 21 拡張方法の選択 オ ブ ジ ェ ク ト 管理者の 役割 オブ ジ ェ ク ト 管理者は、 開発者 と は異な る PFC の使い方を し ま す。 す なわち、 すべての開発者が使用 し やすい よ う に PFC の機能を カ ス タ マ イ ズ し 、 向上 さ せ る のです。 オブ ジ ェ ク ト 管理者は、 組織のニーズ も 、 PFC も 完全に理解 し ておかな ければな り ま せん。 オブジ ェ ク ト 管理者 は、 予想 さ れ る 使われ方に応 じ て、 オブ ジ ェ ク ト 、 サービ ス 、 イ ン ス タ ン ス 変数、 イ ベン ト 、 関数を追加 し 、 カ ス タ マ イ ズす る こ と に よ っ て、 PFC を拡張 し ま す。 最初の ス テ ッ プは、 PFC 拡張の方法を選択す る こ と です。 拡張方法の選択 サ イ ト で PFC を拡張 し 、 実装す る には、 多 く の方法があ り ま すが、 主 な PFC 拡張方法 と し ては以下の 2 つが あ り ま す。 個々の物理 フ ァ イルの 使い方 • 中間拡張レ ベルを作 る 方法 • 既存の PFC 拡張レベルを使用す る 方法 拡張の方法に関係な く 、 各 PFC アプ リ ケーシ ョ ン には専用の物理フ ァ イ ルがあ り ま す。 先祖フ ァ イ ル (名前が PFC で始ま る フ ァ イ ル) を共 有 さ せ る こ と はで き ま せん。 こ れは、 w_master な ど のハ イ レベル拡張 オブ ジ ェ ク ト 間に内部的な依存関係があ る か ら です。 た と えば、アプ リ ケーシ ョ ン 1 と 2 に専用の PFE 拡張レベル ラ イ ブ ラ リ があ っ て、 両ア プ リ ケーシ ョ ン で先祖 ラ イ ブ ラ リ を共有す る と 仮定 し ま す。 ア プ リ ケーシ ョ ン 1 は、 of_SetData 関数を PFEMAIN.PBL 内 の w_master に 追加 し ま す。 こ の 関数 は、 共有先 祖 ラ イ ブ ラ リ 内 の pfc_w_main、 pfc_w_frame、 お よ び pfc_w_sheet を含む、 w_master のす べ て の子孫で使用で き ま す。 次に ア プ リ ケ ー シ ョ ン 2 が こ の ア プ リ ケーシ ョ ン を再生成 し ま す。 ア プ リ ケーシ ョ ン 2 の PFEMAIN.PBL には of_SetData 関数がないので、 of_SetData のすべて の内部参照が w_master の子孫か ら 除去 さ れ る た め、 ア プ リ ケーシ ョ ン 1 に関 し て実行時エ ラ ー と コ ンパ イ ル エ ラ ーが 発生 し ま す。 22 PowerBuilder 第2章 ク ラ ス ラ イ ブ ラ リ のデザ イ ン 中間拡張レベルを作る方法 全社的ま たは部門内の使用に供す る だけ でな く 、 開発者がア プ リ ケー シ ョ ン内の コ ー ド を拡張レ ベルで自由に追加で き る よ う なオブ ジ ェ ク ト を作成す る ために、 1 つ ま たは複数の中間拡張 レベル を定義す る こ と がで き ま す。 こ れ ら の中間拡張 レベルのオブ ジ ェ ク ト には、 サ イ ト ま たは部門に固有の イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び関数を入れ ま す。 こ の方法に し たがっ て、 PFC 先祖 レベル と PFC 拡張 レベル と の中間に 新 し い拡張レ ベルを作成 し ま す。 次に、 中間拡張 レベルのオブ ジ ェ ク ト が PFC 先祖オブ ジ ェ ク ト の下位に来て、 PFC 拡張 レベルのオブジ ェ ク ト は中間拡張レベルのオブ ジ ェ ク ト の下位へ来 る よ う に、 PFC 拡張 の階層構造を再定義 し ま す。 PFC オブ ジ ェ ク ト は、 参照変数を宣言す る 際に PFC 拡張レベルのオブジ ェ ク ト のデー タ 型を使用す る ので、 こ れ ら の変更は、 直ちに使用可能にな り ま す。 以下に pfc_n_cst_appmanager の カ ス タ マ イ ズ さ れた子孫 を作成す る 例 を挙げ ま す。 利点 こ の方法には、 以下の 2 つの利点があ り ま す。 • 中間拡張レ ベルのオブ ジ ェ ク ト に対 し て行われた変更が、 直ちに PFC 拡張レベルの子孫オブジ ェ ク ト で使用で き る よ う にな る • 開発者が PFC 拡張レ ベルのオブ ジ ェ ク ト を完全に制御で き る 命名規則 中間拡張レ ベルのオブ ジ ェ ク ト には、 その用途を反映す る 標準の接頭 辞を付け なければな り ま せん。 た と えば、 中間拡張 レベルに追加の ク ラ ス ラ イ ブ ラ リ 機能が入っ ていれば、接頭辞 と し て classlib_ を使用 し 、 中間拡張レベルに全社レベルの拡張が入っ ていれば、接頭辞に corp_ を 使い ま す。 必要な作業 中間拡張レベルのオブ ジ ェ ク ト を通 じ て PFC を追加、 修正、 拡張 し ま す。 PFC Library ユーザーズ ガ イ ド 23 拡張方法の選択 中間拡張レ ベルを実装す る には、 ラ イ ブ ラ リ エ ク ス テ ン ダ を使用す る 方法 と 、 手作業で中間拡張レ ベルのオブ ジ ェ ク ト を作成す る 方法 と が あ り ま す。 ラ イ ブ ラ リ エ ク ス テ ン ダの使用 中間拡張レ ベルを作成す る には、 ラ イ ブ ラ リ エ ク ス テ ン ダ を使 う のが 最善です。 244 ページの 「 ラ イ ブ ラ リ エ ク ス テ ン ダ」 を参照 し て く だ さ い。 ❖ 開発者の作業 24 手作業で追加の拡張レ ベルを作成 し 、 継承階層構造を再定義す る方法 1 所要の中間拡張レ ベルのオブ ジ ェ ク ト に PBL を作成 し ま す。 2 PFC 先祖レ ベルのオブ ジ ェ ク ト を継承 し て中間拡張レベルのオブ ジ ェ ク ト を定義 し 、 イ ン ス タ ン ス 変数、 関数、 お よ び イ ベン ト を、 必要で あ れば定義 し ま す。 中間拡張レ ベルのオブ ジ ェ ク ト を 新 し く 定義す る こ と も で き ま す。 3 必要で あれば、拡張レ ベルのオブ ジ ェ ク ト に イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び関数を定義 し ま す。 4 PFC 先祖レ ベルか ら 継承す る のではな く 、 新 し く 定義 さ れた拡張 レベルか ら 継承 し て PFC 拡張レ ベルのオブ ジ ェ ク ト を作成 し 、 継 承階層構造を再定義 し ま す。 こ の方法に よ り 、 開発者が完全に PFC 拡張レベル を制御す る こ と がで き ま す。 すなわち、 開発者は以下の こ と が行え ま す。 • 拡張レベルのユーザ オブ ジ ェ ク ト を修正 し 、 使用す る • w_master を含む拡張レベルの ウ ィ ン ド ウ を修正 し 、 そ こ か ら 継承 する • 拡張 レ ベルの メ ニ ュ ーを修正 し 、 そ こ か ら 継承す る (オプ シ ョ ン と し て、 拡張レベルの メ ニ ュ ーを直接使用す る ) PowerBuilder 第2章 ク ラ ス ラ イ ブ ラ リ のデザ イ ン た と えば、 開発者は アプ リ ケーシ ョ ン固有の機能を w_sheet に追加 し 、 それをすべてのシー ト ウ ィ ン ド ウ の先祖 と し て使用で き ま す。 既存の PFC 拡張レ ベルを使用する方法 こ の方法を用いて企業ま たは部門内で PFC 拡張レベルに修正を加え ま す。 こ の場合、 開発者は拡張レベル を使用 し ま せん。 利点 欠点 こ の方法には、 以下の 2 つの利点があ り ま す。 • 開発者は、 開発の フ ェ ーズ を通 し て共通な PBL の集合を共有で き る • ユーザは、 複数の PFC アプ リ ケーシ ョ ン を展開す る 際に共通な PBD の集ま り を共有で き る こ の方法には、 以下の よ う な欠点 も あ り ま す。 • 開発者は、 拡張レ ベルのオブ ジ ェ ク ト を修正で き な い。 オブ ジ ェ ク ト 管理者が新 し いバージ ョ ン を作 る と 、 変更点が消え て し ま う • 拡張レベルが 1 つ し か ない。 全社、 部門内、 ク ラ ス ラ イ ブ ラ リ の 拡張は、 いずれ も 同一レベルに存在 し な ければな ら ない PFC Library ユーザーズ ガ イ ド 25 新規サービ スの定義 • 必要な作業 開発者は、 拡張レ ベルのオブ ジ ェ ク ト を拡張で き ない。 PFC が参 照変数 を宣言す る 際、 PFC 拡張 レベルのオブ ジ ェ ク ト のデー タ 型 を使用す る ので、 子孫オブジ ェ ク ト への変更が自動的に PFC 全体 に使用可能にな ら ない 中間拡張レ ベルのオブ ジ ェ ク ト を通 じ て PFC を追加、 修正、 拡張 し ま す。 新 し いサービ ス を作成す る には、 拡張 レベルにオブ ジ ェ ク ト を追加す れば よ く 、 子孫オブジ ェ ク ト へ追加す る 必要は あ り ま せん。 開発者の作業 こ の拡張方法を用い る 際、 開発者は PFC を使用 し ま すが、 PFC 拡張レ ベルのオブ ジ ェ ク ト は決 し て修正 し ないで く だ さ い。 開発者に よ る 拡張は継承を通 じ て行 う 必要があ り ま す。 た と えば、 開 発者は、ア プ リ ケーシ ョ ン固有の機能を ア プ リ ケーシ ョ ン シー ト ウ ィ ン ド ウ に追加 し 、 それを先祖 と し てすべてのシー ト ウ ィ ン ド ウ に使用 し ま す。 新規サービ スの定義 要件を調査 し た結果、 新 し いサービ ス を定義す る 必要が生 じ る こ と が あ り ま す。 こ れには、 デー タ ウ ィ ン ド ウ 、 デー タ ス ト ア、 ウ ィ ン ド ウ な ど の メ イ ン オ ブ ジ ェ ク ト を 使 用 す る 従 属 サ ー ビ ス (associative service) を定義す る 場合 と 、 ア プ リ ケーシ ョ ン の ど こ でで も 使用で き る 独立サービ ス (aggregate service) を定義す る 場合 と があ り ま す。 26 PowerBuilder 第2章 ク ラ ス ラ イ ブ ラ リ のデザ イ ン 定義する場所 既存の PFC 拡張レベルを使用す る 場合には、 1 つ以上の別個の PBL に 新 し いサービ ス を定義 し て く だ さ い。 拡張レ ベル を作成す る 場合には、 中間拡張 レベル (前の例では全社レ ベル) の先祖オブ ジ ェ ク ト を定義 し 、 さ ら に PFC 拡張レベルの拡張レ ベル オブジ ェ ク ト を定義 し て く だ さ い。 ❖ 従属サー ビ ス を定義す る には 1 所要の イ ン ス タ ン ス 変数、 関数、 お よ び イ ベン ト を持つカ ス タ ム ク ラ ス ユーザ オブジ ェ ク ト を作成 し ま す。 た と えば、 自動行挿入 を行 う ために、 デー タ ウ ィ ン ド ウ サービ ス を定義 し ま す。 こ の場 合、 オブ ジ ェ ク ト は、 n_cst_dwsrv か ら 継承す る 必要があ り ま す。 2 こ のユーザ オブ ジ ェ ク ト を中間拡張レベルに保存 し ま す。 た と え ば、 全 社 オ ブ ジ ェ ク ト に 対 す る 中 間 レ ベ ル が あ る 場 合 に は、 corp_n_cst_dwsrv_autorowinsert と 名付け る こ と がで き ま す。 3 拡張レベルに子孫ユーザ オブ ジ ェ ク ト を作成 し ま す。 た と えば、 n_cst_dwsrv_autorowinsert と し ま す。 こ のオブジ ェ ク ト には コ ー ド を追加 し ないで く だ さ い。 4 中間拡張レベルの メ イ ン オブ ジ ェ ク ト に イ ン ス タ ン ス 変数を追加 し ま す。 こ の変数には、 拡張 レ ベルのオブ ジ ェ ク ト のデー タ 型 を 使用す る 必要があ り ま す。 た と えば、 corp_u_dw を更新す る には、 デー タ 型 n_cst_dwsrv_autorowinsert の inv_autorowinsert イ ン ス タ ン ス 変数を追加 し ま す。 5 中間拡張レベルの メ イ ン オブ ジ ェ ク ト に関数を追加 し ま す。 こ の 関数は、渡 さ れた Boolean 型引数の指定に従っ て、ユーザ オブジ ェ ク ト の イ ン ス タ ン ス を作成す る か廃棄す る か し ま す。た と えば、以 下に示す よ う に of_SetAutoRowInsert で、 n_cst_dwsvr_autorowinsert の イ ン ス タ ン ス を作成ま たは破棄 し ま す。 関数名 : of_SetAutoRowInsert 引数 : ab_switch (boolean 値渡 し ) 戻 り 値 : 1 = 成功 0 = すでに イ ン ス タ ン ス化済み -1 = 引数が NULL IsNull(ab_switch) THEN Return -1 END IF IF ab_switch THEN IF IsNull(inv_autorowinsert) OR & NOT IsValid(inv_autorowinsert) THEN // // // // // IF PFC Library ユーザーズ ガ イ ド 27 新規サービ スの定義 inv_autorowinsert = CREATE n_cst_autorowinsert // of_SetRequestor = 先祖で定義する inv_autorowinsert.of_SetRequestor(this) Return 1 END IF ELSE IF IsValid(inv_autorowinsert) THEN DESTROY inv_autorowinsert Return 1 END IF END IF Return 0 6 中間拡張レ ベル内の メ イ ン オブジ ェ ク ト の Destructor イ ベン ト に コ ー ド を追加 し ま す。 こ の コ ー ド は、 ユーザ オブジ ェ ク ト を破棄 し ま す。 this.of_SetAutoRowInsert(FALSE) 7 必要で あれば、 メ イ ン オブジ ェ ク ト の イ ベン ト に コ ー ド を追加 し ま す。 使用可能な場合、 こ の コ ー ド でサービ ス オブジ ェ ク ト の イ ベ ン ト を 呼 び 出 し ま す。 た と え ば、 自 動 行 挿 入 サ ー ビ ス は、 RowFocusChanging イ ベン ト に以下の コ ー ド を追加す る こ と があ り ま す。 IF IsValid(inv_autorowinsert) THEN inv_autorowinsert.Event corp_FocusChanging & (currentrow, newrow) END IF ❖ 28 独立サー ビ ス を定義す る には 1 所要の イ ン ス タ ン ス 変数、 関数、 お よ び イ ベン ト を持つカ ス タ ム ク ラ ス ユ ー ザ オ ブ ジ ェ ク ト を 作 成 し ま す。 必 要 で あ れ ば、 AutoInstantiate プ ロ パテ ィ を こ のオブジ ェ ク ト に割 り 当て ま す。 2 こ のユーザ オブジ ェ ク ト を中間拡張レベルに保存 し ま す。 3 拡張レベルに子孫ユーザ オブ ジ ェ ク ト を作成 し ま す。 こ のオブ ジ ェ ク ト には コ ー ド を追加 し ないで く だ さ い。 4 必要で あ れば、 イ ベン ト 内の こ のオブ ジ ェ ク ト と 関数 ス ク リ プ ト を使用 し ま す。 こ のオ ブ ジ ェ ク ト に対す る 参照変数には拡張 レ ベ ルのオブ ジ ェ ク ト のデー タ 型を使用 し ま す。 PowerBuilder 第 3 部 PFC プ ロ グ ラ ミ ン グ 第 3 部では、 PFC お よ び PFC サービ ス を使用 し て プ ロ グ ラ ムを作成する方法につい て説明 し ま す。 第 3 部は、 ア プ リ ケーシ ョ ン開発者を対象 と し ていま す。 第 3 章 PFC プ ロ グ ラ ミ ン グの基礎 この章につい て こ こ では、PFC プ ロ グ ラ ミ ン グ の基本的な規則 と 、PFC アプ リ ケー シ ョ ン の作 り 方について説明 し ま す。 想定事項 こ れ以降の章では、 開発者が PFC 拡張レベルのオブ ジ ェ ク ト を修 正 し 拡張す る ために、 中間拡張レ ベルの方法を用い る こ と を想定 し て説明を進め ま す。 内容 アプ リ ケーシ ョ ン マネージ ャ の設定 トピック ページ 31 アプ リ ケーシ ョ ン の構築 35 属性オブジ ェ ク ト の使い方 41 PFC 定数の使い方 44 メ ッ セージ ルー タ 45 PFC に よ る ト ラ ン ザ ク シ ョ ン管理 47 先祖の関数 と イ ベ ン ト の呼び出 し 49 アプ リ ケーシ ョ ンへのオ ン ラ イ ン ヘルプの追加 50 PFC ア ッ プ グ レ ー ド の イ ン ス ト ール 51 ア プ リ ケーシ ョ ン マネージ ャ の設定 PFC を使用 し て ア プ リ ケーシ ョ ン を作成す る ための第一歩は、 ア プ リ ケーシ ョ ン マネージ ャ であ る n_cst_appmanager を構成 し て使 用可能にす る こ と です。 PFC を利用すれば、 こ れ ま で ア プ リ ケー シ ョ ン オブ ジ ェ ク ト に記述 し ていた ロ ジ ッ ク を アプ リ ケーシ ョ ン マネージ ャ の中で コ ーデ ィ ン グで き ま す。 ア プ リ ケーシ ョ ン マネージ ャ には、 イ ン ス タ ン ス 変数 と 関数 も あ り 、フ レーム ウ ィ ン ド ウ 、アプ リ ケーシ ョ ンお よ びユーザ INI フ ァ イ ル、 レ ジ ス ト リ キー、 ア プ リ ケーシ ョ ン ヘルプ フ ァ イ ルな ど の ア プ リ ケーシ ョ ン属性を保持す る こ と がで き ま す。 PFC Library ユーザーズ ガ イ ド 31 ア プ リ ケーシ ョ ン マネージ ャ の設定 ❖ ア プ リ ケーシ ョ ン マネージ ャ を セ ッ ト ア ッ プす る には 1 以下の PFC PBL を含むアプ リ ケーシ ョ ン タ ーゲ ッ ト ラ イ ブ ラ リ リ ス ト を定義 し ま す。 PFCAPSRV.PBL PFCDWSRV.PBL PFCMAIN.PBL PFCUTIL.PBL PFCWNSRV.PBL PFEAPSRV.PBL PFEDWSRV.PBL PFEMAIN.PBL PFEUTIL.PBL PFEWNSRV.PBL PFCOLD.PBL ア プ リ ケーシ ョ ン が、 PFC の以前のバージ ョ ン か ら の旧式の PFC オ ブ ジ ェ ク ト を 使用 し て い る 場合 に は、 ラ イ ブ ラ リ リ ス ト に PFCOLD.PBL を含めて く だ さ い。 2 アプリ ケーショ ン ペイ ン タ から 、変数ビュ ーを表示し 、n_cst_appmanager 型のグロ ーバル変数である gnv_app を宣言し ま す。 n_cst_appmanager gnv_app 変数名は gnv_app でなければな り ません PFC のオブ ジ ェ ク ト 、 関数、 お よ び イ ベン ト では、 アプリ ケーショ ン マネージャ を n_cst_appmanager 型の gnv_app( ま たは、appmanager の子孫) と 定義す る 必要があ り ま す。 3 ペ イ ン タ の ス ク リ プ ト ビ ュ ーで、 ア プ リ ケーシ ョ ン の Open イ ベ ン ト に PowerScript コ ー ド を追加 し 、 n_cst_appmanager を作成 し て pfc_Open イ ベン ト を呼び出 し ま す。 gnv_app = CREATE n_cst_appmanager gnv_app.Event pfc_Open(commandline) 4 ア プ リ ケーシ ョ ン の Close イ ベン ト に コ ー ド を追加 し 、 pfc_Close イ ベン ト を呼び出 し て n_cst_appmanager を破棄 し ま す。 gnv_app.Event pfc_Close( ) DESTROY gnv_app 5 ア プ リ ケーシ ョ ン の SystemError イ ベン ト に コ ー ド を追加 し て、 pfc_SystemError イ ベン ト を呼び出 し ま す。 gnv_app.Event pfc_SystemError( ) 32 PowerBuilder 第3章 PFC プ ロ グ ラ ミ ン グの基礎 6 ア プ リ ケーシ ョ ン ペ イ ン タ を閉 じ て、 変更を保存 し ま す。 7 ユーザ オブ ジ ェ ク ト ペ イ ン タ を表示 し PFEAPSRV.PBL に あ る n_cst_appmanager を開 き ま す (必要であれば、 n_cst_appmanager の ア プ リ ケーシ ョ ン固有の子孫を使用 し ま す)。 8 バージ ョ ンや会社、INI フ ァ イ ルな ど の イ ン ス タ ン ス変数を初期化 す る ために、 Constructor イ ベン ト で n_cst_appmanager を呼び出 し ま す。 9 必要なアプリ ケーショ ン サービ ス を 使用可能にする ために、pfc_Open イ ベン ト で n_cst_appmanager 関数を呼び出 し ま す。 使用可能にするサービ ス アプ リ ケーシ ョ ン環境設定 呼び出す関数 of_SetAppPreference デー タ ウ ィ ン ド ウ キ ャ ッ シュ of_SetDWCache エ ラー of_SetError 最新使用オブ ジ ェ ク ト of_SetMRU ト ラ ン ザ ク シ ョ ン登録 of_SetTrRegistration セキ ュ リ テ ィ of_SetSecurity デバ ッ グ of_SetDebug 10 pfc_Open ユーザ イ ベン ト に コ ー ド を追加 し て、 ア プ リ ケーシ ョ ン の初期ウ ィ ン ド ウ (通常は フ レーム ウ ィ ン ド ウ ) を開 き ま す。 必 要で あれば、 ス プ ラ シ ュ 画面を表示す る of_Splash 関数に対す る 呼 び出 し も コ ーデ ィ ン グ し ま す。 11 (オプシ ョ ン) pfc_PreAbout、 pfc_PreLogonDlg、 pfc_PreSplash イ ベ ン ト に コ ー ド を追加 し て、 [バージ ョ ン情報] ボ ッ ク ス 、 ロ グ イ ン ダ イ ア ロ グ ボ ッ ク ス 、 ス プ ラ シ ュ 画面の構成要素を カ ス タ マ イ ズ し ま す。 12 (オ プ シ ョ ン) pfc_Idle、 pfc_ConnectionBegin、 pfc_Connection_End イ ベン ト に コ ー ド を 追加 し ま す。 こ の場合の手順は、 次の と お り です。 • ア プ リ ケーシ ョ ンの Idle イ ベン ト か ら pfc_Idle を呼び出す • ア プ リ ケーシ ョ ンの ConnectionBegin イ ベン ト か ら pfc_ConnectionBegin を呼び出す • ア プ リ ケーシ ョ ンの ConnectionEnd イ ベン ト か ら pfc_ConnectionEnd を呼び出す 13 n_cst_appmanager を保存 し ま す。 PFC Library ユーザーズ ガ イ ド 33 ア プ リ ケーシ ョ ン マネージ ャ の設定 ❖ ス プ ラ ッ シ ュ 画面を表示す る には • pfc_Open イ ベン ト の初期 ウ ィ ン ド ウ を開 く 直前に of_Splash 関数 を呼び出 し ま す。 this.of_Splash(1) Open(w_tut_frame) ❖ ロ グ イ ン画面を表示す る には 1 フ レ ーム ウ ィ ン ド ウ の Open イ ベン ト よ り of_LogonDlg を呼び出 し ま す。 Integer li_return li_return = gnv_app.of_LogonDlg( ) IF li_return = 1 THEN this.SetMicroHelp(" ロ グ イ ン に成功 し ま し た ") ELSE MessageBox(" ロ グ イ ン ", " ロ グ イ ン に失敗 し ま し た ") Close(this) END IF of_LogonDlg は、 w_logon ダ イ ア ロ グ ボ ッ ク ス を表示 し ま す。 こ の ダ イ ア ロ グ ボ ッ ク ス は、 ユーザ ID と パ ス ワ ー ド の入力を要求 し 、 ユーザが [OK] を ク リ ッ ク す る と n_cst_appmanager pfc_Logon イ ベ ン ト を呼び出 し ま す。 あ る いは、 フ レ ーム ウ ィ ン ド ウ を 開いた直後に n_cst_appmanager pfc_Open イ ベン ト よ り of_LogonDlg 関数を呼び出す こ と も で き ま す。 of_Splash を呼び出 し た直後に of_LogonDlg を呼び出 さ ないで く だ さ い。 2 n_cst_appmanager の pfc_Logon イ ベン ト に ス ク リ プ ト を追加 し て、 ユ ーザ を デー タ ベー ス に ロ グ イ ン さ せ ま す。 以下の例で は、 INI フ ァ イ ルがユーザ ID と パ ス ワ ー ド を 除 く すべての情報 を持 っ て お り 、 SQLCA を n_tr、 すなわち PFC のカ ス タ マ イ ズ さ れた ト ラ ン ザ ク シ ョ ン オ ブ ジ ェ ク ト に関連付け て い る も の と 想定 し て い ま す。 Integer li_return String ls_inifile, ls_userid, ls_password ls_inifile = gnv_app.of_GetAppIniFile() IF SQLCA.of_Init(ls_inifile,"Database") = -1 THEN Return -1 END IF // as_userid お よ び as_password は、 // pfc_Logon イ ベ ン ト に対する引数です 34 PowerBuilder 第3章 PFC プ ロ グ ラ ミ ン グの基礎 SQLCA.of_SetUser(as_userid, as_password) IF SQLCA.of_Connect() = -1 THEN Return -1 ELSE gnv_app.of_SetUserID(as_userid) Return 1 END IF ア プ リ ケーシ ョ ンの構築 MDI ア プ リ ケーシ ョ ンの構築 PFC を使用 し て MDI ア プ リ ケーシ ョ ン を構築す る には、フ レーム ウ ィ ン ド ウ と シ ー ト ウ ィ ン ド ウ の 先 祖 と し て w_frame ウ ィ ン ド ウ と w_sheet ウ ィ ン ド ウ を使用 し ま す。ア プ リ ケーシ ョ ン のシー ト のすべて に対 し て イ ベン ト 、 関数、 お よ び イ ン ス タ ン ス 変数を 定義す る には、 それ ら を w_sheet に追加 し ま す。 ま た、 先祖 シ ー ト メ ニ ュ ー ( メ ニ ュ ーの作成方針に依存 し ま すが、 m_master、 m_frame、 ま たは ア プ リ ケーシ ョ ン固有のシー ト メ ニ ュ ー の先祖な ど) に、 すべての ウ ィ ン ド ウ に対す る メ ニ ュ ーを定義 し てお か なければな り ま せん。 PFC において メ ニ ュ ーを実装す る 方法については、 217 ページの 「PFC での メ ニ ュ ーの使い方」 を参照 し て く だ さ い。 ❖ PFC を使用 し て MDI ア プ リ ケーシ ョ ン を構築する には 1 ア プ リ ケーシ ョ ン固有の修正を w_frame に追加 し ま す。 必要で あ れば、 w_frame か ら 継承 し て フ レーム ウ ィ ン ド ウ を作成 し ま す。 2 (オプシ ョ ン) w_sheet に、 先祖の イ ン ス タ ン ス 変数、 関数、 ユー ザ イ ベン ト を追加 し ま す。 3 w_sheet か ら 継承す る シー ト ウ ィ ン ド ウ を作成 し ま す。 4 メ ニ ュ ーの作成方針に従っ て、 フ レーム メ ニ ュ ーを作成 し ま す。 必要であれば、 m_menu、 PFC の フ レ ーム メ ニ ュ ーを使い ま す。 5 フ レーム ウ ィ ン ド ウ を、 カ ス タ マ イ ズ し た フ レーム メ ニ ュ ー と 関 連付け ま す。 6 メ ニ ュ ーの作成方針に従っ て、 シー ト メ ニ ュ ーを作成 し ま す。 7 シー ト ウ ィ ン ド ウ を シー ト メ ニ ュ ー と 関連付け ま す。 8 n_cst_appmanager の pfc_Open ユーザ イ ベン ト で フ レーム ウ ィ ン ド ウ を開 き ま す。 PFC Library ユーザーズ ガ イ ド 35 ア プ リ ケーシ ョ ンの構築 9 ❖ (オプシ ョ ン) 必要な フ レーム ウ ィ ン ド ウ サービ ス を使用可能に し ま す。 • w_frame の of_SetStatusBar 関数を呼び出 し て、ス テー タ ス バー サービ ス を使用可能に し ま す。 • w_frame の of_SetSheetManager 関数を呼び出 し て、 シー ト マ ネージ ャ サービ ス を使用可能に し ま す。 MDI ア プ リ ケーシ ョ ンのシー ト ウ ィ ン ド ウ を開 く には 1 シー ト ウ ィ ン ド ウ を開 く メ ニ ュ ー項目の Clicked イ ベン ト に コ ー ド を追加 し ま す。 こ の コ ー ド で Message.StringParm にシー ト ウ ィ ン ド ウ 名を割 り 当て、of_SendMessage 関数を呼び出 し て、pfc_Open イ ベン ト 名を渡す必要があ り ま す。 n_cst_menu lnv_menu Message.StringParm = "w_products" lnv_menu.of_SendMessage(this, "pfc_Open") 2 w_frame の pfc_Open イ ベン ト に コ ー ド を追加 し ま す。 こ の イ ベン ト は、 Message.StringParm にア ク セ ス し 、 指定 さ れたシー ト ウ ィ ン ド ウ を開 き ま す。 String w_sheet ls_sheet lw_sheet ls_sheet = Message.StringParm OpenSheet(lw_sheet, ls_sheet, this, 0, Layered!) PFC を使用 し て SDI ア プ リ ケーシ ョ ン を構築す る には、 メ イ ン ウ ィ ン ド ウ の先祖 と し て w_main ウ ィ ン ド ウ を使用 し ま す。 イ ベン ト 、 関数、 お よ び イ ン ス タ ン ス 変数を実装 し てすべての ウ ィ ン ド ウ で利用で き る よ う にす る には、 それ ら を w_main に追加 し ま す。 SDI ア プ リ ケーシ ョ ン の構築 ウ ィ ン ド ウ で メ ニ ュ ーを使用す る 場合には、 各 ウ ィ ン ド ウ に対 し て メ ニ ュ ーを定義 し なければな り ま せん。 PFC において メ ニ ュ ーを実装す る 方法については、 217 ページの 「PFC での メ ニ ュ ーの使い方」 を参照 し て く だ さ い。 ❖ 36 PFC を使用 し て SDI ア プ リ ケーシ ョ ン を構築する には 1 w_main か ら 継承 し て メ イ ン ウ ィ ン ド ウ を作成 し 、 必要で あれば、 w_main を直接修正 し ま す。 2 メ ニ ュ ーの作成方針に従っ て、 メ イ ン メ ニ ュ ーを作成 し ま す。 3 必要で あれば、 追加の ウ ィ ン ド ウ と メ ニ ュ ーを作成 し ま す。 PowerBuilder 第3章 4 PFC プ ロ グ ラ ミ ン グの基礎 n_cst_appmanager の pfc_Open ユーザ イ ベン ト で メ イ ン ウ ィ ン ド ウ を開 き ま す。 PFC 関数のほ と ん ど は、 オブジ ェ ク ト 関数です。 すなわち、 PFC 関数 は PowerBuilder オブ ジ ェ ク ト ( ウ ィ ン ド ウ 、 メ ニ ュ ー、 ま たはユーザ オブジ ェ ク ト ) の中で定義 さ れ ま す。 関数を PowerBuilder オブジ ェ ク ト の中にカ プセル化す る こ と に よ り 、 そのオブ ジ ェ ク ト に、 ど の関数 が適用 さ れ る かが直ちにわか り ま す。 PFC 関数を使用する プログラ ミ ング PFC は、 イ ン ス タ ン ス 変数へのア ク セ ス を制御す る のに、 以下の よ う に Set/Get/Is 命名規則を使用 し ま す。 • イ ン ス タ ン ス 変数の値を セ ッ ト す る には、 of_Set 関数 • 非ブール イ ン ス タ ン ス 変数にア ク セ ス す る には、 of_Get 関数 • ブール イ ン ス タ ン ス 変数の状態を調べ る には、 of_Is 関数 イ ン ス タ ン ス変数へア ク セ スす るほかの方法 PFC では、あ る 種の イ ン ス タ ン ス 変数をパブ リ ッ ク と 宣言す る こ と で、 ユーザが直接ア ク セ ス で き る よ う にす る こ と が可能です。 ま た、 別の 変数は、 内部使用に限定 し 、 関数呼び出 し では ア ク セ ス で き ない よ う にす る こ と も で き ま す。 Set/Get/Is の規則のほかに PFC では、サービ ス の影響を受け る エ ン テ ィ テ ィ を定義す る 場合に Register/Unregister の規則を使用 し ま す。 た と え ば、 ド ロ ッ プダ ウ ン計算機能を使用す る デー タ ウ ィ ン ド ウ カ ラ ム を定 義す る ために、 u_calculator オブジ ェ ク ト の of_Register 関数を呼び出す こ と がで き ま す。 PFC では、 内部使用のために設計 さ れた関数への ア ク セ ス を 制御す る 目的で、 ア ク セ ス レ ベル (パブ リ ッ ク 、 プ ラ イ ベー ト 、 プ ロ テ ク ト ) を使用 し てい ま す。 オ ブ ジ ェ ク ト の修飾 こ れ ら の関数を オブ ジ ェ ク ト の外部か ら 呼び出す と き には、 関数名を 修飾す る のに ド ッ ト 表記を用い ま す。 オブ ジ ェ ク ト を作成す る ために 使用 し た参照変数を、 関数名に追加 し て修飾 し ま す (場合に よ っ ては、 関数名を実際のオブ ジ ェ ク ト 名で修飾す る こ と も あ り ま す)。 ❖ PFC オブ ジ ェ ク ト 関数を呼び出すには 1 PFC Library ユーザーズ ガ イ ド オブジ ェ ク ト が作成済みであ る こ と を確認 し ま す。 37 ア プ リ ケーシ ョ ンの構築 ウ ィ ン ド ウ を 開い た と き には、 PowerBuilder に よ っ て、 ウ ィ ン ド ウ 、 メ ニ ュ ー、 お よ びビ ジ ュ アル ユーザ オブ ジ ェ ク ト が作成 さ れ て い ま す。 大部分の ク ラ ス ユーザ オブジ ェ ク ト は、 of_Set サービ ス 名 関数 (u_dw、 n_cst_appmanager、 w_master、 ま た は、 u_dw で 定義 さ れた関数) を使っ て作成で き ま す。 た と え ば、 次の u_dw オ ブ ジ ェ ク ト の関数は、 ソ ー ト サ ー ビ ス (n_cst_dwsrv_sort ユーザ オブ ジ ェ ク ト ) を作成 し 、 ソ ー ト サービ ス に対す る 参照を u_dw の inv_sort イ ン ス タ ン ス 変数に保存 し ま す。 こ れ ら の関数はデー タ ウ ィ ン ド ウ の Constructor イ ベ ン ト で コ ーデ ィ ン グす る のが普通です。 this.of_SetSort(TRUE) 自動 イ ン ス タ ン ス化オブ ジ ェ ク ト あ る 種のオブジ ェ ク ト は、PowerBuilder の自動 イ ン ス タ ン ス 作成機 能を使用 し ま す。 こ れ ら のオブ ジ ェ ク ト には Set 関数が あ り ま せ ん。 変数 と し て宣言 し ておけば、 PowerBuilder が自動的に こ れ ら の オブ ジ ェ ク ト を イ ン ス タ ン ス 化 し ま す。 2 必要で あ れば、 ア プ リ ケーシ ョ ン か ら オ ブ ジ ェ ク ト 関数を呼び出 し ま す。 次の例では、 ユーザが [表示| ソ ー ト の指定] を メ ニ ュ ー バーか ら 選択す る と 、 ソ ー ト サービ ス がデー タ ウ ィ ン ド ウ のカ ラ ム ヘ ッ ダ名を使用 し て、 表示値を ソ ー ト し 、 ポ イ ン ト ア ン ド ク リ ッ ク 方 式の ソ ー ト 機能を実装 し 、 ド ラ ッ グ ア ン ド ド ロ ッ プ形式のダ イ ア ロ グ ボ ッ ク ス を表示 し ま す。 this.inv_sort.of_SetColumnNameSource & (this.inv_sort.HEADER) this.inv_sort.of_SetUseDisplay(TRUE) this.inv_sort.of_SetColumnHeader(TRUE) this.inv_sort.of_SetStyle & (this.inv_sort.DRAGDROP) PFC では、 豊富かつ柔軟性に富んだア プ リ ケー シ ョ ン プ ロ グ ラ ミ ン グ イ ン タ フ ェ ース を提供す る ために、関数のオー バー ロ ー ド と い う 技法が用い ら れてい ま す。関数のオーバー ロ ー ド は、 以下の 2 つの方法で行われ ま す。 関数のオーバーロ ー ド • 38 デー タ 型 と 順序が異 な る 引数 を 複数の関数に持た せ る よ う に し ま す。 こ れに よ り PFC が関数の引数で多種類のデー タ 型 を扱 う こ と がで き ま す。 多重構文 PowerBuilder 第3章 • PFC プ ロ グ ラ ミ ン グの基礎 複数の関数において引数のデー タ 型 と 順序 を同 じ に し て、 よ り 多 く の引数を使 う よ う に し ま す。 こ れに よ り PFC は、 共通に使われ る 引数に対す る デフ ォ ル ト を提供で き ま す。 オ プ シ ョ ンの引数 内部使用専用のオーバーロ ー ド 関数 PFC には、 一連のパブ リ ッ ク オーバー ロ ー ド 関数のほかに、 プ ロ テ ク ト バージ ョ ンが多数あ り ま す。 プ ロ テ ク ト バージ ョ ンは、 ほかのバー ジ ョ ン か ら 、 内部的に呼び出 さ れ る も のです。 た と えば、 4 つのパブ リ ッ ク バー ジ ョ ン お よ び 1 つの プ ロ テ ク ト バー ジ ョ ン を 備え た n_cst_dwsrv_report の of_AddLine 関数では、 プ ロ テ ク ト バージ ョ ンは ほかの 4 つのバージ ョ ン か ら 呼び出 さ れ ま す。 こ の よ う なプ ロ テ ク ト バージ ョ ン を ユーザが呼び出す こ と が可能な場合 も あ り ま すが、 こ れ ら は本来、 内部使用に限定 さ れてお り 、 変更 さ れ る 可能性があ り ま す。 PFC イ ベ ン ト を使用 する プ ロ グ ラ ミ ン グ PFC に は、PFC サービ ス を実装す る 組み込み イ ベン ト と ユーザ イ ベン ト があ り ま す。 さ ら に、 未記述のユーザ イ ベン ト も 含んでお り 、 ア プ リ ケーシ ョ ン固有の タ ス ク を実行す る ため固有の コ ー ド を ユーザが追 加で き る よ う にな っ てい ま す。 すべての イ ベン ト は、 パブ リ ッ ク ア ク セ ス が可能で あ り 、 呼び出 し に は ド ッ ト 表記を使用 し ま す。 組み込み イ ベ ン ト と ユーザ イ ベ ン ト の使 い方 PFC は、 広範囲に渡 る 組み込み機能を持っ てい ま す。 PFC サービ ス を 使用可能にす る と 、 PFC オブ ジ ェ ク ト は使用可能にな っ たサービ ス を 検出 し て、 組み込み イ ベン ト に定義 さ れた処理を実行 し ま す。 組み込み イ ベン ト の例 と し ては、 u_dw Clicked イ ベン ト が あ り 、 こ れ は、 所要のデー タ ウ ィ ン ド ウ サー ビ ス 関数が使用可能に な っ て いれ ば、 それ を呼び出 し ま す。 組み込み イ ベン ト は、 拡張で き ま すが、 上書 き し ないで く だ さ い。 先祖 イ ベン ト か ら の戻 り 値を ア ク セ ス す る 方法についての詳細は、 49 ページの 「先祖の関数 と イ ベン ト の呼び出 し 」 を参照 し て く だ さ い。 未記述のユーザ イ ベ ン ト の使い方 PFC には、アプ リ ケーシ ョ ン固有の コ ー ド を書 き 込め る 、未記述のユー ザ イ ベン ト があ り ま す。 こ れ ら の イ ベン ト の多 く は メ ッ セージ ルー タ を使用 し て メ ニ ュ ー項目に よ り 起動 さ れ ま すが、 ア プ リ ケーシ ョ ン固 有の コ ー ド に よ っ て起動 さ れ る も の も あ り ま す。 未記述のユーザ イ ベ ン ト の例 と し ては、 u_dw の pfc_Retrieve イ ベン ト があ り ま す。 こ こ に行を検索す る ロ ジ ッ ク を書 き 込む こ と がで き ま す。 Return this.Retrieve() PFC Library ユーザーズ ガ イ ド 39 ア プ リ ケーシ ョ ンの構築 PFC ユーザ イ ベン ト の詳細については、 『PFC オブ ジ ェ ク ト リ フ ァ レ ン ス』 マニ ュ アル を参照 し て く だ さ い。 PFC に よ る イ ベ ン ト の使い方 サービ ス の コ ン テ キ ス ト で イ ベン ト を使用す る 場合には、 PFC は次の よ う に動作 し ま す。 1 リ ク エ ス タ オブジ ェ ク ト の イ ベン ト 内で、 サービ ス オブ ジ ェ ク ト の対応す る イ ベン ト を呼び出 し 、必要に応 じ て引数を渡 し ま す。た と えば、u_dw の Clicked イ ベン ト は、n_cst_dwsrv_sort の pfc_Clicked イ ベン ト を呼び出 し 、 x 位置、 y 位置、 行お よ び DW オブ ジ ェ ク ト (すなわち、 デー タ ウ ィ ン ド ウ の Clicked イ ベン ト への引数) を渡 し ま す。 2 サービ ス オブジ ェ ク ト の イ ベン ト は、 ほかの所要のオブ ジ ェ ク ト 関数 を 呼び出 し て 要求 さ れ た 動作内容 を 行 い ま す。 た と え ば、 n_cstdwsrv_sort の pfc_Clicked イ ベ ン ト は n_cst_dwsrv_sort 関数の 呼び出 し を含む各種の処理を実行 し ま す。 イ ベ ン ト を使 う PFC オブ ジ ェ ク ト 関数は通常の場合直接使用で き ま すが、 対応す る イ ベン ト を使 う ほ う が便利です。 イ ベン ト にはエ ラ ー検査ルーチ ン が組 み込ま れてい る か ら です。 プ レ イ ベン ト プ ロセ スの使い方 PFC には、 多数のプ レ イ ベン ト プ ロ セ ス があ り ま す。 こ れに コ ー ド を 書 き 加えれば、 関連す る イ ベン ト の機能を カ ス タ マ イ ズない し 拡張で き ま す。 た と えば、 pfc_PreRMBMenu イ ベン ト に コ ー ド を書 き 加え て ポ ッ プア ッ プ メ ニ ュ ーに現れ る 項目を制御で き ま す。 プ レ イ ベン ト 処 理機能を備え た イ ベン ト には、 ほかに以下の よ う な も のがあ り ま す。 pfc_PreAbout pfc_PreClose pfc_PreLogonDlg pfc_PreOpen pfc_PrePageSetupDlg pfc_PrePrintDlg pfc_PreRestoreRow pfc_PreSplash pfc_PreToolbar pfc_PreUpdate 40 PowerBuilder 第3章 PFC プ ロ グ ラ ミ ン グの基礎 通常、 こ れ ら の イ ベ ン ト は、 自動 イ ン ス タ ン ス 化 さ れた ユーザ オ ブ ジ ェ ク ト に参照渡 し さ れ ま す。 こ のユーザ オブ ジ ェ ク ト には、 関連す る イ ベン ト の処理を制御す る ためのプ ロ パテ ィ が入っ てい ま す。 処理 を修正 ま たは拡張す る には、 ユーザ オブ ジ ェ ク ト のプ ロ パテ ィ を修正 すれば よ いのです。 場合に よ っ ては、 追加のオブジ ェ ク ト を修正す る こ と が必要にな り ま す。 た と えば、 [バージ ョ ン情報] ボ ッ ク ス におけ る 追加の フ ィ ール ド の表示を制御す る には、 次の よ う に し ま す。 1 w_about ウ ィ ン ド ウ に表示す る 値を持っ てい る イ ン ス タ ン ス 変数 を 追加 し て、 n_cst_aboutattrib ユーザ オ ブ ジ ェ ク ト を 拡張 し ま す (前の例で示 し た userID)。 2 w_about の Open イ ベン ト に フ ィ ール ド を追加 し ま す (前の例で示 し た sle_userid)。 3 n_cst_aboutattrib ユーザ オブジ ェ ク ト (inv_aboutattrib イ ン ス タ ン ス 変数 と し て使用可能) にア ク セ ス す る コ ー ド を w_about の Open イ ベン ト に追加 し 、シ ン グル ラ イ ン エデ ィ ッ ト にユーザ ID を コ ピ ー し ま す。 sle_userid.text = inv_aboutattrib.is_userid 4 n_cst_appmanager の pfc_PreAbout イ ベン ト に コ ー ド を追加 し て、値 を初期化 し ま す。 anv_aboutattrib.is_userid = this.of_GetUserID() w_about を表示す る には、 ア プ リ ケーシ ョ ン マネージ ャ の of_About 関 数を呼び出 し ま す。 属性オ ブ ジ ェ ク ト の使い方 PFC は、 属性のみのユーザ オブ ジ ェ ク ト を多数提供 し てい ま す。 こ れ ら のユーザ オブジ ェ ク ト は、 以下の性質を備え てい ま す。 • パブ リ ッ ク イ ン ス タ ン ス 変数を含む • 自動 イ ン ス タ ン ス 化 さ れてい る • attrib で終わ る 名前を持つ • pfc_PreAbout な ど の PFC プ レ イ ベン ト プ ロ セ ス へ情報を渡すのに よ く 使われ る • 拡張可能で あ る (追加の イ ン ス タ ン ス 変数を定義で き る ) PFC Library ユーザーズ ガ イ ド 41 属性オブ ジ ェ ク ト の使い方 こ う し た オブ ジ ェ ク ト は拡張で き る ので、 PFC は構造体の代わ り に こ れを使用 し ま す。 追加のパブ リ ッ ク イ ン ス タ ン ス 変数を定義す る だけで な く 、 オブジ ェ ク ト の行動を さ ら にカ ス タ マ イ ズす る ために、 ア ク セ ス レベル と オブ ジ ェ ク ト 関数を使 う こ と も で き ま す。 属性オブ ジ ェ ク ト には、 以下の も のがあ り ま す。 42 属性オ ブ ジ ェ ク ト n_cst_aboutattrib 関連す る相手 pfc_PreAbout (n_cst_appmanager) 用途 n_cst_calculatorattrib Constructor(u_calculator) 内部使用 n_cst_calendarattrib Constructor (u_calendar) n_cst_columnattrib リ ス ト ビ ュー デー タ ア ク セ ス オブジ ェ ク ト 内部使用 of_RegisterReportColum n で設定す る n_cst_dberrorattrib 論理的 な 作業単位サ ー ビ ス (LUW)(n_cst_luw) 内部使用 n_cst_dirattrib フ ァ イ ル サービ ス オブ ジェク ト 内部使用 n_cst_dssrv_multitableatt デ ー タ ス ト ア マ ル チ rib テーブル ア ッ プデー ト サービ ス n_cst_dwcacheattrib キ ャ ッ シ ン グ サー ビ ス 内部使用 n_cst_appmanager の of_About 関数を呼び出 し て w_about を開 く 内部使用 n_cst_dwobjectattrib of_Describe (n_cst_dssrv お よ び n_cst_dwsrv) of_Describe が、 こ の オ ブ ジ ェ ク ト でデー タ ウ ィ ン ド ウ プ ロ パテ ィ を返す n_cst_dwpropertyattrib デー タ ウ ィ ン ド ウ プ ロ パテ ィ オブジ ェ ク ト 内部使用 n_cst_dwsrv_dropdownse archattrib ド ロ ッ プ ダ ウ ン デー タ ウ ィ ン ド ウおよび ド ロ ッ プダウ ン リ ス ト ボ ッ ク ス 用検索サ ー ビ ス 内部使用 n_cst_dwsrv_multitableat デー タ ウ ィ ン ド ウ マル trib チ テーブル ア ッ プデー ト サービ ス n_cst_dwsrv_querymodea ク エ リ モー ド を 有効 ま ttrib た は無効 に す る サ ー ビ ス 内部使用 内部使用 PowerBuilder 第3章 PFC プ ロ グ ラ ミ ン グの基礎 属性オ ブ ジ ェ ク ト n_cst_dwsrv_resizeattrib 関連す る相手 用途 デー タ ウ ィ ン ド ウ サ イ ズ変更サー ビ ス n_cst_dwsrv_resize の of_register 関数で設定す る n_cst_errorattrib エ ラ ー メ ッ セージ サー ビス 表 示 情 報 を w_message へ渡すために使用す る n_cst_filterattrib デー タ ウ ィ ン ド ウ フ ィ ル タ サー ビ ス 情報 を フ ィ ル タ の 情報 ダ イ ア ロ グボ ッ ク スへ 渡すために使用す る n_cst_findattrib デー タ ウ ィ ン ド ウ 検索 サービ ス 情報 を 検索 ダ イ ア ロ グ ボ ッ ク ス へ渡す た め に 使用す る n_cst_infoattrib デー タ ウ ィ ン ド ウ プ ロ パテ ィ オブジ ェ ク ト 内部使用 n_cst_itemattrib PFC リ ス ト ボ ッ ク ス、ピ クチャ リ ス ト ボッ ク ス、 お よ び ツ リ ービ ュー 内部使用 n_cst_linkageattrib デー タ ウ ィ ン ド ウ リ ン ケージ サービ ス pfc_PreLogonDlg (n_cst_appmanager) 内部使用 n_cst_lvsrvattrib リ ス ト ビ ュ ー デー タ ア ク セ ス オブジ ェ ク ト of_Register で設定す る n_cst_mruattrib MRU サービ ス ウ ィ ン ド ウの pfc_MRUProcess イ ベン ト および pfc_PreMRUSave イ ベン ト で使用す る n_cst_propertyattrib デー タ ウ ィ ン ド ウ プ ロ パテ ィ オブジ ェ ク ト 内部使用 n_cst_resizeattrib サ イ ズ変更サー ビ ス 内部使用 n_cst_restorerowattrib デー タ ウ ィ ン ド ウ 行管 理サー ビ ス 内部使用 n_cst_returnattrib デー タ ウ ィ ン ド ウ フ ィ ル タ サービ ス お よ び ソ ー ト サービ ス 内部使用 n_cst_selectionattrib 選択サービ ス n_cst_selection の of_Open 関数へ の引数 を 入力す る n_cst_logonattrib PFC Library ユーザーズ ガ イ ド n_cst_appmanager の of_LogonDlg 関数を呼 び出 し て w_logon を開 く 43 PFC 定数の使い方 属性オ ブ ジ ェ ク ト n_cst_sortattrib 関連す る相手 用途 デー タ ウ ィ ン ド ウ ソ ー ト サービ ス ソー ト ダ イ ア ロ グボ ッ ク ス に 情報 を 渡す た め に使用す る n_cst_splashattrib pfc_PreSplash イ ベ ン ト (n_cst_appmanager) n_cst_appmanager の of_Splash 関数を呼び出 し て、 w_splash を開 く n_cst_sqlattrib SQL サー ビ ス SQL SELECT 文 の 構 成 要素を含め る n_cst_textstyleattrib PFC リ ッ チテ キ ス ト エ デ ィ ッ ト コ ン ト ロ ール テ キ ス ト プ ロ パテ ィ (太字、イ タ リ ッ ク な ど ) を 取得 (get) な い し 設 定 (set) す る た め に 使 用す る n_cst_tmgregisterattrib タ イ ミ ン グ サービ ス 内部使用 n_cst_toolbarattrib pfc_PreToolbars イ ベ ン ト (w_frame) w_frame の pfc_Toolbars イ ベ ン ト を 呼び出 し て w_toolbars を開 く n_cst_trregistrationattrib ト ラ ン ザ ク シ ョ ン 登録 サービ ス ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト を 追跡す る た めに使用す る n_cst_tvattrib ツ リ ービ ュー サー ビ ス 内部使用 n_cst_tvsrvattrib ツ リ ービ ュー デー タ ア ク セ ス オブジ ェ ク ト of_Register で設定す る n_cst_winsrv_sheetmanag erattrib シー ト 管理サービ ス 内部使用 n_cst_winsrv_statusbaratt rib ス テー タ ス バー サー ビ ス 内部使用 n_cst_zoomattrib デー タ ウ ィ ン ド ウ 印刷 プ レ ビ ュ ー サービ ス 内部使用 PFC 定数の使い方 多 く の PFC オブジ ェ ク ト は、 定数 と し て宣言 さ れ る イ ン ス タ ン ス 変数 を含んでい ま す。 こ れ ら の イ ン ス タ ン ス 変数を使用すれば、 わか り や すい コ ー ド を作成す る こ と がで き ま す。 た と えば、 以下の関数は、 両 方 と も デー タ ウ ィ ン ド ウ の リ ン ケージ ス タ イ ル を設定 し て い ま すが、 2 番目のほ う がわか り やすいで し ょ う 。 44 PowerBuilder 第3章 PFC プ ロ グ ラ ミ ン グの基礎 // 1 = フ ィ ル タ リ ン ケージ ス タ イル dw_emp.inv_linkage.of_SetStyle(1) // FILTER は、 1 に初期化 さ れた // 定数 イ ン ス タ ン ス変数です dw_emp.inv_linkage.of_SetStyle (dw_emp.inv_linkage.FILTER) & コ ーデ ィ ン グ上の規約 PFC では、 定数をすべて大文字で表記 し ま す。 メ ッ セージ ルー タ PFC では、 メ ニ ュ ー と ウ ィ ン ド ウ の間の通信 を メ ッ セージ ルー タ に よ っ て行い ま す。 メ ッ セージ ルー タ の カ ス タ マ イ ズ さ れた メ カ ニ ズ ム は、 PFC の提供す る すべての メ ニ ュ ー と ウ ィ ン ド ウ に組み込ま れてい ま す。 メ ッ セージ ルー タ の 使い方 メ ッ セージ ルー タ は あ ら ゆ る オ ブ ジ ェ ク ト と ウ ィ ン ド ウ 間の通信に 使用で き ま すが、 通常は、 メ ニ ュ ーか ら ウ ィ ン ド ウ に メ ッ セージ を渡 す際に使用 し ま す。 メ ッ セージの受信先 と な る オブジ ェ ク ト を決め る ために、 メ ッ セージ ルー タ には独自の検索アルゴ リ ズ ムが実装 さ れて い ま す。 メ ッ セージ ルー タ を使用す る と 、 以下の利点が得 ら れ ま す。 • メ ニ ュ ー ス ク リ プ ト では、 呼び出す適切なユーザ イ ベン ト を考え る だけ で よ い。 現行 ウ ィ ン ド ウ や配置 さ れてい る コ ン ト ロ ールの 名前を知 る 必要がない • デー タ ウ ィ ン ド ウ ユーザ イ ベン ト を呼び出すためだけのユーザ イ ベン ト を ウ ィ ン ド ウ が持つ必要は ない。 し たが っ て、 ウ ィ ン ド ウ で管理すべ き ユーザ イ ベン ト の数が削減で き る メ ッ セージ = ユーザ イ ベ ン ト メ ッ セー ジ ルー タ 機能に よ っ て 渡 さ れ る メ ッ セー ジ は、 実際に は、 ウ ィ ン ド ウ や ウ ィ ン ド ウ 上の コ ン ト ロ ールに よ っ て起動 さ れ る ユーザ イ ベン ト 名を示 し た文字列です。 PFC Library ユーザーズ ガ イ ド 45 メ ッ セージ ルー タ 組み込みデバ ッ グ メ ッ セージ メ ッ セージ ルー タ には、 エ ラ ー情報を提供す る ための組み込みデバ ッ グ メ ッ セージ も 提供 さ れてい ま す。 of_SendMessage の し くみ ユーザがメ ニュ ー項目を 選択する と 、 その項目の clicked イ ベン ト の ス ク リ プト がメ ニュ ーの of_SendMessage 関数を 呼び出し 、起動すべき ユー ザ イ ベン ト 名を 渡し ま す。 n_cst_menu の of_SendMessage 関数はウ ィ ン ド ウ の pfc_MessageRouter イ ベン ト を 呼び出し 、 pfc_MessageRouter イ ベ ン ト が指定 さ れたユーザ イ ベン ト を呼び出 し ま す。 of_SendMessage は、pfc_MessageRouter ユーザ イ ベン ト を呼び出 し ま す が、 そ の方法は ア プ リ ケーシ ョ ン が MDI か SDI かに よ っ て異な り ま す。 46 PowerBuilder 第3章 pfc_ MessageRouter のし く み PFC プ ロ グ ラ ミ ン グの基礎 pfc_MessgeRouter ユーザ イ ベン ト は、 ウ ィ ン ド ウ 内、 ア ク テ ィ ブ コ ン ト ロ ール内、 お よ び直前のア ク テ ィ ブ デー タ ウ ィ ン ド ウ 内に渡 さ れた ユーザ イ ベン ト を呼び出 し ま す。 メ ニ ュ ー と ウ ィ ン ド ウ間の メ ッ セージの受け渡 し メ ッ セージ ルー タ は、 本来 メ ニ ュ ー と ウ ィ ン ド ウ と の間で通信を行 う メ カ ニ ズ ム で す。 デー タ ウ ィ ン ド ウ 内部 の コ マ ン ド ボ タ ン を 除 き 、 pfc_MessageRouter イ ベン ト を呼び出すボ タ ン を使用す る こ と はで き ま せん。 メ ッ セージ ルーチ ンは、 現行の コ ン ト ロ ールを ア ク セ スす る た めに GetFocus を呼び出 し ま すが、 コ マ ン ド ボ タ ン を ク リ ッ ク し た後 は、 ボ タ ン その も のが現行の コ ン ト ロ ールにな っ てい る か ら です。 PFC に よ る ト ラ ンザ ク シ ョ ン管理 PowerBuilder の強みの 1 つは、 各種の DBMS に迅速かつ容易にア ク セ ス で き る 点にあ り ま す。 PowerBuilder は、 ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト を PowerScript と デー タ ベー ス と の間の通信領域 と し て使用 し ま す。SQLCA は、デフ ォ ル ト の PowerBuilder ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト です。 PFC Library ユーザーズ ガ イ ド 47 PFC に よ る ト ラ ンザ ク シ ョ ン管理 PFC には、 n_tr ユーザ オブジ ェ ク ト があ り ま す。 n_tr は、 カ ス タ マ イ ズ さ れた ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト で あ り 、 ト ラ ン ザ ク シ ョ ン シ ス テ ム オブ ジ ェ ク ト か ら 継承 さ れ ま す。 こ のカ ス タ マ イ ズ さ れた ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト には、 イ ン ス タ ン ス 変数、 イ ベン ト 、 お よ び関数があ り 、 デー タ ベー ス と の通信を カプ セル化 し 、 拡張す る のに 使われ ま す。 n_tr ユーザ オ ブ ジ ェ クト n_tr は、 デー タ ベー ス に対す る 接続、 接続解除、 コ ミ ッ ト 、 ロ ールバ ッ ク な ど を実行す る 関数の標準セ ッ ト を持っ てお り 、 ト ラ ン ザ ク シ ョ ン 管理を支援 し ま す。 ネ イ テ ィ ブの SQL ト ラ ン ザ ク シ ョ ン管理文を使 う 代わ り に、 n_tr 関数 を使用 し て く だ さ い。 た と えば、 デー タ ベー ス へ の接続には、 CONNECT 文を使用せず、 of_Connect を使い ま す。 n_tr の 2 通 り の使用 法 n_tr には、 以下の 2 つの使い方があ り ま す。 ア プ リ ケ ーシ ョ ン ペ イ ン タ のプ ロ パテ ィ ダ イ ア ロ グ ボ ッ ク ス を 使用 し て、 デ フ ォ ル ト の SQLCA が n_tr 型 にな る よ う 指定す る • SQLCA の代わ り と し て • SQLCA に加えて n_tr 型の イ ン ス タ ン ス 変数を定義 し て、プ ロ グ ラ ミ ン グに よ っ てそれを作成す る ア プ リ ケ ーシ ョ ン が複数の ト ラ ン ザ ク シ ョ ン オ ブ ジ ェ ク ト を 必要 と す る 場合は、 両方の使い方がで き ま す。 複数の ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト を使用す る 場合には、 すべての オープ ン ト ラ ン ザ ク シ ョ ン を コ ミ ッ ト し た り ロ ールバ ッ ク し た り す る 関数を実行す る のに、 ト ラ ン ザ ク シ ョ ン登録サービ ス を使用す る こ と がで き ま す。 第 4 章 「PFC サービ ス の使い方」 を参照 し て く だ さ い。 ❖ ❖ n_tr を SQLCA に関連付け る には 1 ア プ リ ケーシ ョ ン ペ イ ン タ にア ク セ ス し ま す。 2 プ ロ パテ ィ ビ ュ ーを表示 し 、 [付加的なプ ロ パテ ィ ] ボ タ ン を ク リ ッ ク し て、 [変数の型] タ ブ を選択 し ま す。 3 SQLCA ボ ッ ク ス に n_tr と 入力 し ま す。 4 [OK] を ク リ ッ ク し ます。 n_tr を使用する には 1 SQLCA 以外の ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト を使用 し てい る 場 合には、 ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト を作成 し ま す。 こ の例では、 n_tr 型の itr_security イ ン ス タ ン ス 変数を想定 し てい ま す。 itr_security = CREATE n_tr 48 PowerBuilder 第3章 2 PFC プ ロ グ ラ ミ ン グの基礎 ib_autorollback イ ン ス タ ン ス 変数を初期化 し ま す。 こ の変数は、 ト ラ ン ザ ク シ ョ ン の接続中にア プ リ ケーシ ョ ン が終了 し た場合 (ま たはオブ ジ ェ ク ト が破棄 さ れた場合) ど う す る か を指定 し ま す。 itr_security.of_SetAutoRollback(FALSE) ib_autorollback を拡張レ ベルで初期化する n_tr の Construction イ ベン ト で ib_autorollback を初期化 し てお く こ と に よ り 、 ト ラ ンザ ク シ ョ ン の一貫性を確保で き ま す。 3 of_Init 関数を使用 し て、 ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト の フ ィ ー ル ド を初期化 し ま す。 String ls_inifile ls_inifile = gnv_app.of_GetAppIniFile() IF SQLCA.of_Init(ls_inifile,"Database") = -1 THEN MessageBox(" デー タ ベース ", & ls_inifile + " か らの初期化で エ ラ ーが発生 し ま し た ") HALT CLOSE END IF 4 of_Connect 関数を呼び出 し てデー タ ベース を接続 し ま す。 IF SQLCA.of_Connect() = -1 THEN MessageBox(" デー タ ベース ", & ls_inifile + " を使用 し て接続で き ません ") HALT CLOSE ELSE gnv_app.of_GetFrame().SetMicroHelp & (" 接続が完了 し ま し た ") END IF 5 必要であれば、 n_tr 関数を呼び出 し ま す。 先祖の関数 と イ ベ ン ト の呼び出 し 先祖の関数 と イ ベン ト を拡張す る には、 先祖 メ ソ ッ ド を呼び出 し 、 そ の戻 り 値に基づいて処理を行 う 必要が生ず る 場合があ り ま す。 こ の こ と は、 戻 り 値を使用す る PFC イ ベン ト (接頭辞 pfc_ で始 ま る ) を拡張 す る 場合、 特に重要です。 子孫の処理を行 う 前に祖先の処理が成功 し た こ と を確かめ る ため、 戻 り 値を調べて く だ さ い。 PFC Library ユーザーズ ガ イ ド 49 ア プ リ ケーシ ョ ンへのオ ン ラ イ ン ヘルプの追加 先祖関数の上書 き 戻 り 値を使用す る PFC イ ベン ト を拡張す る には、こ こ に述べ る よ う に、 イ ベン ト を上書 き し て先祖の イ ベン ト を明示的に呼び出 さ な ければな り ま せん。 先祖の イ ベン ト を呼び出 し 、 引数を渡 し 、 戻 り 値を受け取 る には、 次 の構文を使用 し ま す。 result = Super::Event eventname ( arguments ... ) 先祖関数を呼び出 し 、 引数を渡 し 、 戻 り 値を受け取 る には、 次の構文 を使用 し ま す。 result = Super::Function functionname ( arguments ... ) 下記の例で は、 先祖の イ ベ ン ト が正 し く 処理 さ れ た場合に、 u_dw の pfc_Update イ ベン ト を上書 き し 、 更新 ロ グに書 き 込みま す。 Integer li_return // 先祖のイ ベ ン ト を呼び出 し 、 // 子孫の引数を渡 し ます。 li_return = Super::Event pfc_Update & (ab_accepttext, ab_resetflag) IF li_return = 1 THEN // ue_WriteLog は、 ユーザ定義 イ ベ ン ト です。 li_return = this.Event ue_WriteLog END IF Return li_return ア プ リ ケーシ ョ ンへのオ ン ラ イ ン ヘルプの追加 オ ン ラ イ ン ヘルプは、アプ リ ケーシ ョ ン の重要な部分です。PFC には、 ア プ リ ケ ーシ ョ ン のオ ン ラ イ ン ヘルプ を 利用で き る 関数 と イ ベ ン ト があ り ま す。 PFC のダ イ ア ロ グ ヘルプに関 し ては、 250 ページの 「PFC ダ イ ア ロ グ ボ ッ ク ス ヘルプの配布」 を参照 し て く だ さ い。 ❖ PFC ア プ リ ケーシ ョ ン でオ ン ラ イ ン ヘルプ を使用可能にす る には 1 50 n_cst_appmanager ま たは子孫の中では、 プ ロ パテ ィ ビ ュ ーを使用 し て、 ヘルプ フ ァ イ ルの完全な名前を is_helpfile イ ン ス タ ン ス 変 数に割 り 当て る こ と がで き ま す。 PowerBuilder 第3章 PFC プ ロ グ ラ ミ ン グの基礎 別の方法 と し て、 of_SetHelpFile 関数を呼び出 し て、 ヘルプ フ ァ イ ル名 を設定す る こ と がで き ま す。 通常は、 こ の操作を Constructor イ ベン ト の中で実行 し ま す。 this.of_SetHelpFile("c:¥eis¥eisapp.hlp") 2 ウ ィ ン ド ウ に関連付け ら れたヘルプ ト ピ ッ ク を指定 し ま す。 こ れ は、 pfc_PreOpen イ ベン ト で行 う のが適当です。 Long ll_helpid ll_helpid = 1020 // 1020 は、 ヘルプ ト ピ ッ ク ID です ia_helptypeid = ll_helpid こ れに よ り 、 詳細なヘルプ を選択 さ れた ウ ィ ン ド ウ に入れ る こ と がで き ま す。 ia_helptype は、 long 型 (PFC は、 こ れをヘルプ ト ピ ッ ク ID と し て解釈す る ) ま たは、 string 型 (PFC は、 こ れを検索キー ワ ー ド と し て解釈す る ) と し て設定 し ま す。 3 (オプシ ョ ン) PFC の m_master メ ニ ュ ーの子孫を使用 し ていない 場合、 メ ニ ュ ーの [ヘルプ] メ ニ ュ ー項目に、ウ ィ ン ド ウ の pfc_Help ユ ー ザ イ ベ ン ト の 呼 び 出 し を 追 加 す る Pfc_Help イ ベ ン ト は w_master で定義 さ れてい る ためすべての PFC ウ ィ ン ド ウ で使用で き ま す。 4 ダ イ ア ロ グ ボ ッ ク ス の場合は、 [ヘルプ] ボ タ ン の Clicked イ ベン ト で pfc_Help ユーザ イ ベン ト を呼び出 し ま す。 Parent.Event pfc_Help( ) PFC はウ ィ ン ド ウ レベルのヘルプ を自動的に制御す る m_master か ら 継承 さ れた メ ニ ュ ーの メ ニ ュ ーバーか ら 、 ユーザが [ヘルプ|ヘルプ ト ピ ッ ク ] を選択す る と 、 メ ッ セージ ルー タ は ア ク テ ィ ブ ウ ィ ン ド ウ の pfc_Help ユーザ イ ベ ン ト を 呼び出 し ま す。 PFC ア ッ プ グ レ ー ド の イ ン ス ト ール Sybase 社は、 PowerBuilder の メ ジ ャ ー リ リ ー ス の間に定期的な メ ン テ ナン ス リ リ ー ス を 配 布 し ま す。 各 メ ン テ ナ ン ス リ リ ー ス に は、 PowerBuilder の更新のほか に、 PFC への更新 も 含 ま れて い ま す。 PFC メ ン テナ ン ス の適用の方法は、 PFC の使い方に よ っ て異な り ま す。 PFC Library ユーザーズ ガ イ ド 51 PFC ア ッ プグ レー ド の イ ン ス ト ール • PFC の 先祖 レ ベ ル に 対 し て も 、PFC の拡張レベルに対 し て も 修正を加え ていなければ、現 行の PBL の上に新 し い PFC セ ッ ト を イ ン ス ト ールす る だけです。 ど ち ら の PFC レベル も 修正 し ていない場合 必ずバ ッ ク ア ッ プ コ ピー を と る こ と 更新 さ れ た PFC を イ ン ス ト ールす る 前に、 必ずバ ッ ク ア ッ プ コ ピ ー を と っ て く だ さ い。 こ こ での説明は、 バ ッ ク ア ッ プがすでに と ら れてい る も の と 想定 し てい ま す。 • 1 つ以上の中間拡張レ ベルが修正 さ れてい るか、 PFC 拡張レ ベルに開発 者 コ ー ド があ る場合 PFC 先祖 レ ベル よ り 下位の レ ベルに修正 を加 え た場合には、 以下の説明に し たが っ て、 拡張や修正が上書 き さ れない よ う に し て く だ さ い。 ❖ 最新の PFC リ リ ースにア ッ プ グ レー ド す る には 1 すべての拡張レベルの PBL を、 イ ン ス ト ールの過程で上書 き さ れ る こ と のないデ ィ レ ク ト リ に移 し ま す。 PFC 先祖オブ ジ ェ ク ト PFC 先祖オブ ジ ェ ク ト (pfc_ 接頭辞 を持つオブ ジ ェ ク ト ) は絶対 に修正 し ないで く だ さ い。 こ こ での説明は、 PFC 先祖オブ ジ ェ ク ト に修正が加え ら れていない こ と を想定 し てい ま す。 2 現行のバージ ョ ン を確認 し ま す。 こ れは、 現行の PFC readme.txt フ ァ イ ルの最初の部分か、 pfc_n_cst_debug に定義 さ れた イ ン ス タ ン ス 変数を 見ればわか り ま す。 バージ ョ ン は、 次の形式を し てい ま す 。 majorrevision.minorrevision.fixesrevision 3 イ ン ス ト ール プ ロ シージ ャ を実行 し て、 現行の PFC デ ィ レ ク ト リ に PFC PBL を入れ、 現行の PFC 先祖 PBL を上書 き し ま す。 4 既存の拡張オ ブ ジ ェ ク ト と 新 し い拡張オブ ジ ェ ク ト と を マージ し ま す。新たに イ ン ス ト ール さ れた readme.txt を見て新 し い拡張オブ ジ ェ ク ト を確認 し ま す。 既存の拡張オブ ジ ェ ク ト と 新 し い拡張オ ブ ジ ェ ク ト と を マージす る 方法は 2 通 り あ り ま す。 • 52 新オブ ジ ェ ク ト を、 カ ス タ マ イ ズ さ れた拡張 PBL へ コ ピーする 新たに イ ン ス ト ール さ れた PFC 拡張レベルの PBL か ら 、 それ ぞれの新 し いオ ブ ジ ェ ク ト を、 カ ス タ マ イ ズ さ れた拡張 PBL へ コ ピ ー し ま す。 カ ス タ マ イ ズ さ れた拡張 PBL を、 元のデ ィ レ ク ト リ へ コ ピ ー し て戻 し 、 新た に イ ン ス ト ール さ れた PFC は取 り 除 き ま す。 PowerBuilder 第3章 • PFC プ ロ グ ラ ミ ン グの基礎 すべ てのオブジ ェ ク ト を カ ス タ マ イ ズ さ れた拡張 PBL か ら 新たに イ ン ス ト ール さ れた所要の PFC 拡張 PBL へ コ ピー し ま す。 既存のオブ ジ ェ ク ト を、 新 し い PFC 拡張 PBL へ コ ピ ーす る 5 PowerBuilder を起動 し ま す。 6 必要に応 じ アプ リ ケーシ ョ ン タ ーゲ ッ ト 整 し ま す。 7 タ ーゲ ッ ト の再構築を実行 し ま す。 PFC Library ユーザーズ ガ イ ド ラ イ ブ ラ リ リ ス ト を調 53 PFC ア ッ プグ レー ド の イ ン ス ト ール 54 PowerBuilder 第 4 章 PFC サー ビ スの使い方 この章につい て こ の章では、 PFC で提供 さ れ る サービ ス と そ の使い方について説 明 し ま す。 内容 アプ リ ケーシ ョ ン サー ビ ス トピック ページ 55 デー タ ウ ィ ン ド ウ サー ビ ス 70 ウ ィ ン ド ウ サー ビ ス 97 メ ニ ュ ー サービ ス 104 サ イ ズ変更サービ ス 105 デー タ 型変換サー ビ ス 107 日付 / 時刻サービ ス 108 フ ァ イ ル サービ ス 110 INI フ ァ イ ル サービ ス 111 数値サービ ス 113 プ ラ ッ ト フ ォ ーム サー ビ ス 114 選択サービ ス 116 SQL 解析サービ ス 117 文字列処理サービ ス 119 メ タ ク ラ ス サー ビ ス 120 論理的作業単位サー ビ ス 121 リ ス ト サービ ス 123 タ イ ミ ン グ サー ビ ス 136 ア プ リ ケーシ ョ ン サービ ス PFC では、 以下のアプ リ ケーシ ョ ン サービ ス が提供 さ れ ま す。 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ デバ ッ グ エラー ア プ リ ケーシ ョ ン環境設定 最新使用オブ ジ ェ ク ト PFC Library ユーザーズ ガ イ ド 55 ア プ リ ケーシ ョ ン サー ビ ス セキ ュ リ テ ィ ト ラ ン ザ ク シ ョ ン登録 ア プ リ ケーシ ョ ン サービ ス は、 ア プ リ ケーシ ョ ン マ ネージ ャ で あ る n_cst_appmanager を通 じ て制御 し ま す。 ア プ リ ケーシ ョ ン サービ ス を 使用可能に し た り 、 使用不可に し た り す る には、 ア プ リ ケーシ ョ ン マ ネージ ャ 関数 を 使用 し ま す。 ア プ リ ケーシ ョ ン サー ビ ス の ス コ ープ (利用範囲) は ア プ リ ケーシ ョ ン マネージ ャ に設定 さ れ ま すが、 こ れ はグ ロ ーバル変数 と し て定義 さ れ る ため、 ア プ リ ケーシ ョ ン サービ ス はア プ リ ケーシ ョ ン内の ど こ か ら で も 使用で き ま す。 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス 概要 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス は、デー タ ウ ィ ン ド ウ オブジ ェ ク ト のデー タ をバ ッ フ ァ に保持 (キ ャ ッ シ ュ ) し ま す。 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス は、デー タ ウ ィ ン ド ウ のデー タ 行を メ モ リ に 保持す る こ と に よ り 、 デー タ ベース ア ク セ ス の回数を削減 し ま す。 そ の結果、 ア プ リ ケ ー シ ョ ン パ フ ォ ー マ ン ス の最適化が実現 し ま す。 デー タ ウ ィ ン ド ウ キ ャ シ ン グ サー ビ ス は、 以下のデー タ ソ ー ス を サ ポー ト し ま す。 • デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト (デー タ ベース か ら 取 り 出 し た デー タ ま たはデー タ ウ ィ ン ド ウ オブジ ェ ク ト で格納 し たデー タ ) • SQL 文 • デー タ ウ ィ ン ド ウ コ ン ト ロ ール • デー タ ス ト ア コ ン ト ロ ール • 配列か ら の行 • フ ァ イル デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス は、デー タ をバ ッ フ ァ す る のに PowerBuilder デー タ ス ト ア を使用 し ま す。 PFC は n_cst_dwcache ユーザ オブジ ェ ク ト を通 じ て、 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ を使用可能に し ま す。 PFC コ ー ド は先祖レ ベルのオブ ジ ェ ク ト の中に存在する こ のマニ ュ アルでは常に (n_cst_dwcache の よ う な) 拡張レベルのオブ ジ ェ ク ト を参照 し ま す。 すべての PFC コ ー ド は (pfc_n_cst_dwcache の よ う な) 先祖レベルのオブジ ェ ク ト の中に実際に存在 し ま す。 56 PowerBuilder 第4章 PFC サー ビ スの使い方 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス は、デー タ ベー スへのア ク セ ス の回数を減少 し 、パフ ォーマ ン ス の最適化をはか る ために使用 し ま す。 用途 ❖ デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ を使用可能にする には • n_cst_appmanager の of_SetDWCache 関数を呼び出 し ま す。 gnv_app.of_SetDWCache(TRUE) ❖ デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ を使 う には 1 of_Register 関数を呼び出 し 、 キ ャ ッ シ ュ す る デー タ に応 じ た適切 な引数を渡 し て、 デー タ ウ ィ ン ド ウ のデー タ を キ ャ ッ シ ュ し ま す。 • デー タ ウ ィ ン ド ウ を 通 し て デー タ ベー ス か ら 検索 し た 行 を キ ャ ッ シ ュ す る には、 識別子、 ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト 、 デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト 名、 お よ び引数 (な ど が 存在す る 場合には) を渡す • SQL 文を通 し てデー タ ベース か ら 取 り 出 し た行を キ ャ ッ シ ュ す る には、 識別子、 ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト 、 お よ び SQL 文を渡す • 配列内の行を キ ャ ッ シ ュ す る には、 識別子、 デー タ ウ ィ ン ド ウ オブジ ェ ク ト 名、 お よ びデー タ を渡す • デー タ ウ ィ ン ド ウ コ ン ト ロ ールか ら の行を キ ャ ッ シ ュ す る に は、 識別子 と デー タ ウ ィ ン ド ウ コ ン ト ロ ールを渡す • デー タ ス ト アか ら の行を キ ャ ッ シ ュ す る には、識別子 と デー タ ス ト ア イ ン ス タ ン ス を渡す • フ ァ イ ルか ら の行を キ ャ ッ シ ュ す る には、識別子 と フ ァ イ ル名 を渡す 2 デー タ ウ ィ ン ド ウ オブジ ェ ク ト がキ ャ ッ シ ュ サービ ス ですでに 登録 さ れてい る か ど う か を調べ る には、 オブ ジ ェ ク ト の識別子を 渡 し て of_IsRegistered 関数を呼び出 し ま す。 3 キ ャ ッ シ ュ し たデー タ にア ク セ ス す る には、of_GetRegisterd 関数を 呼び出 し ま す。 次の例は、 ids_datastore イ ン ス タ ン ス変数を使用 し て い ま す。 gnv_app.inv_dwcache.of_GetRegistered ("d_emplist", ids_datastore) ids_datastore.ShareData(dw_emplist) & 4 キ ャ ッ シ ュ し た デー タ ウ ィ ン ド ウ のデー タ を 再検索す る に は、 of_Refresh 関数を呼び出 し ま す。 5 キ ャ ッ シ ュ を停止す る には、 of_UnRegister 関数を呼び出 し ま す。 PFC Library ユーザーズ ガ イ ド 57 ア プ リ ケーシ ョ ン サー ビ ス 6 (オプシ ョ ン) n_cst_appmanager の of_SetDWCache 関数を呼び出 し て、 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス を使用不可に し ま す。 gnv_app.of_SetDWCache(FALSE) ほ と ん ど の場合、 開発者がデー タ ウ ィ ン ド ウ キ ャ ッ シ ュ を明示的 に使用不可にす る 必要は あ り ま せん。 ア プ リ ケーシ ョ ン を終了す る と 、 PFC が n_cst_dwcache を自動的に破棄 し ま す。 デバ ッ グ サービ ス デバ ッ グ サー ビ ス は、 PFC で エ ラ ーの状態が検出 さ れ た と き 、 メ ッ セージ を自動的に表示 し ま す。 概要 PFC メ ッ セージ ルー タ は、 渡 さ れた イ ベン ト が存在 し ない と き には、 デバ ッ グ サービ ス を使用 し てエ ラ ー メ ッ セージの表示を制御 し ま す。 開発環境専用のサービ ス PFC デバ ッ グ サービ ス は開発環境専用のサービ ス です。 実稼動アプ リ ケ ーシ ョ ン で は こ のサー ビ ス を 使用可能に し な い よ う に し て く だ さ い。 デバ ッ グ サービ ス は、 PFC 開発環境で生 じ た問題を解決す る ために使 用 し ま す。 用途 ❖ デバ ッ グ サービ ス を使 う には 1 n_cst_appmanager の of_SetDebug 関数を呼び出 し て、デバ ッ グ サー ビ ス を使用不可に し ま す。 gnv_app.of_SetDebug(TRUE) 2 PFC オブ ジ ェ ク ト は、 タ ーゲ ッ ト のデバ ッ グ ス テー タ ス をチ ェ ッ ク し 、 一定の条件で、 エ ラ ー メ ッ セージ を表示 し ま す。 3 (オプシ ョ ン) n_cst_appmanager の of_SetDebug 関数を呼び出 し て、 デバ ッ ク サービ ス を使用不可に し ま す。 gnv_app.of_SetDebug(FALSE) ほ と ん ど の場合、 開発者がデバ ッ グ サービ ス を明示的に使用不可 にす る 必要は あ り ま せん。 PFC は、SQL ス パ イ と デー タ ウ ィ ン ド ウ デバ ッ ガ と い う 2 つのデバ ッ グ ユーテ ィ リ テ ィ を提供 し てい ま す。 こ れ ら のデバ ッ ガの詳細につい ては、 第 7 章 「PFC ユーテ ィ リ テ ィ 」 を参照 し て く だ さ い。 58 PowerBuilder 第4章 PFC サー ビ スの使い方 ア プ リ ケーシ ョ ン環境設定サービ ス 概要 ア プ リ ケーシ ョ ン環境設定を使用すれば、INI フ ァ イ ル ま たは Windows レ ジ ス ト リ のいずれか を用いて ア プ リ ケーシ ョ ンやユーザ情報を、 保 存な い し 復元す る こ と がで き ま す。 ア プ リ ケ ーシ ョ ン 設定の保存 と ロ ー ド には、 2 つの利点があ り ま す。 ア プ リ ケー シ ョ ン ス テー タ ス を 保存す る こ と に よ っ て、 ユーザは ア プ リ ケーシ ョ ン を 開始す る たびにユーザのア プ リ ケー シ ョ ン環境設定を リ セ ッ ト す る 必要がな く な り ま す。 • 持続性 • 保守の容易性 ア プ リ ケ ー シ ョ ン 設定 を 外部化す る こ と に よ り 、 n_cst_appmanager の コ ー ド を 更新 し な く て も ア プ リ ケ ーシ ョ ン 設 定 を更新で き ま す。 PFC では、n_cst_apppreference ユーザ オブ ジ ェ ク ト を通 し て ア プ リ ケー シ ョ ン環境設定サービ ス を実施す る こ と がで き ま す。 こ のサービ ス は、 以下のアプ リ ケーシ ョ ン情報を保存 し ま す。 ユーザ キー マ イ ク ロ ヘルプ ヘルプ フ ァ イ ル バージ ョ ン ロゴ ビ ッ ト マップ 著作権表示 DDETimeOut プ ロ パテ ィ DisplayName プ ロ パテ ィ DWMessageTitle プ ロ パテ ィ MicrohelpDefault プ ロ パテ ィ RightToLeft プ ロ パテ ィ ToolbarFrameTitle プ ロ パテ ィ ToolbarPopMenuText プ ロ パテ ィ ToolbarSheetTitle プ ロ パテ ィ ToolbarUserControl プ ロ パテ ィ ア プ リ ケーシ ョ ン環境設定サービ ス では、 以下のユーザ情報を保存す る こ と も で き ま す。 ToolbarText プ ロ パテ ィ ToolbarTips プ ロ パテ ィ ユーザ ID 設定のロ ー ド と 保存 ア プ リ ケーシ ョ ン環境設定サービ ス は、 ア プ リ ケーシ ョ ン が起動 し た と き 自動的に設定を ロ ー ド し 、 ア プ リ ケーシ ョ ン が終了 し た と き 自動 的に設定 を 保存 し ま す。 こ の情報は、 レ ジ ス ト リ (Windows の場合) ま たは、 INI フ ァ イ ル (すべてのプ ラ ッ ト フ ォ ーム で利用可能) に格納 さ れ ま す。 こ の指定は、 以下の よ う に行い ま す PFC Library ユーザーズ ガ イ ド 59 ア プ リ ケーシ ョ ン サー ビ ス ❖ • レ ジ ス ト リ of_SetUserKey 関数を呼び出 し 、ア プ リ ケーシ ョ ン環境 設定情報の入っ てい る レ ジ ス ト リ キーを指定す る • INI フ ァ イル of_SetUserINIFile 関数を呼び出 し 、 アプ リ ケーシ ョ ン 環境設定情報の入っ てい る INI フ ァ イ ル を指定す る ア プ リ ケーシ ョ ン環境設定サー ビ ス を使用す る には 1 n_cst_appmanager の of_SetAppPref 関数を呼び出 し て、 アプ リ ケー シ ョ ン環境設定サービ ス を使用可能に し ま す。 gnv_app.of_SetAppPref(TRUE) 2 ア プ リ ケーシ ョ ン 環境設定に対す る プ ラ ッ ト フ ォ ーム固有の リ ポ ジ ト リ を指定 し ま す。 こ の例は、 ア プ リ ケーシ ョ ン マネージ ャ で あ る Constructor イ ベン ト か ら の も ので あ り 、 アプ リ ケーシ ョ ン環 境設定情報を レ ジ ス ト リ ま たは INI フ ァ イ ルに保存 し てい ま す。ど ち ら に保存す る かは、 実行す る プ ラ ッ ト フ ォ ーム に よ っ て決 ま っ て い ま す。 こ こ では、 ア プ リ ケーシ ョ ン キー、 ユーザ キー、 アプ リ ケ ー シ ョ ン INI フ ァ イ ル、 ユ ー ザ INI フ ァ イ ル に 対 す る n_cst_appmanager の指定が済んでい る も の と 想定 し てい ま す。 IF this.of_IsRegistryAvailable() THEN this.inv_apppref.of_SetAppKey & (this.of_GetAppKey()) this.inv_apppref.of_SetUserKey & (this.of_GetUserKey()) ELSE this.inv_apppref.of_SetAppINIFile & (this.of_GetAppINIFile()) this.inv_apppref.of_SetUserINIFile & (this.of_GetUserINIFile()) END IF 3 of_SetRestoreApp お よ び of_SetRestoreUser 関数を呼び出 し て、保存 す る 情報の型を指定 し ま す。 this.inv_apppref.of_SetRestoreApp(TRUE) this.inv_apppref.of_SetRestoreUser(TRUE) 最新使用オブ ジ ェ ク ト サービ ス 概要 60 最新使用 (MRU) オブ ジ ェ ク ト サービ ス を 使用すれば、 フ ァ イ ル メ ニ ュ ーにおけ る 直前に使用 さ れた ウ ィ ン ド ウ の リ ス ト を表示す る こ と がで き ま す。 デフ ォ ル ト で こ の リ ス ト には項目が 5 つま で表示 さ れ ま すが、 こ の項目数は増やす こ と がで き ま す。 PowerBuilder 第4章 PFC サー ビ スの使い方 PFC では、n_cst_mru ユーザ オブジ ェ ク ト を通 し て MRU サービ ス を使 用可能に し ま す。 ア プ リ ケーシ ョ ン環境設定サービ ス は、 ア プ リ ケーシ ョ ン が起動 し た と き 自動的に MRU 情報 を ロ ー ド し ま す。 こ の情報は、 レ ジ ス ト リ (Windows の場合) ま たは、 INI フ ァ イ ル (すべてのプ ラ ッ ト フ ォ ーム で利用可能) に格納 さ れ ま す。 こ の指定は、 以下の よ う に行い ま す。 of_SetUserKey 関数を呼び出 し 、 MRU 情報の入っ てい る レ ジ ス ト リ キーを指定す る • レジス ト リ • INI フ ァ イル of_SetUserINIFile 関数を呼び出 し 、 MRU 情報の入っ てい る INI フ ァ イ ルを指定す る MRU サービ ス を使用す る には、 MRU オブ ジ ェ ク ト と し て フ ァ イ ル メ ニ ュ ー上に表示す る すべて の ウ ィ ン ド ウ の中で以下の ウ ィ ン ド ウ イ ベン ト を拡張 し なければな り ま せん。 処理 コ ー ド 作成の必要 性 MRU 情報 を使 っ て指定 さ れた ウ ィ ン ド ウ を 開 く ための コ ー ド を追加す る • Pfc_MRUProcess • Pfc_PreMRUSave • Pfc_MRURestore ウ ィ ン ド ウ が閉 じ る 際に MRU 情報を保存す る ための コ ー ド を追加す る MRU 情報を復元す る ための コ ー ド を追加す る ウ ィ ン ド ウ グループ を識別す る ID の使い 方 フ ァ イ ル メ ニ ュ ーに一緒に表示 さ れ る ウ ィ ン ド ウ ま た は ウ ィ ン ド ウ グループ を識別す る ID を指定 し ま す。 ID を使用す る こ と で、 MRU 表 示を制限 し た り カ ス タ マ イ ズ し た り で き ま す。 た と えば、 特定のシー ト を表示す る と き に、MRU 表示を そのシー ト の イ ン ス タ ン ス にのみ制 限 し たい場合があ り ま す。 ま た、 ほかのア プ リ ケーシ ョ ン で、 すべて のシー ト 上に同 じ MRU 項目を表示 さ せたい場合があ り ま す。 PFC メ ニ ュ ー と の統 合 PFC m_master メ ニ ュ ーは、メ ニ ュ ー フ ァ イ ルの終端部分に 5 つの MRU 項目を持 っ てい ま す。 必要な ら ば、 こ の MRU 項目を増やす こ と も で き ま す。 ア プ リ ケーシ ョ ン で非 PFC メ ニ ュ ーを 使用 し て い る 場合には、 MRU メ ニ ュ ー項目 を 開発者自身が作成す る 際のモデル と し て m_master を 使っ て く だ さ い。 ❖ MRU サービ ス を使用する には 1 n_cst_appmanager の of_SetMRU 関数を呼び出 し て、MRU サービ ス を使用可能に し ま す。 gnv_app.of_SetMRU(TRUE) PFC Library ユーザーズ ガ イ ド 61 ア プ リ ケーシ ョ ン サー ビ ス 2 n_cst_mru の of_SetUserKey 関数 (Windows プ ラ ッ ト フ ォ ーム上) ま たは、 of_SetUserINIFile 関数 (すべてのプ ラ ッ ト フ ォ ーム) を呼 び出 し て、 ど こ に MRU 情報を保存す る か を指定 し ま す。 次に示す のは、 ア プ リ ケーシ ョ ン マネージ ャ の Constructor イ ベン ト か ら の 例です。 こ の例では、 レ ジ ス ト リ ま たは INI フ ァ イ ル内に MRU 情 報が保存 さ れ ま す。 こ こ では、 n_cst_appmanager ユーザ キー ま た はユーザ INI フ ァ イ ルをすでに設定済みで あ る と 仮定 し てい ま す。 IF this.of_IsRegistryAvailable() THEN this.inv_mru.of_SetUserKey & (this.of_GetUserKey()) ELSE this.inv_mru.of_SetUserINIFile (this.of_GetUserINIFile()) END IF 3 & n_cst_mru の of_Register 関数を呼び出 し て、 MRU サービ ス に よ っ て追跡 さ れ る ID を登録 し ま す。 (ID は、 MRU サービ ス を通 し て 情報を検索す る ために ウ ィ ン ド ウ が使用す る 識別子です)。 次に示 すのは、 MDI フ レーム ウ ィ ン ド ウ の pfc_PreOpen イ ベン ト に追加 で き る コ ー ド の例です。 IF IsValid(gnv_app.inv_mru) THEN gnv_app.inv_mru.of_Register("myapp") END IF 4 引数 を渡す ウ ィ ン ド ウ ま たは シー ト を開 く コ ー ド を追加す る こ と に よ っ て、MRU 処理を使用す る 各 ウ ィ ン ド ウ 内の pfc_MRUProcess イ ベン ト を拡張 し ま す(MRU 項目を フ レーム メ ニ ュ ーに指定 し た い場合には、 フ レーム ウ ィ ン ド ウ に同様な コ ー ド を必ず追加 し て く だ さ い)。 Window lw_frame, lw_window n_cst_menu lnv_menu n_cst_mruattrib lnv_mruattrib // パ ラ メ ー タ を チ ェ ッ ク す る IF IsNull(ai_row) THEN Return -1 END IF IF NOT IsValid(gnv_app.inv_mru) THEN Return -1 END IF // デー タ ス ト アか ら 行を取 り 出す gnv_app.inv_mru.of_GetItem & (ai_row, lnv_mruattrib) // 必要であれば、 MDI フ レ ーム を取得す る 62 PowerBuilder 第4章 PFC サー ビ スの使い方 lnv_menu.of_GetMDIFrame(this.menuid, lw_frame) OpenSheet(lw_window, & lnv_mruattrib.is_classname, lw_frame) Return 1 pfc_MRUProcess イ ベ ン ト でほかの行動を と る pfc_MRUProcess イ ベン ト で行え る 処理にはほかに ど の よ う な も の があ る か を調べ る には、 pfc_w_master pfc_MRUProcess イ ベン ト の コ メ ン ト を読んで く だ さ い。 5 MRU サービ ス を使用す る 各 ウ ィ ン ド ウ の pfc_MRU イ ベン ト を拡 張 し ま す。 こ の イ ベン ト では、 n_cst_mruattrib オブ ジ ェ ク ト を、 保 存すべ き ID、 ク ラ ス 名、 キー、 項目テ キ ス ト 、 マ イ ク ロ ヘルプ と 一緒に移植 し て く だ さ い。 anv_mruattrib.is_id = "myapp" anv_mruattrib.is_classname = this.ClassName() anv_mruattrib.is_menuitemname = this.Title anv_mruattrib.is_menuitemkey = this.ClassName() anv_mruattrib.is_menuitemmhelp = & "Opens " + this.Title Return 1 6 MRU サービ ス を使用す る 各 ウ ィ ン ド ウ の pfc_MRURestore イ ベン ト を 拡張 し ま す。 こ の イ ベン ト では、 メ ニ ュ ーに表示 し たい情報 の ID を設定 し ま す。 If IsValid(gnv_app.inv_mru) Then Return gnv_app.inv_mru.of_Restore("myapp", This) End If 7 pfc_MRUSave イ ベン ト を呼び出 し て MRU 情報を保存 し ま す。ウ ィ ン ド ウ を開 く と き 、 情報を保存す る と き 、 ま たは ウ ィ ン ド ウ を 閉 じ る と き に こ の イ ベ ン ト を 呼び出す こ と がで き ま す (次の例は、 pfc_PreOpen イ ベン ト か ら の も のです)。 this.Event pfc_MRUSave() エ ラ ー メ ッ セージ サービ ス 概要 エ ラ ー メ ッ セージ サービ ス は、 アプ リ ケーシ ョ ン のエ ラ ー メ ッ セー ジ を表示 し た り 、 ロ グ を 取っ た り す る さ ま ざ ま な機能を 提供 し ま す。 メ ッ セージは、PowerBuilder メ ッ セージボ ッ ク ス か、PFC w_message ダ イ ア ロ グ ボ ッ ク ス に表示で き ま す。 ど ち ら の表示オプシ ョ ン も 以下の 機能を持っ てい ま す。 PFC Library ユーザーズ ガ イ ド 63 ア プ リ ケーシ ョ ン サー ビ ス • フ ァ イ ルへの メ ッ セー ジ ロ ギ ン グ (複数プ ラ ッ ト フ ォ ーム サポー ト を含む)。 メ ッ セージの重大度が指定 さ れ た レベル を超え る と 、 PFC がその メ ッ セージ を自動的に ロ グ に取 り ま す。 • MAPI サポー ト • メ ッ セージ デー タ ベース 定 義 済 み メ ッ セ ー ジ の デ ー タ ベ ー ス (デー タ ベース に も フ ァ イ ルに も 常駐可能) へのア ク セ ス 。 定義済 みの メ ッ セージ を保持す る こ と に よ り 、 メ ッ セージ テ キ ス ト の標 準化がで き る ため、 メ ッ セージの重複を避け る こ と がで き 、 ロ ー カ ラ イ ズが容易にな り ま す。 • シ ン ボ リ ッ ク パ ラ メ ー タ に よ る置き 換え メ ッ セージに引数を割 り 当 て てお き 、 実行時に引数か ら メ ッ セージへの変換を 行 う こ と がで き ま す。 • 未応答オプ シ ョ ン メ ッ セージ ロギ ン グ 電子 メ ールに よ る 自動エ ラ ー通知 (MAPI 準拠の電 子 メ ール シ ス テ ム に限 る )。 メ ッ セージの重大度が指定 さ れた レベ ルを超え る と 、 PFC がそ の メ ッ セージに対す る 通知を電子 メ ール で送信 し ま す。 メ ッ セージ を ロ グ に取 り (ま たは電子 メ ールに よ っ て送信)、 表示 し ない よ う にす る こ と がで き ま す。 w_message ダ イ ア ロ グ ボ ッ ク ス を用いれば、 さ ら に以下のオプ シ ョ ン を使 う こ と も で き ま す。 ユーザは、 メ ッ セージ を印刷 し 、必 要で あれば コ メ ン ト を追加す る こ と がで き ま す。 こ れは、 メ ッ セー ジ を ロ グに取っ た り 、 自動電子 メ ール通知機能を使用す る と き に、 特に便利です。 • [印刷] ボ タ ン と [入力] ボ タ ン • 自動 ク ロ ーズ 指定 さ れた秒数が経過す る と 、 w_message ダ イ ア ロ グボ ッ ク ス が自動的に閉 じ ま す。 w_message ビ ッ ト マ ッ プ w_message ダ イ ア ロ グ ボ ッ ク ス が使用す る ビ ッ ト マ ッ プは、 実行時に 使用可能にな っ ていな ければな り ま せん。 用途 64 ア プ リ ケ ー シ ョ ン の メ ッ セージ 処理お よ びエ ラ ー処理には、 必ずエ ラ ー サービ ス を用いて く だ さ い。 デー タ ベース 内に メ ッ セージ を保持 し てい る 場合は、 PFC.DB の メ ッ セージ テーブルを使 う こ と も 、 それ を ア プ リ ケーシ ョ ン のデー タ ベース に転送す る こ と も で き ま す。 PowerBuilder 第4章 PFC サー ビ スの使い方 メ ッ セージ テーブルの使用 たいていの場合、 メ ッ セージ テーブルは、 アプ リ ケーシ ョ ン のデー タ ベー ス に コ ピ ー し な ければな り ま せん。 こ のテーブルには、 定義済み PFC エ ラ ー メ ッ セージ と ユーザ定義のエ ラ ー メ ッ セージが入っ て い ま す。 ❖ エ ラ ー メ ッ セージ サービ ス を使用する には 1 n_cst_appmanager の of_SetError 関数を呼び出 し て、n_cst_error の イ ン ス タ ン ス を 作 成 し ま す (以 下 の 例 は、 n_cst_appmanager の pfc_Open イ ベン ト か ら の も のです)。 this.of_SetError(TRUE) 2 エ ラ ー メ ッ セージ ソ ース を指定 し ます。 • ソ ース が フ ァ イ ルの場合は、 次の関数を呼び出 し ま す。 this.inv_error.of_SetPredefinedSource & ("c:¥eisapp¥eiserr.txt") • ソ ース がデー タ ベー ス の場合は、 次の関数を呼び出 し ま す。 this.inv_error.of_SetPredefinedSource & (itr_error) エ ラ ー メ ッ セージの ソ ース メ ッ セージ ソ ー ス と し て フ ァ イ ルを使 う 場合は、PFC.DB メ ッ セー ジ テーブルにあ る 行のすべて を その フ ァ イ ルに入れておかな けれ ばな り ま せん。 列は タ ブで区切っ てお く 必要があ り ま す。 PFC は、 あ る 特定の状況の下では定義済み メ ッ セージ を使用 し ま す。 メ ッ セージ サービ ス を使用可能に し た あ と メ ッ セージ表示エ ラ ーが出た ら 、 エ ラ ー メ ッ セージ ソ ース が正 し く 設定 さ れてい る か を確認 し て く だ さ い。 追加 さ れたユーザ定義 メ ッ セージの形式は、 メ ッ セージ テーブル の 形 式 と 一 致 し て い な け れ ば な り ま せ ん ( こ の 形 式 は、 d_definedmessages デー タ ウ ィ ン ド ウ オ ブ ジ ェ ク ト で も 使われ ま す)。 3 (オプシ ョ ン) ロ グ フ ァ イ ルの名前を指定 し ま す ( ロ ギ ン グ を使用 不可にす る には、 of_SetLogFile を呼び出 し て空の文字列を渡 し ま す)。 this.inv_error.of_SetLogFile & ("c:¥workingdir¥errlog.txt") PFC Library ユーザーズ ガ イ ド 65 ア プ リ ケーシ ョ ン サー ビ ス 4 (オプシ ョ ン) ユーザ ID を指定 し ま す ( メ ッ セージ ロ ギ ン グに使 われた も の)。 this.inv_error.of_SetUser & (this.of_GetUserID()) 5 (オプシ ョ ン) エ ラ ー サービ ス が自動通知お よ び ロ ギ ン グ を提供す る 先の メ ッ セージの型を指定 し ま す。 this.inv_error.of_SetNotifySeverity(5) this.inv_error.of_SetLogSeverity(4) 6 (オプシ ョ ン) ア プ リ ケーシ ョ ン がエ ラ ー サービ ス の自動通知機能 を使用 し てい る 場合は、 現行ユーザの電子 メ ール ID と パ ス ワー ド を指定 し ま す。 自動通知を受け る ユーザの電子 メ ール ID も 指定 し ま す。 こ の例では、 電子 メ ール ID と ユーザ パ ス ワ ー ド を格納す る メ カ ニ ズ ム を想定 し てい ま す。 this.inv_error.of_SetNotifyConnection & (ims_mailsess) this.inv_error.of_SetNotifyWho(is_autonotify) n_cst_appmanager の pfc_Open イ ベ ン ト 上述の全 ス テ ッ プ は、 n_cst__appmanager の pfc_Open イ ベ ン ト に コ ー ド で き ま す。 7 ア プ リ ケーシ ョ ン のエ ラ ー チ ェ ッ ク を行 う 際に、 of_Message 関数 を呼び出 し て メ ッ セージ を表示 し 、 必要な ら ば ロ グ と 通知 も 表示 し ま す。 of_Message 関数を使えば、 メ ッ セージ デー タ ベース を使 用す る こ と も メ ッ セージ テ キ ス ト を動的に指定す る こ と も で き ま す。 次の例は メ ッ セージ デー タ ベース を使用 し てい ま す。 gnv_app.inv_error.of_Message & ("EIS0210") ❖ シ ン ボ リ ッ ク パ ラ メ ー タ を使 う には (定義済み メ ッ セージの場合のみ) 1 メ ッ セージ テーブルで メ ッ セージ を定義 し ま す。 実行時にシ ン ボ リ ッ ク パ ラ メ ー タ に置 き 換え る べ き 場所を マー ク す る た め % 印 を付け ま す。 た と えば、 以下の よ う に定義 し ま す。 EIS1030 2 Unable to find the file % in % 置 き 換え引数の配列を作成 し ま す。 String ls_parms[ ] ls_parms[1] = "logfile.txt" ls_parms[2] = "c:¥windows¥system" 66 PowerBuilder 第4章 3 PFC サー ビ スの使い方 of_Message を呼び出 し て、 配列を渡 し ま す。 gnv_app.inv_error.of_Message("EIS1030", ls_parms) PFC は、 1 番目の % を ls_parms 配列の 1 番目の要素 と 置 き 換え、 2 番目の % をの ls_parms 配列 2 番目の要素 と 置 き 換え ま す。 セキ ュ リ テ ィ サービ ス 概要 PFC のセ キ ュ リ テ ィ 機能は、 アプ リ ケーシ ョ ン で必要 と さ れ る 多 く の セ キ ュ リ テ ィ 機能を提供 し ま す。 た と えば、 管理 コ ン ポーネ ン ト や実 行時セキ ュ リ テ ィ オブジ ェ ク ト で あ る n_cst_security を提供 し ま す。 用途 PFC セ キ ュ リ テ ィ シ ス テ ム を使用す る には、 ま ず、 ユーザ と グループ を定義 し 、 それ を ウ ィ ン ド ウ 、 メ ニ ュ ー、 ユーザ オブ ジ ェ ク ト 、 お よ び コ ン ト ロ ールに関連付け、アプ リ ケーシ ョ ン に コ ー ド を記述 し ま す。 ❖ セキ ュ リ テ ィ サービ ス を使用する には 1 第 7 章 「PFC ユーテ ィ リ テ ィ 」 の説明に従っ て、 ユーザ と グルー プ を定義 し ま す。 2 第 7 章 「PFC ユーテ ィ リ テ ィ 」 の説明に従っ て、 ア プ リ ケーシ ョ ン の ウ ィ ン ド ウ コ ン ト ロ ール、 メ ニ ュ ー、 ユーザ オブ ジ ェ ク ト 、 お よ び コ ン ト ロ ールに対 し 、 セ キ ュ リ テ ィ を定義 し ま す。 3 n_cst_appmanager の of_SetSecurity 関数を呼び出 し て、 セ キ ュ リ テ ィ オブ ジ ェ ク ト を作成 し ま す (以下の例は n_cst_appmanager の pfc_Open イ ベン ト か ら の も のです)。 this.of_SetSecurity(TRUE) 4 セ キ ュ リ テ ィ デー タ ベース に対 し て ト ラ ンザ ク シ ョ ン オブジ ェ ク ト を 設定 し ま す。 次 の 例 で は、 n_cst_appmanager の n_tr 型 の itr_sec イ ン ス タ ン ス変数を想定 し てい ま す。 itr_sec = CREATE n_tr CONNECT using itr_sec; 5 of_InitSecurity 関数を呼び出 し て、 セ キ ュ リ テ ィ オブジ ェ ク ト を初 期化 し ま す。 this.inv_security.of_InitSecurity & (itr_sec, "EISAPP", & gnv_app.of_GetUserID(), "Default") PFC Library ユーザーズ ガ イ ド 67 ア プ リ ケーシ ョ ン サー ビ ス n_cst_appmanager の pfc_Open イ ベ ン ト 上述の全 ス テ ッ プ は、 n_cst__appmanager の pfc_Open イ ベ ン ト に コ ーデ ィ ン グで き ま す。 6 ア プ リ ケ ー シ ョ ン を 終了す る 際にデー タ ベー ス と の接続 を 解除 し 、 ト ラ ン ザ ク シ ョ ン オ ブ ジ ェ ク ト を 破棄 し ま す。 次 の 例 は n_cst_appmanager オブジ ェ ク ト の pfc_Close イ ベン ト に コ ーデ ィ ン グで き ま す。 DISCONNECT using itr_sec; Destroy itr_sec 7 セキ ュ リ テ ィ の適用対象 と な る ウ ィ ン ド ウ の Open イ ベン ト ま た は pfc_PreOpen イ ベン ト で、 of_SetSecurity 関数を呼び出 し ま す。 IF NOT & gnv_app.inv_security.of_SetSecurity(this) THEN MessageBox(" セキ ュ リ テ ィ ", & " セキ ュ リ テ ィ を設定で き ません ") Close(this) END IF of_SetSecurity を呼び出す こ と ので き る そのほかの場所 セキ ュ リ テ ィ を実装 し たいデー タ ウ ィ ン ド ウ 、 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト 、 ま た は メ ニ ュ ー の Constructor イ ベ ン ト か ら n_cst__security の of_SetSecurity 関数を呼び出す こ と がで き ま す。 ト ラ ンザク シ ョ ン登録サービ ス 概要 ト ラ ン ザ ク シ ョ ン登録サービ ス は、 アプ リ ケーシ ョ ン で使用 さ れ る ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト を追跡 し ま す。 こ のサービ ス は、 n_tr オ ブ ジ ェ ク ト か ら 継承 し た ト ラ ン ザ ク シ ョ ン オ ブ ジ ェ ク ト を 対象 と し て い ま す。 PFC は、 n_cst_trregistration ユーザ オ ブ ジ ェ ク ト を 通 し て ト ラ ン ザ ク シ ョ ン登録を使用可能に し ま す。 用途 68 こ のサービ ス は、 ア プ リ ケーシ ョ ン で複数の ト ラ ンザ ク シ ョ ン を使用 す る 場合に、 ト ラ ン ザ ク シ ョ ン を追跡す る ために使用 し ま す。 PowerBuilder 第4章 PFC サー ビ スの使い方 ア プリ ケ ーショ ン が終了する と 、 こ のオブジェ ク ト は開かれている すべ ての登録済みト ラ ン ザク ショ ン を 自動的に破棄し ま す。 閉じ る ト ラ ン ザ ク シ ョ ン を コ ミ ッ ト する と き は、 n_tr オブジェ ク ト の ib_autorollback イ ン ス タ ン ス 変数を TRUE に設定し ま す。 閉 じ る ト ラ ン ザ ク シ ョ ン を ロ ールバ ッ ク す る と き は、 ib_autorollback イ ン ス タ ン ス 変数 を FALSE に設定 し ま す。 こ の イ ン ス タ ン ス 変数は、 n_tr の of_SetAutoRollback 関 数を使用 し て設定 し ま す。 ❖ ト ラ ンザ ク シ ョ ン登録サー ビ ス を使用可能にする には • n_cst_appmanager の of_SetTrRegistration 関数を呼び出 し ま す。 gnv_app.of_SetTrRegistration(TRUE) ア プ リ ケーシ ョ ン マネージ ャ は、 ア プ リ ケーシ ョ ン が終了す る と き 、 ト ラ ンザ ク シ ョ ン登録サービ ス を自動的に破棄 し ま す。 ❖ ト ラ ンザ ク シ ョ ン を登録す る には • n_cst_trregistration オブ ジ ェ ク ト の of_Register 関数を呼び出 し ま す。 gnv_app.inv_trregistration.of_Register(SQLCA) ❖ ト ラ ンザ ク シ ョ ン登録サー ビ ス を破棄す る と き に、 こ のサービ スが開かれて い る ト ラ ンザ ク シ ョ ン を コ ミ ッ ト す るか、 ロ ールバ ッ ク す るかを制御す る に は • n_tr の of_SetAutoRollback 関数を呼び出 し ま す。 SQLCA.of_SetAutoRollback(TRUE) autorollback イ ン ス タ ン ス 変数を TRUE に設定 し てオブジ ェ ク ト が ま だ接続 さ れてい る 場合、 ト ラ ン ザ ク シ ョ ン 登録サービ ス が破棄 さ れ る と 、 開いてい る ト ラ ン ザ ク シ ョ ン は ロ ールバ ッ ク さ れ ま す。 こ の変数を FALSE に設定 し た場合には、 開かれてい る ト ラ ン ザ ク シ ョ ン を コ ミ ッ ト し ま す。 た だ し 、 確実に ト ラ ン ザ ク シ ョ ン を 適 切 に 終了 し た い の で あ れ ば、 ア プ リ ケ ー シ ョ ン で COMMIT、 ROLLBACK、 DISCONNECT のいずれか を 明示的に発行す る 必要 があ り ま す。 ❖ ト ラ ンザ ク シ ョ ン名を設定する には • n_tr の of_SetName 関数を呼び出 し ま す。 itr_security.of_SetName("Security") PFC Library ユーザーズ ガ イ ド 69 デー タ ウ ィ ン ド ウ サー ビ ス ❖ すべての ト ラ ンザ ク シ ョ ン を明示的に閉 じ る には 1 ア プ リ ケーシ ョ ン マネージ ャ の pfc_Close イ ベン ト 、ま たはそのほ かの適切な場所で、 n_cst_trregistration の of_GetRegistered 関数を呼 び出 し ま す。 n_tr ltr_trans[] Integer li_max, li_count li_max = & this.inv_trregistration.of_GetRegistered (ltr_trans) 2 & 必要に応 じ て、 ト ラ ン ザ ク シ ョ ン を コ ミ ッ ト し た り 破棄 し なが ら 、 n_tr 配列をループ し ま す。 FOR li_count = 1 to li_max COMMIT using ltr_trans[li_count]; DESTROY ltr_trans[li_count] NEXT デー タ ウ ィ ン ド ウ サービ ス 実用性に富む PowerBuilder ア プ リ ケーシ ョ ン では、 デー タ ウ ィ ン ド ウ コ ン ト ロ ールが数多 く 使用 さ れ ま す。 PFC では、 強力な機能を アプ リ ケーシ ョ ン に追加す る ために、 多彩なデー タ ウ ィ ン ド ウ サービ ス が提 供 さ れてい ま す。こ れ ら のサービ ス に よ っ て、開発者が実際に コ ーデ ィ ン グす る 必要がな く 、 あ る と し て も わずか と な り ま す。 PFC は共通の先祖か ら 継承 し た子孫の カ ス タ ム ク ラ ス ユ ーザ オ ブ ジ ェ ク ト に よ っ て、 デー タ ウ ィ ン ド ウ サービ ス を実装 し てい ま す。 先 祖オブジ ェ ク ト には、 複数のサービ ス で必要 と さ れ る 関数、 イ ベン ト 、 お よ び イ ン ス タ ン ス 変数が あ り ま す。 さ ら に、 各デー タ ウ ィ ン ド ウ サービ ス には、 そのサービ ス 固有の関数や イ ベン ト 、 イ ン ス タ ン ス 変 数があ り ま す。 デー タ ウ ィ ン ド ウ サー ビ スへのア ク セ ス 70 デー タ ウ ィ ン ド ウ サー ビ ス に ア ク セ ス す る には、 u_dw ユーザ オ ブ ジ ェ ク ト を も と に し て、 デー タ ウ ィ ン ド ウ オ ブ ジ ェ ク ト を 作成 し ま す。 u_dw には、 以下の も のが含 ま れてい ま す。 • デー タ ウ ィ ン ド ウ サービ ス を使用可能ない し 使用不可にす る 関数 • 各サービ ス の関数、 イ ベン ト 、 お よ び イ ン ス タ ン ス 変数を参照す る た めに使用で き る イ ン ス タ ン ス 変数 ( こ の種の イ ン ス タ ン ス 変 数を参照変数 と 呼びま す) PowerBuilder 第4章 PFC サー ビ スの使い方 • デー タ ウ ィ ン ド ウ サービ ス の関数 と イ ベン ト を呼び出す、 組み込 み イ ベン ト と ユーザ イ ベン ト • ア プ リ ケーシ ョ ン 固有の処理 を実行す る コ ー ド を 記述す る た めの 未記述のユーザ イ ベン ト すべてのデー タ ウ ィ ン ド ウ コ ン ト ロールに対す る u_dw の使用 ア プ リ ケ ーシ ョ ン のすべて のデー タ ウ ィ ン ド ウ コ ン ト ロ ールに対 し て、 u_dw ユーザ オブジ ェ ク ト を使用 し て く だ さ い。 デー タ ウ ィ ン ド ウ サー ビ ス を使用可能に する それぞれのデー タ ウ ィ ン ド ウ コ ン ト ロ ールに よ っ て、 要求 さ れたデー タ ウ ィ ン ド ウ サー ビ ス だ け が有効に な り ま す。 こ れに よ っ て ア プ リ ケーシ ョ ンのオーバーヘ ッ ド が最小化 さ れ ま す。 次の表はデー タ ウ ィ ン ド ウ サービ ス と 、 その実装方法を示 し た も ので す。 デー タ ウ ィ ン ド ウ サー ビ ス 基本デー タ ウ ィ ン ド ウ サービ ス (ほか のすべてのサービ ス に対す る先祖) 実装方法 n_cst_dwsrv ド ロ ッ プ ダ ウ ン検索サービ ス n_cst_dwsrv_dropdownsearch フ ィ ル タ サービ ス n_cst_dwsrv_filter 検索 / 置換サー ビ ス n_cst_dwsrv_find リ ン ク サービ ス n_cst_dwsrv_linkage マルチテーブル更新サービ ス n_cst_dwsrv_multitable 印刷プ レ ビ ュ ー サービ ス n_cst_dwsrv_printpreview デー タ ウ ィ ン ド ウ プ ロ パ テ ィ サー ビ ス n_cst_dwsrv_property ク エ リ モー ド サービ ス n_cst_dwsrv_querymode レ ポー ト サービ ス n_cst_dwsrv_report 必須カ ラ ム サービ ス n_cst_dwsrv_reqcolumn デー タ ウ ィ ン ド ウ サ イ ズ変更サー ビ ス n_cst_dwsrv_resize 行管理サービ ス n_cst_dwsrv_rowmanager 行選択サービ ス n_cst_dwsrv_rowselection ソ ー ト サービ ス n_cst_dwsrv_sort PFC Library ユーザーズ ガ イ ド 71 デー タ ウ ィ ン ド ウ サー ビ ス デー タ ウ ィ ン ド ウ サービ スの先祖 デー タ ウ ィ ン ド ウ サービ ス の先祖は、ほかのデー タ ウ ィ ン ド ウ サービ ス で使用す る イ ン ス タ ン ス 変数や イ ベン ト 、 関数を持っ てい ま す。 ま た、 多 く の先祖関数 も 使用で き ま す。 概要 PFC は n_cst_dwsrv ユーザ オブ ジ ェ ク ト を通 じ て、 基本デー タ ウ ィ ン ド ウ サービ ス を使用可能に し ま す。 デー タ ス ト ア サービ ス こ のサービ ス は、n_cst_dssrv ユーザ オブジ ェ ク ト を通 じ て n_ds デー タ ス ト アで利用で き ま す。 用途 こ のサービ ス は、 以下の よ う な一般的なデー タ ウ ィ ン ド ウ 機能に対 し て使用 し ま す。 • デー タ ウ ィ ン ド ウ 情報の取得 と 設定 • PowerScript の Modify 関数や Describe 関数に代わ る 機能 • デー タ ウ ィ ン ド ウ サービ ス のデフ ォ ル ト 先祖関数は、 子孫で使用可能 n_cst_dwsrv ユーザ オブ ジ ェ ク ト は、 すべてのデー タ ウ ィ ン ド ウ サー ビ ス の先祖で あ る ため、 そ の関数はすべての子孫のデー タ ウ ィ ン ド ウ サービ ス オブ ジ ェ ク ト で使用で き ま す。 ❖ 基本デー タ ウ ィ ン ド ウ サービ ス を使用可能にす る には • u_dw オブ ジ ェ ク ト の of_SetBase 関数を呼び出 し ま す。 dw_emplist.of_SetBase(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ デー タ ウ ィ ン ド ウ情報に ア ク セ スす る には • 72 以下の n_cst_dwsrv オブ ジ ェ ク ト 関数のいずれか を呼び出 し ま す。 関数 of_Describe 呼び出す時点 of_GetHeaderName 指定 さ れたデー タ ウ ィ ン ド ウ カ ラ ム のヘ ッ ダ名 を調べ る と き of_GetHeight カ ラ ム の高 さ を調べ る と き デー タ ウ ィ ン ド ウ の属性やカ ラ ム に関す る 情報に ア ク セ スす る と き PowerBuilder 第4章 関数 of_GetObjects ❖ 呼び出す時点 デー タ ウ ィ ン ド ウ 内のオブ ジ ェ ク ト 名に ア ク セ ス する と き of_GetWidth カ ラ ム の幅を調べ る と き of_GetItem of_GetItemAny デー タ 型 と は無関係に、 デー タ ウ ィ ン ド ウ カ ラ ム のデー タ を取 り 出す と き デー タ ウ ィ ン ド ウ デー タ を設定す る には • ❖ PFC サー ビ スの使い方 以下の n_cst_dwsrv オブ ジ ェ ク ト 関数のいずれか を呼び出 し ま す。 関数 of_Modify 呼び出す時点 of_SetItem デー タ 型 と は無関係に、 デー タ ウ ィ ン ド ウ カ ラ ム の表示 値を設定 し た り 、 修正す る と き デー タ ウ ィ ン ド ウ のプ ロ パテ ィ やカ ラ ム を設定す る と き デー タ ウ ィ ン ド ウ内のすべての ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ を リ フ レ ッ シ ュ する には • of_PopulateDDDWs 関数を呼び出 し ま す。 Integer li_return li_return = & dw_emplist.inv_base.of_PopulateDDDWs() gnv_app.of_GetFrame().SetMicroHelp & (String(li_return) + " DDDW columns refreshed") ❖ デー タ ウ ィ ン ド ウ サービ スのデ フ ォル ト にア ク セスする には • PFC Library ユーザーズ ガ イ ド 以下の n_cst_dwsrv オブ ジ ェ ク ト 関数のいずれか を呼び出 し ま す。 関数 of_GetColumnDisplayName 呼び出す時点 of_GetColumnNameStyle カ ラ ム を参照 し た際、 何をデー タ ウ ィ ン ド ウ サー ビ ス が表示す る か を 調べ るとき of_GetDefaultHeaderSuffix ヘ ッ ダ カ ラ ム のデ フ ォ ル ト デー タ ウ ィ ン ド ウ 接尾辞を調べ る と き of_GetDisplayItem of_GetDisplayUnits CloseQuery メ ッ セージ を 表示す る 際、 表示 さ れたテ キ ス ト を調べ る と き カ ラ ム を参照 し た際、 いつデー タ ウ ィ ン ド ウ サー ビ ス が表示 を 行 う か を 調 べる と き 73 デー タ ウ ィ ン ド ウ サー ビ ス 関数 of_SetColumnDisplayNameStyle 呼び出す時点 以下 の カ ラ ム を 参照す る 際、 デー タ ウ ィ ン ド ウ サー ビ ス が表示す る カ ラ ム の種類を指定す る と き • デー タ ウ ィ ン ド ウ カ ラ ム名 • デー タ ベー ス カ ラ ム名 • デー タ ウ ィ ン ド ウ カ ラ ム ヘ ッ ダ名 of_SetDefaultHeaderSuffix ヘ ッ ダ カ ラ ム のデ フ ォ ル ト のデー タ ウ ィ ン ド ウ 接尾辞を指定す る と き (デ フ ォ ル ト は _t) of_SetDisplayItem of_SetDisplayUnits CloseQuery メ ッ セージ を表示す る 際、 表示 さ れ る テキ ス ト を指定す る と き ド ロ ッ プダウン デー タ ウ ィ ン ド ウ検索サービ ス PFC ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ 検索サービ ス は、 入力 し た英字 か ら 始ま る 項目に到達す る ま で、 ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ を 自動的に ス ク ロ ール し ま す。 た と えば、 ユーザが ド ロ ッ プ ダ ウ ン デー タ ウ ィ ン ド ウ で S と 入力す る と 、 こ のサービ ス は S か ら 始ま る 最初の 項目に自動的に ス ク ロ ール し ま す。 ユーザが A と 入力すれば、 サービ ス は A か ら 始ま る 最初の項目に ス ク ロ ール し ま す。 概要 PFC は n_cst_dwsrv_dropdownsearch ユーザ オブ ジ ェ ク ト を通 じ て、 ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ 検索サービ ス を使用可能に し ま す。 ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ 検索サービ ス を使用可能に し 、 2 つ のデー タ ウ ィ ン ド ウ イ ベン ト に コ ー ド を書 き 込む こ と に よ っ て、 こ の サービ ス を設定す る こ と がで き ま す。 用途 ❖ ド ロ ッ プ ダウ ン デー タ ウ ィ ン ド ウ検索サー ビ ス を使用可能にする には 1 u_dw の of_SetDropDownSearch 関数を呼び出 し ま す。 this.of_SetDropDownSearch(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 2 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの EditChanged イ ベン ト に、 n_cst_dtopdownsearch の pfc_EditChanged イ ベン ト の呼び出 し を追 加 し ま す。 this.inv_dropdownsearch.Event pfc_EditChanged & (row, dwo, data) 74 PowerBuilder 第4章 3 PFC サー ビ スの使い方 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの ItemFocusChanged イ ベン ト に、 n_cst_dwsrv_dropdownsearch の pfc_ItemFocus Changed イ ベ ン ト の 呼び出 し を追加 し ま す。 this.inv_dropdownsearch.Event & pfc_ItemFocusChanged(row, dwo) 4 of_AddColumn 関数を呼び出す こ と に よ り 、 使用可能にすべ き サー ビ ス に対 し て ド ロ ッ プ ダ ウ ン デー タ ウ ィ ン ド ウ カ ラ ム を 指定 し ま す。 this.inv_dropdownsearch.of_AddColumn("dept_id") フ ィ ル タ サービ ス 概要 PFC フ ィ ル タ サービ ス は、 デー タ ウ ィ ン ド ウ 用の使いやすい フ ィ ル タ 機能を提供 し ま す。 フ ィ ル タ 機能を アプ リ ケーシ ョ ン に追加す る と き は、 こ のサービ ス を 使用 し ま す。 PFC は n_cst_dwsrv_filter ユーザ オブジ ェ ク ト を通 じ て、フ ィ ル タ サー ビ ス を使用可能に し ま す。 用途 フ ィ ル タ サー ビ ス は フ ィ ル タ ダ イ ア ロ グ ボ ッ ク ス を自動的に表示 し ま す。 必要な作業は、 サービ ス を使用可能に し 、 必要な フ ィ ル タ 様式 を指定す る だけです。 フ ィ ル タ ダ イ ア ロ グ ボ ッ ク ス の様式は以下の 3 種類か ら 選択で き ま す。 • PFC Library ユーザーズ ガ イ ド PowerBuilder のデフ ォ ル ト の フ ィ ル タ ダ イ ア ロ グボ ッ ク ス 75 デー タ ウ ィ ン ド ウ サー ビ ス ❖ • [ ド ロ ッ プ ダ ウ ン] リ ス ト ボ ッ ク ス イ ン タ フ ェ ース (w_filtersimple) • タ ブ付 イ ン タ フ ェ ース (w_filterextended) フ ィ ル タ サービ ス を使用可能にす る には • u_dw オブ ジ ェ ク ト の of_SetFilter 関数を呼び出 し 、 ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト を設定 し 、 フ ィ ル タ ダ イ ア ロ グ ボ ッ ク ス でデー タ ウ ィ ン ド ウ のカ ラ ム ヘ ッ ダ名を使用す る こ と を指定 し ま す。 dw_emp.of_SetFilter(TRUE) dw_emp.of_SetTransObject(SQLCA) 76 PowerBuilder 第4章 PFC サー ビ スの使い方 dw_emp.inv_filter.of_SetColumnDisplayNameStyle & (dw_emp.inv_filter.HEADER) カ ラ ム ヘ ッ ダ によ る フ ィ ル タ 操作 カラ ム ヘッ ダによ っ てフ ィ ルタ 操作を 行う 場合には、 データ ウ ィ ン ド ウ に追加さ れる すべてのカラ ム にヘッ ダがある こ と 、こ れら がヘッ ダの命名規則に準拠し ている こ と を 確認し てく ださ い。デフ ォ ルト の 命名規則では、 接尾辞 _t を 使用し ま すが、 of_SetDefaultHeaderSuffix 関数を 呼び出し てこ れを 変更する こ と ができ ま す。 デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ フ ィ ル タ 様式 を指定す る には • of_SetStyle 関数を呼び出 し 、 フ ィ ル タ ダ イ ア ロ グボ ッ ク ス の種類 を指定 し ま す。 dw_emplist.inv_filter.of_SetStyle (dw_emp.inv_filter.SIMPLE) ❖ & フ ィ ル タ ダ イ ア ロ グボ ッ ク ス を表示す る には • pfc_FilterDlg イ ベン ト を呼び出 し ま す。 dw_emplist.inv_filter.Event pfc_FilterDlg( ) 通常、 開発者が こ の イ ベン ト を呼び出す必要は あ り ま せん。 ユー ザは メ ニ ュ ーバーか ら [表示|フ ィ ル タ の指定] を選択す る こ と に よ り 、 フ ィ ル タ ダ イ ア ロ グ ボ ッ ク ス を表示で き ま す。 検索 / 置換サービ ス 概要 PFC の検索サービ ス は、 ア プ リ ケーシ ョ ン のデー タ ウ ィ ン ド ウ に検索 / 置換機能を提供 し ま す。 PFC は n_cst_dwsrv_find ユーザ オブ ジ ェ ク ト を通 じ て、検索 / 置換サー ビ ス を使用可能に し ま す。 用途 検索サービ ス を使用すれば、 検索 / 置換機能をデー タ ウ ィ ン ド ウ に追 加 し 、 w_find ダ イ ア ロ グ ボ ッ ク ス ま たは w_replace ダ イ ア ロ グ ボ ッ ク ス を表示す る こ と がで き ま す。検索サービ ス が使用可能にな っ てか ら 、 ユーザが PFC の m_master メ ニ ュ ーか ら 継承 し た子孫の メ ニ ュ ーの メ ニ ュ ーバー で、 [編集|検索] ま た は [編集|置換] を 選択す る と 、 w_find ダ イ ア ロ グ ボ ッ ク ス ま たは w_replace ダ イ ア ロ グ ボ ッ ク ス が自 動的に表示 さ れ ま す。 PFC Library ユーザーズ ガ イ ド 77 デー タ ウ ィ ン ド ウ サー ビ ス ❖ 検索サー ビ ス を使用可能にする には • u_dw の of_SetFind 関数を呼び出 し ま す。 dw_emplist.of_SetFind(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ w_find ダ イ ア ロ グボ ッ ク ス を表示する には • u_dw の pfc_FindDlg イ ベン ト を呼び出 し ま す。 dw_emplist.Event pfc_FindDlg( ) 通常、 開発者が こ の イ ベン ト を呼び出す必要は あ り ま せん。 ユー ザは メ ニ ュ ーバーか ら [編集|検索] を選択す る こ と に よ り 、w_find ダ イ ア ロ グ ボ ッ ク ス を表示で き ま す。 ❖ w_replace ダ イ ア ロ グボ ッ ク ス を表示す る には • u_dw の pfc_ReplaceDlg イ ベン ト を呼び出 し ま す。 dw_emplist.Event pfc_ReplaceDlg( ) 通常、 開発者が こ の イ ベン ト を呼び出す必要は あ り ま せん。 ユー ザ は メ ニ ュ ー バ ー か ら [編集 |置換] を 選択す る こ と に よ り 、 w_replace ダ イ ア ロ グ ボ ッ ク ス を表示で き ま す。 リ ン ク サービ ス 概要 PFC の リ ン ク サービ ス は、 マ ス タ / 詳細デー タ ウ ィ ン ド ウ や、 デー タ ウ ィ ン ド ウ 間の同期を取 る よ う なデー タ ウ ィ ン ド ウ を作成す る のに役 立ち ま す。 リ ン ク サービ ス には以下の よ う な機能があ り ま す。 78 • リ ン ク ス タ イ ル 詳細デー タ ウ ィ ン ド ウ が、 行 を 取 り 出す の か、 フ ィ ル タ 行を 取 り 出すのか、 それ と も ア プ リ ケーシ ョ ン行を ス ク ロ ールす る のか を制御 し ま す。 • 更新ス タ イル • 行変更の確認 リ ン ク サービ ス が、 デー タ ウ ィ ン ド ウ を更新す る 方 法 を制御 し ま す (上か ら 下へ、 下か ら 上へ、 上か ら 下ついで下か ら 上、 下か ら 上ついで上か ら 下、 ま たは開発者指定の方法に よ る 更新)。 マ ス タ ーが行を変更す る と 、 詳細デー タ ウ ィ ン ド ウ に対 し て行われた修正が失われ る 場合に、 こ のオ プ シ ョ ン は確認 のダ イ ア ロ グ を表示 し ます。 PowerBuilder 第4章 • 削除の確認 PFC サー ビ スの使い方 ユーザが行を削除す る と 、 確認のダ イ ア ロ グ を表示 し ま す。 • カ スケー ド キー変更 ユーザがマ ス タ ーのキー値を変更す る と 、 リ ン ク サービ ス は自動的に詳細デー タ ウ ィ ン ド ウ を更新 し ま す。 • ス タ イルの削除 ユ ーザ が マ ス タ ー の行 を 削除す る と き 、 リ ン ク サー ビ ス が詳細行を 削除す る のか、 破棄す る のか、 あ る いはそ の ま ま 残すのか を こ のオプシ ョ ン で指示 し ま す。 • 拡張更新 リ ス ト ビ ュ ー、 ツ リ ービ ュ ー、 デー タ ス ト ア な ど 、 ほか の コ ン ト ロ ール をデフ ォ ル ト の保存処理に組み込みま す。 リ ン ク サービ ス は、 n_cst_luw お よ び w_master の pfc_Save プ ロ セ ス と 統合 さ れてい ま す。 デー タ ウ ィ ン ド ウ間のデー タ の共有 PowerScript の ShareData 関数を使用 し て、 マ ス タ ー デー タ ウ ィ ン ド ウ と 詳細デー タ ウ ィ ン ド ウ 間でデー タ を共有で き ま す。 ただ し 、 デー タ を共有す る と き には、 詳細デー タ ウ ィ ン ド ウ に行を挿入 し てはいけ ま せん。 PFC は、 n_cst_dwsrv_linkage ユーザ オブジ ェ ク ト を通 し て リ ン ク サー ビ ス を使用可能に し ま す。 リ ン ク サービ ス は、 複数のデー タ ウ ィ ン ド ウ 間で処理の同期を取 る と き に使用 し ま す。 ただ し 、 最 も 一般的な使い方は、 マ ス タ ー / 詳細 ウ ィ ン ド ウ の処理のために使用す る こ と です。 用途 ❖ リ ン ク サービ ス を使用可能にする には • u_dw オブジ ェ ク ト の of_SetLinkage 関数を呼び出 し ま す。 dw_emplist.of_SetLinkage(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ マス タ ー / 詳細処理の同期を取る ために リ ン ク サービ ス を使 う には 1 各デー タ ウ ィ ン ド ウ に対 し て 1 回ずつ、u_dw の of_SetLinkage 関数 を呼び出す こ と に よ り 、 マ ス タ と 詳細の両方のデー タ ウ ィ ン ド ウ に対 し て リ ン ク サービ ス を使用可能に し ま す。 dw_master.of_SetLinkage(TRUE) dw_detail.of_SetLinkage(TRUE) PFC Library ユーザーズ ガ イ ド 79 デー タ ウ ィ ン ド ウ サー ビ ス 2 u_dw の of_SetTransObject 関数を呼び出 し て、マ ス タ デー タ ウ ィ ン ド ウ と 詳細デー タ ウ ィ ン ド ウ の ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト を 設定 し ま す。 dw_master.inv_linkage.of_SetTransObject(SQLCA) 3 詳細デー タ ウ ィ ン ド ウ で of_SetMaster 関数を呼び出 し 、 詳細デー タ ウ ィ ン ド ウ を マ ス タ デー タ ウ ィ ン ド ウ に リ ン ク し ま す。 dw_detail.inv_linkage.of_SetMaster(dw_master) 4 of_Register 関数を呼び出 し て、 関連カ ラ ム を登録 し ま す。 dw_detail.inv_linkage.of_Register & ("emp_id","emp_id") 5 (オプシ ョ ン) サービ ス が リ ン ク チ ェ ーン の下か ら 上に、 デー タ ウ ィ ン ド ウ を 更新す る こ と を指定 し ま す (デフ ォ ル ト は上か ら 下 への更新)。 dw_detail.inv_linkage.of_SetUpdateStyle & (dw_detail.inv_linkage.BOTTOMUP) 6 of_SetStyle 関数を呼び出す こ と に よ り 、 マ ス タ ー内で行が変化 し た と き に、 詳細デー タ ウ ィ ン ド ウ で行 う 処理を設定 し ま す。 以下の例では、 マ ス タ ーが変更 さ れた と き に、 詳細デー タ ウ ィ ン ド ウ で行を検索す る こ と を指定 し てい ま す。 dw_detail.inv_linkage.of_SetStyle & (dw_detail.inv_linkage.RETRIEVE) 7 マ ス タ ー デー タ ウ ィ ン ド ウ の of_Retrieve 関数を呼び出 し ま す。 IF dw_master.of_Retrieve( ) = -1 THEN MessageBox(" エ ラ ー "," 検索エ ラ ー ") ELSE dw_master.SetFocus( ) END IF 上述のステ ッ プは、 1 つのス ク リ プ ト にま と めて記述で き ます 上記の ス テ ッ プは、 ウ ィ ン ド ウ の Open イ ベン ト な ど、 1 つの イ ベ ン ト に ま と めて コ ーデ ィ ン グで き ま す。 8 検索 ロ ジ ッ ク を マ ス タ デー タ ウ ィ ン ド ウ の pfc_Retrive イ ベン ト に 追加 し ま す。 Return this.Retrieve() 80 PowerBuilder 第4章 PFC サー ビ スの使い方 行の検索 リ ン ク サービ ス が検索に よ っ て詳細行を リ フ レ ッ シ ュ す る 場合には、 マ ス タ ー デー タ ウ ィ ン ド ウ に検索関数 を コ ーデ ィ ン グす る だ け で済 み ま す。 フ ィ ル タ オプシ ョ ンお よ びス ク ロ ール オプ シ ョ ン の場合は、 検索関数を詳細デー タ ウ ィ ン ド ウ に も コ ーデ ィ ン グ し な ければな り ま せん。 ❖ 行変更の確認 を使用可能にする には (検索ス タ イルのみ) 1 詳細デー タ ウ ィ ン ド ウ に対す る of_SetUpdateOnRowChange 関数を 呼び出 し ま す。 dw_detail.inv_linkage.of_SetUpdateOnRowChange(TRUE) 2 詳細デー タ ウ ィ ン ド ウ に対す る of_SetConfirmOnRowChange 関数 を呼び出 し ま す。 dw_detail.inv_linkage.of_SetConfirmOnRowChange (TRUE) ❖ & 削除の確認を使用可能にす る には 1 詳細デー タ ウ ィ ン ド ウ に対す る of_SetUpdateOnRowChange 関数を 呼び出 し ま す。 dw_detail.inv_linkage.of_SetUpdateOnRowChange(TRUE) 2 詳細デー タ ウ ィ ン ド ウ に対す る of_SetConfirmOnDelete 関数を呼び 出 し ま す。 dw_detail.inv_linkage.of_SetConfirmOnDelete(TRUE) ❖ カ スケー ド キー変更 を使用可能にする には • リ ン ケージ チ ェ イ ンの各デー タ ウ ィ ン ド ウ に対す る of_SetSyncOnKeyChange 関数を呼び出 し ま す。 dw_master.inv_linkage.of_SetSyncOnKeyChange(TRUE) dw_detail.inv_linkage.of_SetSyncOnKeyChange(TRUE) ❖ 削除ス タ イル を指定す る には • リ ン ケージ チ ェ イ ンのすべてのマ ス タ ー デー タ ウ ィ ン ド ウ に対 す る of_SetDeleteStyle 関数を呼び出 し ま す。 dw_master.inv_linkage.of_SetDeleteStyle & (dw_cust.inv_linkage.DISCARD_ROWS) PFC Library ユーザーズ ガ イ ド 81 デー タ ウ ィ ン ド ウ サー ビ ス ❖ 拡張更新を使用可能にする には • of_SetOtherSaveObjects 関数を呼び出 し て、 デフ ォ ル ト の保存プ ロ セ ス にほかの コ ン ト ロ ールを加え ま す。 PowerObject lpo_objs[ ] // こ の例では、 保存プ ロ セ スに、 lv_salesinfo ListView // を追加 し てい ます。 lpo_objs[1] = lv_salesinfo dw_master.inv_linkage.of_SetOtherSaveObjects & (lpo_objs) マルチ テーブル更新サービ ス PFC マルチテーブル更新サービ ス を使用す る と 、 複数のテーブルのカ ラ ム が指定 さ れたデー タ ウ ィ ン ド ウ を簡単に更新で き ま す。 概要 PFC は n_cst_dwsrv_multitable ユーザ オブジ ェ ク ト を通 じ て、 複数テー ブル更新サービ ス を使用可能に し ま す。 デー タ ス ト ア サービ ス こ のサービ ス は、 n_cst_dssrv_multitable ユーザ オブ ジ ェ ク ト を通 し て n_ds DataStore で使用可能にな り ま す。 用途 複数のテーブルのデー タ を保持す る デー タ ウ ィ ン ド ウ を更新す る 場合 に こ のサービ ス を使用 し ま す。 w_master オブジ ェ ク ト の pfc_update イ ベン ト を呼び出す と 、 PFC は ウ ィ ン ド ウ のすべてのデー タ ウ ィ ン ド ウ で、 指定 さ れたすべてのテーブルを更新 し ま す。 ❖ 複数テーブル更新サー ビ ス を使用可能にする には • u_dw の of_SetMultiTable 関数を呼び出 し ま す。 dw_emplist.of_SetMultiTable(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ 更新する テーブルを指定す る には • マルチテーブル更新の中で、 更新す る 各テーブルに対 し て 1 回ず つ、 of_Register 関数を呼び出 し ま す。 String 82 ls_projcols[ ] = {"proj_id"} & PowerBuilder 第4章 String PFC サー ビ スの使い方 ls_taskcols[ ] = & {"proj_id", "task_id"} dw_project.inv_multitable.of_Register ("project", ls_projcols) dw_project.inv_multitable.of_Register ("task", ls_taskcols) ❖ & & (オプ シ ョ ン) 複数のデー タ ベース テーブルのデー タ を保持する デー タ ウ ィ ン ド ウ を更新する には • w_master の pfc_Save イ ベン ト を呼び出 し ま す。 Integer li_return li_return = w_sheet.Event pfc_Save() ... 印刷プ レ ビ ュ ー サービ ス PFC の印刷プ レ ビ ュ ー サービ ス を使用すれば、 以下のデー タ ウ ィ ン ド ウ 印刷プ レ ビ ュ ー機能が使え る よ う にな り ま す。 概要 • 印刷プ レ ビ ュ ー • 先頭ページ、 次ページ、 前ページ、 最終ページ • 拡大 / 縮小 PFC の m_master メ ニ ュ ーか ら 継承 し た子孫の メ ニ ュ ーは、 こ の機能に 自動的にア ク セ ス で き ま す。 PFC は n_cst_dwsrv_printpreview ユーザ オブ ジ ェ ク ト を通 じ て、印刷プ レ ビ ュ ーサービ ス を使用可能に し ま す。 デー タ ス ト ア サービ ス こ のサー ビ ス は、 n_cst_dssrv_printpreview ユーザ オブ ジ ェ ク ト を 通 じ て n_ds デー タ ス ト アで使用可能にな り ま す。 用途 ア プ リ ケーシ ョ ン で印刷プ レ ビ ュ ー機能を使用す る には、 こ のサービ ス を 使 い ま す。 ユ ー ザ が メ ニ ュ ー バ ー か ら [フ ァ イ ル |印 刷 プ レ ビ ュ ー] を選択す る と 印刷プ レ ビ ュ ー モー ド に入 り ま す。 ❖ 印刷プ レ ビ ュ ー サービ ス を使用可能にする には • u_dw オブジ ェ ク ト の of_SetPrintPreview 関数を呼び出 し ま す。 dw_emplist.of_SetPrintPreview(TRUE) PFC Library ユーザーズ ガ イ ド 83 デー タ ウ ィ ン ド ウ サー ビ ス デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 デー タ ウ ィ ン ド ウ プ ロパテ ィ サービ ス デー タ ウ ィ ン ド ウ プ ロ パテ ィ サービ ス に よ っ て、デー タ ウ ィ ン ド ウ プ ロ パテ ィ の ウ ィ ン ド ウ を表示す る こ と がで き ま す。 こ れに よ り 以下の こ と が可能にな り ま す。 概要 • デー タ ウ ィ ン ド ウ サービ ス の使用可能 / 使用不可の切 り 替え • 選択 し たサービ ス の PFC 構文の表示 • デー タ ウ ィ ン ド ウ プ ロ パテ ィ へのア ク セ ス 、 お よ びデー タ ウ ィ ン ド ウ プ ロ パテ ィ の修正を イ ン タ ラ ク テ ィ ブに行 う デー タ ウ ィ ン ド ウ バ ッ フ ァ 行 と カ ラ ム の状態 統計情報 デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト 上に あ る 全オブ ジ ェ ク ト のプ ロ パテ ィ 225 ページの 「デー タ ウ ィ ン ド ウ プ ロ パテ ィ ウ ィ ン ド ウ 」 を参照 し て く だ さ い。 用途 こ のサービ ス は、 デー タ ウ ィ ン ド ウ プ ロ パテ ィ の ウ ィ ン ド ウ を使用可 能にす る ため使用 し ま す。 ❖ デー タ ウ ィ ン ド ウ プ ロパテ ィ を使用可能にする には 1 u_dw の of_SetProperty 関数を呼び出 し ま す。 dw_emplist.of_SetProperty(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 2 デー タ ウ ィ ン ド ウ が表示 さ れた ら 、 右 ク リ ッ ク し てデー タ ウ ィ ン ド ウ プ ロ パテ ィ を選択 し ま す。 デー タ ウ ィ ン ド ウ プ ロ パテ ィ ウ ィ ン ド ウ が表示 さ れ ま す。 84 PowerBuilder 第4章 PFC サー ビ スの使い方 ク エ リ モー ド サービ ス PFC ク エ リ モー ド サービ ス を使用す る と 、アプ リ ケーシ ョ ン で簡単に ク エ リ モー ド 機能を活用で き ます。 こ のサービ ス は、 ユーザが ク エ リ モー ド を理解 し 、 使用す る のに も 役立ち ま す。 概要 ク エ リ モー ド に な っ て い る 場合、 ユーザは右 ク リ ッ ク すればポ ッ プ ア ッ プ メ ニ ュ ーを表示す る こ と がで き ま す。 こ の メ ニ ュ ーには、 カ ラ ム、 演算子、 お よ び値を表示す る オプシ ョ ンがあ り ま す。 デー タ ウ ィ ン ド ウ ク エ リ モー ド の詳細については、『PowerBuilder ユー ザーズ ガ イ ド 』 マニ ュ アルを参照 し て く だ さ い。 PFC は n_cst_dwsrv_querymode ユーザ オブジ ェ ク ト を通 じ て、 ク エ リ モー ド サービ ス を使用可能に し ま す。 用途 こ のサービ ス は以下の よ う に使用 し ま す。 ❖ • ク エ リ モー ド を開始ま たは終了す る • ク エ リ モー ド で使用で き る カ ラ ム を指定す る • ク エ リ を フ ァ イ ルに保存 し た り 、 前に保存 し た ク エ リ を ロ ー ド す る ク エ リ モー ド サービ ス を使用可能にす る には • u_dw オブジ ェ ク ト の of_SetQuerymode 関数を呼び出 し ま す。 dw_emplist.of_SetQuerymode(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ ク エ リ モー ド を開始する には • of_SetEnabled 関数を呼び出 し 、 TRUE を渡 し ま す。 dw_emplist.inv_querymode.of_SetEnabled(TRUE) ❖ ク エ リ モー ド を終了する には • of_SetEnabled 関数を呼び出 し 、 FALSE を渡 し ま す。 dw_emplist.inv_querymode.of_SetEnabled(FALSE) ❖ ク エ リ モー ド で使用で き る カ ラ ム を指定す る には • PFC Library ユーザーズ ガ イ ド of_SetQueryCols 関数を呼び出 し 、 ク エ リ モー ド で使用で き る カ ラ ム を指定す る 配列を渡 し ま す。 85 デー タ ウ ィ ン ド ウ サー ビ ス String ls_cols[] ls_cols[1] = "emp_dept_id" ls_cols[2] = "emp_id" dw_emplist.inv_querymode.of_SetQueryCols(ls_cols) of_SetEnabled 関数を呼び出す と 、 ク エ リ モー ド サービ ス は ク エ リ モー ド で使用で き ないカ ラ ム を保護 し ま す。 ❖ ク エ リ を フ ァ イルに保存す る には 1 of_SetEnabled (TRUE) を呼び出 し 、 ク エ リ モー ド を開始 し ま す。 2 ユーザが ク エ リ モー ド の条件を指定で き る よ う に し ま す。 3 of_Save 関数を呼び出 し ま す。 こ の関数は、 ダ イ ア ロ グ ボ ッ ク ス を 表示す る ための も ので、 ク エ リ を 保存す る フ ァ イ ルの名前を入力す る よ う ユーザにプ ロ ン プ ト し ま す。 ❖ フ ァ イルか ら ク エ リ を ロー ド す る には • of_Load 関数を呼び出 し ま す。 こ の関数は、 ク エ リ が保存 さ れてい る フ ァ イ ル をデ ィ ス ク か ら 選 択す る こ と を 求め る ダ イ ア ロ グ ボ ッ ク ス を表示 し ま す。 ユーザが フ ァ イ ル を選択す る と 、 こ の関数は その フ ァ イ ルを 使用 し て選択 条件を決め ま す。 レ ポー ト サービ ス 概要 PFC の レ ポー ト サー ビ ス を 使用す る と 、 ア プ リ ケ ーシ ョ ン におけ る デー タ ウ ィ ン ド ウ の表示機能 と 印刷機能を拡張で き ま す。 レ ポー ト サービ ス が提供す る 多 く の関数では、 以下の 2 つのオプシ ョ ン のいずれか を選択で き る よ う にな っ てい ま す。すなわち、デー タ ウ ィ ン ド ウ の Modify 関数 を実行す る か、 ま たは開発者が独自に定義 し た Modify 関数への入力 と し て使用す る ため Modify 構文を返すかのいず れかです。 レ ポー ト サービ ス 関数を 3 つ以上連続 し て コ ー ド す る 場合 には、 開発者の書いた コ ー ド の中で、 文字列を連結 し Modify 関数を発 行す る こ と に よ り Modify 構文を返す よ う に し ま す。 86 PowerBuilder 第4章 PFC サー ビ スの使い方 デー タ ウ ィ ン ド ウは PowerBuilder 単位系ま たはピ ク セルを使用 こ のサービ ス を使用す る には、 デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト がデー タ ウ ィ ン ド ウ 単位 と し て PowerBuilder 単位系 (PBU) ま たは ピ ク セル を使用す る 必要があ り ま す。 デー タ ウ ィ ン ド ウ 単位 と し て 1/1000 イ ン チ単位や 1/1000 セ ンチ メ ー ト ル単位を使用す る よ う なデー タ ウ ィ ン ド ウ に対 し ては、 レ ポー ト サービ ス は機能 し ま せん。 PFC は n_cst_dwsrv_report ユーザ オブジ ェ ク ト を通 じ て、レ ポー ト サー ビ ス を使用可能に し ま す。 デー タ ス ト ア サービ ス こ の サー ビ ス は、 n_cst_dssrv_report ユーザ オ ブ ジ ェ ク ト に よ り n_ds DataStore で使用可能にな り ま す。 こ のサービ ス は以下の よ う に使用 し ま す。 用途 ❖ • デー タ ウ ィ ン ド ウ に項目を追加す る • 1 つ以上の個別のデー タ ウ ィ ン ド ウ か ら コ ン ポ ジ ッ ト デー タ ウ ィ ン ド ウ を作成す る (複数のデー タ ウ ィ ン ド ウ を 1 つの レ ポー ト と し て印刷で き る よ う にす る ) • 書式を設定 し 、 印刷す る • 背景、 色、 枠線を設定す る • 現行サ イ ズ を基準に し てデー タ ウ ィ ン ド ウ を拡大す る レポー ト サービ ス を使用可能にす る には • u_dw の of_SetReport 関数を呼び出 し ま す。 dw_emplist.of_SetReport(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ 項目 をデー タ ウ ィ ン ド ウに追加する には • PFC Library ユーザーズ ガ イ ド 以下のいずれかの n_cst_dwsrv_report 関数を呼び出 し ま す。 関数 of_AddCompute 内容 計算カ ラ ム を追加す る of_AddLine 区分線を追加す る of_AddPicture ビ ッ ト マ ッ プ を追加す る of_AddText テ キ ス ト を追加す る 87 デー タ ウ ィ ン ド ウ サー ビ ス ❖ コ ン ポ ジ ッ ト デー タ ウ ィ ン ド ウ を作成する には 1 of_CreateComposite 関数を呼び出 し 、コ ン ポ ジ ッ ト デー タ ウ ィ ン ド ウ 構成情報を渡 し ま す。 String String ls_dws[ ], ls_trailfooter[ ] ls_slide[ ] String Integer Boolean Border ls_return li_return lb_vertical lbo_border[ ] lb_vertical = TRUE ls_dws[1] = "d_employee" ls_dws[2] = "d_benefits" ls_trailfooter[1] = "No" ls_trailfooter[2] = "Yes" ls_slide[1] = "AllAbove" ls_slide[2] = "AllAbove" lbo_border[1] = Lowered! lbo_border[2] = Lowered! li_Return = & dw_composite.inv_report.of_CreateComposite & (ls_dws, lb_vertical, ls_trailfooter, & ls_slide, lbo_border) IF li_Return = 1 THEN dw_composite.SetTransObject(SQLCA) dw_composite.Event pfc_Retrieve( ) END IF 2 必要に応 じ て、 コ ン ポ ジ ッ ト デー タ ウ ィ ン ド ウ の印刷ま たは表示 を行い ま す。 dw_composite.inv_report.of_PrintReport & (TRUE, FALSE) ❖ デー タ ウ ィ ン ド ウ を印刷す る には • ❖ デ フ ォ ル ト 、 色、 枠線を設定す る には • 88 of_PrintReport 関数を呼び出 し ま す。 以下のいずれかの n_cst_dwsrv_report 関数を呼び出 し ま す。 PowerBuilder 第4章 ❖ PFC サー ビ スの使い方 関数 of_SetDefaultBackColor of_SetDefaultBorder of_SetDefaultCharset of_SetDefaultColor of_SetDefaultFontFace of_SetDefaultFontSize 内容 of_SetBorder デー タ ウ ィ ン ド ウ 内の 1 つ以上の オ ブ ジ ェ ク ト の枠線を修正す る of_SetColor デー タ ウ ィ ン ド ウ 内の 1 つ以上の オ ブ ジ ェ ク ト の色 と 背景色 (可能な場合) を 修正す る デー タ ウ ィ ン ド ウ のデ フ ォ ル ト を 修正す る デー タ ウ ィ ン ド ウの拡大 / 縮小を制御する には • of_SetRelativeZoom 関数を呼び出 し ま す。 拡大 / 縮小率は現行の表示を基準にす る of_SetRelativeZoom 関数は現行の拡大 / 縮小率に基づいて表示倍率 を変更 し ま す。 た と えば、 デー タ ウ ィ ン ド ウ が 80% で表示 さ れて い る と き に of_SetRelativeZoom (50) を指定 し た場合、こ の関数は拡 大 / 縮小率を 40% に変更 し ま す。 必須カ ラム サービ ス 概要 PFC は必須カ ラ ム サービ ス を提供 し ま す。 こ のサービ ス は必須フ ィ ー ル ド に対す る デフ ォ ル ト のデー タ ウ ィ ン ド ウ 処理を使用可能ない し 使 用不可に し ま す。 こ のサービ ス を使用す る と 、 デー タ ウ ィ ン ド ウ 内で 相互に依存す る フ ィ ール ド を ア プ リ ケーシ ョ ン で簡単に処理で き る よ う にな り ま す。 こ のサービ ス は、 null プ ロ パテ ィ を使用す る デー タ ウ ィ ン ド ウ カ ラ ム にだけ適用 さ れ ま す。 た と えば、 EditMasks には こ のプ ロ パテ ィ がない ため、 必須カ ラ ム サービ ス はエデ ィ ッ ト マ ス ク に適用 さ れ ま せん。 PFC は n_cst_dwsrv_reqcolumn ユーザ オブジ ェ ク ト を通 じ て、必須カ ラ ム サービ ス を使用可能に し ま す。 用途 デー タ ウ ィ ン ド ウ の必須フ ィ ール ド の処理は、 GUI アプ リ ケーシ ョ ン が提供す る ユーザ指示の イ ン タ フ ェ ー ス の働 き を妨げ る こ と があ り ま す。 必須カ ラ ム サービ ス を使用す る と 、 エ ン ド ユーザがデー タ 入力を 終了す る ま で、 必須フ ィ ール ド の処理を遅 ら せ る こ と がで き ま す。 PFC Library ユーザーズ ガ イ ド 89 デー タ ウ ィ ン ド ウ サー ビ ス こ のサービ ス では、 PowerBuilder が必須 フ ィ ール ド 処理を実行 し な け ればな ら ないカ ラ ム を指定で き ま す。 必須 フ ィ ール ド のチ ェ ッ ク ウ ィ ン ド ウ の pfc_Save イ ベン ト を呼び出す と 、 デー タ ベース を更新す る 前に、 こ の イ ベン ト が必須フ ィ ール ド のチ ェ ッ ク を自動的に行い ま す。 ❖ 必須 カ ラ ム サー ビ ス を使用可能にする には • u_dw の of_SetReqColumn 関数を呼び出 し ま す。 dw_emplist.of_SetReqColumn(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ 特定の カ ラ ムに対するサー ビ ス を上書 き する には • PowerBuilder で提供 さ れ る 標準の必須フ ィ ール ド 処理を カ ラ ム に 指定す る には、 of_RegisterSkipColumn 関数を呼び出 し ま す。 dw_emplist.inv_reqcolumn.of_RegisterSkipColumn ("dept_id") & 行管理サービ ス PFC の行管理サービ ス を使用す る と 、 行を挿入 し た り 、 削除す る こ と がで き ま す。 ま た、 行管理サービ ス では、 行の削除を取 り 消 し 、 元に 戻す関数 も 提供 さ れ ま す。 概要 PFC は n_cst_dwsrv_rowmanager ユーザ オブジ ェ ク ト を通 じ て、 行管理 サービ ス を使用可能に し ま す。 こ のサービ ス は以下の用途に使用 し ま す。 用途 ❖ • デー タ ウ ィ ン ド ウ の最後に空白行を追加す る • 既存の 2 行の間に空白行を挿入す る • 1 行 ま たは複数行を削除す る • 削除 し た行を元に戻すためのダ イ ア ロ グ ボ ッ ク ス を表示す る 行管理サービ ス を使用可能にす る には • u_dw の of_SetRowManager 関数を呼び出 し ま す。 dw_emplist.of_SetRowManager(TRUE) 90 PowerBuilder 第4章 PFC サー ビ スの使い方 デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ 空白行を デー タ ウ ィ ン ド ウの最後に追加する には • pfc_AddRow イ ベン ト を呼び出 し ま す。 Long ll_return ll_return = & dw_emplist.inv_rowmanager.Event pfc_AddRow() IF ll_return = -1 THEN MessageBox(" エ ラ ー ", " 空白行を追加する と き に エ ラ ーが発生 し ま し た ") END IF ユーザが m_dw ポ ッ プ ア ッ プ メ ニ ュ ーか ら [追加] を選択す る と 、 PFC は こ の イ ベン ト を自動的に呼び出 し ま す。 ❖ 既存の 2 行の間に空白行を挿入する には • pfc_InsertRow イ ベン ト を呼び出 し ま す。 次の例は、 現行行の前に空白行を挿入 し ま す。 Long ll_return ll_return = dw_emplist.inv_rowmanager.Event pfc_InsertRow() IF ll_return = -1 THEN MessageBox(" エ ラ ー ", " 挿入エ ラ ー ") END IF & ユーザが m_dw ポ ッ プ ア ッ プ メ ニ ュ ーか ら [挿入] を選択す る と 、 PFC は こ の イ ベン ト を自動的に呼び出 し ま す。 ❖ 行を削除する には • pfc_DeleteRow イ ベン ト を呼び出 し ま す。 次の例は、 現行の行 ま たは選択 さ れたすべての行を削除 し ま す。 Long ll_return ll_return = & dw_emplist.inv_rowmanager.pfc_DeleteRow() IF ll_return = -1 THEN MessageBox(" エ ラ ー ", " 削除エ ラ ー ") END IF PFC Library ユーザーズ ガ イ ド 91 デー タ ウ ィ ン ド ウ サー ビ ス ユーザが m_dw ポ ッ プ ア ッ プ メ ニ ュ ーか ら [削除] を選択す る と 、 PFC は こ の イ ベン ト を自動的に呼び出 し ま す。 ユーザが複数の行を選択で き る よ う にす る には、 行選択サー ビ ス を使用 し ま す。 ❖ 削除 し た行を復元する には • pfc_RestoreRow イ ベン ト を呼び出 し ま す。 こ の イ ベ ン ト は of_UnDelete 関数 を 呼び出 し ま す。 こ の 関数 は w_restorerow ダ イ ア ロ グ ボ ッ ク ス を表示 し 、ユーザが削除 し た行を 復元で き る よ う に し ま す。 行選択サービ ス 概要 PFC の行選択サービ ス を使用す る と 、 デー タ ウ ィ ン ド ウ で単一選択機 能、 複数選択機能、 お よ び拡張選択機能が使用で き る よ う にな り ま す。 PFC は n_cst_dwsrv_rowselection ユーザ オブジ ェ ク ト を通 じ て、行選択 サービ ス を使用可能に し ま す。 用途 行選択サービ ス はすべての行選択を自動的に処理 し ま す。 開発者が行 わな ければな ら ない作業は、 サービ ス を使用可能に し て、 適切な選択 様式を指定す る こ と だけです。 デー タ ウ ィ ン ド ウ で一度に 1 行 を選択で き る よ う に な っ てい る と き 、 行選択を処理 し ま す。 • 単一行選択 • 複数行選択 実行時にユーザが 1 回の ク リ ッ ク で複数の行を選択で き る よ う に し ま す。 行は、 連続 し ていて も 不連続で も よ いです。 複数行選択が使用可能にな っ て い る と き は、 実行時に ク リ ッ ク す れば、 行の選択状態 を切 り 替え る こ と がで き ま す。 こ の機能は リ ス ト ボ ッ ク ス の複数選択プ ロ パテ ィ に似てい ま す。 • 92 実行時にユーザが 〔Shift〕 や 〔Ctrl〕 を押 し なが ら ク リ ッ ク す る こ と に よ っ て複数行を選択で き ま す。 拡張選択 PowerBuilder 第4章 PFC サー ビ スの使い方 拡張選択では、 〔Shift〕 を押 し なが ら ク リ ッ ク すれば連続 し た行を 選択で き 、 〔Ctrl〕 を 押 し なが ら ク リ ッ ク すれば不連続の行を 選択 で き ま す。 こ の機能は リ ス ト ボ ッ ク ス の拡張選択プ ロ パテ ィ に似 て い ま す。 ❖ 行選択サービ ス を使用可能にす る には • u_dw の of_SetRowSelect 関数を呼び出 し ま す。 dw_emplist.of_SetRowSelect(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 ❖ 行選択様式を指定する には • of_SetStyle 関数を呼び出 し て、 所要の選択様式を渡 し ま す。 次の 例では拡張選択を使用可能に し てい ま す。 dw_emplist.inv_rowselect.of_SetStyle & (dw_emplist.inv_rowselect.EXTENDED) デー タ ウ ィ ン ド ウ サイ ズ変更サービ ス 概要 デー タ ウ ィ ン ド ウ サ イ ズ変更サービ ス を使用すれば、 ユーザが ウ ィ ン ド ウ のサ イ ズ を変更す る 際、 デー タ ウ ィ ン ド ウ コ ン ト ロ ール内の カ ラ ム のサ イ ズ を変更で き ま す。 こ のサービ ス は、 デー タ ウ ィ ン ド ウ に表示 さ れた カ ラ ム にサ イ ズ変更 機能を加え たい と き に使用 し ま す。 PFC は、 n_cst_dwsrv_resize ユーザ オブジ ェ ク ト を通 し て、 デー タ ウ ィ ン ド ウ サービ ス を使用可能に し ま す。 用途 デー タ ウ ィ ン ド ウ サ イ ズ変更サービ ス は、デー タ ウ ィ ン ド ウ オブジ ェ ク ト に表示 さ れた オ ブ ジ ェ ク ト のサ イ ズ を 変更す る 際に使用 し ま す。 ユーザが ウ ィ ン ド ウ のサ イ ズ を変更す る と 、 デー タ ウ ィ ン ド ウ の内容 が自動的にサ イ ズ変更 さ れ る よ う にな り ま す。 提示様式 コ ン ポ ジ ッ ト 提示様式 ま た は リ ッ チ テ キ ス ト 提示様式 を 持つデー タ ウ ィ ン ド ウ オブ ジ ェ ク ト に対 し てデー タ ウ ィ ン ド ウ サ イ ズ変更サー ビ ス を使用す る こ と はで き ま せん。 こ のサービ ス には次の 2 つのサ イ ズ変更オプシ ョ ンがあ り ま す。 PFC Library ユーザーズ ガ イ ド 93 デー タ ウ ィ ン ド ウ サー ビ ス ❖ • シ ン プルなサ イズ変更 FIXEDBOTTOM な ど の n_cst_dwsrv_resize 定数を渡す of_Register 関数を呼び出 し ま す。 • サ イ ズ変更の完全な制御 移動お よ び ス ケー リ ン グ を 明示的に指定 し て of_Register を呼び出す こ と に よ っ て、 詳細なサ イ ズ変更を行 い ま す。 デー タ ウ ィ ン ド ウ サイ ズ変更サー ビ ス を使用可能にする には 1 u_dw の of_SetResize 関数を呼び出 し 、 ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト を設定 し 、 さ ら に ソ ー ト の指定 ダ イ ア ロ グ ボ ッ ク ス がデー タ ウ ィ ン ド ウ のカ ラ ム ヘ ッ ダ名を使用す る よ う 指定 し ま す。 dw_emp.of_SetResize(TRUE) デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 2 (オプシ ョ ン) of_SetOrigSize 関数を呼び出 し てデー タ ウ ィ ン ド ウ コ ン ト ロ ールのオ リ ジナル サ イ ズ を指定 し ま す。 MDI アプ リ ケー シ ョ ン がオ リ ジナルで な く 列挙型定義に よ っ て MDI シー ト を開い た場合には、 こ の関数を呼び出す こ と がで き ま す。 this.inv_resize.of_SetOrigSize & (this.width, this.height) 3 (オプシ ョ ン) of_SetMinSize 関数を呼び出 し て、 最小サ イ ズ を指定 し ま す。こ のサ イ ズ を下回 る と 、デー タ ウ ィ ン ド ウ サ イ ズ変更サー ビ ス はデー タ ウ ィ ン ド ウ の内容をサ イ ズ変更で き ま せん。 this.inv_resize.of_SetMinSize & (this.width -50, this.height -100) 4 of_Register 関数を呼び出 し て、 サ イ ズ変更す る カ ラ ム と サ イ ズ変 更の方法を指定 し ま す。 this.inv_resize.of_Register("emp_fname", 0, 0, 50, 50) this.inv_resize.of_Register("emp_lname", 100, 0, 50, 50) 5 & & ウ ィ ン ド ウ サ イ ズ変更を使用可能に し て、 デー タ ウ ィ ン ド ウ コ ン ト ロ ールを使用可能に し ま す ( こ の例は、 ウ ィ ン ド ウ Open イ ベン ト か ら と っ た も のです)。 this.of_SetResize(TRUE) this.inv_resize.of_Register(dw_1, 0, 0, 100, 100) 6 94 (オプシ ョ ン) of_UnRegister 関数を呼び出 し て、 サ イ ズ変更 リ ス ト か ら カ ラ ム を除去 し ま す。 PowerBuilder 第4章 PFC サー ビ スの使い方 ソ ー ト サービ ス 概要 PFC の ソ ー ト サービ ス を使用す る と 、 使いやすい ソ ー ト 機能をデー タ ウ ィ ン ド ウ で提供で き る よ う にな り ま す。 ソ ー ト 機能を アプ リ ケーシ ョ ン に追加す る と き は、 こ のサービ ス を使 用 し ま す。 例 と し ては、 pfc_SortDlg イ ベン ト を呼び出す メ ニ ュ ー項目 を追加す る 場合な ど が挙げ ら れ ま す。 PFC は n_cst_dwsrv_sort ユーザ オブジ ェ ク ト を通 じ て、 ソ ー ト サービ ス を使用可能に し ま す。 用途 ソ ー ト サービ ス は ソ ー ト の指定 ダ イ ア ロ グ ボ ッ ク ス を 自動的に表示 し ま す。 開発者が行わなければな ら ない作業は、 サービ ス を使用可能 に し 、 所要の ソ ー ト 様式を指定す る こ と だけ です。 ユーザは、 4 種類 の ソ ー ト の指定 ダ イ ア ロ グ ボ ッ ク ス か ら 様式を選択で き ま す。 • PowerBuilder のデフ ォ ル ト の ソ ー ト の指定 ダ イ ア ロ グ ボ ッ ク ス • ド ラ ッ グ ア ン ド ド ロ ッ プ方式の ソ ー ト (w_sortdragdrop ダ イ ア ロ グボ ッ ク ス) PFC Library ユーザーズ ガ イ ド 95 デー タ ウ ィ ン ド ウ サー ビ ス • マルチ カ ラ ム ソ ー ト (w_sortmulti ダ イ ア ロ グ ボ ッ ク ス ) • シ ン グルカ ラ ム ソ ー ト (pfc_w_sortsingle ダ イ ア ロ グ ボ ッ ク ス ) ま た、 ユーザが カ ラ ム見出 し を ク リ ッ ク し て ソ ー ト を実行で き る よ う に設定で き ま す (マルチカ ラ ム ヘ ッ ダ ソ ー ト の場合、 カ ラ ム ヘ ッ ダ オブ ジ ェ ク ト は、 デー タ ウ ィ ン ド ウ の主ヘ ッ ダ バン ド に入れておか な ければな り ま せん)。 ❖ ソ ー ト サー ビ ス を使用可能にする には • u_dw オブジ ェ ク ト の of_SetSort 関数を呼び出 し て、 ソ ー ト の指定 ダ イ ア ロ グ ボ ッ ク ス がデー タ ウ ィ ン ド ウ のカ ラ ム ヘ ッ ダ名を使用 す る よ う に指定 し ま す。 dw_emp.of_SetSort(TRUE) dw_emp.inv_sort.of_SetColumnDisplayNameStyle (dw_emp.inv_sort.HEADER) & カ ラ ム ヘ ッ ダに よ る ソ ー ト カ ラ ム ヘ ッ ダで ソ ー ト す る 場合には、 デー タ ウ ィ ン ド ウ に追加 さ れて い る すべての カ ラ ム にヘ ッ ダが あ る こ と 、 こ れ ら がヘ ッ ダの 命名規則に準拠 し てい る こ と を 確認 し て く だ さ い。 デフ ォ ル ト の 命名規則では、接尾辞 _t を使用 し ま すが、of_SetDefaultHeaderSuffix 関数を呼び出 し て こ れを変更す る こ と がで き ま す。 デー タ ウ ィ ン ド ウ が破棄 さ れ る と 、 u_dw は こ のサービ ス を自動的 に破棄 し ま す。 96 PowerBuilder 第4章 ❖ PFC サー ビ スの使い方 PFC の ソ ー ト の指定 ダ イ ア ロ グボ ッ ク スが、 表示値に基づいて ソ ー ト するの か、 デー タ 値に基づいて ソ ー ト するのかを指定す る には • of_SetUseDisplay 関数を呼び出 し ま す。 dw_emp.inv_sort.of_SetUseDisplay(TRUE) ❖ ソ ー ト 様式を指定する には • of_SetStyle 関数を呼び出 し 、 ソ ー ト の指定 ダ イ ア ロ グ ボ ッ ク ス の 種類 (DEFAULT、 DRAGDROP、 DROPDOWNLISTBOX、 SIMPLE) を指定 し ま す。 dw_emp.inv_sort.of_SetStyle & (dw_emp.inv_sort.DRAGDROP) ❖ ソ ー ト の指定 ダ イ ア ロ グボ ッ ク ス を表示す る には • u_dw の pfc_SortDlg ( ) を呼び出 し ま す。 dw_emplist.Event pfc_SortDlg( ) 通常、 開発者が こ の イ ベン ト を呼び出す必要はあ り ま せん。 ユーザは PFC の m_master メ ニ ュ ーか ら 継承 し た子孫の メ ニ ュ ーか ら [表示| ソ ー ト ] を選択 し て、 ソ ー ト の指定 ダ イ ア ロ グボ ッ ク ス を表示で き ま す。 ウ ィ ン ド ウ サービ ス PFC では、 以下の機能を使用 し て ウ ィ ン ド ウ サービ ス を実装 し てい ま す。 • w_master オブジ ェ ク ト と その子孫に コ ー ド さ れてい る 関数、 イ ベ ン ト 、 お よ び イ ン ス タ ン ス 変数 • カ ス タ ム ク ラ ス ユーザ オブジ ェ ク ト ウ ィ ン ド ウ サービ ス に ア ク セ ス す る には、 PFC の w_master オブ ジ ェ ク ト の子孫オブ ジ ェ ク ト か ら 継承 し た ウ ィ ン ド ウ を作成 し ま す。 w_child w_frame w_main w_popup w_response w_sheet PFC Library ユーザーズ ガ イ ド 97 ウ ィ ン ド ウ サー ビ ス w_master オブ ジ ェ ク ト には、 以下の も のがあ り ま す。 • カ ス タ ム ク ラ ス ユーザ オブ ジ ェ ク ト と し て実装 さ れ る ウ ィ ン ド ウ サービ ス を、 使用可能 ま たは使用不可にす る 関数 • 各カ ス タ ム ク ラ ス ユーザ オブ ジ ェ ク ト の定義 さ れてい る 関数や イ ベ ン ト 、 イ ン ス タ ン ス 変数を参照す る た めの イ ン ス タ ン ス 変数 ( こ の種の イ ン ス タ ン ス 変数を参照変数 と 呼びま す) • ウ ィ ン ド ウ サービ ス を実行 し 、 カ ス タ ム ク ラ ス ユーザ オブジ ェ ク ト 関数を呼び出す組み込み イ ベン ト と 記述済みユーザ イ ベン ト • ア プ リ ケーシ ョ ン 固有の処理を実行す る コ ー ド を記述す る ための 未記述のユーザ イ ベン ト 拡張レ ベルのウ ィ ン ド ウか ら 継承す る ウ ィ ン ド ウ を使用す る 場合には、 必ず w_ 接頭辞の付いた ウ ィ ン ド ウ か ら 継承 し て く だ さ い (pfc_ 接頭辞の付いた ウ ィ ン ド ウ か ら は継承を し ないで く だ さ い)。 pfc_prefix オブ ジ ェ ク ト は、 PFC のバージ ョ ン を ア ッ プ グ レ ー ド す る と 、 変更 さ れ る 可能性があ る ためです。 次の表は ウ ィ ン ド ウ サービ ス と その実装方法を示 し た も のです。 ウ ィ ン ド ウ サー ビ ス 実装方法 基本 ウ ィ ン ド ウ サー ビ ス 環境設定サービ ス n_cst_winsrv オブジ ェ ク ト をは じ め、 PFC ウ ィ ン ド ウ 内の関数やユーザ イ ベン ト で も 実装 さ れて いる n_cst_winsrv_preference シー ト 管理サービ ス n_cst_winsrv_sheetmanager ス テー タ ス バー サー ビ ス n_cst_winsrv_statusbar 基本ウ ィ ン ド ウ サービ ス 概要 PFC の ウ ィ ン ド ウ オブジ ェ ク ト には、 以下の も のがあ り ま す。 • ウ ィ ン ド ウ 関数 • 組み込み イ ベン ト と 記述済みユーザ イ ベン ト • 未記述のユーザ イ ベン ト こ れ ら の関数 と イ ベン ト は、 ア プ リ ケーシ ョ ン のすべての ウ ィ ン ド ウ か ら 使用で き ま す。PFC の m_master メ ニ ュ ーか ら 継承 し た メ ニ ュ ーや PFC の ビ ジ ュ アル ユーザ オブ ジ ェ ク ト と 組み合わせて PFC の ウ ィ ン ド ウ を使用すれば、PFC が こ う し た機能の多 く を自動的に実装 し ま す。 98 PowerBuilder 第4章 PFC サー ビ スの使い方 自動 CloseQuery 処理 PFC の ウ ィ ン ド ウ サービ ス には、 ウ ィ ン ド ウ 内のすべてのデー タ ウ ィ ン ド ウ に対す る 自動的な CloseQuery 処理があ り ま す。 ユーザが変更の 保存 ダ イ ア ロ グ ボ ッ ク ス で [はい] ボ タ ン を ク リ ッ ク すれば、 ま だ保 存 さ れていないすべての変更が、 こ の処理に よ っ て保存 さ れ ま す。 ア プ リ ケ ーシ ョ ン 指定の保存処理 を 実装 し た い場合は、 ア プ リ ケ ー シ ョ ン ウ ィ ン ド ウ で CloseQuery イ ベ ン ト を上書 き し ま す ( こ れ を グ ロ ーバルに行 う には、w_master で CloseQuery を上書 き す る か、w_master ib_disableclosequery イ ン ス タ ン ス 変数を TRUE に設定す る こ と に よ っ て CloseQuery 処理を無効に し ま す)。 PFC の基本 ウ ィ ン ド ウ サービ ス には以下の機能があ り ま す。 用途 • メ ッ セージ ルー タ と メ ニ ュ ーの統合 • 未記述ユーザ イ ベン ト (PFC メ ニ ュ ー項目に よ っ て起動 さ れ る ) • ツ ールバー コ ン ト ロ ール (w_frame の場合のみ) • 処理の自動的な保存 (論理的作業単位サー ビ ス を通 じ て実施 さ れ る) PFC の個々の ウ ィ ン ド ウ の使い方の詳細につい て は、 『PowerBuilder Foundation Class Library オブ ジ ェ ク ト リ フ ァ レ ン ス 』マニ ュ アルの ウ ィ ン ド ウ オブ ジ ェ ク ト の説明を参照 し て く だ さ い。 ❖ メ ニ ュ ー項目のス ク リ プ ト か ら メ ッ セージ ルー タ を使 う には • of_SendMessage メ ニ ュ ー関数を呼び出 し 、 呼び出 さ れ る ユーザ イ ベ ン ト を渡 し ま す。 of_SendMessage("pfc_CheckStatus") of_SendMessage 関 数 は、 要 求 を 現 行 ウ ィ ン ド ウ の n_cst_menu of_SendMessage 関数に渡 し ま す。 こ の関数は、 現行 ウ ィ ン ド ウ の pfc_MessageRouter ユーザ イ ベン ト を呼び出 し ま す。 さ ら に、 こ の イ ベン ト は指定 さ れたユーザ イ ベン ト を自動的に呼び出 し ま す。 ❖ メ ニ ュ ー以外の関数または イ ベ ン ト の内部か ら メ ッ セージ ルー タ を使用す る には • ア ク テ ィ ブ ウ ィ ン ド ウ の pfc_MessageRouter ユーザ イ ベン ト を呼 び出 し 、 呼び出 さ れ る ユーザ イ ベン ト を渡 し ま す。 this.Event pfc_MessageRouter("pfc_CheckStatus") PFC Library ユーザーズ ガ イ ド 99 ウ ィ ン ド ウ サー ビ ス pfc_MessageRouter イ ベ ン ト は要求 を 現行 ウ ィ ン ド ウ に渡 し ま す。 指定 さ れたユーザ イ ベン ト が自動的に起動 さ れ ま す。 PFC の メ ニ ュ ーは メ ッ セージ ルー タ を使用す る PFC の メ ニ ュ ーは ウ ィ ン ド ウ で PFC のユーザ イ ベン ト を呼び出す ために、 of_SendMessage メ ニ ュ ー関数を使用 し ま す。 ❖ 未記述のユーザ イ ベ ン ト を使 う には • 意図 し た処理を実行す る コ ー ド を PFC のユーザ イ ベン ト に書 き 込 み ま す。次の例では pfc_PageSetup ユーザ イ ベン ト に コ ー ド を書い て、 現行のデー タ ウ ィ ン ド ウ にページ設定 ダ イ ア ロ グ ボ ッ ク ス を 表示 し ま す。 Integer li_return li_return = idw_active.Event pfc_PageSetup() IF li_return > 0 THEN li_return = idw_active.Event & pfc_PrintImmediate() END IF ど の イ ベ ン ト に 追加 の コ ー ド が必要 か と い う こ と につ い て は、 『PFC オブ ジ ェ ク ト リ フ ァ レ ン ス 』 マニ ュ アルの説明を参照 し て く だ さ い。 ❖ ツールバーを制御する ためのダ イ ア ロ グボ ッ ク ス を表示す る には • フ レ ーム ウ ィ ン ド ウ の pfc_Toolbars ユーザ イ ベン ト を呼び出 し ま す。 gnv_app.of_GetFrame().Event pfc_Toolbars() PFC の m_master メ ニ ュ ーか ら 継承 し た子孫の メ ニ ュ ーか ら 、 ユー ザが [ツ ール|ツ ールバー] を選択す る と 、 こ のダ イ ア ロ グ ボ ッ ク ス が自動的に表示 さ れ ま す。 ❖ 変更をデー タ ベースに保存する には • ウ ィ ン ド ウ の pfc_Save ユーザ イ ベン ト を呼び出 し ま す。 Integer li_return li_return = this.Event pfc_Save() 100 PowerBuilder 第4章 PFC サー ビ スの使い方 ユーザが m_master メ ニ ュ ーか ら 継承 し た子孫の メ ニ ュ ーか ら [フ ァ イ ル|上書 き 保存] を選択す る と 、 PFC は、 こ のユーザ イ ベ ン ト を呼び出 し ま す。 さ ら に、 変更を 保存す る よ う プ ロ ン プ ト さ れた と き ユーザが [はい] を ク リ ッ ク す る と 、 w_master オブ ジ ェ ク ト の CloseQuery イ ベン ト は pfc_Save を呼び出 し ま す。 ❖ ウ ィ ン ド ウ を画面の中央に表示する には 1 基本 ウ ィ ン ド ウ サービ ス を使用可能に し ま す。 this.of_SetBase(TRUE) 2 n_cst_winsrv の of_Center 関数を呼び出 し ま す。 this.inv_base.of_Center() 環境設定サービ ス PFC の環境設定サービ ス は、 レ ジ ス ト リ ま たは INI フ ァ イ ルを使用 し て、 エ ン ド ユーザの ウ ィ ン ド ウ 設定を保存ない し 復元す る 関数を提供 し ま す。 環境設定サービ ス は、 以下の情報を保存 し ま す。 概要 • サイズ • 位置 • ツ ールバーの設定 PFC は n_cst_winsrv_preference ユーザ オブジ ェ ク ト を通 じ て、 環境設 定サービ ス を使用可能に し ま す。 こ のサービ ス は、 ウ ィ ン ド ウ 設定を保存す る か、 ま たは復元す る ため に使用 し ま す。 用途 自動 リ セ ッ ト 環境設定サービ ス を使用可能にす る と 、 w_master か ら 継承 さ れた ウ ィ ン ド ウ は、 設定を自動的に保存ない し 復元 し ま す。 ❖ ウ ィ ン ド ウ環境設定サービ ス を使用可能にす る には • w_master の of_SetPreference 関数を呼び出 し ま す。こ の関数は、PFC を 利用 し て 開発 さ れ た すべ て の ウ ィ ン ド ウ で使用で き ま す (w_master オブ ジ ェ ク ト はすべての PFC ウ ィ ン ド ウ の先祖です)。 this.of_SetPreference(TRUE) ウ ィ ン ド ウ を閉 じ る と 、 PFC はサービ ス を自動的に破棄 し ま す。 PFC Library ユーザーズ ガ イ ド 101 ウ ィ ン ド ウ サー ビ ス ❖ 復元すべき ウ ィ ン ド ウ設定を指定す る には • 必要に応 じ て、 以下の関数を呼び出 し ま す。 of_SetToolbarItemOrder of_SetToolbarItemSpace of_SetToolbarItemVisible of_SetToolbars of_SetToolbarTitles of_SetWindow シー ト 管理サービ ス PFC のシー ト 管理サービ ス は、 MDI アプ リ ケーシ ョ ン で複数のシー ト を管理す る 際に有益な機能を提供 し ま す。 シー ト 管理サービ ス を使用 可能にす る と 、 PFC は以下の機能を ウ ィ ン ド ウ メ ニ ュ ー上で使用可能 に し ま す。 概要 • すべての ウ ィ ン ド ウ の最小化 • 配置ア イ コ ン の取 り 消 し PFC は、 n_cst_winsrv_sheetmanager ユーザ オブ ジ ェ ク ト を通 じ て シー ト 管理サービ ス を使用可能に し ま す。 MDI アプ リ ケーシ ョ ン で複数のシー ト を管理す る には、 こ のサービ ス を使用 し ま す。 用途 ❖ シー ト 管理サービ ス を使用可能にす る には • w_frame の of_SetSheetManager 関数を呼び出 し ま す。 こ の関数は w_frame か ら 継承 し て作成 し た あ ら ゆ る ウ ィ ン ド ウ で使用で き ま す。 this.of_SetSheetManager(TRUE) フ レ ーム ウ ィ ン ド ウ を閉 じ る と 、 PFC はサービ ス を自動的に破棄 し ま す。 ❖ シー ト 情報にア ク セ スする には • 102 必要に応 じ て、 以下の関数を呼び出 し ま す。 of_GetSheetCount of_GetSheets of_GetSheetsByClass of_GetSheetsByTitle PowerBuilder 第4章 PFC サー ビ スの使い方 フ レーム ウ ィ ン ド ウ を閉 じ る と 、 PFC はサービ ス を自動的に破棄 し ま す。 ステー タ スバー サービ ス PFC の ス テー タ ス バー サービ ス は、 MDI フ レ ーム ウ ィ ン ド ウ の右下 に日付、 時刻、 メ モ リ 情報な ど を表示 し ま す。 そのほかの ス テー タ ス バー サービ ス には、 以下の も のがあ り ま す。 概要 • GDI と 空 き メ モ リ に対す る し き い値の監視 • プ ロ グ レ ス バーのサポー ト • 開発者指定のテ キ ス ト の表示 プ ロ グ レ ス バーの表示に関 し ては、 198 ページの 「プ ロ グ レ ス バーの 使い方」 を参照 し て く だ さ い。 PFC は n_cst_winsrv_statusbar ユーザ オブジェ ク ト を 通じ て、 ス テータ ス バー サービ ス を 使用可能にし ま す。 ス テー タ ス バー情報は w_statusbar ポ ッ プ ア ッ プ ウ ィ ン ド ウ に表示 さ れ ま す。 表示項目 を 制御す る には、 n_cst_winsrv_statusbar オ ブ ジ ェ ク ト の関数 を呼び出 し ま す。 MDI フ レーム ウ ィ ン ド ウ に ス テー タ ス バー情報を表示す る には、 こ の サービ ス を使用 し ま す。 用途 必要に応 じ て、 w_statusbar 関数 を 呼び出せば、 PowerScript コ ー ド を 使っ て ス テー タ ス バー情報を修正で き ま す。 ❖ ス テー タ スバー サービ ス を使用可能にする には 1 w_frame の of_SetStatusBar 関数を 呼び出し ま す。こ の関数は w_frame か ら 継承 し て作成 し た あ ら ゆ る ウ ィ ン ド ウ で使用で き ま す。 this.of_SetStatusBar(TRUE) フ レーム ウ ィ ン ド ウ を閉 じ る と 、 PFC はサービ ス を自動的に破棄 し ま す。 2 w_frame の pfc_PreOpen イ ベン ト で n_cst_winsrv_statusbar を呼び出 し 、 表示項目 を指定 し ま す。 こ のサービ ス は、 それぞれの項目に 関連す る 関数の呼び出 し 順に各項目を左か ら 右へ表示 し ま す。 た と えば、 以下の例では メ モ リ 情報 を日付 と 時刻の左側に表示 し ま す。 this.inv_statusbar.of_SetMem(TRUE) this.inv_statusbar.of_SetTimer(TRUE) PFC Library ユーザーズ ガ イ ド 103 メ ニ ュ ー サービ ス 3 必要で あれば、 n_cst_winsrv_statusbar 関数を呼び出 し ま す。 メ ニ ュ ー サービ ス PFC メ ニ ュ ー サービ ス は、 ユーザが メ ニ ュ ー と ウ ィ ン ド ウ と の間で通 信す る の を支援す る 関数を提供 し ま す。 ま た、 こ のサービ ス は、 MDI フ レームお よ びツールバーで情報を返す関数 も 提供 し ま す。 メ ニ ュ ー サービ ス 関数は、 メ ニ ュ ー項目ス ク リ プ ト の中で使用 し ま す。 概要 PFC は、n_cst_menu ユーザ オブ ジ ェ ク ト を通 じ て メ ニ ュ ー サービ ス を 使用可能に し ま す。 こ のサービ ス は、非 PFC メ ニ ュ ーで フ レ ーム ウ ィ ン ド ウ にア ク セ ス し た り 、 ウ ィ ン ド ウ と 通信 し た り す る 際に使用 し ま す。 用途 ❖ メ ニ ュ ー サービ ス を使用可能にす る には • n_cst_menu 型の変数を宣言 し ま す。 n_cst_menu lnv_menu こ れは、 メ ニ ュ ー レベルの イ ン ス タ ン ス 変数で も 、 各 メ ニ ュ ー項 目 ス ク リ プ ト の ロ ーカル変数で も か ま い ま せん。 PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 ❖ メ ッ セージ ルー タ を使 う には • メ ニ ュ ー項目ス ク リ プ ト 内か ら of_SendMessage 関数を呼び出 し ま す。 n_cst_menu lnv_menu Message.StringParm = "w_emplist" lnv_menu.of_SendMessage(this, "pfc_Open") ❖ フ レ ーム ウ ィ ン ド ウに ア ク セ スす る には • メ ニ ュ ー項目ス ク リ プ ト 内か ら of_GetMDIFrame 関数を呼び出 し ま す。 以下の例では、 フ レーム レベル イ ベン ト の呼び出 し で MDI フ レ ーム を ア ク セ ス し てい ま す。 n_cst_menu lnv_menu w_frame lw_frame 104 PowerBuilder 第4章 PFC サー ビ スの使い方 // 次の コ ー ド は、 of_SendMessage の代わ り に使用す る も ので す。 lnv_menu.of_GetMDIFrame(this, lw_frame) Message.StringParm = "w_emplist" lw_frame.Event pfc_Open() サイ ズ変更サービ ス PFC のサ イ ズ変更サービ ス は、 ユーザが ウ ィ ン ド ウ 、 タ ブ あ る いは タ ブ ページのサ イ ズ を変更す る 際に、 コ ン ト ロ ールを 自動的に移動 し 、 サ イ ズや変更す る 関数を提供 し ま す。こ のサービ ス を使用す る と 、ウ ィ ン ド ウ 、 タ ブ あ る いは タ ブ ぺージのサ イ ズ を変更す る 際、 コ ン ト ロ ー ルのサ イ ズ を変更す る か ど う か、 ま た ど う 変更す る か を制御す る こ と がで き ま す。 概要 PFC は n_cst_resize ユーザ オブ ジ ェ ク ト を通 じ て、 サ イ ズ変更サービ ス を使用可能に し ま す。 n_cst_dwsrv_resize、 つ ま り デー タ ウ ィ ン ド ウ サ イ ズ変更サー ビ ス は、 デー タ ウ ィ ン ド ウ 内で カ ラ ム を移動 さ せた り 、 カ ラ ム のサ イ ズ変更を 行 う のに使用 し ま す。 こ のサービ ス は ウ ィ ン ド ウ のサ イ ズの変更を制御す る ために使用 し ま す。 こ のサービ ス には次の 2 つのサ イ ズ変更オプ シ ョ ン があ り ま す。 用途 ❖ • シ ン プルなサ イ ズ変更 FIXEDBOTTOM な ど の n_cst_dwsrv_resize 定数を渡す of_Register 関数を呼び出 し ま す。 • サ イ ズ変更の完全な制御 移動お よ び ス ケー リ ン グ を 明示的に指定 し て of_Register を呼び出す こ と に よ っ て、 詳細なサ イ ズ変更を行 い ま す。 サ イ ズ変更サービ ス を使用可能にす る には • w_master、 u_tab、 ま たは u_tabpg の of_SetResize 関数を呼び出 し ま す。 this.of_SetResize(TRUE) ウ ィ ン ド ウ や タ ブ を閉 じ る と 、 PFC はサービ ス を自動的に破棄 し ま す。 PFC Library ユーザーズ ガ イ ド 105 サ イ ズ変更サー ビ ス ❖ サ イ ズ変更可能な コ ン ト ロ ールを登録す る には • of_Register 関数を呼び出 し て、 ウ ィ ン ド ウ や タ ブのサ イ ズ を変更 す る 際に コ ン ト ロ ールのサ イ ズ を ど の よ う に設定す る か を 指定 し ま す。 登録 さ れた コ ン ト ロ ール ご と に、 サ イ ズ変更で ど れだ け コ ン ト ロ ールを 動かすか、 さ ら にサ イ ズ変更で ど れだけ コ ン ト ロ ー ル を ス ケー リ ン グす る か を 指定 し ま す。 次の例では、 デー タ ウ ィ ン ド ウ コ ン ト ロ ール を下方 と 右方へ拡大 し てい ま す。 this.inv_resize.of_Register(dw_emplist, 0, 100, 100, 100) ❖ & 最小サ イ ズ ( こ れよ り 小 さ いサ イズにす る こ と はで き ません) を指定す る に は • of_SetMinSize 関数を呼び出 し て、 最小サ イ ズ を指定 し ま す。 以下 の コ ー ド を ウ ィ ン ド ウ の Open イ ベン ト に書 く こ と に よ っ て、オ リ ジ ナル のサ イ ズ よ り 小 さ い最小サ イ ズ を 指定す る こ と が で き ま す。 Integer li_return li_return = this.inv_resize.of_SetMinSize & (this.width - 200, this.height - 150) ❖ MDI ア プ リ ケーシ ョ ンのシー ト に対するサ イ ズ変更サービ ス を使 う には • 以下の 2 つの方法のいずれか を使用 し ま す。 • シー ト を元のサ イ ズで開 く OpenSheet(w_emp, "w_emplist", w_frame, 0 , Original!) • & ほかの列挙型定義でシー ト を開 く 場合は、サ イ ズ変更サービ ス を用いて コ ン ト ロ ール を登録す る 前に、 of_SetOrigSize 関数を 呼び出す。 of_SetOrigSize 関数への呼び出 し は、 シー ト を元の サ イ ズで開いた場合の幅 と 高 さ を次の と お り 渡す this.inv_resize.of_SetOrigSize(1200, 1000) 106 PowerBuilder 第4章 PFC サー ビ スの使い方 デー タ 型変換サービ ス PFC の変換サービ ス を使用すれば、 あ る デー タ 型か ら 別のデー タ 型に 値 を変換す る 関数 を呼び出す こ と がで き ま す。 た と え ば、 of_Boolean 関数を呼び出す と 、 Integer 型 ま たは、 String 型の値を Boolean 型の値に 変換で き ま す。 概要 PFC は、 n_cst_conversion ユーザ オブジ ェ ク ト を通 じ て変換サービ ス を 使用可能に し ま す。 n_cst_conversion は、 PowerBuilder 自動 イ ン ス タ ン ス 作成オプシ ョ ン を使用 し てい る ので、 CREATE 文や DESTROY 文を 使 う 必要は あ り ま せん。 用途 変換サービ ス に定義 さ れてい る 関数を使用す る と 、 以下の変換を行 う こ と がで き ま す。 変換元 変換先 Integer 型、 String 型 Boolean 型 Boolean 型、 ToolbarAlignment 型、 SQLPreviewType 型 String 型 Boolean 型 Integer 型 String 型 ToolbarAlignment 型 Button 型 String 型 Icon 型 String 型 String 型 SQLPreviewType 型 変換サービ ス で提供 さ れ る 関数の詳細については、『PFC オブ ジ ェ ク ト リ フ ァ レ ン ス 』 マニ ュ アルの n_cst_conversion の説明を参照 し て く だ さ い。 ア プ リ ケーシ ョ ン に応 じ て、 n_cst_conversion グ ロ ーバル変数、 イ ン ス タ ン ス 変数、 ロ ーカル変数のいずれかで定義 し て く だ さ い。 n_cst_conversion の 定義 ❖ 変換関数の使い方 変数のデー タ 型 アプ リ ケーシ ョ ン全体での使用 グ ローバル変数、 または n_cst_appmanager の イ ン ス タ ン ス変数 オブ ジ ェ ク ト 内での使用 オブジ ェ ク ト の イ ン ス タ ン ス変数 単一 ス ク リ プ ト 内での使用 ロ ーカル変数 変換サー ビ ス を使用可能にする には • n_cst_conversion 型の変数を宣言 し ま す。 n_cst_conversion PFC Library ユーザーズ ガ イ ド inv_conversion 107 日付 / 時刻サービ ス PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 ❖ 変換サー ビ ス関数を呼び出すには • オ ブ ジ ェ ク ト の イ ン ス タ ン ス を指定す る ために ド ッ ト 表記 を使用 し て当該関数を呼び出 し ま す。 以下の例は、 inv_conversion イ ン ス タ ン ス 変数を使用 し てい ま す。 String ls_checked ls_checked = inv_conversion.of_String & (cbx_confirmed.Enabled) MessageBox(" 変換 ", " チ ェ ッ ク ボ ッ ク スの状態は " + ls_checked + " です ") & 日付 / 時刻サービ ス 概要 PFC の日付 / 時刻サービ ス を用いれば、 日付の計算を実行す る 関数を 呼び出す こ と がで き ま す。 た と えば、 of_SecondsAfter 関数を呼び出す と 、 2 つの日付 / 時刻間の秒数を求め る こ と がで き ま す。 PFC は、 n_cst_datetime を 用 い て サ ー ビ ス を 使 用 可 能 に し ま す。 n_cst_datetime は、 PowerBuilder 自動 イ ン ス タ ン ス 作成オプシ ョ ン を使 用 し てい る ので、CREATE 文や DESTROY 文を使 う 必要は あ り ま せん。 用途 108 日付 / 時刻の計算を行 う 場合には、多 く の場合日付 / 時刻サービ ス を使 用で き ま す。 日付 / 時刻サービ ス で提供 さ れ る 機能は以下の と お り で す。 • ユ リ ウ ス 暦か ら グ レ ゴ リ ー暦への変換 (グ レ ゴ リ ー暦では デー タ 型を使用) • 秒数か ら 時数への変換 • 秒数か ら 日数への変換 • グ レ ゴ リ ー暦か ら ユ リ ウ ス 暦への変換 • 2 つの日付 / 時刻値間の年数計算 • 2 つの日付 / 時刻値間の月数計算 • 2 つの日付 / 時刻値間の週数計算 Date PowerBuilder 第4章 PFC サー ビ スの使い方 • 2 つの日付 / 時刻値間の秒数計算 • 2 つの日付 / 時刻値間の ミ リ 秒数計算 • 日付が有効であ る か ど う かの判断 • 日付が月曜か ら 金曜 ま での範囲であ る か ど う かの判断 • 日付が土曜ま たは日曜で あ る か ど う かの判断 • 指定 さ れた日付 / 時刻ま での処理の停止 ア プ リ ケーシ ョ ン処理に応 じ て、 n_cst_datetime を グ ロ ーバル変数、 イ ン ス タ ン ス 変数、 ロ ーカル変数のいずれかで定義 し て く だ さ い。 ❖ 日付 / 時刻サー ビ スの使い方 変数のデー タ 型 アプ リ ケーシ ョ ン全体での使用 グロ ーバル変数、 ま たは n_cst_appmanager の イ ン ス タ ン ス 変数 オブ ジ ェ ク ト 内での使用 オブジ ェ ク ト の イ ン ス タ ン ス変数 単一 ス ク リ プ ト 内での使用 ロ ーカル変数 日付 / 時刻サー ビ ス を使用可能にする には • n_cst_datetime 型の変数を宣言 し ま す。 n_cst_datetime inv_datetime PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 ❖ 日付 / 時刻サー ビ ス関数を呼び出すには • オブ ジ ェ ク ト の イ ン ス タ ン ス を指定す る ために ド ッ ト 表記を 使用 し て当該関数を呼び出 し ま す。 以下の例は、 inv_datetime イ ン ス タ ン ス 変数を使用 し てい ま す。 Long ll_seconds, ll_days ll_seconds = Long(sle_seconds.Text) ll_days = inv_datetime.of_Days(ll_seconds) MessageBox(" 日付 / 時刻 ", & String(ll_seconds) + " 秒は " + & String(ll_days) + " 日に相当 し ます。 ") PFC Library ユーザーズ ガ イ ド 109 フ ァ イル サービ ス フ ァ イル サービ ス PFC の フ ァ イ ル サービ ス を使用すれば、 ア プ リ ケーシ ョ ン に フ ァ イ ル 管理機能を追加す る ための関数を呼び出す こ と がで き ま す。た と えば、 フ ァ イ ル名を変更す る ために of_FileRename 関数を 呼び出す こ と がで き ま す。 概要 フ ァ イ ル サービ ス は、 プ ラ ッ ト フ ォ ーム固有の多 く の操作を サポー ト し てお り 、 適切な外部関数を自動的に呼び出 し ま す。 PFC は n_cst_filesrv ユーザ オブジ ェ ク ト と 、 そのプ ラ ッ ト フ ォ ーム固 有の子孫オブジ ェ ク ト を通 じ て、 フ ァ イ ル サービ ス を使用可能に し ま す。 フ ァ イ ル サービ ス で提供 さ れ る 機能は以下の と お り です。 用途 • 結合 し た フ ァ イ ル名の作成 • デ ィ レ ク ト リ の作成 と 削除 • 32,765 バ イ ト よ り 大 き い フ ァ イ ル も 含めて、 フ ァ イ ルの読み取 り 、 書 き 込み、 名前の変更、 コ ピ ー • 日付や時刻な ど 、 フ ァ イ ル情報へのア ク セ ス • デ ィ レ ク ト リ 内のすべてのフ ァ イ ルに対す る 一覧の作成 と ソ ー ト ア プ リ ケーシ ョ ン に応 じ て、 n_cst_filesrv を、 グ ロ ーバル変数、 イ ン ス タ ン ス 変数、 ロ ーカル変数のいずれかで定義 し ま す。 フ ァ イ ル サービ スの使い方 変数のデー タ 型 ア プ リ ケーシ ョ ン全体での使用 グ ロ ーバル変数、ま たは n_cst_appmanager の イ ン ス タ ン ス変数 オブジ ェ ク ト 内での使用 オブジ ェ ク ト の イ ン ス タ ン ス変数 単一ス ク リ プ ト 内での使用 ロ ーカル変数 PFC は n_cst_filesrv のプ ラ ッ ト フ ォ ーム 固有の子孫を イ ン ス タ ン ス 化 し ま す。 自動 イ ン ス タ ン ス の作成機能は使用 さ れ ま せん。 処理が終了 し た ら 、 開発者は n_cst_filesrv の イ ン ス タ ン ス を明示的に破棄 し な け ればな り ま せん。 ❖ フ ァ イル サービ ス を使用可能にす る には 1 n_cst_filesrv 型の変数を宣言 し ま す。 n_cst_filesrv 2 inv_filesrv f_set_filesrv グ ロ ーバル関数を呼び出 し ま す。 f_SetFilesrv(inv_filesrv, TRUE) 110 PowerBuilder 第4章 PFC サー ビ スの使い方 f_SetFilesrv グ ロ ーバル関数は、プラ ッ ト フ ォ ーム 固有の n_cst_filesrv 子孫を イ ン ス タ ン ス 化 し ま す。 3 処理が終了 し た ら 、 n_cst_filesrv オブ ジ ェ ク ト を破棄言 し ま す。 DESTROY inv_filesrv ❖ フ ァ イル サービ ス関数を呼び出すには • オブ ジ ェ ク ト の イ ン ス タ ン ス を指定す る ために ド ッ ト 表記を 使用 し て当該関数を呼び出 し ま す。 以下の例は、 of_FileRead 関数を呼び出 し て、 sle_filename シ ン グル ラ イ ン エデ ィ ッ ト で指定 さ れてい る フ ァ イ ルの内容を読み取 り ま す。 こ こ では、 inv_filesrv イ ン ス タ ン ス 変数を使用 し てい ま す。 Integer String li_return ls_file[ ] li_return = inv_filesrv.of_FileRead & (sle_filename.text, ls_file) CHOOSE CASE li_return CASE -1 MessageBox(" エ ラ ー ", " フ ァ イルへのア ク セス中にエ ラ ーが発生 し ま し た ") CASE ELSE // フ ァ イルの処理は こ こ で行われます END CHOOSE ❖ フ ァ イル サービ ス を破棄する には • DESTROY 文を使用 し ま す。 DESTROY inv_filesrv INI フ ァ イ ル サービ ス 概要 PFC の INI フ ァ イ ル サービ ス を用いれば、 INI フ ァ イ ル と の間で読み 書 き を行 う ための機能を呼び出す こ と がで き ま す。 PFC は n_cst_inifile ユーザ オブ ジ ェ ク ト を通 じ て、 INI フ ァ イ ル サー ビ ス を使用可能に し ま す。 用途 INI フ ァ イ ル サービ ス は以下の機能を提供 し ま す。 • PFC Library ユーザーズ ガ イ ド INI フ ァ イ ル セ ク シ ョ ン におけ る すべてのキーの取得 111 INI フ ァ イル サー ビ ス • INI フ ァ イ ルにおけ る すべてのセ ク シ ョ ン の取得 • INI フ ァ イ ルか ら の 1 行の削除 • INI フ ァ イ ルか ら のセ ク シ ョ ン全体の削除 ProfileInt、 ProfileString、 SetProfileString 関数の使用 一度に 1 つずつ INI フ ァ イ ル エ ン ト リ にア ク セ ス す る には、ProfileInt、 ProfileString、 SetProfileString のいずれかの PowerScript 関数を使用 し ま す。 INI フ ァ イ ル サービ ス では、 大文字 と 小文字を区別 し ま せん。 ❖ INI フ ァ イル サービ ス を使用可能にする には • n_cst_inifile 型の変数を宣言 し ま す。 n_cst_inifile inv_ini_handler PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 ❖ INI フ ァ イル サービ ス を使 う には • 必要に応 じ て n_cst_inifile オブ ジ ェ ク ト 関数を呼び出 し ま す。 オブ ジ ェ ク ト の イ ン ス タ ン ス を 指定す る た めに ド ッ ト 表記を使用 し ま す。 以下の例は INI フ ァ イ ルのセ ク シ ョ ン におけ る すべての キー を リ ス ト ボ ッ ク ス に表示 し ま す。 こ こ では、 inv_ini_handler イ ン ス タ ン ス 変数の使用を仮定 し てい ま す。 String Integer ls_keys[ ] li_count, li_size li_size = inv_ini_handler.of_GetKeys & (gnv_app.of_GetAppINIFile(), "CustApp", ls_keys) lb_keys.Reset( ) FOR li_count = 1 to li_size lb_keys.AddItem(ls_keys[li_count]) NEXT 112 PowerBuilder 第4章 PFC サー ビ スの使い方 数値サービ ス PFC の数値サービ ス を用いれば、 2 進 (バ イ ナ リ ) デー タ に ア ク セ ス す る ための関数を呼び出す こ と がで き ま す。 た と えば、 of_GetBit 関数 では、 指定 し た ビ ッ ト がオ ン か、 オ フ か を調べ る こ と がで き ま す。 概要 PFC は n_cst_numerical ユーザ オブ ジ ェ ク ト を通 じ て、 数値サービ ス を 使用可能に し ま す。 用途 数値サービ ス には以下の機能を持つ関数があ り ま す。 • 指定 し た ビ ッ ト がオ ン か、 オ フ かの判別 • 10 進数か ら 2 進数への変換 • 2 進数か ら 10 進数への変換 数値サー ビ スは Windows SDK と 組み合わせて使用する Windows Software Development Kit (SDK) には、 ビ ッ ト を返す多 く の 関数があ り ま す。 返 さ れた ビ ッ ト 値にア ク セ ス す る には、 of_GetBit 関 数を使用 し て く だ さ い。 ア プ リ ケーシ ョ ン に応 じ て、 n_cst_numerical を グ ロ ーバル変数、 イ ン ス タ ン ス 変数、 ロ ーカル変数のいずれかで定義 し て く だ さ い。 ❖ 数値サービ スの使い方 変数のデー タ 型 アプ リ ケーシ ョ ン全体での使用 グ ロ ーバル変数、ま たは n_cst_appmanager の イ ン ス タ ン ス変数 オブ ジ ェ ク ト 内での使用 オブジ ェ ク ト の イ ン ス タ ン ス変数 単一 ス ク リ プ ト 内での使用 ロ ーカル変数 数値サー ビ ス を使用可能にする には • n_cst_numerical 型の変数を宣言 し ま す。 n_cst_numerical inv_numerical PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 ❖ 数値サー ビ スの関数を呼び出すには • オブ ジ ェ ク ト の イ ン ス タ ン ス を指定す る ために ド ッ ト 表記を 使用 し て当該関数を呼び出 し ま す。 以下の例では、 inv_numerical イ ン ス タ ン ス 変数の使用を仮定 し て い ま す。 PFC Library ユーザーズ ガ イ ド 113 プ ラ ッ ト フ ォ ーム サー ビ ス Long String ll_base10 ls_binary ll_base10 = Long(sle_base10.text) ls_binary = inv_numerical.of_Binary(ll_base10) MessageBox(" 数値 ", & String(ll_base10) + " (10 進) は、 2 進で " & + ls_binary + " に相当 し ます。 ") プ ラ ッ ト フ ォ ーム サービ ス 概要 PFC のプ ラ ッ ト フ ォーム サービ ス を用いれば、 プ ラ ッ ト フ ォ ーム固有 の機能 を ア プ リ ケ ーシ ョ ン に追加す る 関数 を 呼び出す こ と が で き ま す。 こ のサービ ス の関数は複数のプ ラ ッ ト フ ォ ーム で使用で き る ため、 現行のプ ラ ッ ト フ ォ ーム を チ ェ ッ ク す る ロ ジ ッ ク を関数に追加す る 必 要はあ り ま せん。 た と えば、 of_GetFreeMemory 関数を使用す る と 、 空 き メ モ リ 容量を調べ る こ と がで き ま す。 プ ラ ッ ト フ ォ ーム サービ ス は 現行のプ ラ ッ ト フ ォーム で適切な外部関数を自動的に呼び出 し ま す。 PFC は、プ ラ ッ ト フ ォ ーム サービ ス を、n_cst_platform ユーザ オブジ ェ ク ト と 、そのプ ラ ッ ト フ ォ ーム固有の子孫を通 じ て使用可能に し ま す。 印刷 と プ リ ン タ の 設定 ダ イ ロ グボ ッ ク ス PFC は、プ ラ ッ ト フ ォ ーム サービ ス を通 じ て印刷 と プ リ ン タ の 設定 ダ イ ア ロ グボ ッ ク ス を使用可能に し ま す。 用途 プ ラ ッ ト フ ォーム サービ ス には、 以下の機能があ り ま す。 • 空 き メ モ リ 容量の確認 • 使用可能な シ ス テ ム リ ソ ース の量の確認 • テ キ ス ト 文字列の高 さ と 幅 (PowerBuilder 単位系) の確認 ア プ リ ケーシ ョ ン に応 じ て、 n_cst_platform を グ ロ ーバル変数、 イ ン ス タ ン ス 変数、 ロ ーカル変数のいずれかで定義 し て く だ さ い。 プ ラ ッ ト フ ォ ーム サ ー ビ ス の 使い方 114 変数のデー タ 型 ア プ リ ケーシ ョ ン全体での使用 グ ロ ーバル変数、 ま たは n_cst_appmanager の イ ン ス タ ン ス変数 オブジ ェ ク ト 内での使用 オブジ ェ ク ト の イ ン ス タ ン ス変数 PowerBuilder 第4章 プ ラ ッ ト フ ォ ーム サー ビ スの 使い方 変数のデー タ 型 単一 ス ク リ プ ト 内での使用 ロ ーカル変数 PFC サー ビ スの使い方 PFC は n_cst_platform のプ ラ ッ ト フ ォ ー ム固有の子孫オ ブ ジ ェ ク ト を イ ン ス タ ン ス 化す る ので、 自動 イ ン ス タ ン ス 作成機能は使用 さ れ ま せ ん。 処理が終了 し た ら 、 開発者は n_cst_platform イ ン ス タ ン ス を明示的 に破棄 し なければな り ま せん。 ❖ プ ラ ッ ト フ ォ ーム サービ ス を使用可能にす る には 1 n_cst_platform 型の変数を宣言 し ま す。 n_cst_platform 2 inv_platform f_SetPlatform グ ロ ーバル関数を呼び出 し ま す。 f_SetPlatform(inv_platform, TRUE) f_SetPlatform グ ロ ー バ ル 関 数 は プ ラ ッ ト フ ォ ー ム 固 有 の n_cst_platform 子孫オブ ジ ェ ク ト の イ ン ス タ ン ス を自動的に作成 し ま す。 ❖ n_cst_platform オブ ジ ェ ク ト の関数を呼び出すには • オブ ジ ェ ク ト の イ ン ス タ ン ス を指定す る ために ド ッ ト 表記を 使用 し て当該関数を呼び出 し ま す。 以下の例は、 of_GetFreememory 関数を呼び出 し 、 こ の値 を ス テー タ ス バーに表示 し ま す。 こ の例では inv_platform イ ン ス タ ン ス 変数 の使用を仮定 し てい ま す。 Long ll_free_memory ll_free_memory = & inv_platform.of_GetFreeMemory() gnv_app.of_GetFrame().SetMicroHelp & ("Free memory: " + String(ll_free_memory) ) ❖ プ ラ ッ ト フ ォ ーム サービ ス を破棄する には • DESTROY 文を使用 し ま す。 DESTROY inv_platform PFC Library ユーザーズ ガ イ ド 115 選択サービ ス 選択サービ ス PFC の選択サービ ス は、 ユーザが行を選択で き る よ う な w_selection ダ イ ア ロ グボ ッ ク ス を表示す る 関数を提供 し ま す。 ユーザが [OK] を ク リ ッ ク す る と 、 こ の関数は、 選択 さ れた行に対す る 1 つま たは複数の カ ラ ム に値を返 し ま す。 概要 PFC は n_cst_selection ユーザ オブ ジ ェ ク ト を通 じ て、 選択サービ ス を 使用可能に し ま す。 選択サービ ス の of_Open 関数を使用す る と 、 ダ イ ア ロ グ ボ ッ ク ス が表 示 さ れ ま す。 ユーザはそのダ イ ア ロ グ ボ ッ ク ス で、 ア プ リ ケーシ ョ ン が こ れか ら 処理す る 1 つま たは複数の項目を選択で き ま す。 用途 of_Open 関 数 に は、 3 つ の 基本 バ ー ジ ョ ン が あ り ま す。 こ れ ら は、 w_selection にそれぞれ異な る 情報を表示 し ま す。 • w_selection は、 指定 さ れたデー タ ウ ィ ン ド ウ オブ ジ ェ ク ト のすべ ての行を取 り 出 し て表示す る • w_selection は、 渡 さ れた行の集ま り を表示す る • w_selection は、 渡 さ れた デー タ ウ ィ ン ド ウ オブジ ェ ク ト の部分 と し て保存 さ れた行を表示す る n_cst_selection は、 アプ リ ケーシ ョ ン に応 じ て グ ロ ーバル変数、 イ ン ス タ ン ス 変数、 ロ ーカル変数のいずれかで定義 し て く だ さ い。 ❖ 選択サー ビ スの使い方 変数のデー タ 型 ア プ リ ケーシ ョ ン全体での使用 グロ ーバル変数、ま たは n_cst_appmanager の イ ン ス タ ン ス変数 オブジ ェ ク ト 内での使用 オブ ジ ェ ク ト の イ ン ス タ ン ス変数 単一ス ク リ プ ト 内での使用 ロ ーカル変数 選択サー ビ ス を有効にする には • n_cst_selection 型の変数を宣言 し ま す。 n_cst_selection inv_selection PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 ❖ 選択サー ビ ス を使用す る には 1 of_Open で使用 さ れ る 変数を宣言 し ま す。 n_cst_selection lnv_selection Any la_selected[ ] 116 PowerBuilder 第4章 PFC サー ビ スの使い方 String ls_columns[ ] Integer li_count 2 カ ラ ム を指定 し ま す。 こ の カ ラ ム の値が返 さ れ ま す。 ls_columns[1] = "emp_id" ls_columns[2] = "emp_lname" ls_columns[3] = "emp_fname" 3 of_Open 関数を呼び出 し て、 w_window を表示 し ま す (of_Open の こ のバージ ョ ン では、 指定 さ れたデー タ ウ ィ ン ド ウ オブ ジ ェ ク ト のすべての行が w_selection に表示 さ れ ま す)。 lnv_selection.of_Open & ("d_empall", la_selected, SQLCA, ls_columns) 4 必要で あ れば、 返 さ れた カ ラ ム の値にア ク セ ス し ま す ( こ の例で は、 返 さ れた値を リ ス ト ボ ッ ク ス に表示 し てい ま す)。 FOR li_count = 1 to UpperBound(la_selected) lb_selected.AddItem & (String(la_selected[li_count])) NEXT SQL 解析サービ ス 概要 PFC の SQL 解析サービ ス を使用すれば、 SQL 文を ア セ ン ブル し 、 解析 す る 関数を呼び出す こ と がで き ま す。 PFC は n_cst_sql ユーザ オブ ジ ェ ク ト を通 じ て、 SQL サービ ス を使用 可能に し ま す。 用途 SQL 解析サービ ス は以下の用途に使用 し て く だ さ い。 • コ ン ポーネ ン ト 部分か ら SQL 文を作成す る • SQL 文を コ ン ポーネ ン ト に分解 し て解析す る ア プ リ ケーシ ョ ン に応 じ て、 n_cst_sql を グ ロ ーバル変数、 イ ン ス タ ン ス 変数、 ロ ーカル変数のいずれかで定義 し て く だ さ い。 SQL 解析サー ビ スの使い方 変数のデー タ 型 アプ リ ケーシ ョ ン全体での使用 グ ロ ーバル変数、ま たは n_cst_appmanager の イ ン ス タ ン ス変数 オブ ジ ェ ク ト 内での使用 オブジ ェ ク ト の イ ン ス タ ン ス変数 単一 ス ク リ プ ト 内での使用 ロ ーカル変数 PFC Library ユーザーズ ガ イ ド 117 SQL 解析サービ ス ❖ SQL 解析サービ ス を使用可能にす る には • n_cst_sql 型の変数を宣言 し ま す。 n_cst_sql inv_sql PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 ❖ コ ン ポーネン ト か ら SQL 文を作成す る には • オ ブ ジ ェ ク ト の イ ン ス タ ン ス を指定す る ために ド ッ ト 表記 を使用 し て of_Assemble 関数を呼び出 し ま す。 以下の例では、 inv_sql イ ン ス タ ン ス 変数を使用 し てい ま す。 String ls_sql n_cst_sqlattrib lnv_sqlattrib[ ] lnv_sqlattrib[1].s_verb = sle_verb.text lnv_sqlattrib[1].s_tables = sle_tables.text lnv_sqlattrib[1].s_columns = sle_columns.text lnv_sqlattrib[1].s_values = sle_values.text lnv_sqlattrib[1].s_where = sle_where.text lnv_sqlattrib[1].s_order = sle_order.text lnv_sqlattrib[1].s_group = sle_group.text lnv_sqlattrib[1].s_having = sle_having.text ls_sql = inv_sql.of_Assemble(lstr_sql) MessageBox("SQL", ls_sql) ❖ SQL 文を コ ンポーネ ン ト に分解 し て解析す る には • オ ブ ジ ェ ク ト の イ ン ス タ ン ス を指定す る ために ド ッ ト 表記 を使用 し て of_Parse 関数を呼び出 し ま す。 以下の例では、 inv_sql イ ン ス タ ン ス 変数を使用 し てい ま す。 String ls_sql Integer li_return n_cst_sqlattrib lnv_sqlattrib[ ] li_return = inv_sql.of_Parse & (mle_sql.text, lnv_sqlattrib) IF li_return > 0 THEN sle_verb.text= lnv_sqlattrib[1].s_verb sle_tables.text = lnv_sqlattrib[1].s_tables sle_columns.text = lnv_sqlattrib[1].s_columns 118 PowerBuilder 第4章 PFC サー ビ スの使い方 sle_values.text = lnv_sqlattrib[1].s_values sle_where.text = lnv_sqlattrib[1].s_where sle_order.text = lnv_sqlattrib[1].s_order sle_group.text = lnv_sqlattrib[1].s_group sle_having.text= lnv_sqlattrib[1].s_having END IF 文字列処理サービ ス PFC の文字列処理サービ ス を用いれば、 文字列を操作す る 関数を呼び 出す こ と がで き ま す。 概要 PFC は n_cst_string ユーザ オブ ジ ェ ク ト を通 じ て、 文字列処理サービ ス を使用可能に し ま す。 用途 文字列処理サービ ス を使用す る と 、 以下の操作 も 含む、 各種の文字列 操作を実行で き ま す。 • 区切 り 文字で区切 ら れた文字列を配列内に分離す る • 配列を区切 り 文字で区切 ら れた文字列に変換す る • 文字列が小文字、 大文字、 英字、 英数字の ど れで あ る か を判別す る • グ ロ ーバル置換を行 う • 指定 さ れた文字列の個数を数え る • 文字列の先頭 ま たは末尾か ら ス ペー ス 文字 と 印刷不可文字を 削除 す る (日本語は未サポー ト ) • 文字列が比較演算子か算術演算子か を判別す る • 文字列内ですべての単語の 1 文字目を大文字に変換す る ア プ リ ケーシ ョ ンに応 じ て、 n_cst_string グ ロ ーバル変数、 イ ン ス タ ン ス 変数、 ロ ーカル変数のいずれかで定義 し て く だ さ い。 ❖ 文字列処理関数の使い方 変数のデー タ 型 アプ リ ケーシ ョ ン全体での使用 グ ロ ーバル変数、 ま た は n_cst_appmanager の イ ン ス タ ン ス変数 オブ ジ ェ ク ト 内での使用 オブジ ェ ク ト の イ ン ス タ ン ス変数 単一 ス ク リ プ ト 内での使用 ロ ーカル変数 文字列処理サービ ス を使用可能にす る には • n_cst_string 型の変数を宣言 し ま す。 n_cst_string PFC Library ユーザーズ ガ イ ド inv_string 119 メ タ ク ラ ス サー ビ ス PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 ❖ 文字列処理サービ ス関数を呼び出すには • オ ブ ジ ェ ク ト の イ ン ス タ ン ス を指定す る ために ド ッ ト 表記 を使用 し て当該関数を呼び出 し ま す。 以下の例は n_cst_dwsrv_report の of_AddText 関数か ら の抜粋で あ り 、 of_ParseToArray 関数を呼び出 し て as_text の文字列を ls_line 配 列の要素に変換 し ま す。 こ こ では、 lnv_string ロ ーカル変数を使用 し てい ま す。 n_cst_string lnv_string Integer li_newlines String ls_line[ ] ... li_newlines = lnv_string.of_ParseToArray (as_text, "~r~n", ls_line) & メ タ ク ラ ス サービ ス 概要 メ タ ク ラ ス サービ ス は、 ほかのオブ ジ ェ ク ト 内で定義 さ れた関数、 イ ベン ト 、 変数に関す る 情報を提供す る 関数を持っ てい ま す。 PFC は、 n_cst_metaclass ユーザ オブ ジ ェ ク ト を通 じ て、 こ のサービ ス を使用可能に し ま す。 用途 メ タ ク ラ ス サービ ス の最 も 一般的な使い方 と し ては、 オブジ ェ ク ト 関 数や イ ベン ト を呼び出す前に、 それが実在す る か ど う か を調べ る こ と な ど が挙げ ら れ ま す。 ❖ メ タ ク ラ ス サー ビ ス を使用す る には 1 n_cst_metaclass 型の変数を作成 し ま す。 boolean lb_defined n_cst_metaclass lnv_metaclass classdefinition lcd_obj String ls_args[ ] Integer li_rc 120 PowerBuilder 第4章 PFC サー ビ スの使い方 PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者は、 CREATE 文や DESTROY 文 を使っ て コ ー ド す る 必要はあ り ま せん。 2 必要であれば、 n_cst_metaclass 関数を呼び出 し ま す。 lcd_obj = FindClassDefinition("w_sheet") lb_defined = lnv_metaclass.of_isFunctionDefined & (lcd_obj,"of_Validation", ls_args) If lb_defined Then // w_sheet の子孫を使 っ て修飾 し て く だ さ い li_rc = w_sheet.Function Dynamic & of_Validation () If li_rc < 0 Then Return -1 End If 論理的作業単位サービ ス 概要 論理的作業単位サービ ス は、 自己更新 (self-updating) オブジ ェ ク ト の サポー ト を提供 し ま す。 自己更新オブ ジ ェ ク ト は、 1 組の関数 (自己 更新オブ ジ ェ ク ト API) を実装す る こ と に よ り 、 必要なすべての更新 機能を カプセル化 し ま す。 こ の関数は、 保存処理の間に n_cst_luw が呼 び出す も のです。論理的作業単位サービ ス は、 こ れ ら の関数を、デフ ォ ル ト の保存処理の一部 と し て自動的に呼び出 し ま す。 PFC には、 以下を含む各種の自己更新オブ ジ ェ ク ト があ り ま す。 u_dw n_ds u_lvs u_tab u_tvs u_base w_master 自己更新オ ブ ジ ェ ク ト API の実装状況 を 調べ る には、 こ れ ら の オ ブ ジ ェ ク ト を検査 し て く だ さ い。 デフ ォ ル ト の w_master の pfc_Save 処理は、すべての更新可能な自己更 新可能オブ ジ ェ ク ト を ウ ィ ン ド ウ 上で更新す る のに、 論理的作業単位 サービ ス を使用 し ま す。 212 ページの 「pfc_Save プ ロ セ ス の使い方」 を参照 し て く だ さ い。 PFC Library ユーザーズ ガ イ ド 121 論理的作業単位サービ ス 自己更新オブ ジ ェ ク ト の実装 論理的作業単位サービ ス は、 すべての参照 さ れた、 更新可能な自己更 新オブジ ェ ク ト を更新 し ま す。 ほ と んどの自己更新オブ ジ ェ ク ト は、 デ フ ォ ル ト では更新 さ れません 下位互換性を保証す る ため、 u_dw が、 デフ ォ ル ト で更新で き る 唯一の 自己更新オブジ ェ ク ト にな っ てい ま す。 完全な自己更新オブジ ェ ク ト API を作 る 関数は、 以下の と お り です。 関数 of_AcceptText 目的 of_UpdatesPending pfc_UpdatesPending イ ベ ン ト を呼び出す。 こ の イ ベン ト は オブ ジ ェ ク ト が更新 さ れて い る か ど う か を 判別 する of_Validation pfc_Validation イ ベン ト を呼び出す。 こ の イ ベン ト は、 そのオブ ジ ェ ク ト に対す る デー タ を検証す る of_UpdatePrep pfc_UpdatePrep イ ベン ト を呼び出す。 こ の イ ベン ト は 必要で あれば更新す る オブ ジ ェ ク ト を準備す る of_Update pfc_Update イ ベン ト を呼び出す。 こ の イ ベン ト はデー タ ベー ス を更新す る of_PostUpdate pfc_PostUpdate イ ベン ト を呼び出す。 こ の イ ベン ト は 必要で あれば事後更新処理 を行 う pfc_AcceptText イ ベ ン ト を 呼び出す。 こ の イ ベ ン ト は 必要で あれば AcceptText 関数を呼び出す こ れ ら の関数や イ ベン ト の宣言 (signatures) に関す る 情報を調べ る に は、 オブ ジ ェ ク ト ブ ラ ウ ザ を使用 し て く だ さ い。 ユーザが書 く 自己更新 オブジ ェ ク ト 自己更新オブジ ェ ク ト を書 く には、上記の関数を実装 し 、そのオブジ ェ ク ト への参照が、該当す る n_cst_luw 関数に渡 さ れた配列内に存在す る こ と を確かめて く だ さ い。 保存処理の拡張 デ フ ォ ル ト で w_master の pfc_Save 処理は ウ ィ ン ド ウ 内のすべて の修 正済みデー タ ウ ィ ン ド ウ を更新 し ま す。 こ の処理は以下の よ う に拡張 で き ま す。 • オ ブ ジ ェ ク ト の Constructor イ ベン ト にあ る of_SetUpdateable 関数を呼び出す こ と に よ っ て、ほかの自己 更新オブ ジ ェ ク ト を更新可能 と 定義す る こ と がで き ま す。 こ の例 では、 u_lvs の リ ス ト ビ ュ ーか ら の も のです。 ほかの自己更新オブ ジ ェ ク ト this.of_SetUpdateable(TRUE) 122 PowerBuilder 第4章 PFC サー ビ スの使い方 こ れで論理的作業単位サービ ス が、u_lvs デー タ ソ ース をデフ ォ ル ト の保存処理の一部 と し て更新す る 関数を呼び出 し ま す。 • w_master の of_SetUpdateObject 関数を呼び出す こ と に よ っ て、1 つ以上のデー タ ス ト ア を更新すべ き オブジ ェ ク ト の リ ス ト に追加す る こ と がで き ま す。 デー タ ス ト ア PowerObject lpo_objs[ ] Integer li_count lpo_objs = this.control li_count = UpperBound(lpo_objs) li_count++ lpo_objs[li_count] = ids_data this.of_SetUpdateObjects(lpo_objs) • w_master の of_SetUpdateObject 関数 を 呼び出す こ と に よ っ て、1 つ以上の ウ ィ ン ド ウ を更新すべ き オブジ ェ ク ト の リ ス ト に追加す る こ と がで き ま す。 追加のウ ィ ン ド ウ PowerObject lpo_objs[ ] Integer li_count lpo_objs = this.control li_count = UpperBound(lpo_objs) li_count++ // こ のウ ィ ン ド ウ と w_other を更新 し ます lpo_objs[li_count] = w_other this.of_SetUpdateObjects(lpo_objs) リ ス ト サービ ス 概要 多 く のア プ リ ケーシ ョ ン では、 リ ン ク リ ス ト に情報を保持す る 必要が あ り ま す。 PFC リ ス ト サービ ス は、 リ ン ク リ ス ト を作成 し 操作す る た めのオブ ジ ェ ク ト と 関数を提供 し ま す。 以下の リ ス ト タ イ プがサポー ト さ れ ま す。 • 基本 リ ン ク リ ス ト ( ソ ー ト ま たは非 ソ ー ト ) • ス タ ッ ク (LIFO) • キ ュ ー (FIFO) • ツ リ ー (バ ラ ン ス バ イ ナ リ ツ リ ー) PFC Library ユーザーズ ガ イ ド 123 リ ス ト サー ビ ス リ ン ク リ ス ト は、 ノ ー ド で構成 さ れ ま す。 各 ノ ー ド には以下が含ま れ ま す。 リ ス ト は ノ ー ド で構成 さ れる • リ ス ト 内の直前の項目の参照 • リ ス ト 内の直後の項目の参照 • キー • デー タ • バ ラ ン ス 情報 (ツ リ ー リ ス ト のみ) リ ン ク リ ス ト に ノ ー ド を追加す る と き には、 キー と デー タ を指定 し ま す。 サービ ス オブジ ェ ク ト に よ っ て、 直前お よ び直後の項目の参照が 保持 さ れ ま す。 ツ リ ー リ ス ト は自動的に ソ ー ト さ れ ま す。 n_cst_list オブ ジ ェ ク ト を使 用 し て、 ソ ー ト 済み リ ン ク リ ス ト を保持す る こ と も 可能です。 ソ ー ト 済み リ ス ト につ いて 基本 リ ス ト の使い方 基本 リ ン ク リ ス ト は ス タ ッ ク と は異な り 、 その ノ ー ド 内の キ ュ ーは、 ア ク セ ス 時に削除 さ れ ま せん。 PFC に よ り 、 n_cst_list ユーザ オブ ジ ェ ク ト を通 し た基本 リ ス ト 処理が 可能にな り ま す。 基本 リ ス ト を作成す る と き には、n_cst_linkedlistnode の イ ン ス タ ン ス を 作成 し 、 イ ン ス タ ン ス に値を入れ、 それ ら の イ ン ス タ ン ス を リ ス ト に 追加 し ま す。 基本 リ ス ト の作成 ❖ 基本 リ ス ト を作成する には 1 n_cst_list 型の イ ン ス タ ン ス 変数を宣言 し ま す。 n_cst_list inv_list PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 2 124 リ ス ト に ノ ー ド を追加 し ま す。こ れを行 う には、n_cst_linkedlistnode の イ ン ス タ ン ス を 作 成 し て、 n_cst_node の of_SetKey お よ び of_SetData 関数を呼び出 し て キー と デー タ を指定 し てか ら 、of_Add 関数を呼び出 し て リ ス ト に ノ ー ド を追加 し ま す。 次の例では、ソ ー ス と し て シ ン グル ラ イ ン エデ ィ ッ ト を使用 し て リ ス ト 項目を追加 し てい ま す。 PowerBuilder 第4章 n_cst_linkedlistnode Integer li_return PFC サー ビ スの使い方 lnv_node lnv_node = CREATE n_cst_linkedlistnode lnv_node.of_SetKey(sle_1.text) lnv_node.of_SetData(sle_1.text) li_return = inv_list.of_Add(lnv_node) デフ ォ ル ト の PFC ソ ー ト 済み リ ス ト オブジ ェ ク ト は、 ノ ー ド リ ス ト を キー値に よ る 昇順で保持 し ま す。 デフ ォ ル ト では、 重複が許 さ れ ま すが、 必要な ら ば重複を禁止す る こ と がで き ま す。 ソ ー ト 済み リ ス ト は ス タ ッ ク と は異な り 、 そ の ノ ー ド 内の キ ュ ーは、 ア ク セ ス 時に削除 さ れ ま せん。 ソ ー ト 済み リ ス ト の作 成 n_cst_linkedlistnodecompare の of_Compare 関数を拡張 し て、 ソ ー ト 処理 を カ ス タ マ イ ズす る こ と がで き ま す。 134 ページの 「比較オブ ジ ェ ク ト の作成」 を参照 し て く だ さ い。 PFC に よ り 、 n_cst_list ユーザ オブ ジ ェ ク ト を通 し た ソ ー ト 済み リ ス ト 処理が可能にな り ま す。 ❖ ソ ー ト 済み リ ス ト を作成す る には 1 n_cst_list 型の イ ン ス タ ン ス 変数を宣言 し ま す。 n_cst_list 2 inv_sortedlist ソ ー ト さ れ る リ ス ト で あ る こ と を指定 し ま す。 inv_sortedlist.of_SetSorted(TRUE) 3 (オプシ ョ ン) こ の リ ス ト で重複 し た項目を許可す る か ど う か を指 定 し ま す (デフ ォ ル ト では重複が許可 さ れ ま す)。 inv_sortedlist.of_SetDuplicatesAllowed(FALSE) 4 (オプシ ョ ン) カ ス タ マ イ ズ し た ノ ー ド 比較オブジ ェ ク ト を指定 し ま す。 次の例では、 n_cst_customcompare 型の inv_customcompare イ ン ス タ ン ス 変数を仮定 し てい ま す。 inv_customecompare = CREATE n_cst_customcompare inv_sortedlist.of_SetCompare(n_cst_customcompare) 5 PFC Library ユーザーズ ガ イ ド リ ス ト に ノ ー ド を 追加 し ま す。 こ れ を 行 う に は、 ま ず 最初 に、 n_cst_linkedlistnode の イ ン ス タ ン ス を 作 成 し 、 n_cst_node の of_SetKey お よ び of_SetData 関数を呼び出 し て キー と デー タ を指定 し てか ら 、of_Add 関数を呼び出 し て リ ス ト に ノ ー ド を追加 し ま す。 次の例では、 ソ ー ス と し て シ ン グル ラ イ ン エデ ィ ッ ト を使用 し て ソ ー ト 済み リ ス ト を追加 し てい ま す。 125 リ ス ト サー ビ ス n_cst_linkedlistnode Integer li_return lnv_node lnv_node = CREATE n_cst_linkedlistnode lnv_node.of_SetKey(sle_1.text) lnv_node.of_SetData(sle_1.text) li_return = inv_list.of_Add(lnv_node) リ ス ト 内の ノ ー ド の検 索 ノ ー ド を検索す る には、最初にキーを知っ てお く 必要があ り ま す。PFC は、 ア ク セ ス 時に リ ス ト ノ ー ド を削除 し ま せん。 ❖ ソ ー ト 済み リ ス ト 内の ノ ー ド を検索する には 1 2 つの ノ ー ド に対 し て変数を定義 し ま す。 n_cst_linkedlistnode 2 lnv_node, lnv_temp 1 つの ノ ー ド を作成 し ま す。 lnv_temp = CREATE n_cst_linkedlistnode 3 検索 し たい ノ ー ド のキーを使用 し て、 空の ノ ー ド に値を入れ ま す。 lnv_temp.of_SetKey(sle_2.text) 4 of_Find 関数を呼び出 し て、 目的の ノ ー ド にア ク セ ス し ま す。 こ の 関数の最初の引数が検索対象の ノ ー ド の参照を返 し ま す。 inv_list.of_Find(lnv_node, lnv_temp) 5 n_cst_linkedlistnode の of_GetKey お よ び of_GetData 関数を呼び出 し て、 検出 さ れた ノ ー ド のキー と デー タ にア ク セ ス し ま す。 6 一時的な ノ ー ド を破棄 し ま す。 DESTROY lnv_temp lnv_node を破棄 し ない lnv_node 変数は、 リ ス ト 内の ノ ー ド の参照です。 こ れ を 破棄す る と 、 リ ス ト が 破壊 さ れ ま す。 そ の 場 合 は、 次 の 手 順 で 説 明す る 方 法 で of_Remove を使用 し て く だ さ い。 リ ス ト 全体に 1 回で ア ク セ スする of_Get 関数を使用 し て、 リ ス ト 内のすべての ノ ー ド を検索す る こ と が で き ま す。 ❖ 1 つの関数呼出 し で リ ス ト 全体 を検索す る には 1 126 検索対象 ノ ー ド を入れ る n_cst_linkedlistnode 型の配列を定義 し ま す。 PowerBuilder 第4章 PFC サー ビ スの使い方 n_cst_linkedlistnode lnv_nodes[ ] Integer li_return, li_count Any la_data String ls_data 2 of_Get 関数を呼び出 し ま す。 li_return = inv_list.of_Get(lnv_nodes) 3 各 ノ ー ド を適切に処理す る こ の例では、 リ ス ト ボ ッ ク ス に ノ ー ド デー タ が表示 さ れ ま す。 lb_1.Reset() FOR li_count = 1 to li_return lnv_nodes[li_count].of_GetData(la_data) ls_data = String(la_data) lb_1.AddItem(ls_data) NEXT こ の方法は、 ス タ ッ ク 、 キ ュ ー、 お よ びツ リ ーに も 適用 さ れ ま す。 リ ス ト か ら ノ ー ド を明示的に削除 し なければな り ま せん ( ス タ ッ ク や キ ュ ー と 違っ て、 ノ ー ド は自動的に削除 さ れ ま せん)。 リ ス ト か ら ノ ー ド を削 除す る ❖ リ ス ト か ら ノ ー ド を削除す る には 1 2 つの ノ ー ド に対 し て変数を定義 し ま す。 n_cst_linkedlistnode 2 lnv_node, lnv_temp 1 つの ノ ー ド を作成 し ま す。 lnv_temp = CREATE n_cst_linkedlistnode 3 削除 し たい ノ ー ド のキーを使用 し て、 空の ノ ー ド に値を入れ ま す。 lnv_temp.of_SetKey(sle_2.text) 4 of_Find 関数を呼び出 し て、 目的の ノ ー ド にア ク セ ス し ま す。 こ の 関数は、 目的の ノ ー ド の参照 (最初の引数) を返 し ま す。 inv_list.of_Find(lnv_node, lnv_temp) 5 of_Remove 関数を呼び出 し て、 リ ス ト か ら ノ ー ド を削除 し ま す。 inv_list.of_Remove(lnv_node) 6 一時的な ノ ー ド を破棄 し ま す。 DESTROY lnv_temp リ ス ト の破棄 リ ス ト が不要にな っ た ら 、 リ ス ト と その ノ ー ド すべて を破棄 し て く だ さ い。 PFC Library ユーザーズ ガ イ ド 127 リ ス ト サー ビ ス ❖ リ ス ト と その ノ ー ド を すべて を破棄する には • of_Destroy を呼び出 し て、 リ ス ト 内のすべての ノ ー ド を破棄 し ま す。 Long ll_count ll_count = inv_list.of_Destroy() MessageBox(" リ ス ト の破棄 ", & String(ll_count) + " 個の ノ ー ド が破棄 さ れま し た ") ス タ ッ ク の使い方 ス タ ッ ク は、 後入れ先出 し (LIFO) リ ス ト を保持 し ま す。 ス タ ッ ク に 新 し い ノ ー ド を追加す る と 、 ス タ ッ ク オブ ジ ェ ク ト に よ っ て その ノ ー ド が先頭に入れ ら れ ま す。 ス タ ッ ク か ら ノ ー ド を取 り 出す と 、 ス タ ッ ク オブ ジ ェ ク ト が リ ス ト の先頭か ら その ノ ー ド にア ク セ ス し て、 処理 中に削除 し ま す。 PFC に よ り 、 n_cst_stack ユーザ オブ ジ ェ ク ト を通 し た ス タ ッ ク 処理が 可能にな り ま す。 ス タ ッ ク を作成す る と き には、n_cst_linkedlistnode の イ ン ス タ ン ス を作 成 し て値を入れ、 ス タ ッ ク にプ ッ シ ュ し ま す。 ス タ ッ ク の作成 ❖ ス タ ッ ク を作成す る には 1 n_cst_stack 型の イ ン ス タ ン ス 変数を宣言 し ま す。 n_cst_stack inv_stack PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 2 ス タ ッ ク に ノ ー ド を追加 し ま す。 こ れ を行 う には、 ノ ー ド の イ ン ス タ ン ス を 作 成 し 、 n_cst_linkedlistnode の of_SetKey お よ び of_SetData 関 数 を 呼 び 出 し て キ ー と デ ー タ を 指 定 し て か ら 、 of_Push を 呼び出 し て ス タ ッ ク に ノ ー ド を 追加 し ま す (次の例で は、 ソ ー ス と し て シ ン グル ラ イ ン エデ ィ ッ ト を使用 し て ス タ ッ ク を作成 し てい ま す)。 n_cst_linkedlistnode Integer li_return lnv_node lnv_node = CREATE n_cst_linkedlistnode lnv_node.of_SetKey(sle_1.text) 128 PowerBuilder 第4章 PFC サー ビ スの使い方 lnv_node.of_SetData(sle_1.text) li_return = inv_stack.of_Push(lnv_node) ス タ ッ クから ノ ー ド を 削除する ス タ ッ ク の先頭の ノ ー ド (最後に追加 さ れた ノ ー ド ) にのみア ク セ ス で き ま す。 ス タ ッ ク を ポ ッ プ し て ノ ー ド に ア ク セ ス し ま す。 ❖ ス タ ッ ク か ら ノ ー ド を削除する には 1 ス タ ッ ク か ら 削除 し たい ノ ー ド を含め る n_cst_linkedlistnode 型の 変数を定義 し ま す。 n_cst_linkedlistnode 2 lnv_node of_Pop を呼び出 し て ス タ ッ ク か ら ノ ー ド を削除 し ま す。 inv_stack.of_Pop(lnv_node) 3 n_cst_linkedlistnode の of_GetKey お よ び of_GetData 関数を呼び出 し て、 必要な キー と デー タ にア ク セ ス し ま す。 Any la_key IF IsValid(lnv_node) THEN lnv_node.of_GetKey(la_key) MessageBox(" ス タ ッ ク ", & " キーは " + String(la_key) + " です ") ELSE MessageBox(" ス タ ッ ク ", " リ ス ト が空です ") END IF ス タ ッ ク の破棄 ス タ ッ ク が不要にな っ た ら 、 ス タ ッ ク と そ のすべての ノ ー ド を破棄 し て く だ さ い。 ❖ ス タ ッ ク と そのすべての ノ ー ド を破棄す る には • of_Destroy を呼び出 し て、ス タ ッ ク 内のすべての ノ ー ド を破棄 し ま す。 Long ll_count ll_count = inv_stack.of_Destroy() MessageBox(" 破棄 ", & String(ll_count) + " 個の ノ ー ド が破棄 さ れま し た ") PFC Library ユーザーズ ガ イ ド 129 リ ス ト サー ビ ス キ ュ ーの使い方 キ ュ ーは、 先入れ先出 し (FIFO) リ ス ト を保持 し ま す。 キ ュ ーに新 し い ノ ー ド を追加す る と 、 キ ュ ー オブ ジ ェ ク ト に よ っ て その ノ ー ド が末 尾に入れ ら れ ま す。 キ ュ ーか ら ノ ー ド を取 り 出す と 、 キ ュ ー オブジ ェ ク ト が リ ス ト の先頭か ら その ノ ー ド にア ク セ ス し 、 処理中に削除 し ま す。 PFC に よ り 、n_cst_queue ユーザ オブ ジ ェ ク ト を通 し た キ ュ ー処理が可 能にな り ま す。 キ ュ ーを作成す る と き には、n_cst_linkedlistnode の イ ン ス タ ン ス を作成 し て値を入れ、 キ ュ ーに追加 し ま す。 キ ュ ーの作成 ❖ キ ュ ーを作成する には 1 n_cst_queue 型の イ ン ス タ ン ス 変数を宣言 し ま す。 n_cst_queue inv_queue PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 2 キ ュ ーに ノ ー ド を追加 し ま す。 こ れ を行 う には ノ ー ド の イ ン ス タ ン ス を作成 し 、 n_cst_linkedlistnode の of_SetKey お よ び of_SetData 関数を呼び出 し て キー と デー タ を指定 し て か ら 、 of_Put を呼び出 し ま す。 こ の例では、 シ ン グル ラ イ ン エデ ィ ッ ト を ソ ース に使用 し て キ ュ ーが作成 さ れ ま す。 n_cst_linkedlistnode Integer li_return lnv_node lnv_node = CREATE n_cst_linkedlistnode lnv_node.of_SetKey(sle_1.text) lnv_node.of_SetData(sle_1.text) li_return = inv_queue.of_Put(lnv_node) キ ュ ーの先頭の ノ ー ド ( リ ス ト 内の最 も 古い ノ ー ド ) にのみア ク セ ス で き ま す。 キ ュ ーか ら ノ ー ド を削 除す る ❖ キ ュ ーか ら ノ ー ド を削除す る には 1 キ ュ ーか ら 削除 し たい ノ ー ド を含む n_cst_linkedlistnode 型の変数 を宣言 し ま す。 n_cst_linkedlistnode 2 lnv_node of_Get を呼び出 し て キ ュ ーか ら ノ ー ド を削除 し ま す。 inv_queue.of_Get(lnv_node) 130 PowerBuilder 第4章 3 PFC サー ビ スの使い方 n_cst_linkedlistnode の of_GetKey お よ び of_GetData 関数を呼び出 し て、 必要な キー と デー タ にア ク セ ス し ま す。 Any la_key IF IsValid(lnv_node) THEN lnv_node.of_GetKey(la_key) MessageBox(" キ ュ ー ", & " キーは " + String(la_key) + " です ") ELSE MessageBox(" キ ュ ー ", " リ ス ト が空です ") END IF キ ュ ーが不要にな っ た ら 、 リ ス ト と そのすべての ノ ー ド を破棄 し て く だ さ い。 キ ュ ーの破棄 ❖ キ ュ ーを破棄する には • of_Destroy を呼び出 し て、 キ ュ ー内のすべての ノ ー ド を破棄 し ま す。 Long ll_count ll_count = inv_queue.of_Destroy() MessageBox(" すべて破棄 ", & String(ll_count) + " 個の ノ ー ド が破棄 さ れま し た ") ツ リ ーの使い方 PFC ツ リ ー リ ス ト オブ ジ ェ ク ト には、キー値の昇順に ノ ー ド のバ ラ ン ス バ イ ナ リ ツ リ ーが保持 さ れ ま す。 こ のオブジ ェ ク ト に よ っ て、 重複 が許 さ れ ない ソ ー ト 済み リ ス ト に関す る すべて の機能が得 ら れ ま す。 こ れは、 ス タ ッ ク と は異な り 、 その ノ ー ド 内のキ ュ ーは、 ア ク セ ス 時 に削除 さ れ ま せん。 PFC ツ リ ー リ ス ト オブジ ェ ク ト に よ っ て保持 さ れ る バ ラ ン ス バ イ ナ リ ツ リ ーは、 2 レベル以上のバ ラ ン ス が崩れ る こ と は決 し て あ り ま せ ん。 ツ リ ー構造に よ り 、 検索操作中に検索す る 必要が あ る ノ ー ド 数を 減 ら す こ と がで き る ため、 ソ ー ト 済み リ ス ト よ り も パ フ ォ ーマ ン ス を 高め る こ と がで き ま す。 n_cst_treenodecompare の of_Compare 関数を拡張す る こ と で、 ソ ー ト 処 理を カ ス タ マ イ ズす る こ と がで き ま す。 134 ページの 「比較オブ ジ ェ ク ト の作成」 を参照 し て く だ さ い。 PFC Library ユーザーズ ガ イ ド 131 リ ス ト サー ビ ス PFC に よ り 、n_cst_tree ユーザ オブ ジ ェ ク ト を通 し た ツ リ ー処理が可能 にな り ま す。 ツ リ ーを作成す る と き には、 n_cst_treenode の イ ン ス タ ン ス を作成 し て 値を入れて、 ツ リ ーに追加 し ま す。 ツ リ ーの作成 ❖ ツ リ ーを作成する には 1 n_cst_tree 型の イ ン ス タ ン ス 変数を宣言 し ま す。 n_cst_tree inv_tree PFC は、 自動 イ ン ス タ ン ス 作成オ プ シ ョ ン を 使用 し て こ の オ ブ ジ ェ ク ト を定義す る ので、 開発者が CREATE 文や DESTROY 文を 記述す る 必要はあ り ま せん。 2 (オプシ ョ ン) カ ス タ マ イ ズ し た ノ ー ド 比較オブジ ェ ク ト を指定 し ま す。 次の例では、 n_cst_customcompare 型の inv_customcompare イ ン ス タ ン ス 変数を仮定 し てい ま す。 inv_customecompare = CREATE n_cst_customcompare inv_tree.of_SetCompare(inv_customcompare) 3 ツ リ ーに ノ ー ド を追加 し ま す。 こ れを行 う には、 of_Create を呼び 出 し て ノ ー ド の イ ン ス タ ン ス を作成 し 、n_cst_treenode の of_SetKey お よ び of_SetData 関数 を 呼び出 し て キ ー と デー タ を 指定 し て か ら 、 of_Add 関数を呼び出 し て ツ リ ーに ノ ー ド を追加 し ま す。 次の 例で は、 ソ ー ス と し て シ ン グ ル ラ イ ン エデ ィ ッ ト を 使用 し て ツ リ ーを作成 し てい ま す。 n_cst_treenode lnv_node Integer li_return inv_tree.of_Create(lnv_node) lnv_node.of_SetKey(sle_1.text) lnv_node.of_SetData(sle_1.text) li_return = inv_tree.of_Add(lnv_node) バ ラ ン ス バ イ ナ リ ツ リ ー内の ノ ー ド を検索 し ま す。 各 ノ ー ド は、 ア ク セ ス 時には、 リ ス ト か ら 削除 さ れ ま せん。 ツ リ ー内の ノ ー ド の検 索 ❖ ツ リ ー リ ス ト 内の ノ ー ド を検索す る には 1 空の ノ ー ド を作成 し ま す。 n_cst_treenode lnv_node, lnv_temp inv_tree.of_Create(lnv_temp) 2 検索 し たい ノ ー ド のキーを使用 し て、 空の ノ ー ド に値を入れ ま す。 lnv_temp.of_SetKey(li_key) 132 PowerBuilder 第4章 3 PFC サー ビ スの使い方 of_Find 関数を呼び出 し て、 目的の ノ ー ド にア ク セ ス し ま す。 こ の 関数の最初の引数が検索対象の ノ ー ド の参照を返 し ま す。 inv_tree.of_Find(lnv_node, lnv_temp) 4 n_cst_node の of_GetKey お よ び of_GetData 関数を呼び出 し て、 検 出 さ れた ノ ー ド のキー と デー タ にア ク セ ス し ま す。 5 一時的な ノ ー ド を破棄 し ま す。 DESTROY lnv_temp lnv_node を破棄 し ない lnv_node 変数は、 ツ リ ー リ ス ト 内の ノ ー ド の参照です。 こ れ を破棄す る と 、 リ ス ト が破壊 さ れ ま す。 その場合、 次の手順で説明す る 方法で of_Remove を使用 し て く だ さ い。 ツ リ ー リ ス ト か ら ノ ー ド を 明示的に削除 し な け ればな り ま せん ( ス タ ッ ク やキ ュ ー と 同様に、 ノ ー ド は自動的に削除 さ れ ま せん)。 ツ リ ーか ら ノ ー ド を削 除す る ❖ リ ス ト か ら ノ ー ド を削除す る には 1 空の ノ ー ド を作成 し ま す。 n_cst_treenode lnv_node, lnv_temp inv_tree.of_Create(lnv_temp) 2 削除 し たい ノ ー ド のキーを使用 し て、 空の ノ ー ド に値を入れ ま す。 lnv_temp.of_SetKey(li_key) 3 of_Find 関数を呼び出 し て、 目的の ノ ー ド にア ク セ ス し ま す。 こ の 関数は、 目的の ノ ー ド の参照 (最初の引数) を返 し ま す。 inv_tree.of_Find(lnv_node, lnv_temp) 4 of_Remove 関数を呼び出 し て、 ツ リ ー リ ス ト か ら ノ ー ド を削除 し ま す。 inv_tree.of_Remove(lnv_node) 5 一時的な ノ ー ド を破棄 し ま す。 DESTROY lnv_temp ツ リ ーの破棄 ツ リ ーが不要にな っ た ら 、 リ ス ト と その ノ ー ド すべて を破棄 し て く だ さ い。 PFC Library ユーザーズ ガ イ ド 133 リ ス ト サー ビ ス ❖ ツ リ ー リ ス ト を破棄する には • of_Destroy を呼び出 し て、 ツ リ ー リ ス ト 内のすべての ノ ー ド を破 棄 し ま す。 Long ll_count ll_count = inv_tree.of_Destroy() MessageBox(" すべて破棄 ", & String(ll_count) + " 個の ノ ー ド が破棄 さ れま し た ") 比較オ ブ ジ ェ ク ト の作成 ソ ー ト 処理の中核 と な る のは、 値の大小の比較操作です。 PFC ソ ー ト 済み リ ス ト と ツ リ ー リ ス ト では、 n_cst_nodecompare の of_Compare 関 数を使用 し て こ の比較を行い ま す。デフ ォ ル ト では、n_cst_nodecompare の of_Compare 関数は、 次の よ う に し て 2 つの ノ ー ド を比較 し ま す。 • キー値 (デー タ 値ではな く ) を比較す る • シ ン プルなデー タ 型 (すなわち、 オブ ジ ェ ク ト イ ン ス タ ン ス お よ び列挙デー タ 型を除 く すべて) のみを対象 と す る • 昇順 ソ ー ト 済み リ ス ト を維持す る ために ソ ー ト 済み リ ス ト お よ び ツ リ ー リ ス ト オブジ ェ ク ト に よ っ て使用 さ れ る 値を返す ソ ー ト 済 み リ ス ト で 異 な る 比 較 ロ ジ ッ ク が 必 要 な 場 合 に は、 n_cst_nodecompare を継承 し て、of_Compare 関数を上書 き し な ければな り ま せん。 ソ ー ト 済み リ ス ト で異な る 比較 ロ ジ ッ ク が必要な場合には、 上書 き し た of_Compare を持つ n_cst_nodecompare の子孫を作成 し て、 実行時に そのオブ ジ ェ ク ト を有効にす る 必要があ り ま す。 カ ス タ ム比較オ ブ ジ ェ クト ❖ 134 カ ス タ マ イズ比較オ ブ ジ ェ ク ト を作成す る には 1 ユーザ オブ ジ ェ ク ト ペ イ ン タ を使用 し て、 カ ス タ マ イ ズ n_cst_nodecompare の子孫を作成 し ま す。 2 カ ス タ マ イ ズ n_cst_nodecompare の子孫の中で、 Public of_Compare 関数を実装 し て、 渡 さ れた 2 つの ノ ー ド 内のキー値を比較 し ま す。 こ の関数は、 n_cst_node 型 (値渡 し ) の 2 つの引数を受け取っ て、 次の よ う な整数値を返 し ま す。 • 1 2 番目の ノ ー ド のキーが最初の ノ ー ド のキー よ り 大 き い • 0 2 番目の ノ ー ド のキーが最初の ノ ー ド のキー と 等 し い • -1 2 番目の ノ ー ド のキーが最初の ノ ー ド のキー よ り 小 さ い PowerBuilder 第4章 PFC サー ビ スの使い方 次の例では、 渡 さ れた各 ノ ー ド の中に、 比較対象 と な る 状態お よ び ラ ス ト ネー ム の イ ン ス タ ン ス 変数 を 持つ カ ス タ マ イ ズ ク ラ ス ユーザ オブ ジ ェ ク ト の参照が含ま れてい ま す。 Any la_key1, la_key2 String ls_keytype1, ls_keytype2 n_cst_empinfo lnv_emp1, lnv_emp2 IF NOT IsValid(anv_node1) THEN Return -3 IF NOT IsValid(anv_node2) THEN Return -3 anv_node1.of_GetKey(la_key1) IF IsNull(la_key1) THEN Return -4 anv_node2.of_GetKey(la_key2) IF IsNull(la_key2) THEN Return -4 ls_keytype1 = ClassName(la_key1) ls_keytype2 = ClassName(la_key2) // IF IF IF IF IF IF ノ ー ド デー タ のデー タ 型を チ ェ ッ ク し ま す。 ls_keytype1 = "" THEN Return -6 IsNull(ls_keytype1) THEN Return -6 ls_keytype1 <> "n_cst_empinfo" THEN Return -6 ls_keytype2 = "" THEN Return -6 IsNull(ls_keytype2) THEN Return -6 ls_keytype2 <> "n_cst_empinfo" THEN Return -6 lnv_emp1 = la_key1 // n_cst_empinfo へのキ ャ ス ト lnv_emp2 = la_key2 // 最初にス テー タ ス を比較 し ま す。 // ほかのエ ラ ー チ ェ ッ ク を省略 し ます。 IF lnv_emp1.is_state < lnv_emp2.is_state THEN Return -1 ELSEIF lnv_emp1.is_state > lnv_emp2.is_state THEN Return 1 ELSE // 等 し いス テー タ ス です。 ラ ス ト ネーム を比較 し ます。 IF lnv_emp1.is_lname < lnv_emp2.is_lname THEN Return -1 ELSEIF & lnv_emp1.is_lname > lnv_emp2.is_lname THEN Return 1 ELSE // 状態お よ び lname が等 し い。 Return 0 END IF END IF PFC Library ユーザーズ ガ イ ド 135 タ イ ミ ン グ サー ビ ス ❖ 実行時に カ ス タ マ イズ比較オ ブ ジ ェ ク ト を有効にする には 1 PFC リ ス ト 処理を使用す る オブ ジ ェ ク ト の中で、 デー タ 型 と し て カ ス タ マ イ ズ n_cst_nodecompare オ ブ ジ ェ ク ト を 使用す る イ ン ス タ ン ス 変数を定義 し ま す。 n_cst_customcompare 2 inv_customcompare カ ス タ マ イ ズ 比 較 オ ブ ジ ェ ク ト の イ ン ス タ ン ス を 作 成 し て、 n_cst_list の of_SetCompare 関数を呼び出 し ま す。 inv_customcompare = CREATE n_cst_customcompare inv_sortedlist.of_SetCompare(inv_customcompare) 3 リ ス ト に追加す る 前にオブ ジ ェ ク ト を初期化 し ま す。 前記の例で は、 n_cst_empinfo オブ ジ ェ ク ト の配列を作成 し て、 それ ら を ラ ス ト ネーム、 フ ァ ース ト ネーム、 お よ び状態で初期化 し てい ま す。 4 ノ ー ド を作成 し 、 ノ ー ド 値 を設定 し て、 必要な ら ば リ ス ト に追加 し ま す。 n_cst_node lnv_node Integer li_i FOR li_i = 1 TO UpperBound(inv_empinfo) inv_tree.of_Create(lnv_node) lnv_node.of_SetKey(inv_empinfo[li_i]) lnv_node.of_SetData(inv_empinfo[li_i]) inv_tree.of_Add(lnv_node) NEXT タ イ ミ ン グ サービ ス 概要 タ イ ミ ン グ サービ ス は、PFC の n_tmg タ イ ミ ン グ オブ ジ ェ ク ト と 一緒 に動作 し て、 シ ン グル タ イ マー と 複数 タ イ マーを提供 し ま す。 こ れ ら の タ イ マーは、標準 ク ラ ス お よ びカ ス タ ム ク ラ ス のユーザ オブ ジ ェ ク ト で使 う 場合に特に便利です。 ま た、 Windows プ ラ ッ ト フ ォ ーム でサ ポー ト さ れ る タ イ マーレ ベルを提供 し ない UNIX で も 役立ち ま す。 PFC に よ っ て、 n_tmg、 n_cst_tmgsingle、 お よ び n_cst_tmgmultiple に よ る タ イ ミ ン グ サービ ス が使用可能にな り ま す。 136 PowerBuilder 第4章 PFC サー ビ スの使い方 n_cst_tmgsingle を使用 し て シ ン グル タ イ マーを維持 し ま す。of_Register 関数 を呼び出 し て、 通知対象のオブ ジ ェ ク ト 、 通知対象の イ ベ ン ト 、 お よ び タ イ マー間隔を指定す る こ と で、 タ イ マーを設定 し ま す。 シ ン グル タ イ マーの 使い方 ❖ シ ン グル タ イ マーを使用する には 1 n_tmg 型の イ ン ス タ ン ス 変数を設定 し ま す。 n_tmg 2 itmg_timer n_tmg 型の イ ン ス タ ン ス を作成 し ま す。 itmg_timer = CREATE n_tmg 3 シ ン グル タ イ マー サービ ス を使用可能に し ま す。 itmg_timer.of_SetSingle(TRUE) 4 通知対象のオ ブ ジ ェ ク ト お よ び イ ベン ト を 登録 し ま す (次の例で は、 オブ ジ ェ ク ト が ウ ィ ン ド ウ にな り ま す)。 itmg_timer.inv_single.of_Register (this, "ue_showtimer", 15) 5 & n_cst_tmgsingle か ら 通知を受け取 る よ う に イ ベン ト を コ ー ド 化 し ま す ( こ の例では ue_showtimer)。 n_cst_tmgmultiple を使用 し て複数 タ イ マーを維持 し ま す。of_Register 関 数を呼び出 し て、 通知対象のオブ ジ ェ ク ト 、 通知対象の イ ベン ト 、 お よ び タ イ マー間隔を指定す る こ と で、 各 タ イ マーを設定 し ま す。 複数 タ イ マーの使い方 ❖ 複数 タ イ マー を使用す る には 1 n_tmg 型の イ ン ス タ ン ス 変数を設定 し ま す。 n_tmg 2 itmg_timer n_tmg 型の イ ン ス タ ン ス を作成 し ま す。 itmg_timer = CREATE n_tmg 3 複数 タ イ マー サービ ス を使用可能に し ま す。 itmg_timer.of_SetMultiple(TRUE) 4 通知対象のオブ ジ ェ ク ト お よ び イ ベン ト を登録 し ま す。 itmg_timer.inv_multiple.of_Register (iw_sheet1, "ue_timer", 7) itmg_timer.inv_multiple.of_Register (iw_sheet2, "ue_timer", 11) itmg_timer.inv_multiple.of_Register (iw_sheet3, "ue_timer", 13) PFC Library ユーザーズ ガ イ ド & & & 137 タ イ ミ ン グ サー ビ ス 5 138 n_cst_tmgmultiple か ら 通知を受け取 る よ う に イ ベン ト を コ ー ド 化 し ま す ( こ の例では ue_timer)。 PowerBuilder 第 5 章 PFC ビ ジ ュ アル コ ン ト ロールの 使い方 この章につい て こ の章では、PFC 標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト と カ ス タ ム ビ ジ ュ アル ユーザ オブジ ェ ク ト の使い方について説明 し ま す。 内容 PFC ビ ジ ュ アル コ ン ト ロ ールについて トピック ページ 139 標準 ビ ジ ュ アル ユーザ オブジ ェ ク ト の使い方 140 カ ス タ ム ビ ジ ュ アル ユーザ オブ ジ ェ ク ト の使い方 183 PFC ビ ジ ュ アル コ ン ト ロールについて PFC には以下の よ う な 2 通 り の ビ ジ ュ アル コ ン ト ロ ールがあ り ま す。 1 つの PowerBuilder コ ン ト ロ ールに よ っ て構成 さ れ ま す。 PFC は ロ ジ ッ ク を追加 し 、 こ の コ ン ト ロ ールの機能性 と 再利用可能性 を高め ま す。 u_lb リ ス ト ボ ッ ク ス コ ン ト ロ ールは、 標準 ビ ジ ュ アル ユーザ オブ ジ ェ ク ト の一例です。 • 標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト • カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト 1 つ の ユ ニ ッ ト と し て機能す る 複数の コ ン ト ロ ールに よ っ て構成 さ れ ま す。 PFC は ロ ジ ッ ク を追加 し 、 適切な処理を行い ま す。 u_ calculator 計 算機 コ ン ト ロ ールは、 カ ス タ ム ビ ジ ュ アル オブ ジ ェ ク ト の一 例です。 標準 ク ラ ス ユーザ オブ ジ ェ ク ト PFC には、 n_tr ( ト ラ ン ザ ク シ ョ ン)、 n_cn (接続)、 n_msg ( メ ッ セージ) な ど、一連の標準 ク ラ ス ユーザ オブ ジ ェ ク ト も あ り ま す。 標準 ク ラ ス ユーザ オブ ジ ェ ク ト の使い方については、第 3 章「PFC プ ロ グ ラ ミ ン グの基礎」 を参照 し て く だ さ い。 PFC Library ユーザーズ ガ イ ド 139 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 標準 ビ ジ ュ アル ユーザ オブ ジ ェ ク ト の使い方 PFC には、 いずれの ウ ィ ン ド ウ コ ン ト ロ ールに も 使 う こ と が可能な、 標準ビ ジ ュ アル ユーザ オブジ ェ ク ト が含 ま れて い ま す。標準 ビ ジ ュ ア ル ユーザ オブ ジ ェ ク ト には以下の も のがあ り ま す。 • 基本的な ウ ィ ン ド ウ コ ン ト ロ ール ( コ マ ン ド ボ タ ン、 ラ ジオボ タ ン、 チ ェ ッ ク ボ ッ ク ス な ど ) • 複 雑 な ウ ィ ン ド ウ コ ン ト ロ ー ル (デ ー タ ウ ィ ン ド ウ 、 リ ス ト ビ ュ ー、 ツ リ ービ ュ ー、 リ ッ チテ キ ス ト エデ ィ ッ ト 、 タ ブ な ど) 基本機能の使い方 標準ビ ジ ュ アル ユーザ オブジ ェ ク ト は、その定義を、標準 PowerBuilder コ ン ト ロ ールの う ちの 1 つか ら 継承 し てい ま す。 PFC は必要で あれば 各 コ ン ト ロ ール を拡張 し ま す。 ま た開発者が こ れ を さ ら に拡張で き ま す。 PFC 標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト は、その タ イ プに よ り 異な り ま すが、 以下の基本機能を持っ てい ま す。 140 編集可能な コ ン ト ロ ール には、 切 り 取 り 、 コ ピ ー、 貼 り 付け、 お よ びそのほか の編集機能が含 ま れてい ま す。 • 切 り 取 り 、 コ ピー、 お よび貼 り 付け • 編集可能な コ ン ト ロ ールの RButtonUp イ ベ ン ト には、 ポ ッ プ ア ッ プ メ ニ ュ ーを表示す る ための コ ー ド が含 ま れてい ま す。 ユーザは こ の メ ニ ュ ー を使っ て、 現在の ビ ジ ュ アル コ ン ト ロ ールに、 テ キ ス ト の切 り 取 り 、 コ ピ ー、 お よ び貼 り 付け がで き ま す。 • オー ト ス ク ロ ール機能 ド ロ ッ プダ ウ ン リ ス ト ボ ッ ク ス コ ン ト ロ ー ル と ド ロ ッ プダ ウ ン ピ ク チ ャ リ ス ト ボ ッ ク ス コ ン ト ロ ールには、 ユーザが入力す る と 、 そ の リ ス ト を自動的に ス ク ロ ール さ せ る 機 能があ り ま す。 • 選択反転機能 • オー ト セ レ ク ト 機能 ポ ッ プア ッ プ メ ニュー リ ス ト ボ ッ ク ス コ ン ト ロ ール と ピ ク チ ャ リ ス ト ボ ッ ク ス コ ン ト ロ ールには、 現在の選択を反転 さ せ る 機能があ り ま す。 編集可能な コ ン ト ロ ールの中には、 フ ォ ーカ ス を 受け る と 、 テ キ ス ト を自動的に選択す る 機能を 持つ も のがあ り ま す。 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ほ と ん ど の コ ン ト ロ ールの GetFocus イ ベ ン ト には、 MDI フ レ ーム のマ イ ク ロ ヘルプ エ リ ア に タ グ値を表示 す る ためのプ リ コ ー ド 機能が含ま れてい ま す。 • マ イ ク ロ ヘルプ表示機能 標準 ビ ジ ュ ア ル ユーザ オブ ジ ェ ク ト を ウ ィ ン ド ウ に配置す る 方法に ついては、 『PowerBuilder ユーザーズ ガ イ ド 』 マニ ュ アルを参照 し て く だ さ い。 切 り 取 り 、 コ ピ ー、 貼 り 付け、 お よびそのほかの編集機能 PFC 標準ビ ジ ュ アル ユーザ オブジ ェ ク ト の う ち、編集可能な も のには すべて、 テ キ ス ト 編集機能を実行す る ユーザ イ ベン ト が含 ま れてい ま す。 編集可能な PFC ビ ジ ュ アル ユーザ オブ ジ ェ ク ト と し ては以下の も のがあ り ま す。 コ ン ト ロ ール ド ロ ッ プダ ウ ン リ ス ト ボ ッ ク ス PFC ビ ジ ュ アル ユーザ オブ ジ ェ ク ト u_ddlb ド ロ ッ プダ ウ ン ピ ク チャ リ ス ト ボッ クス u_ddplb デー タ ウ ィ ン ド ウ u_dw エデ ィ ッ ト マ ス ク u_em マルチ ラ イ ン エデ ィ ッ ト u_mle OLE カ ス タ ム コ ン ト ロ ール u_oc リ ッ チエデ ィ ッ ト テキ ス ト u_rte シ ン グル ラ イ ン エデ ィ ッ ト u_sle PFC は、編集可能な標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト に対 し て適切 なユーザ イ ベン ト を定義す る こ と に よ っ て、 テ キ ス ト 編集機能を実装 し ま す。 消去 テキス ト 編集機能 ユーザ イ ベ ン ト pfc_Clear コ ピー pfc_Copy 切り取り pfc_Cut 貼 り 付け pfc_Paste すべて を選択 pfc_SelectAll 元に戻す pfc_Undo 形式 を選択 し て貼 り 付け pfc_PasteSpecial (u_oc のみ) PFC Library ユーザーズ ガ イ ド 141 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 PFC 標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト を、 ウ ィ ン ド ウ コ ン ト ロ ー ル と し て使用す る 場合に、 PFC m_master メ ニ ュ ーか ら 継承 さ れ る メ ニ ュ ーを使 う と 、 編集機能が自動的に使用可能 と な り ま す。 m_master には [編集] メ ニ ュ ーが含 ま れてお り 、 こ こ には編集機能すべて を網 羅す る メ ニ ュ ー項目が あ り ま す。 [編集] メ ニ ュ ー内の こ れ ら の項目 は、 メ ッ セージ ルー タ を使っ て、 現在の コ ン ト ロ ール内の適切なユー ザ イ ベン ト を呼び出 し ま す。 コ マ ン ド ボ タ ンやそのほかの コ ン ト ロ ー ルに コ ー ド を追加す る こ と に よ り 、 こ れ ら のユーザ イ ベン ト を呼び出 す こ と も で き ま す。 マウ スの右ボ タ ン サポー ト の使い方 PFC 標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト の う ち、編集可能な も のには すべて、 マ ウ ス の右ボ タ ン サポー ト が含ま れてい ま す。 こ れ ら はそれ ぞれ、 以下のポ ッ プア ッ プ メ ニ ュ ーの う ち、 1 つを表示 し ま す。 メ ニ ュー m_edit こ の メ ニ ュ ー を使 う オブ ジ ェ ク ト u_ddlb u_ddplb u_em u_mle u_rte u_sle m_dw u_dw m_lvs u_lvs m_oc u_oc m_tvs u_tvs こ れ ら のすべてのポ ッ プ ア ッ プ メ ニ ュ ーには、 標準のテ キ ス ト 編集関 数が含まれてい ま す。 ただ し 、 デフ ォ ル ト では、 ど のポ ッ プ ア ッ プ メ ニ ュ ーで も テ キ ス ト 編集関数は有効にな ら ず、 表示 も さ れ ま せん。 マ ウ ス の 右 ボ タ ン サ ポ ー ト が 使 え る コ ン ト ロ ー ル に は す べ て、 pfc_PreMBMenu イ ベ ン ト が含 ま れて い ま す。 こ れは ポ ッ プ ア ッ プ メ ニ ュ ーに表示 さ れ る 項目を カ ス タ マ イ ズす る ための も のです。 PFC は こ の イ ベン ト を、 メ ニ ュ ーが作成 さ れた後に (ただ し 表示 さ れ る 前に) 呼び出 し ま す。 メ ニ ュ ー表示を カ ス タ マ イ ズす る ❖ ポ ッ プ ア ッ プ メ ニ ュ ー表示を カ ス タ マ イ ズする には 1 142 (オプシ ョ ン) メ ニ ュ ー ペ イ ン タ を使い、 ポ ッ プ ア ッ プ メ ニ ュ ー の追加項目を作成 し ま す。 PowerBuilder 第5章 2 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ユーザ オブジェ ク ト を ウ ィ ンド ウ 内に配置し てから 、pfc_PreRMBMenu イ ベン ト に ロ ジ ッ ク を追加 し て、 メ ニ ュ ー項目を隠すか、 あ る い は使用不可に し ま す。 次の例で は、 m_dw Insert、 Add Row、 お よ び Delete の各 メ ニ ュ ー項目が使用不可 に な り ま す (am_dw は、 pfc_PreRMBMenu を参照す る こ と に よ り 受け渡 さ れ る 引数です)。 am_dw.m_table.m_insert.Enabled = FALSE am_dw.m_table.m_addrow.Enabled = FALSE am_dw.m_table.m_delete.Enabled = FALSE マ ウ ス の右ボ タ ン サポー ト を、 完全に使用不可にで き ま す。 読み出 し 専用 コ ン ト ロ ールな ど に こ の機能を使 う と よ いで し ょ う 。 マウスの右ボ タ ン サ ポー ト を使用不可にす る ❖ 編集可能な コ ン ト ロールに対 し 、 マウスの右ボ タ ン サポー ト を使用不可にす る には • ユーザ オブジ ェ ク ト を ウ ィ ン ド ウ 内に配置 し てか ら 、 コ ン ト ロ ー ルの Constructor イ ベン ト に コ ー ド を追加 し て、 ib_rmbmenu イ ン ス タ ン ス 変数を FALSE に設定 し ま す。 this.ib_rmbmenu = FALSE u_dw は項目を自動的に使用不可にす る u_dw デー タ ウ ィ ン ド ウ コ ン ト ロ ールは、 読み出 し 専用の デー タ ウ ィ ン ド ウ オブジ ェ ク ト に対 し ては、 ポ ッ プ ア ッ プ メ ニ ュ ーを自 動的に使用不可に し ま す。 ド ロ ッ プ ダウ ン リ ス ト におけ る オー ト ス ク ロール機能の使い方 u_ddlb ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス コ ン ト ロ ール、 お よ び u_ddplb ド ロ ッ プ ダ ウ ン ピ ク チ ャ リ ス ト ボ ッ ク ス コ ン ト ロ ールは、 オー ト ス ク ロ ール機能を持っ てい ま す。 すなわち、 〔R〕 を押す と 、 コ ン ト ロ ー ルは r で始ま る 最初の項目ま で ス ク ロ ール し 、 残 り のテ キ ス ト を選択 し ま す。 こ こ で 〔I〕 を押す と 、 コ ン ト ロ ールは ri で始ま る 最初の項目 ま で ス ク ロ ール し ま す。 標準の ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス コ ン ト ロ ール と 標準の ド ロ ッ プ ダ ウ ン ピ ク チ ャ リ ス ト ボ ッ ク ス コ ン ト ロ ールの場合、 こ の機能は 異な っ た動作を し ま す。 こ の よ う な場合は、 最初の文字のみを基準に し て ス ク ロ ール し ま す。 すなわ ち、 〔R〕 を 押す と 、 コ ン ト ロ ールは r で始ま る 最初の項目 ま で ス ク ロ ール し ま す。 こ こ で 〔I〕 を押す と 、 コ ン ト ロ ールは i で始ま る 最初の項目ま で ス ク ロ ール し ま す。 PFC Library ユーザーズ ガ イ ド 143 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 ド ロ ッ プ ダ ウ ン デー タ ウ ィ ン ド ウ のオー ト ス ク ロ ール機能について は、 74 ページの 「 ド ロ ッ プ ダ ウ ン デー タ ウ ィ ン ド ウ 検索サービ ス 」 を 参照 し て く だ さ い。 デフ ォ ル ト では、 オー ト ス ク ロ ール機能は使用不可にな っ てい ま す。 ❖ オー ト ス ク ロ ール機能を使用可能にする には • ユーザ オブ ジ ェ ク ト を ウ ィ ン ド ウ 内に配置 し てか ら 、 コ ン ト ロ ー ルの Constructor イ ベン ト に コ ー ド を追加 し て、 ib_search イ ン ス タ ン ス 変数を TRUE に設定 し ま す。 this.ib_search = TRUE オー ト セ レ ク ト 機能の使い方 以下の編集可能 コ ン ト ロ ールには、 自動選択の機能があ り ま す。 u_ddlb u_ddplb u_em u_mle u_sle オー ト セ レ ク ト 機能を使用可能にす る と 、 コ ン ト ロ ールが フ ォ ーカ ス を受け た と き 、その内部のテ キ ス ト 全部を PFC が自動的に選択 し ま す。 デフ ォ ル ト では、 オー ト セ レ ク ト 機能は使用不可にな っ てい ま す。 ❖ オー ト セ レ ク ト 機能を使用可能にす る には • ユーザ オブ ジ ェ ク ト を ウ ィ ン ド ウ 内に配置 し てか ら 、 コ ン ト ロ ー ルの Constructor イ ベン ト に コ ー ド を追加 し て、ib_autoselect イ ン ス タ ン ス 変数を TRUE に設定 し ま す。 this.ib_autoselect = TRUE リ ス ト ボ ッ ク スにおけ る選択反転機能の使い方 u_lb リ ス ト ボ ッ ク ス コ ン ト ロ ール と u_plb ピ ク チ ャ リ ス ト ボ ッ ク ス コ ン ト ロ ールには、 選択反転機能があ り ま す。 こ れ ら の コ ン ト ロ ールの pfc_InvertSelect イ ベン ト を呼び出す と 、 PFC は、 それ ま でハ イ ラ イ ト 表示 さ れていなか っ た項目をハ イ ラ イ ト 表示 し 、 逆にそれ ま でハ イ ラ イ ト さ れていた項目のハ イ ラ イ ト 表示を取 り 消 し ま す。 選択反転機能 は Windows アプ リ ケーシ ョ ン の多 く に備わ っ てい ま す。 144 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 拡張選択ま たは複数選択 こ の機能を使 う には、 コ ン ト ロ ールの拡張選択プ ロ パテ ィ ま たは複数 選択プ ロ パテ ィ のいずれか を使用可能に し なければな り ま せん。 ❖ 選択反転機能 を使用可能にする には 1 メ ッ セージ ルータ を 使う メ ニュ ー項目を 追加し て 、pfc_InvertSelection イ ベン ト を呼び出 し ま す。 次の例では、 of_SendMessage 関数 を呼 び出す [選択反転] メ ニ ュ ーの項目を追加 し て、 pfc_InvertSelection イ ベ ン ト を 発生 さ せ ま す ( こ の方法 を 使 う 場合は、 ユ ーザ が メ ニ ュ ー項目を選択す る と き に リ ス ト ボ ッ ク ス ま たは ピ ク チ ャ リ ス ト ボ ッ ク ス が フ ォ ーカ ス さ れてい る 必要があ り ま す)。 of_SendMessage("pfc_InvertSelection") 2 pfc_InvertSelection イ ベン ト を直接呼び出す ウ ィ ン ド ウ コ ン ト ロ ー ル を追加 し ま す (次の例は、 コ マ ン ド ボ タ ン の Clicked イ ベン ト か ら の も のです)。 lb_choices.Event pfc_InvertSelection() GetFocus イ ベ ン ト の使い方 PFC 標準ビ ジ ュ アル コ ン ト ロ ールの GetFocus イ ベン ト には、フ ォ ーカ ス 関連の機能を使え る よ う にす る ロ ジ ッ ク が含 ま れてい ま す。 こ の イ ベン ト で、その ウ ィ ン ド ウ の pfc_ControlGotFocus ユーザ イ ベン ト を呼 び出 し 、 w_sheet の子孫に配置 さ れた、 コ ン ト ロ ールのマ イ ク ロ ヘルプ を更新 し ま す (マ イ ク ロ ヘルプの表示が使用可能にな っ てい る 場合)。 w_sheet ウ ィ ン ド ウ は、 pfc_ControlGotFocus ユーザ イ ベン ト を拡張 し て、 マ イ ク ロ ヘルプの自動表示を追加 し ま す。 こ の機能に よ り 、 コ ン ト ロ ールの タ グ値のテ キ ス ト が、MDI フ レームの ス テー タ ス バーに表 示 さ れ ま す。 ❖ シー ト ウ ィ ン ド ウで マ イ ク ロ ヘルプ を自動的に更新する には 1 n_cst_appmanager の of_SetMicroHelp 関数を呼び出 し 、 マ イ ク ロ ヘ ルプの表示を有効に し ま す。 gnv_app.of_SetMicroHelp(TRUE) 2 シ ー ト の各 コ ン ト ロ ール の タ グ 値 を 定義す る 次の形式 を 使い ま す。 MicroHelp=tagtext PFC Library ユーザーズ ガ イ ド 145 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 コ ン ト ロ ールに フ ォーカ ス が移 る と 、 PFC は指定 し た タ グ テ キ ス ト を 使っ て マ イ ク ロ ヘルプ を自動的に更新 し ま す。 タ グ に複数の 項目があ る 場合は、 セ ミ コ ロ ン を使っ て各項目を区切 り ま す。 高度な機能の使い方 PFC を最大限に活用す る ためには、 高度な コ ン ト ロ ールを使っ てプ ロ グ ラ ミ ン グ す る 必要が あ り ま す。 こ れ ら の コ ン ト ロ ールに対 し て は、 PFC に よ っ て機能が追加 さ れ ま す。 デー タ ウ ィ ン ド ウ PFC ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト u_dw コ ン ト ロ ール リ ス ト ビ ュー u_lvs ツ リ ービ ュ ー u_tvs リ ッ チテ キ ス ト エ ディ ッ ト u_rte OLE コ ン ト ロ ール u_oc タブ u_tab タ ブ ページ u_tabpg u_dw デー タ ウ ィ ン ド ウ コ ン ト ロ ールの使い方 実稼動用の PowerBuilder アプ リ ケーシ ョ ン のほ と ん ど は、 デー タ ウ ィ ン ド ウ コ ン ト ロ ールを頻繁に使用 し ま す。 u_dw デー タ ウ ィ ン ド ウ コ ン ト ロ ールには、 さ ま ざ ま な組み込みの関数や イ ベン ト が含 ま れてい ま す。 こ れ ら を以下に挙げ ま す。 146 • デー タ ウ ィ ン ド ウ サービ ス を使用可能ない し 使用不可にす る 関数 • ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト を設定す る 関数 • デー タ ウ ィ ン ド ウ の行 と ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ の行を 検索す る イ ベン ト • デー タ ウ ィ ン ド ウ の更新を制御す る イ ベン ト • 印刷を制御す る イ ベン ト PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 PFC メ ニ ュ ー と の統合 こ の章で説明 し た イ ベン ト のほ と ん ど は、 PFC m_master メ ニ ュ ーか ら 継承 さ れ る メ ニ ュ ーに よ っ て、 自動的に呼び出 さ れ ま す。 た と え ば、 メ ニ ュ ーバーか ら [フ ァ イ ル|上書 き 保存] を 選択す る と 、 PFC は pfc_Save イ ベン ト を呼び出 し ま す。 PFC に よ っ て、 さ ま ざ ま なデー タ ウ ィ ン ド ウ サービ ス が使え る よ う に な り ま す。 こ れ ら を使用 し て、 実稼動用の機能を アプ リ ケーシ ョ ン に 追加で き ま す。 こ れ ら のサービ ス に よ っ て、 開発者側で コ ーデ ィ ン グ をす る 必要がな く な る か、 あ る と し て も ご く わずか と な り ま す。 デー タ ウ ィ ン ド ウ サー ビ ス を使用可能に する ❖ デー タ ウ ィ ン ド ウ を使 う には 1 u_dw デー タ ウ ィ ン ド ウ ビ ジ ュ アル ユーザ オブジ ェ ク ト を、 ウ ィ ン ド ウ に配置 し ま す。 2 u_dw デー タ ウ ィ ン ド ウ コ ン ト ロ ールに表示 さ れ る デー タ ウ ィ ン ド ウ オブジ ェ ク ト と し ては、 ど のデー タ ウ ィ ン ド ウ サービ ス が適 切か を決め ま す。 3 u_dw の of_Set サービ ス 名 関数を使っ て、適切なデー タ ウ ィ ン ド ウ サービ ス を使用可能に し ま す (デー タ ウ ィ ン ド ウ コ ン ト ロ ールの Constructor イ ベン ト を 用いた次の例では、 行選択、 行管理、 お よ び ソ ー ト サービ ス が使用可能にな り ま す)。 this.of_SetRowSelect(TRUE) this.of_SetRowManager(TRUE) this.of_SetSort(TRUE) 4 データ ウ ィ ン ド ウ のト ラ ン ザク ショ ン オブジェ ク ト を 確立し ま す。 this.of_SetTransObject(SQLCA) 5 必要で あ れば、 そ のほかの関数を呼び出 し 、 サービ ス を初期化 し ま す (次の例では、 行選択の ス タ イ ル を設定 し 、 ソ ー ト ダ イ ア ロ グ ボ ッ ク ス の ス タ イ ルを 指定 し た あ と 、 カ ラ ムヘ ッ ダ の ソ ー ト を 使用可能に し ま す)。 this.inv_rowselect.of_SetStyle & (this.inv_rowselect.EXTENDED) this.inv_sort.of_SetStyle & (this.inv_sort.DRAGDROP) this.inv_sort.of_SetColumnHeader(TRUE) PFC Library ユーザーズ ガ イ ド 147 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 6 必要で あれば、アプ リ ケーシ ョ ン の関数 と イ ベン ト で、デー タ ウ ィ ン ド ウ サービ ス イ ベン ト と 関数を呼び出 し ま す。 こ のサービ ス の 利点 を得 る た めに、 コ ーデ ィ ン グ し な ければな ら ない と い う ケー ス は、 ほ と ん ど あ り ま せん。 次の例では、 pfc_SortDlg イ ベン ト を 呼び出 し て、 ソ ー ト ダ イ ア ロ グ ボ ッ ク ス を表示 し ま す。 dw_list.Event pfc_SortDlg() サー ビ ス を使用不可にする u_dw の Destructor イ ベン ト を使 う と 、 使用可能に さ れていたサー ビ ス が自動的に破棄 さ れ ま す。 あ る サー ビ ス を明示的に破棄す る こ と はほ と ん ど あ り ま せん。 個々のデー タ ウ ィ ン ド ウ サー ビ ス の使い方につい ては、 70 ページ の 「デー タ ウ ィ ン ド ウ サービ ス 」 を参照 し て く だ さ い。 前の例に示 し た よ う に、 u_dw の of_SetTransObject 関数を呼び出 し て、 デー タ ウ ィ ン ド ウ の ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト を設定 し ま す。 ト ラ ンザ ク シ ョ ン オ ブ ジ ェ ク ト を設定する こ の of_SetTransObject 関数の役割は、 渡 さ れた ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト が有効な も ので あ る こ と を 確認 し 、 ト ラ ン ザ ク シ ョ ン オ ブ ジ ェ ク ト を確実に設定 し 、 ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト への参照を itr_ イ ン ス タ ン ス変数に確実に保存す る こ と です。 ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト は、 n_tr 型に し なければな り ま せん。 リ ン ケージ サー ビ ス を使 う と き には デー タ ウ ィ ン ド ウ で リ ン ケージ サービ ス を使 う 場合は、 その ト ッ プ レ ベルで of_SetTransObject 関数を呼び出す よ う に し ま す。 ただ し 、 こ れ は、 すべてのデー タ ウ ィ ン ド ウ の作成が終わ り 、 リ ン ケージ チ ェ イ ン の設定が済んでか ら 行い ま す。 リ ン ケージ サービ ス の詳細は、 78 ページの 「 リ ン ク サービ ス 」 を参照 し て く だ さ い。 データ ウ ィ ン ド ウ サービ ス の多く は、 u_dw の pfc_Retrieve イ ベン ト を 使っ て データ 検索を 行う ため、こ のイ ベン ト の中の PowerScript Retrieve 関数を コ ーディ ン グ する のがよ い方法です。 行を 検索する 場合、 設定 し たコ ード はま ず u_dw の of_Retrieve 関数を 呼び出し 、 次にこ の u_dw of Retrieve 関 数が pfc_Retrieve イ ベ ン ト か、 n_cst_dwsrv_linkage の of_Retrieve 関数の、 いずれか適切な 方を 呼び出し ま す。 行の検索 ❖ デー タ ウ ィ ン ド ウの行を検索す る には 1 148 of_Retrieve 関数を呼び出 し ま す (次の例は、 デー タ ウ ィ ン ド ウ PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 Constructor イ ベン ト の場合です)。 Long ll_return ll_return = this.of_Retrieve() 2 pfc_Retrieve イ ベン ト に、 PowerScript Retrieve を呼び出す コ ー ド を 追加 し ま す。 その結果、 次の よ う な リ タ ーン コ ー ド が返 さ れ ま す。 Return this.Retrieve() リ ン ケージ サービ ス を使 っ て行を検索する デー タ ウ ィ ン ド ウ の詳細行 を検索す る た めに リ ン ケージ サー ビ ス を 使 う 場合は、 ト ッ プ レ ベルのデー タ ウ ィ ン ド ウ の pfc_Retrieve 関数だ け を コ ーデ ィ ン グ し ま す。デー タ ウ ィ ン ド ウ の詳細行を フ ィ ル タ 処理、 ま たは ス ク ロ ールす る ために リ ン ケージ サービ ス を使 う 場合は、 リ ン ケージ チ ェ イ ン内のデー タ ウ ィ ン ド ウ すべての、 pfc_Retrieve イ ベ ン ト を コ ーデ ィ ン グ し ま す。 ❖ ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ内の行を検索する には 1 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの pfc_PopulateDDDW イ ベン ト に コ ー ド を追加 し ま す。 こ の コ ー ド は次に示す よ う に、 指定 し た ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ の行を検索す る も ので なければな り ま せん。 IF as_colname = "dept_id" THEN adwc_obj.SetTransObject(SQLCA) Return adwc_obj.Retrieve() ELSE Return 0 END IF 2 そのデー タ ウ ィ ン ド ウ コ ン ト ロ ールが、 ほかにデー タ ウ ィ ン ド ウ サービ ス を使っ ていない場合は、 n_cst_dwsrv の基本デー タ ウ ィ ン ド ウ サービ ス を使用可能に し ま す (次の例は、 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの Constructor イ ベン ト の場合です)。 this.of_SetBase(TRUE) this.of_SetTransObject(SQLCA) this.of_Retrieve() 3 n_cst_dwsrv の of_PopulateDDDWs 関数ま たは of_PopulateDDDW 関 数を呼び出 し 、 すべての ド ロ ッ プ ダ ウ ン デー タ ウ ィ ン ド ウ ま たは 指定 し た ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ を更新 し ま す。 dw_1.inv_base.of_PopulateDDDWs() PFC Library ユーザーズ ガ イ ド 149 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 // 以下の呼び出 し を行 う こ と も で き る // dw_1.inv_base.of_PopulateDDDW("dept_id") デー タ ウ ィ ン ド ウ更新の基本的な方法 PFC では、 デー タ ウ ィ ン ド ウ を更 新す る 場合、 以下の 2 通 り の方法が使え ま す。 デー タ ィ ン ド ウの更新 を制御す る 論理的作業単位 サ ー ビ ス の 処理 を ま っ た く 行 う こ と な く 、デー タ ウ ィ ン ド ウ を 1 つ更新 し ま す。 そ し て、 マルチテーブル サービ ス が使用可能にな っ ていれば、 自動的 に c_cst_dwsrv_multitable の of_Update 関数を呼び出 し ま す。 • u_dw の pfc_Update イ ベ ン ト • w_master の pfc_Save イ ベ ン ト 論理的作業単位サー ビ ス を 使い、 すべてのデー タ ウ ィ ン ド ウ の u_dw の of_Update 関数を、 そのデー タ ウ ィ ン ド ウ に呼び出 し ま す。 PFC 以外のデー タ ウ ィ ン ド ウ コ ン ト ロ ールの場合、 論理的作業単位サー ビ ス は、 PowerScript Update 関数を呼び出 し ま す。 w_master は、 すべての PFC ウ ィ ン ド ウの上位オ ブ ジ ェ ク ト w_master は、 すべての PFC ウ ィ ン ド ウ の上位オブ ジ ェ ク ト です。 し た が っ て、 pfc_Save イ ベン ト は、 ア プ リ ケーシ ョ ン のすべての ウ ィ ン ド ウ で使用可能です。 ❖ デー タ ウ ィ ン ド ウ を 1 つ更新する には • u_dw の pfc_Update イ ベン ト を呼び出 し ま す。 IF dw_emplist.Event pfc_Update & (TRUE, TRUE) = 1 THEN SQLCA.of_Commit() ELSE SQLCA.of_Rollback() END IF ❖ あ る ウ ィ ン ド ウの全デー タ ウ ィ ン ド ウ を更新する には • w_master の pfc_Save イ ベン ト を呼び出 し ま す。 Integer li_return li_return = w_emp.Event pfc_Save() IF li_return < 0 THEN MessageBox(" 更新の失敗 ", & " 更新が失敗 し ま し た。 リ タ ーン コ ー ド は " & + String(li_return) + " です ") ELSE gnv_app.of_GetFrame().SetMicroHelp & (" 更新が成功 し ま し た ") END IF 150 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 自動 CloseQuery 処理 あ る ウ ィ ン ド ウ のデー タ ウ ィ ン ド ウ に、 保留状態の更新が存在す る 場 合、 ユーザがその ウ ィ ン ド ウ を閉 じ る と 、 PFC は自動的に名前を付け て変更の保存 ダ イ ア ロ グボ ッ ク ス を表示 し ま す。 ユーザが変更の保存 を選択す る と 、 CloseQuery 処理はその ウ ィ ン ド ウ の pfc_Save イ ベン ト を呼び出 し ま す。 pfc_Save の使い方の詳細については、 212 ページの 「pfc_Save プ ロ セ ス の使い方」 を参照 し て く だ さ い。 デー タ ウ ィ ン ド ウ を 更新不可な も の と し て宣言で き ま す。 こ の よ う にす る と 、 そのデー タ ウ ィ ン ド ウ は、 pfc_Save 更新シーケ ン ス と PFC デフ ォ ル ト CloseQuery 処理か ら 除外 さ れ ま す。 デー タ ウ ィ ン ド ウが更新不可であ る こ と を宣言す る デー タ ウ ィ ン ド ウの共有 お使いの ウ ィ ン ド ウ にデー タ を共有 し てい る デー タ ウ ィ ン ド ウ があ る 場合、 更新で き る デー タ ウ ィ ン ド ウ コ ン ト ロ ールは 1 つだけに し な け ればな り ま せん。 デー タ を共有す る 、 そのほかのデー タ ウ ィ ン ド ウ は、 更新不可に し てお く 必要があ り ま す。 ❖ デー タ ウ ィ ン ド ウが更新不可であ る こ と を宣言す る には • u_dw の of_SetUpdatable 関数を呼び出 し ま す。 dw_emplist.of_SetUpdateable(FALSE) デー タ ウ ィ ン ド ウ を印 刷す る PFC では、 デー タ ウ ィ ン ド ウ を印刷す る イ ベン ト が使え ま す。 以下の こ と が可能です。 • 印刷 ダ イ ア ロ グボ ッ ク ス が表示 さ れ る ので、 オプ シ ョ ン の選択後 に印刷す る PFC は s_printdlgattrib 構造体を 使っ て、 データ ウ ィ ン ド ウ プ ロ パ ティ を n_cst_platform の of_PrintDlg 関数に渡し ま す。pfc_PrePrintDlg イ ベン ト を 使え ば、 printdlgattrib 構造体の構成要素を 修正し て、 印 刷 ダ イ ア ロ グ ボ ッ ク ス の初期内容を さ ら に カ ス タ マ イ ズ で き ま す。 s_printdlgattrib 構造体の構成要素には、 選択 し たデー タ ウ ィ ン ド ウ の印刷プ ロ パテ ィ (丁合い、 ページ番号、 印刷部数な ど) が反映 さ れ ま す。 • PFC Library ユーザーズ ガ イ ド 印刷 ダ イ ア ロ グボ ッ ク ス を表示せずに、 デー タ ウ ィ ン ド ウ を印刷 する 151 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 • [プ リ ン タ の設定] プ ロ パテ ィ を表示 し て、 印刷設定を指定す る PFC は s_pagesetupattrib 構造体を使っ て、 デー タ ウ ィ ン ド ウ プ ロ パテ ィ を n_cst_platform の of_PageSetupDlg 関数に渡 し ま す。 pfc_PrePageSetupDlg イ ベン ト を使えば、 pagesetupdlgattrib 構造体 の構成要素を修正 し て、 プ リ ン タ の設定 ダ イ ア ロ グ ボ ッ ク ス の初 期内容を さ ら にカ ス タ マ イ ズで き ま す。 s_pagesetupattrib 構造体の構成要素には、 選択 し たデー タ ウ ィ ン ド ウ の印刷プ ロ パテ ィ (余白、 用紙サ イ ズ、 プ リ ン タ の印字方向な ど ) が反映 さ れ ま す。 ❖ 印刷 ダ イ ア ロ グボ ッ ク ス を表示す る には 1 (オプシ ョ ン) pfc_PrePrintDlg イ ベン ト に コ ー ド を追加 し て、 pfc_PrintDlg 関数が使用す る 情報を修正 し ま す (次の例では、 印 刷部数指定のデフ ォ ル ト を示 し てい ま す)。 astr_printdlg.l_copies = 1 2 fc_Print イ ベン ト を呼び出す。 dw_emp.Event pfc_Print() ❖ 印刷 ダ イ ア ロ グボ ッ ク ス を表示せずにデー タ ウ ィ ン ド ウ を印刷す る には • pfc_PrintImmediate イ ベン ト を呼び出 し ま す。 dw_emp.Event pfc_PrintImmediate() [ フ ァ イル|印刷] と [印刷] ボ タ ンの比較 メ ニ ュ ー バ ー か ら [フ ァ イ ル | 印 刷] を 選 択す る と 、 PFC は pfc_Print イ ベ ン ト を呼び出 し ま す。 ツ ールバーの [印刷] ボ タ ン を ク リ ッ ク す る と 、 PFC は pfc_PrintImmediate イ ベン ト を呼び出 し ま す。 ❖ プ リ ン タ の設定 ダ イ ア ロ グボ ッ ク ス を表示する には 1 (オプシ ョ ン) pfc_PrePageSetupDlg イ ベン ト に コ ー ド を追加 し て、 pfc_PageSetupDlg 関数が使用す る 情報を修正 し ま す (次の例では、 プ リ ン タ の印字方向の初期値を指定 し ま す)。 astr_pagesetup.b_portraitorientation = TRUE 2 pfc_PageSetup イ ベン ト を呼び出 し ま す。 dw_emp.Event pfc_PageSetup() 152 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 u_lvs リ ス ト ビ ュ ー コ ン ト ロ ールの使い方 u_lvs リ ス ト ビ ュ ー コ ン ト ロ ール を使 う と 、 リ ス ト ビ ュ ー 内のデー タ ベース の表示 と 更新が簡単にな り ま す。 U_lvs には、 ユーザが使用可能 に し て、 必要 と す る 機能を得 ら れ る よ う な、 以下のサービ ス が含 ま れ て い ま す。 検索機能やそ のほかの基本サービ ス を提供 し ま す。 • 基本サー ビ ス • デー タ ソ ース サービ ス • ソ ー ト サービ ス リ ス ト ビ ュ ー内のデー タ ベース デー タ の表 示 と 、 更新を制御 し ま す。 さ ら に、 リ ス ト ビ ュ ー デー タ で表示 さ れ る ビ ッ ト マ ッ プ も 制御 し ま す。 カ ラ ム ヘ ッ ダ ソ ー ト 機能を提供 し ま す ( レ ポー ト ビ ュ ーの場合のみ)。 u_lv リ ス ト ビ ュ ー コ ン ト ロ ール PFC には u_lv と い う 、 サービ ス 対象外の リ ス ト ビ ュ ー も 含 ま れてい ま す。 こ の種の リ ス ト ビ ュ ーには、 u_lvs と 同 じ 機能の多 く が含ま れてい ま す。u_lv は前回の リ リ ー ス で言 う PFC リ ス ト ビ ュ ー コ ン ト ロ ールで あ り 、 当ガ イ ド では取 り 上げ ら れてい ま せん。 リ ス ト ビ ュ ーにデー タ ベース デー タ を表示 する リ ス ト ビ ュ ー デー タ ソ ー ス サービ ス を使っ て、 リ ス ト ビ ュ ーをデー タ ソ ース (ODBC デー タ ソ ー ス と は異な り ま す) に関連付け ま す。 デー タ ソ ー ス と し ては以下の も の を使 う こ と がで き ま す。 • デー タ ウ ィ ン ド ウ オブジ ェ ク ト (デー タ ベー ス か ら 取 り 出 し た デー タ ま たはデー タ ウ ィ ン ド ウ オブジ ェ ク ト で格納 し たデー タ ) • SQL 文 • デー タ ウ ィ ン ド ウ コ ン ト ロ ール • デー タ ス ト ア コ ン ト ロ ール • 配列か ら の行 • フ ァ イル リ ス ト ビ ュ ー デー タ ソ ー ス サービ ス (n_cst_lvsrv_datasource カ ス タ ム ク ラ ス ユーザ オブジ ェ ク ト を通 じ て実装 さ れ ま す) は、 リ ス ト ビ ュ ー のデー タ ソ ース をデー タ ス ト ア に保持 し てお き 、 リ ス ト ビ ュ ーを表示 す る と き に使い ま す。 リ ス ト ビ ュ ーを レ ポー ト ビ ュ ーに し た と き 、 ど の カ ラ ム をデー タ ウ ィ ン ド ウ オ ブ ジ ェ ク ト か ら 表示す る か を 指定で き ま す。 PFC Library ユーザーズ ガ イ ド 153 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 ❖ 初期 リ ス ト ビ ュ ーの表示を設定する には 1 u_lvs ユーザ オブ ジ ェ ク ト を ウ ィ ン ド ウ に追加 し ま す。 2 リ ス ト ビ ュ ー デー タ ソ ー ス サービ ス を使用可能に し ま す (次の例 では リ ス ト ビ ュ ー ソ ー ト サービ ス も 使用可能に し ま す)。 this.of_SetDataSource(TRUE) this.of_SetSort(TRUE) 3 n_cst_lvsrv_datasource の of_Register 関数を呼び出す次の例では デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト 、 ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト 、 お よ び ラ ベル カ ラ ム を 指定 し ま す (次の例は リ ス ト ビ ュ ー Constructor イ ベン ト の場合です)。 this.inv_datasource.of_Register("emp_lname", & "d_emplist", SQLCA) リ ス ト ビ ュ ー デー タ ソ ー ス サービ ス は、デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス を使っ てデー タ を管理 し ま す。 4 (オプシ ョ ン) 右マ ウ ス ボ タ ン サポー ト を有効にす る か ど う か を 指定 し ま す。 this.of_SetRMBMenu(TRUE) 5 (オプシ ョ ン) レ ポー ト ビ ュ ーに表示す る 追加カ ラ ム を指定 し (次 の例では全カ ラ ム を表示 し ま す)、 ピ ク チ ャ 情報を設定 し ま す。 this.inv_datasource.of_RegisterReportColumn() this.inv_datasource.of_SetPictureColumn("1") 6 (オプシ ョ ン)論理的な作業単位サービ ス 、およ び w_master pfc_Save 処理を介 し て、 リ ス ト ビ ュ ーが更新可能で あ る こ と を宣言 し ま す。 this.of_SetUpdateable(TRUE) 7 (オプシ ョ ン) PFC が削除の確認を ユーザに要求す る か ど う か を指 定 し ま す。 this.inv_datasource.of_SetConfirmOnDelete(TRUE) 8 デー タ ベー ス のデー タ を検索 し 、 そ の リ ス ト ビ ュ ーに行を追加 し ま す。 this.Event pfc_Populate() 9 pfc_Retrieve イ ベン ト を拡張 し て、 検索引数の指定を可能にす る of_Retrieve 関数を呼び出す コ ー ド を追加 し ま す。 Any la_args[20] Return this.of_Retrieve(la_args, ads_data) 154 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 リ ス ト ビ ュ ーか ら 項目を削除で き ま す。 デー タ ソ ー ス、 お よ びデー タ ベース か ら 項目を削除す る こ と も で き ま す。 リ ス ト ビ ュ ーか ら 項目 を削除す る ❖ リ ス ト ビ ュ ーか ら 項目 を削除 し 、 かつ こ の項目を u_lvs デー タ ス ト ア と デー タ ベースに残 し てお く には 1 リ ス ト ビ ュ ーの [項目の削除] プ ロ パテ ィ を使用可能に し ま す。 2 PowerScript DeleteItem 関数を呼び出 し ま す。 Integer li_index li_index = lv_list.SelectedIndex() lv_list.DeleteItem(li_index) 削除 し た行を再表示す る デー タ ソ ース の行すべて を再表示す る には、 of_Reset 関数を呼び出 し 、 こ れに続け て pfc_Populate イ ベン ト を呼び出 し ま す。 ❖ リ ス ト ビ ュ ー と デー タ ベースか ら 、 項目を選択 し て削除す る には 1 リ ス ト ビ ュ ーの [項目の削除] プ ロ パテ ィ を使用可能に し ま す。 2 pfc_Delete イ ベン ト を呼び出 し ま す。 lv_1.Event pfc_Delete() 3 論理的作業単位サービ ス の of_Save 関数を呼び出 し 、 そのデー タ ベース を更新 し ま す (次の例は、 リ ス ト ビ ュ ー コ ン ト ロ ールに定 義 し たユーザ イ ベン ト の場合です)。 PowerObject lpo_obj[ ] n_tr ltr_obj[ ] IF NOT IsValid(inv_luw) THEN inv_luw = CREATE n_cst_luw END IF lpo_obj[1] = this ltr_obj[1] = SQLCA // デ ィ ス ク領域を節約する ためにエ ラ ー処理 を省略 inv_luw.of_Save(lpo_obj, ltr_obj) PFC Library ユーザーズ ガ イ ド 155 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 リ ス ト ビ ュ ーを使 う と 、 デー タ ベー ス に項目を挿入で き ま す。 ただ し 、 リ ス ト ビ ュ ー コ ン ト ロ ールが更新 を許可す る のは ラ ベル カ ラ ム に対 し てのみで あ る ため、 レ ポー ト ビ ュ ーに表示 さ れた カ ラ ムすべてに情 報を追加す る こ と はで き ま せん。 こ れを解決す る には、 別の メ カ ニ ズ ム (ダ イ ア ロ グ ボ ッ ク ス な ど) を使っ て、 デー タ ウ ィ ン ド ウ 、 リ ス ト ビ ュ ーお よ びデー タ ベー ス の更新に必要な 情報 を 得 る 必要が あ り ま す。 リ ス ト ビ ュ ーに項目を 挿入する ❖ リ ス ト ビ ュ ー を使 っ てデー タ ベースに行を挿入す る には 1 ダ イ ア ロ グ ボ ッ ク ス な ど の メ カ ニ ズ ム を 作成 し 、 新 し い行を 挿入 す る のに必要な情報を収集 し ま す。 2 収集 し た情報を使っ て of_InsertItem 関数を呼び出 し ま す。 次の例 は、 情報を一時デー タ ス ト アに追加 し 、 of_InsertItem の入力 と し て 使っ た場合を想定 し てい ま す。 lv_dept.of_InsertItem(ids_newrow, 1) ピ ク チ ャ を使 う リ ス ト ビ ュ ーでは、 項目 と と も に表示す る ピ ク チ ャ を、 3 つ ま で指定 で き ま す。 • デフ ォル ト ピ ク チ ャ リ ス ト ビ ュ ーの項目 と と も に表示 さ れ る 画像 です。 オ リ ジナルの画像の左側に表示 さ れ る 画像です。 • 状態ピ ク チ ャ • オーバレ イ ピ ク チ ャ リ ス ト ビ ュ ー 項目のオ リ ジ ナ ル画像の上に 表示 さ れ る 画像です (通常、 ア イ コ ン ま たは カー ソ ル) 。 リ ス ト ビ ュ ー 項目 と そのほかの項目の違いを示 し ま す。 u_lvs では、 以下の方法を使っ て、 ピ ク チ ャ の初期表示を セ ッ ト ア ッ プ で き ま す。 • イ ン デ ッ ク ス の入力をす る たびに、 リ ス ト ビ ュ ーが ピ ク チ ャ 表示をす る と き に使 う ビ ッ ト マ ッ プ フ ァ イ ルあ る いは PowerBuilder シ ス テ ム ビ ッ ト マ ッ プが示 さ れ ま す。 リ ス ト ビ ュ ーのプ ロ パテ ィ シー ト を使用 し て、 ピ ク チ ャ イ ンデ ッ ク ス 内 の入力を定義 し ま す。 こ の方式を使 う と 、 すべての リ ス ト ビ ュ ー 項目に同 じ ピ ク チ ャ が表示 さ れ ま す。 • デー タ ウ ィ ン ド ウ カ ラ ム 行固有 の 表示情報 を 指定 す る カ ラ ム で す。 こ の カ ラ ム は、 デー タ ベー ス か ら 直接抽出す る こ と も 、 デー タ ウ ィ ン ド ウ の計算カ ラ ム にす る こ と も で き ま す。 こ の カ ラ ム に は次のいずれかの値を入れ る こ と がで き ま す。 ピ ク チ ャ イ ンデ ッ ク ス • 156 該当す る 行を表示す る と き に リ ス ト ビ ュ ーが使用す る ビ ッ ト マ ッ プ フ ァ イ ルの名前を指定す る 文字列 PowerBuilder 第5章 • PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 該当す る 行を表示す る と き に リ ス ト ビ ュ ー が使用す る ピ ク チ ャ イ ンデ ッ ク ス を指定す る 整数 デー タ ウ ィ ン ド ウ のカ ラ ム を使用 し て、 リ ス ト ビ ュ ー 項目の表示 を カ ス タ マ イ ズで き ま す。 リ ス ト ビ ュ ーについて の詳細は、 『ア プ リ ケーシ ョ ン テ ク ニ ッ ク 』 マ ニ ュ アル を参照 し て く だ さ い。 ❖ ピ ク チ ャ イ ン デ ッ ク ス を使 っ て リ ス ト ビ ュ ー ピ ク チ ャ を指定する には 1 リ ス ト ビ ュ ーのプ ロ パテ ィ シー ト を使っ て ピ ク チ ャ イ ンデ ッ ク ス を設定 し ま す。 2 リ ス ト ビ ュ ー デー タ ソ ー ス サービ ス を使用可能に し ま す。 this.of_SetDataSource(TRUE) 3 n_cst_lvsrv_datasource 関数を呼び出 し て、適切な ピ ク チ ャ イ ンデ ッ ク ス 入力を指定 し ま す。 こ れで、 指定 し た ピ ク チ ャ イ ン デ ッ ク ス が渡 さ れ ま す。 this.inv_datasource.of_SetPictureColumn('1') this.inv_datasource.of_SetOverlayPictureColumn('1') this.inv_datasource.of_SetStatePictureColumn('1') ❖ デー タ ウ ィ ン ド ウ カ ラ ム を使 っ て リ ス ト ビ ュ ー ピ ク チ ャ を指定する には 1 デー タ ベース ま たはデー タ ウ ィ ン ド ウ カ ラ ム を設定 し て、 ビ ッ ト マ ッ プ名 (String ま たは Character 型) ま たは ピ ク チ ャ イ ンデ ッ ク ス 指定 (Integer 型) を入力 し ま す。 2 リ ス ト ビ ュ ー デー タ ソ ー ス サービ ス を使用可能に し ま す。 this.of_SetDataSource(TRUE) 3 n_cst_lvsrv_datasource 関数を呼び出 し て、適切な ピ ク チ ャ を指定 し ま す。 こ れで、 デー タ ベー ス カ ラ ム の名前が渡 さ れ ま す。 this.inv_datasource.of_SetPictureColumn & ('picture_name') this.inv_datasource.of_SetOverlayPictureColumn & ('picture_overlay') this.inv_datasource.of_SetStatePictureColumn & ('picture_state') PFC Library ユーザーズ ガ イ ド 157 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 ビ ッ ト マ ッ プの存在が必須 検索 し た行の中で名前 を付け た フ ァ イ ルは、 その ア プ リ ケーシ ョ ン に ア ク セ ス で き る デ ィ レ ク ト リ に置いておか な ければな り ま せ ん。 u_tvs ツ リ ー ビ ュ ー コ ン ト ロールの使い方 u_tvs ツ リ ービ ュ ー コ ン ト ロ ールを用い る と 、デー タ ウ ィ ン ド ウ を使っ て、 ツ リ ー ビ ュ ー内で階層構造デー タ ベー ス のデー タ を表示 し た り 、 更新 し た り す る こ と が簡単にな り ま す。 u_lvs には、 以下のサービ ス が あ り 、 ユーザが使用可能にす る と 必要な機能が得 ら れ ま す。 基本的なサービ ス が使え ま す。 • 基本サー ビ ス • レ ベル ソ ース サービ ス ツ リ ービ ュ ー内のデー タ ベー ス デー タ の表 示 と 更新を制御 し ま す。 さ ら に、 ツ リ ービ ュ ー デー タ で表示 さ れ る ビ ッ ト マ ッ プ も 制御 し ま す。 u_tv ツ リ ー ビ ュ ー コ ン ト ロ ール PFC には u_tv と い う 、 サービ ス 対象ではないツ リ ービ ュ ー も 含ま れて い ま す。 こ の ツ リ ービ ュ ーには、 u_tvs と 同 じ 機能の多 く が含 ま れてい ま す。 u_tv は前回の リ リ ース で言 う PFC ツ リ ービ ュ ーで あ り 、 当ガ イ ド では取 り 上げ ら れてい ま せん。 基本的な使い方 ツ リ ービ ュ ー レベル ソ ー ス サービ ス を使っ て、各ツ リ ービ ュ ーをデー タ ソ ース (ODBC デー タ ソ ー ス と は異な り ま す) に関連付け ま す。デー タ ソ ース と し ては以下の も の を使 う こ と がで き ま す。 • デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト (デー タ ベース か ら 取 り 出 し た デー タ ま たは デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト で格納 し たデー タ ) • SQL 文 • デー タ ウ ィ ン ド ウ コ ン ト ロ ール • デー タ ス ト ア • 配列か ら の行 • フ ァ イル ツ リ ービ ュ ー レベル ソ ー ス サービ ス (n_cst_lvsrv_levelsource カ ス タ ム ク ラ ス ユ ーザ オ ブ ジ ェ ク ト を 通 じ て 実装 さ れ ま す) は、 各 ツ リ ー ビ ュ ー レベルのデー タ ソ ース をデー タ ス ト アに保持 し てお き 、 ツ リ ー ビ ュ ー レベル を表示す る と き に使い ま す。 158 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 レ ベルのデー タ ソ ース を設定す る レ ベルのデー タ ソ ー ス を 設定す る に は、 n_cst_tvsrv_levelsource の of_Register 関数を呼び出 し ま す。 こ の関 数には、 あ る レベル を それ よ り 上位の レベルに、 ど の程度関連 さ せ る か を 指定す る 引数が含 ま れて い ま す。 こ の引数は、 :scope.level.column 形式に し な ければな り ま せん。 :scope.level.column の内容は以下の と お り です。 • • Scope は、 以下の リ テ ラ ルのいずれか 1 つを指定 し ま す。 • level ( レベル) • parent ( ペア レ ン ト ) Level は、 絶対 レベル番号ま たは相対レ ベル番号を指定 し ま す。 ど ち ら を指定す る かは、 scope で指定 し た も のに よ っ て変わ り ま す。 Scope の指定 level parent • レ ベルの指定 例 指定す る 値 が絶対 レ ベ ル番号を示 し ます。 :level.1.emp_name は、検索 引数が項目の レベル 1 の先祖 の emp_name カ ラ ム か ら の も ので あ る こ と を示 し ます。 指定す る 値 が現在 レ ベ ル に相対す る レ ベル を 示 し ます。 :parent.2.emp_name は、 検 索引数が 2 つ上の 先祖の emp_name カ ラ ム か ら の も の であ る こ と を示 し ます。 Column は、 検索引数で使用す る 値の入手先で あ る 、 デー タ ウ ィ ン ド ウ オブジ ェ ク ト のカ ラ ム名を指定 し ま す。 た と えば、 次の文字列では、 検索引数を、 その項目の レベル 1 の先祖 の emp_name カ ラ ム か ら の も のにす る こ と を指定 し てい ま す。 :level.1.emp_name 複数の検索引数 デー タ ウ ィ ン ド ウ に複数 の検索引数が あ る 場合は、 同 じ 文字列で、 scope.level.column を複数回指定 し ま す。 た と えば、 次の文字列では、 検 索引数を、レベルが 2 つ上の リ ージ ョ ン カ ラ ム か ら の も のにす る こ と 、 お よ びレ ベルが 1 つ上の states_state_id カ ラ ム か ら の も のにす る こ と を 指定 し てい ま す。 ":parent.2.region, :parent.1.states_state_id" ❖ ツ リ ービ ュ ー を表示す る には 1 PFC Library ユーザーズ ガ イ ド u_tvs ユーザ オブジ ェ ク ト を ウ ィ ン ド ウ に追加 し ま す。 159 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 2 u_tvs の of_SetLevelSource 関数を使っ て、レ ベル ソ ース サービ ス を 使用可能に し ま す。 this.of_SetLevelSource(TRUE) 3 ツ リ ービ ュ ー レベルご と に、 デー タ ソ ース を定義 し ま す。 各レベ ルについて of_Register 関数を 1 回ずつ呼び出 し ま す。 this.inv_levelsource.of_Register(1, & "dept_name", "", "d_deptlist", SQLCA, "") this.inv_levelsource.of_Register(2, "emp_lname", ":parent.1.dept_id", "d_empbydept", SQLCA, "") 4 必要で あれば、 さ ら に別の関数を呼び出 し て、 ツ リ ー ビ ュ ーの動 作を制御 し ま す。 this.inv_levelsource.of_SetPictureColumn(1, "1") this.inv_levelsource.of_SetSelectedPictureColumn (1, "2") this.inv_levelsource.of_SetPictureColumn(2, "4") this.inv_levelsource.of_SetSelectedPictureColumn (2, "5") 5 & & & (オプシ ョ ン) 右マ ウ ス ボ タ ン サポー ト を有効にす る か ど う か を 指定 し ま す。 this.of_SetRMBMenu(TRUE) 6 (オ プ シ ョ ン) 論 理 的 な 作 業 単 位 サ ー ビ ス お よ び w_master の pfc_Save プ ロ セ ス を介 し て、 ツ リ ー ビ ュ ーが更新可能で あ る こ と を宣言 し ま す。 7 u_tvs の pfc_Populate イ ベン ト を呼び出 し て、 ツ リ ービ ュ ーを表示 し ま す。 this.event pfc_Populate(0) 8 pfc_Retrieve イ ベン ト を拡張 し 、 of_Retrieve 関数を呼び出す コ ー ド を追加 し 、 n_cst_tvsrv_levelsource の of_GetArgs 関数に よ っ て返 さ れ る 検索引数を指定 し ま す。 Any la_args[20] Integer li_level IF IsValid(inv_levelsource) THEN li_level = this.of_GetNextLevel(al_parent) this.inv_levelsource.of_GetArgs(al_parent, & li_level, la_args) END IF 160 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 Return this.of_Retrieve(al_parent, la_args, ads_data) ツ リ ービ ュ ーか ら 項目 を削除す る & ツ リ ービ ュ ーか ら 項目を削除で き ま す。 デー タ ソ ー ス やデー タ ベー ス か ら 項目を削除す る こ と も で き ま す。 ❖ ツ リ ービ ュ ーか ら 項目 を削除す る (かつ こ の項目をデー タ ソ ース と デー タ ベースに残 し てお く ) には 1 ツ リ ービ ュ ーの [項目の削除] プ ロ パテ ィ を使用可能に し ま す。 2 PowerScript DeleteItem 関数を呼び出 し ま す。 Long ll_tvi ll_tvi = this.FindItem(CurrentTreeItem!, 0) this.DeleteItem(ll_tvi) 削除 し た行を再表示す る こ れ ら の行を再表示す る には、 u_tvs の pfc_RefreshLevel イ ベン ト を呼 び出 し ま す。 ❖ ツ リ ービ ュ ー と デー タ ベースか ら 、 項目を削除す る には 1 ツ リ ービ ュ ーの [項目の削除] プ ロ パテ ィ を使用可能に し ま す。 2 pfc_Delete イ ベン ト を呼び出 し ま す。 tv_1.Event pfc_Delete() 3 論理的作業単位サービ ス の of_Save 関数を呼び出 し 、 そのデー タ ベース を更新 し ま す (次の例は、 ツ リ ービ ュ ー コ ン ト ロ ールに定 義 し たユーザ イ ベン ト の場合です)。 PowerObject lpo_obj[ ] n_tr ltr_obj[ ] IF NOT IsValid(inv_luw) THEN inv_luw = CREATE n_cst_luw END IF lpo_obj[1] = this ltr_obj[1] = SQLCA // デ ィ ス ク領域を節約する ためにエ ラ ー処理 を省略 inv_luw.of_Save(lpo_obj, ltr_obj) PFC Library ユーザーズ ガ イ ド 161 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 ツ リ ービ ュ ーを 使 っ てデー タ ベー ス に項目を 挿入で き ま す。 ただ し 、 ツ リ ービ ュ ーは フ ィ ール ド を 1 つ し か表示 し ないため、 通常は別の メ カ ニ ズ ム (ダ イ ア ロ グ ボ ッ ク ス な ど) を 使 っ て、 デー タ ウ ィ ン ド ウ 、 ツ リ ービ ュ ーお よ びデー タ ベース の更新に必要な情報を取得 し な けれ ばな り ま せん。 ツ リ ービ ュ ーに項目を 挿入する ❖ ツ リ ービ ュ ー を使 っ てデー タ ベースに行を挿入す る には 1 ダ イ ア ロ グ ボ ッ ク ス な ど の メ カ ニ ズ ム を 作成 し 、 新 し い行を 挿入 す る のに必要な情報を収集 し ま す。 2 収集 し た情報を使っ て of_InsertItem 関数を呼び出 し ま す。 次の例 は、 情報を一時デー タ ス ト アに追加 し 、 of_InsertItem の入力 と し て 使っ た場合を想定 し てい ま す。 Long ll_handle TreeViewItem ltvi_item Long ll_return ll_handle = tv_1.FindItem(CurrentTreeItem! , 0) ll_return = tv_1.of_InsertItem & (ll_handle, ids_data, 1, "Sorted", 0) u_tvs ツ リ ービ ュ ー コ ン ト ロ ールでは、 再帰関係 を持つ 1 つのテーブ ルか ら 、 複数の レベルを表示で き ま す。 た と えば、 従業員のテーブル には、 部門の長 と 従業員の間に再帰関係が あ り 、 さ ら に従業員の行に はそれぞれ、そ の部門の長の従業員 ID を指す コ ラ ム が含ま れてい る 場 合があ り ま す。 再帰関係を使 っ て ツ リ ー ビ ュ ーを表示する n_cst_tvsrv_levelsource の of_Register 関数の引数を通 じ て、 再帰関係を 示 し ま す。 再帰レ ベルは必ず、 指定 し た レベルの最下位 と な り ま す。 ❖ 再帰関係を使 っ て ツ リ ービ ュ ー を表示す る には 1 162 デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト を作成 し て、 高レベル情報 と 再帰 デー タ を表示 し ま す。 次の表では、 d_empmanagerrecursive デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト に よ っ て、 再帰デー タ を使用 し て、 部門 の長以下の管理職の レベルがすべて処理 さ れ ま す。 デー タ ウ ィ ン ド ウ オブジ ェ ク ト d_dept 内容 疑似 WHERE 句 部門 d_empdeptmanager 部門の長 なし employee.emp_id = department.dept_head_id d_empmanagerrecursive 管理職 と その部下 employee.manager_id manager.emp_id = PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 2 u_tvs ベー ス のツ リ ービ ュ ーを持つウ ィ ン ド ウ を作成 し ま す。 3 レ ベル ソ ース サービ ス を使用可能に し ま す。 this.of_SetLevelSource(TRUE) 4 of_Register 関数を呼び出 し 、 階層 レベルお よ び再帰レベルを設定 し ま す。 そ し て pfc_Populate 関数を呼び出 し 、 デー タ を検索 し ま す (次の例は、 ツ リ ービ ュ ーの Constructor イ ベン ト の場合です)。 this.inv_levelsource.of_Register(1, "dept_name", & "", "d_dept", SQLCA, "") this.inv_levelsource.of_Register(2, & "dept_head_id", ":Level.1.dept_head_id", & "d_empdeptmanager", SQLCA, "") this.inv_levelsource.of_Register(3, "emp_lname", & ":Parent.1.emp_id", "d_empmanagerrecursive", & SQLCA, "") 5 ボ ト ム レ ベルに、 n_cst_tvsrv_levelsource の of_SetRecursive 関数を 呼び出 し ま す。 this.inv_levelsource.of_SetRecursive(3, TRUE) 6 必要であれば、 そのほかの処理を コ ーデ ィ ン グ し ま す。 ツ リ ー ビ ュ ーは、 1 つ、 あ る いは複数の ピ ク チ ャ に関連付け ら れた項 目で構成 さ れてい ま す。 ピ ク チ ャ には、 以下の よ う に異な っ た使い方 があ り ま す。 ピ ク チ ャ を使 う ピ クチャ 用途 デフ ォ ル ト ノ ーマルモー ド で ツ リ ー ビ ュ ーの項目 を表示す る 選択 選択 し た ツ リ ー ビ ュ ーの項目 を表示す る 状態 ツ リ ー ビ ュ ーの左側に表示 さ れ る 。 こ の項目は ノ ーマル モー ド ではな く 、 変更 さ れた状態、 あ る いは利用で き な い状態な ど に あ る こ と を示す オーバ レ イ ツ リ ー ビ ュ ー項目の上に表示 さ れ る ピ ク チ ャ の詳 し い指定方法については、 156 ページの 「ピ ク チ ャ を 使 う 」 を参照 し て く だ さ い。 ❖ ピ ク チ ャ イ ン デ ッ ク ス を使用 し て ツ リ ービ ュ ー ピ ク チ ャ を指定する には 1 PFC Library ユーザーズ ガ イ ド ウ ィ ン ド ウ ペ イ ン タ か、ユーザ オブジ ェ ク ト ペ イ ン タ のいずれか を使っ て、ツ リ ービ ュ ーのデフ ォ ル ト ピ ク チ ャ を指定 し ま す。PFC は こ の ピ ク チ ャ イ ンデ ッ ク ス を、 デフ ォ ル ト ピ ク チ ャ 、 選択ピ ク チ ャ 、 お よ びオーバ レ イ ピ ク チ ャ に使い ま す。 163 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 2 ウ ィ ン ド ウ ペ イ ン タ か、ユーザ オブ ジ ェ ク ト ペ イ ン タ のいずれか を使っ て、 ツ リ ービ ュ ーの状態ピ ク チ ャ を指定 し ま す。 3 レベル ソ ース サービ ス を使用可能に し ま す。 this.of_SetLevelSource(TRUE) 4 n_cst_tvsrv_levelsource の 関数 を 呼 び出 し て、 ピ ク チ ャ を ツ リ ー ビ ュ ー レベルに関連付け ま す。 this.inv_levelsource.of_SetPictureColumn(1, "1") this.inv_levelsource.of_SetSelectedPictureColumn (1, "2") this.inv_levelsource.of_SetPictureColumn(2, "4") this.inv_levelsource.of_SetSelectedPictureColumn (2, "5") ❖ & & デー タ ウ ィ ン ド ウ カ ラ ム を使用 し て ツ リ ー ビ ュ ー ピ ク チ ャ を指定す る には 1 デー タ ベース ま たはデー タ ウ ィ ン ド ウ カ ラ ム を設定 し て、 ビ ッ ト マ ッ プ名 (String ま たは Character 型) ま たは ピ ク チ ャ イ ンデ ッ ク ス 指定 (Integer 型) を入力 し ま す。 2 ツ リ ービ ュ ー レベル ソ ース サービ ス を使用可能に し ま す。 this.of_SetLevelSource(TRUE) 3 デー タ ウ ィ ン ド ウ カ ラ ム名を渡 し て n_cst_tvsrv_levelsource の関数 を呼び出す こ と に よ っ て、 目的のピ ク チ ャ を指定 し ま す。 this.inv_levelsource.of_SetPictureColumn & (1, 'picture_name') this.inv_levelsource.of_SetSelectedPictureColumn (1, 'picture_overlay') & ビ ッ ト マ ッ プの存在が必須 検索 し た行の中で名前 を付け た フ ァ イ ルは、 その ア プ リ ケーシ ョ ン に ア ク セ ス で き る デ ィ レ ク ト リ に置いておか な ければな り ま せ ん。 ツ リ ー ビ ュ ー ピ ク チ ャ の詳細につい ては、 『PowerBuilder ユーザーズ ガ イ ド 』 マニ ュ アルを参照 し て く だ さ い。 ツ リ ービ ュ ー と そのほ かの コ ン ト ロ ールを調 整す る ツ リ ービ ュ ーの最 も ポ ピ ュ ラ ーな使い方の一つに、 リ ス ト ビ ュ ー と の 整合処理があ り ま す。 エ ク ス プ ロ ー ラ が こ の種の使い方の一例です。 最 も パ ワ フ ルな使い方の一つ と し て、 ツ リ ービ ュ ー と デー タ ウ ィ ン ド ウ の処理を調整 さ せ る こ と が挙げ ら れ ま す。 164 PowerBuilder 第5章 ❖ PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ツ リ ービ ュ ー と リ ス ト ビ ュ ーを調整する には 1 ツ リ ービ ュ ーの全レベルに関す る 情報を表示す る デー タ ウ ィ ン ド ウ オブジ ェ ク ト を作成 し ま す (次の例では、 PFC のサ ンプル デー タ ベー ス の地域、 州、 顧客、 お よ び従業員に関す る 情報 を使用 し て い ま す)。 2 ツ リ ービ ュ ー ベース の u_tvs と リ ス ト ビ ュ ー ベース の u_lvs を持 つ ウ ィ ン ド ウ を作成 し ま す。 3 ツ リ ービ ュ ー と リ ス ト ビ ュ ー用の ピ ク チ ャ を定義 し ま す。 4 ツ リ ービ ュ ー レベル ソ ー ス サービ ス を使用可能に し ま す。 this.of_SetLevelSource(TRUE) 5 すべての ツ リ ービ ュ ー レベルに関す る レベル ソ ース 情報を登録 し ま す (次の例は、 ツ リ ービ ュ ー Constructor イ ベン ト か ら の も の です)。 this.inv_levelsource.of_Register(1, & "sales_regions_region", "", "d_region", & SQLCA, "") this.inv_levelsource.of_SetPictureColumn(1, "1") this.inv_levelsource.of_SetSelectedPictureColumn (1, "7") this.inv_levelsource.of_Register(2, & "states_state_name", & ":parent.1.sales_regions_region", & "d_regionstate", SQLCA, "") this.inv_levelsource.of_SetPictureColumn(2, "2") this.inv_levelsource.of_SetSelectedPictureColumn (2, "7") this.inv_levelsource.of_Register(3, & "customer_company_name", & ":parent.2.sales_regions_region, & :parent.1.states_state_id", & "d_regionstatecust", SQLCA, "") this.inv_levelsource.of_SetPictureColumn(3, "3") this.inv_levelsource.of_SetSelectedPictureColumn (3, "7") & & & this.inv_levelsource.of_Register(4, & "employee_emp_lname", ":parent.1.customer_id", & "d_regionstatecustrep", SQLCA, "") this.inv_levelsource.of_SetPictureColumn(4, "4") this.inv_levelsource.of_SetSelectedPictureColumn & PFC Library ユーザーズ ガ イ ド 165 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 (4, "7") this.inv_levelsource.of_Register(5, & "order_id_string", ":parent.2.customer_id, & :parent.1.employee_emp_id", & "d_regionstatecustrepord", SQLCA, "") this.inv_levelsource.of_SetPictureColumn(5, "5") this.inv_levelsource.of_SetSelectedPictureColumn (5, "7") 6 & pfc_Populate イ ベン ト を呼び出 し ま す。 this.Event pfc_Populate(0) 7 pfc_Retrieve イ ベン ト を拡張 し ま す。 Any la_args[20] Integer li_level IF IsValid(inv_levelsource) THEN li_level = of_GetNextLevel(al_parent) inv_levelsource.of_GetArgs(al_parent, & li_level, la_args) END IF Return of_Retrieve(al_parent, la_args, ads_data) 8 ツ リ ー ビ ュ ー の SelectionChanged イ ベ ン ト を 拡 張 し て リ ス ト ビ ュ ーの pfc_Populate イ ベン ト を呼び出 し ま す。 lv_1.Event pfc_Populate() 9 リ ス ト ビ ュ ー サービ ス を使用可能に し て、 処理オプ シ ョ ン を指定 し ま す (次の例は、 リ ス ト ビ ュ ー Constructor イ ベン ト か ら の も の です)。 this.of_SetDataSource(TRUE) this.of_SetSort(TRUE) this.inv_sort.of_SetColumnHeader(TRUE) this.of_SetRMBMenu(TRUE) 10 リ ス ト ビ ュ ーの pfc_Populate イ ベン ト を オーバー ラ イ ド し ま す。 Integer li_RC, li_level Long ll_handle String ls_dataobject String ls_labelcolumn, ls_picturecolumn TreeViewItem ltvi_selecteditem n_tr ltr_obj n_cst_tvsrvattrib lnv_tvattrib 166 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 // LV の中の現行のツ リ ー項目の子を表示 し ます。 ll_handle = tv_1.FindItem(CurrentTreeItem!, 0) tv_1.GetItem(ll_handle, ltvi_selecteditem) li_level = ltvi_selecteditem.Level + 1 // 通常の登録処理 ls_dataobject = & tv_1.inv_levelsource.of_GetDataObject(li_level) ls_labelcolumn = & tv_1.inv_levelsource.of_GetLabelColumn(li_level) ls_picturecolumn = & tv_1.inv_levelsource.of_GetPictureColumn & (li_level) tv_1.inv_levelsource.of_GetTransObject(li_level, & ltr_obj) // レ ベル 3 の登録処理 tv_1.inv_levelsource.of_GetLevelAttributes (li_level, lnv_tvattrib) & // リ ス ト ビ ュ ー項目を設定 し ま す。 Choose Case ltvi_selecteditem.Level Case 1 li_RC = lv_1.inv_datasource.of_Register & (ls_labelcolumn, ls_dataobject, ltr_obj) li_RC = & lv_1.inv_datasource.of_SetPictureColumn & (ls_picturecolumn) Case 2 li_RC = lv_1.inv_datasource.of_Register & (ls_labelcolumn, ls_dataobject, ltr_obj) li_RC = & lv_1.inv_datasource.of_SetPictureColumn & (ls_picturecolumn) Case 3 li_RC = lv_1.inv_datasource.of_Register & (lnv_tvattrib.is_labelcolumn, & lnv_tvattrib.is_dataobject, & lnv_tvattrib.itr_obj) li_RC = & lv_1.inv_datasource.of_SetPictureColumn & (lnv_tvattrib.is_picturecolumn) Case 4 li_RC = lv_1.inv_datasource.of_Register & (ls_labelcolumn, ls_dataobject, ltr_obj) PFC Library ユーザーズ ガ イ ド 167 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 li_RC = & lv_1.inv_datasource.of_SetPictureColumn & (ls_picturecolumn) Case 5 // ツ リ ーに含まれていないので通常どお り に登録 し ます。 li_RC = lv_1.inv_datasource.of_Register & ("product_description", & "d_regionstatecustreporditm", SQLCA) li_RC = & lv_1.inv_datasource.of_SetPictureColumn & ("product_picture_name") End Choose // デー タ ソ ースのすべての表示可能な カ ラ ム を // レ ポー ト ビ ュ ーに追加 し ます。 lv_1.inv_datasource.of_RegisterReportColumn() Return Super::Event pfc_Populate() 11 リ ス ト ビ ュ ーの pfc_Retrieve イ ベン ト を拡張 し ま す。 Long ll_handle Any la_args[20] TreeViewItem tvi_item ll_handle = tv_1.FindItem(CurrentTreeItem!, 0) tv_1.GetItem(ll_handle, ltvi_item) If ltvi_item.Level < 5 Then tv_1.inv_levelsource.of_GetArgs & (ll_handle, (ltvi_item.Level + 1), la_Args) Else la_Args[1] = Integer(ltvi_item.Label) End If Return of_Retrieve(la_args, ads_data) 12 ツ リ ー ビ ュ ー の 表 示 を 調 整 す る コ ー ド を リ ス ト ビ ュ ー の DoubleClicked イ ベン ト に追加 し ま す。 Integer li_level Long ll_currenttvitem, ll_selectedtreehandle String ls_lvlabel ListViewItem llvi_selectedlvitem TreeViewItem ltvi_newtreeitem TreeViewItem ltvi_startingtreeitem // ダ ブル ク リ ッ ク さ れた リ ス ト ビ ュ ー項目を取得 し ます。 this.GetItem(index, llvi_selectedlvitem) ls_lvlabel = llvi_selectedlvitem.label 168 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 // 現行の選択 さ れた ツ リ ー ビ ュ ー項目を調べて // その項目を取得 し ま す。 ll_currenttvitem = tv_1.FindItem & (CurrentTreeItem!, 0) tv_1.GetItem(ll_currenttvitem, & ltvi_startingtreeitem) // ロ ー カル変数を現行の選択 さ れた // ツ リ ービ ュ ー項目の レベルに設定 し ま す。 li_level = ltvi_startingtreeitem.level 現在選択 さ れた ツ リ ービ ュ ー項目が展開 さ れてい るか ど う か を調べま す。 展開 さ れてい なければ展開 し ま す (展開する と 、 値 も 設定 さ れます)。 こ れに よ り 、 ツ リ ービ ュ ーの中に リ ス ト ビ ュ ー情報がロ ー ド さ れます。 ltvi_startingtreeitem.expanded = FALSE THEN tv_1.ExpandItem(ll_currenttvitem) END IF // // // // IF // ダ ブル ク リ ッ ク さ れた リ ス ト ビ ュ ー項目に // 対応する ツ リ ービ ュ ー項目の // 状態情報を取得 し ま す。 ll_selectedtreehandle = & tv_1.inv_base.of_FindItem ("label", ls_lvlabel, & ll_currenttvitem, (li_level + 1), TRUE, TRUE) // ダ ブル ク リ ッ ク さ れた リ ス ト ビ ュ ー項目に // 対応する ツ リ ービ ュ ー項目の // 状態情報を取得 し ま す。 tv_1.GetItem(ll_selectedtreehandle, ltvi_newtreeitem) & // 選択 さ れた ツ リ ービ ュ ー項目 を選択 し て展開 し ます。 IF ltvi_newtreeitem.expanded = FALSE THEN tv_1.SelectItem(ll_selectedtreehandle) tv_1.ExpandItem(ll_selectedtreehandle) END IF ❖ ツ リ ービ ュ ー と デー タ ウ ィ ン ド ウ コ ン ト ロ ール を調整す る には 1 PFC Library ユーザーズ ガ イ ド ツ リ ービ ュ ーの全レベルに関す る 情報を表示す る デー タ ウ ィ ン ド ウ オブジ ェ ク ト を作成 し ま す (次の例では、 PFC のサ ンプル デー タ ベー ス か ら の地域、 州、 顧客、 お よ び従業員に関す る 情報を 使 用 し てい ま す)。 169 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 2 ツ リ ービ ュ ー ベー ス の u_tvs と デー タ ウ ィ ン ド ウ ベース の u_dw を持つウ ィ ン ド ウ を作成 し ま す。 3 ツ リ ービ ュ ー用の ピ ク チ ャ を定義 し ま す。 4 ツ リ ービ ュ ー レベル ソ ース サービ ス を使用可能に し ま す。 this.of_SetLevelSource(TRUE) 5 すべての ツ リ ービ ュ ー レベルに関す る レ ベル ソ ース 情報を登録 し ま す (次の例は、 ツ リ ービ ュ ー Constructor イ ベン ト か ら の も の です)。 this.inv_levelsource.of_Register(1, & "sales_regions_region", "", "d_region", & SQLCA, "") this.inv_levelsource.of_SetPictureColumn(1, "1") this.inv_levelsource.of_SetSelectedPictureColumn (1, "7") this.inv_levelsource.of_Register(2, & "states_state_name", & ":parent.1.sales_regions_region", & "d_regionstate", SQLCA, "") this.inv_levelsource.of_SetPictureColumn(2, "2") this.inv_levelsource.of_SetSelectedPictureColumn (2, "7") this.inv_levelsource.of_Register(3, & "customer_company_name", & ":parent.2.sales_regions_region, & :parent.1.states_state_id", & "d_regionstatecust", SQLCA, "") this.inv_levelsource.of_SetPictureColumn(3, "3") this.inv_levelsource.of_SetSelectedPictureColumn (3, "7") & & & this.inv_levelsource.of_Register(4, & "employee_emp_lname", ":parent.1.customer_id", & "d_regionstatecustrep", SQLCA, "") this.inv_levelsource.of_SetPictureColumn(4, "4") this.inv_levelsource.of_SetSelectedPictureColumn & (4, "7") this.inv_levelsource.of_Register(5, & "order_id_string", ":parent.2.customer_id, :parent.1.employee_emp_id", & "d_regionstatecustrepord", SQLCA, "") 170 & PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 this.inv_levelsource.of_SetPictureColumn(5, "5") this.inv_levelsource.of_SetSelectedPictureColumn (5, "7") 6 & pfc_Populate イ ベン ト を呼び出 し ま す。 this.Event pfc_Populate(0) 7 pfc_Retrieve イ ベン ト を拡張 し ま す。 Any la_args[20] Integer li_level IF IsValid(inv_levelsource) THEN li_level = of_GetNextLevel(al_parent) inv_levelsource.of_GetArgs(al_parent, & li_level, la_args) END IF Return of_Retrieve(al_parent, la_args, ads_data) 8 ツ リ ービ ュ ーの SelectionChanging イ ベン ト を拡張 し て デー タ ウ ィ ン ド ウ コ ン ト ロ ールのデー タ オブ ジ ェ ク ト プ ロ パ テ ィ を リ セ ッ ト し 、 選択 さ れた ツ リ ービ ュ ー項目に設定 し ま す。 n_ds lds_datastore TreeViewItemltvi_new Long ll_dsrow // 新規項目用のデー タ ス ト ア と 行を取得 し ま す。 IF inv_levelsource.of_GetDataRow(newhandle, lds_datastore, ll_dsrow) = -1 THEN MessageBox(" エ ラ ー ", & "of_GetDataRow で エ ラ ーが発生 し ま し た ", Exclamation!) END IF & // dw_1 を設定 し て新 し いデー タ ス ト ア を使用 し ます。 dw_1.Reset() dw_1.DataObject = lds_datastore.DataObject // デー タ ス ト ア内の選択 さ れた // 項目用の行 を コ ピ ー し ま す。 lds_datastore.RowsCopy(ll_dsrow, ll_dsrow, Primary!, dw_1, 1, Primary!) & // 新 し い行のス テー タ ス フ ラ グ を、 ツ リ ービ ュ ー レベル // デー タ ス ト ア内にあ っ た ス テー タ ス フ ラ グに設定 し ま す。 // 新 し い行が DataModified! と し て コ ピー さ れます。 CHOOSE CASE lds_datastore.GetItemStatus & PFC Library ユーザーズ ガ イ ド 171 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 (ll_dsrow, 0, Primary!) CASE New! dw_1.SetItemStatus(1, 0, CASE DataModified! dw_1.SetItemStatus(1, 0, CASE NotModified! dw_1.SetItemStatus(1, 0, dw_1.SetItemStatus(1, 0, END CHOOSE Primary!, NotModified!) Primary!, DataModified!) Primary!, DataModified!) Primary!, NotModified!) u_tvs に よ っ て ツ リ ービ ュ ーを印刷す る こ と がで き 、必要な ら ばキ ャ ン セルのダ イ ア ロ グ ボ ッ ク ス と カ ス タ マ イ ズ レ ベル ピ ク チ ャ を表示す る こ と も で き ま す。 ツ リ ービ ュ ーの印刷 ❖ ツ リ ービ ュ ー を印刷す る には 1 ツ リ ービ ュ ー印刷サービ ス を使用可能に し ま す。 tv_deptemp.of_SetPrint(TRUE) 2 of_PrintTree 関数を呼び出 し ま す。 tv_deptemp.inv_print.of_PrintTree() u_rte リ ッ チ テキス ト エデ ィ ッ ト コ ン ト ロールの使い方 PowerBuilder リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ールを使 う と 、 ワ ー ド プ ロ セ シ ン グ機能が追加 さ れ、 アプ リ ケーシ ョ ン の能力が向上 し ま す。さ ら に、PFC u_rte コ ン ト ロ ールを使 う と 、リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ールの作業が容易にな り ま す。 u_rte で、 以下の こ と がで き ま す。 • 新 し い ド キ ュ メ ン ト を表示す る 。 こ れ を、 現在の ド キ ュ メ ン ト に 挿入す る • ピ ク チ ャ を ド キ ュ メ ン ト に挿入す る 。 ダ イ ア ロ グ ボ ッ ク ス を 表示 し て、 ユーザに フ ァ イ ル名をつけ る よ う プ ロ ン プ ト を表示 • ド キ ュ メ ン ト を印刷 • リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ールに、 検索/置換機能を追 加 • テ キ ス ト プ ロ パテ ィ を制御 PowerBuilder リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ールの詳細について は、 『PowerBuilder ユーザーズ ガ イ ド 』 マニ ュ アル と 『ア プ リ ケーシ ョ ン テ ク ニ ッ ク 』 マニ ュ アル を参照 し て く だ さ い。 172 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 u_rte では、 イ ベン ト を使っ て指定 し た リ ッ チテ キ ス ト ド キ ュ メ ン ト を 開 く こ と がで き ま す。 リ ッ チ テキス ト ド キ ュ メ ン ト を表示する 現在の ド キ ュ メ ン ト を選択 し た ド キ ュ メ ン ト に入れ替 え ま す。ユーザに対 し てプ ロ ン プ ト 表示を し てか ら 、現在の ド キ ュ メ ン ト を破棄 し ま す。 • pfc_Open • pfc_InsertFile 選択 し た ド キ ュ メ ン ト を 現在の ド キ ュ メ ン ト に挿 入 し ま す。 フ ァ イ ルが挿入 さ れ る と 、 リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ールは、 現在選択 さ れてい る も の を変更 し ま す。 PowerScript InsertDocument 関 数 を 呼 び 出 し て、 リ ッ チ テ キ ス ト エ デ ィ ッ ト コ ン ト ロ ールを表示す る こ と も で き ま す。 ❖ ド キ ュ メ ン ト を表示す る には (現在の ド キ ュ メ ン ト を入れ替え る) • pfc_Open イ ベン ト を呼び出 し ま す。 rte_doc.Event pfc_Open() ❖ ド キ ュ メ ン ト を現在の ド キ ュ メ ン ト に挿入す る には • pfc_InsertFile 関数を呼び出 し ま す。 rte_doc.Event pfc_InsertFile() InsertDocument PowerScript 関数 PowerScript InsertDocument 関数を呼び出 し て ド キ ュ メ ン ト を表示す る こ と も で き ま す。 こ の関数を使っ て空の コ ン ト ロ ールに フ ァ イ ル を表 示す る 場合は、 of_SetFileName 関数を呼び出 し て、 リ ッ チテ キ ス ト エ デ ィ ッ ト コ ン ト ロ ールに関連付け ら れた フ ァ イ ルの名前 も 指定 し な ければな り ま せん。 u_rte では、 ダ イ ア ロ グ ボ ッ ク ス を表示 し て、 現在の カー ソ ル位置に挿 入す る ビ ッ ト マ ッ プ を、 ユーザに選択 さ せ る と い う イ ベン ト が使え ま す。 ビ ッ ト マ ッ プが挿入 さ れ る と 、 リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ールは現在選択 さ れてい る も の を変更 し ま す。 ピ ク チ ャ を挿入す る ❖ ピ ク チ ャ の挿入ダ イ ア ロ グボ ッ ク ス を表示す る には • pfc_InsertPicture イ ベン ト を呼び出 し ま す。 rte_doc.Event pfc_InsertPicture() ピ ク チ ャ の フ ァ イル名 を ト ラ ッ キン グす る 挿 入 し た ピ ク チ ャ の フ ァ イ ル 名 を ト ラ ッ キ ン グ し た い 場 合 は、 pfc_InsertPicture イ ベン ト ではな く 、 InsertPicture 関数を呼び出 し ま す。 PFC Library ユーザーズ ガ イ ド 173 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 u_rte では、 リ ッ チテ キ ス ト ド キ ュ メ ン ト のデー タ を印刷す る イ ベン ト が使え ま す。 以下の こ と が可能です。 リ ッ チ テキス ト ド キ ュ メ ン ト を印刷する • 印刷 ダ イ ア ロ グ ボ ッ ク ス を表示 し 、 オプシ ョ ン を選択 し てか ら 印 刷 し ま す。 PFC は、 s_printdlgattrib 構造体を使用 し て、 プ ロ パテ ィ を n_cst_platform の of_PrintDlg 関数に渡 し ま す。 pfc_PrePrintDlg イ ベ ン ト を使っ て、 s_printdlgattrib 構造体の構成要素を修正すれば、 印 刷 ダ イ ア ロ グ ボ ッ ク ス の内容を さ ら にカ ス タ マ イ ズで き ま す。 printdlgattib 構造体の値には、 選択 し た リ ッ チテ キ ス ト エデ ィ ッ ト の印刷プ ロ パテ ィ (丁合い、 ページ番号、 印刷部数な ど) が反映 さ れ ま す。 • 印刷 ダ イ ア ロ グ ボ ッ ク ス を表示せずに、 リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ールを印刷 し ま す。 u_rte では、 ページ番号の印刷を制御す る 関数 も 使え ま す。 ❖ 印刷 ダ イ ア ロ グボ ッ ク ス を表示す る には 1 (オプシ ョ ン) pfc_PrePrintDlg イ ベン ト に コ ー ド を追加 し て、 pfc_PrintDlg 関数が使用す る 情報を修正 し ま す (次の例では、 印 刷部数指定のデフ ォ ル ト を示 し てい ま す)。 astr_printdlg.l_copies = 1 2 fc_Print イ ベン ト を呼び出 し ま す。 rte_doc.Event pfc_Print( ) ❖ 印刷 ダ イ ア ロ グボ ッ ク ス を表示せずに リ ッ チ テキス ト エデ ィ ッ ト コ ン ト ロールを印刷する には • pfc_PrintImmediate イ ベン ト を呼び出 し ま す。 rte_doc.Event pfc_PrintImmediate() ❖ ページ番号の印刷を制御す る には 1 (オプシ ョ ン) ページ番号を最初に表示す る ページ番号を指定 し ま す。 一例 と し て、 多 く の ス タ イ ルでは ド キ ュ メ ン ト の最初のペー ジにページ番号をふ ら ない よ う にす る ケー ス が挙げ ら れ ま す。 rte_doc.of_SetStartPageNumber(2) 2 フ ィ ール ド 名を指定 し て、 PFC がページ番号を付す場所に挿入 し ま す (次の例は、 入力す る フ ィ ール ド を 「PAGENUM」 と し た場 合を想定 し てい ま す)。 rte_doc.of_SetPageInputField("PAGENUM") 174 PowerBuilder 第5章 ❖ PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 デー タ ウ ィ ン ド ウ、 またはデー タ ス ト ア と デー タ を共有 し てい る と き に、 ページ を連続 し て印刷する には 1 リ ッ チ テ キ ス ト フ ァ イ ルが、 デー タ ウ ィ ン ド ウ 、 ま たはデー タ ス ト ア と デー タ を 共有で き る よ う にす る ために、 必要な操作を すべ て行い ま す。 ids_empdata = CREATE n_ds ids_empdata.DataObject = "d_sharerte" ids_empdata.of_SetTransObject(SQLCA) IF ids_empdata.Retrieve() = -1 THEN MessageBox(" 検索 ", " 検索エ ラ ー ") END IF rte_doc.DataSource(ids_empdata) 2 of_SetContinuousPages 関数を呼び出 し ま す。 rte_doc.of_SetContinuousPages(TRUE) 3 ド キ ュ メ ン ト を印刷 し ま す。 rte_doc.Event pfc_Print( ) リ ッ チ テ キ ス ト エデ ィ ッ ト コ ン ト ロ ール と デー タ ウ ィ ン ド ウ 間 (ま たはデー タ ス ト ア間) のデー タ 共有の詳細については、 『ア プ リ ケーシ ョ ン テ ク ニ ッ ク 』 マニ ュ アルを参照 し て く だ さ い。 u_rte では、 検索/置換サービ ス を使用で き ま す。 こ のサービ ス を使 う と 、 リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ールの機能が拡張 さ れ ま す。 こ のサービ ス を使用可能にす る と 、 PFC m_master メ ニ ュ ーか ら 継承 さ れ る メ ニ ュ ーバーか ら 、 ユーザが [編集|検索] 、 ま たは [編集|置 換] を 選択 し た う え で、 リ ッ チ テ キ ス ト エデ ィ ッ ト コ ン ト ロ ール を フ ォーカ ス す る と 、 PFC が検索 / 置換 ダ イ ア ロ グ ボ ッ ク ス を表示 し ま す。 RTE 検索サービ ス を 使う 編集 / 置換 ダ イ ア ロ グ ボ ッ ク ス を、 プ ロ グ ラ ム し て表示す る こ と も で き ま す。 ❖ 検索 ダ イ ア ロ グボ ッ ク ス を表示す る には 1 検索サービ ス を使用可能に し ま す。 rte_doc.of_SetFind(TRUE) 2 pfc_FindDlg イ ベン ト を呼び出 し ま す。 rte_doc.Event pfc_FindDlg() PFC Library ユーザーズ ガ イ ド 175 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 ❖ 置換 ダ イ ア ロ グボ ッ ク ス を表示す る には 1 検索サービ ス を使用可能に し ま す。 rte_doc.of_SetFind(TRUE) 2 pfc_ReplaceDlg イ ベン ト を呼び出 し ま す。 rte_doc.Event pfc_ReplaceDlg() u_rte では、 リ ッ チテ キ ス ト エデ ィ ッ ト コ ン ト ロ ール内で、 選択 し た テ キ ス ト のプ ロ パテ ィ にア ク セ ス で き ま す。 こ の機能 を使 う と 、 1 回 につ き 1 つのプ ロ パテ ィ を変更で き ま す。 そのほかのプ ロ パテ ィ は元 の ま ま です。 こ れは可能な テ キ ス ト プ ロ パテ ィ をすべて指定す る 必要 があ る 、 PowerScript SetTextStyle 関数 と は異な り ま す。 テキス ト プ ロパテ ィ を 制御する ❖ テキス ト プ ロパテ ィ を設定する には 1 (オプシ ョ ン) ユーザがテ キ ス ト プ ロ パテ ィ を指定で き る メ カ ニ ズ ム を設定 し ま す (次の例では、 チ ェ ッ ク ボ ッ ク ス を使用 し ま す)。 2 of_SetTextStylexxx 関数を呼び出 し 、 テ キ ス ト プ ロ パテ ィ を設定 し ま す。 SetRedraw(FALSE) rte_doc.of_SetTextStyleBold(cbx_bold.Checked) rte_doc.of_SetTextStyleItalic(cbx_italic.Checked) rte_doc.of_SetTextStyleUnderline & (cbx_underline.Checked) rte_doc.of_SetTextStyleStrikeout & (cbx_strikeout.Checked) rte_doc.of_SetTextStyleSubscript & (cbx_subscript.Checked) rte_doc.of_SetTextStyleSuperscript & (cbx_superscript.Checked) SetRedraw(TRUE) ❖ テキス ト プ ロパテ ィ にア ク セ スする には 1 (オプシ ョ ン) テ キ ス ト プ ロ パテ ィ を表示す る メ カ ニ ズ ム を設定 し ま す (次の例では、 チ ェ ッ ク ボ ッ ク ス を使用 し ま す)。 2 of_GetTextStyle 関数を呼び出 し ま す。 n_cst_textstyleattrib lnv_style rte_doc.of_GetTextStyle & (lnv_style) cbx_bold.Checked = lnv_style.ib_bold 176 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 cbx_italic.Checked = lnv_style.ib_italic cbx_underline.Checked = & lnv_style.ib_underlined cbx_strikeout.Checked = lnv_style.ib_strikeout cbx_subscript.Checked = lnv_style.ib_subscript cbx_superscript.Checked = & lnv_style.ib_superscript u_oc OLE コ ン ト ロ ールの使い方 PFC では、 u_oc ベー ス の OLE コ ン ト ロ ール を制御す る 、 基本的な関 数や イ ベ ン ト が使 え ま す。 編集可能 な コ ン ト ロ ール (切 り 取 り 、 コ ピ ー、 貼 り 付け、 マ ウ ス の右ボ タ ン サポー ト な ど) に対す る 標準的な サポー ト のほか、 u_oc には特殊ペース ト 機能、 イ ン プ レー ス / オ フ サ イ ト ア ク テ ィ ベーシ ョ ン のサポー ト 、 お よ び リ ン ク 更新機能が含 ま れ て い ま す。 OLE コ ン ト ロ ール を使用 し たプ ロ グ ラ ミ ン グ の詳細については、 『ア プ リ ケーシ ョ ン テ ク ニ ッ ク 』 マニ ュ アルを参照 し て く だ さ い。 オ ブ ジ ェ ク ト の挿入 ダ イ ア ロ グボ ッ ク ス を 表示する オブ ジ ェ ク ト の挿入 ダ イ ア ロ グ ボ ッ ク ス を表示 し て、 オブ ジ ェ ク ト 、 ま たはサーバ アプ リ ケーシ ョ ン を変更で き ま す。 ❖ オ ブ ジ ェ ク ト の挿入 ダ イ ア ロ グボ ッ ク ス を表示する には 1 u_oc に基づ く OLE コ ン ト ロ ールを持つ ウ ィ ン ド ウ を作成 し ま す。 2 pfc_InsertObject イ ベン ト を呼び出 し ま す。 ole_1.Event pfc_InsertObject() イ ン プ レ ース オブ ジ ェ ク ト をア ク テ ィ ブ にす る イ ン プ レ ー ス オ ブ ジ ェ ク ト を ア ク テ ィ ブ に す る と、 ユ ー ザ は PowerBuilder ア プ リ ケーシ ョ ン ウ ィ ン ド ウ 内部のオブ ジ ェ ク ト を イ ン タ ラ ク テ ィ ブに扱え る よ う にな り ま す。 1 u_oc に基づ く OLE コ ン ト ロ ールを持つ ウ ィ ン ド ウ を作成 し ま す。 2 pfc_EditObject イ ベン ト を呼び出 し ま す。 ole_1.Event pfc_EditObject() オ フサイ ト オブジ ェ ク ト を ア ク テ ィ ブにす る オ フ サ イ ト オブ ジ ェ ク ト を ア ク テ ィ ブ にす る と 、 サーバ ア プ リ ケー シ ョ ン が開 き ま す。 ア ク テ ィ ブに し たオ フ サ イ ト オブ ジ ェ ク ト は、 そ のサーバ ウ ィ ン ド ウ 内部の開かれた ド キ ュ メ ン ト と な り ま す。 1 u_oc に基づ く OLE コ ン ト ロ ールを持つ ウ ィ ン ド ウ を作成 し ま す。 2 pfc_OpenObject イ ベン ト を呼び出 し ま す。 ole_1.Event pfc_OpenObject() PFC Library ユーザーズ ガ イ ド 177 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 リ ン ク さ れたオ ブ ジ ェ ク ト を更新す る リ ン ク さ れたオブ ジ ェ ク ト を更新す る と 、 PowerBuilder は OLE コ ン テ ナに リ ン ク さ れた フ ァ イ ルを検索 し ま す。 リ ン ク さ れた フ ァ イ ルが見 つか ら なか っ た場合には、 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ、 フ ァ イ ル を検索す る か、 リ ン ク を変更す る ための第 2 のダ イ ア ロ グ ボ ッ ク ス を ユーザに表示 さ せ る よ う に し ま す。 1 u_oc に基づ く OLE コ ン ト ロ ールを持つ ウ ィ ン ド ウ を作成 し ま す。 2 pfc_UpdateLinks イ ベン ト を呼び出 し ま す。 ole_1.Event pfc_UpdateLinks() u_tab タ ブ コ ン ト ロール と u_tabpg ユーザ オ ブ ジ ェ ク ト 昨今のア プ リ ケーシ ョ ン の多 く は、 タ ブ コ ン ト ロ ール と タ ブページ を 使っ て、 ユーザ イ ン タ フ ェ ー ス の機能を向上 さ せてい ま す。 u_tab タ ブ コ ン ト ロ ール と u_tabpg ユーザ オブ ジ ェ ク ト を使 う と 、 PFC の基本 機能が利用で き ま す。 ど ち ら も サ イ ズ変更サー ビ ス を 実行 し ま すが、 タ ブ を ど の よ う に定義す る かに よ っ て、 それ を使用可能にす る 方法が 異な り ま す。 タ ブ コ ン ト ロール と タ ブ ページについて タ ブ コ ン ト ロール タ ブ コ ン ト ロ ールは、 タ ブ ページ を 含む ウ ィ ン ド ウ ま たはユーザ オブ ジ ェ ク ト に配置す る コ ン ト ロ ールです。 タ ブ コ ン ト ロ ール エ リ アの一部は、 タ ブ ページに関連付け ら れた タ ブに使われ ま す。 残 り の ス ペー ス はすべて、 タ ブ ページ自体が占有 し ま す。 PFC では、 u_tab タ ブ コ ン ト ロ ールが使え ま す。 こ れは、 タ ブ コ ン ト ロ ールの上位オブ ジ ェ ク ト と し て利用可能です。 タ ブ ページ タ ブ ページには、 そのほかの コ ン ト ロ ールが含ま れてい ま す。 ま た、 タ ブ コ ン ト ロ ール内には複数のページが含ま れてい ま す が、 タ ブ ページはその う ちの 1 つ と な り ま す。 タ ブ コ ン ト ロ ールの タ ブページ はいずれ も 、 タ ブ コ ン ト ロ ール と 同 じ エ リ ア を 共有 し ま す が、 同時には 1 つ し か見 る こ と がで き ま せん。 ア ク テ ィ ブ な タ ブ ペー ジが残 り の タ ブ ページ を覆い隠 し ま す。 タ ブ ページの定義にはい く つ かの方法があ り ま す。 以下の も のを定義す る こ と がで き ま す。 • 178 ウ ィ ン ド ウ ペ イ ン タ 、ま たはユーザ オブジ ェ ク ト ペ イ ン タ で、[ タ ブ ページの挿入] を タ ブ コ ン ト ロ ールのポ ッ プ ア ッ プ メ ニ ュ ーか ら 選び、 コ ン ト ロ ール を それ ら のページに追 加 し ま す。埋め込み タ ブ ページは ク ラ ス ユーザ オブ ジ ェ ク ト です が、 再利用はで き ま せん。 埋め込み タ ブ ページ PowerBuilder 第5章 • PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 タ ブ ページ ユーザ オ ブ ジ ェ ク ト ユーザ オブ ジ ェ ク ト ペ イ ン タ で、 カ ス タ ム ユーザ ビ ジ ュ アル オブ ジ ェ ク ト を作成 し 、 タ ブ ページ に表示す る コ ン ト ロ ール を 追加 し ま す。 タ ブページ ユーザ オ ブ ジ ェ ク ト を タ ブ コ ン ト ロ ールに追加す る には、 [ユーザ オブ ジ ェ ク ト の挿入] を、 その タ ブ コ ン ト ロ ールのポ ッ プ ア ッ プ メ ニ ュ ー か ら 選択 し ま す。 単独のユーザ オブ ジ ェ ク ト と し て定義 し た タ ブ ページは再利用で き ま す。 PFC では u_tabpg カ ス タ ム ビ ジ ュ アル ユーザ オブ ジ ェ ク ト が使え ま す。 こ れは タ ブ ペー ジ の上位オ ブ ジ ェ ク ト と し て利用可能で す。 上記の 2 つの方法は、 組み合わせて使え ま す。 つ ま り 、 1 つの タ ブ コ ン ト ロ ールに、 埋め込み タ ブ ページ と タ ブ ページ ユーザ オブジ ェ ク ト を含め る こ と がで き ま す。 ただ し 、 PFC で ない タ ブページは、 サ イ ズ変更や メ ッ セージ ルー タ な ど の PFC 機能をサポー ト し てい ま せん。 タ ブ コ ン ト ロ ール、お よ び タ ブ ページ を使っ たプ ロ グ ラ ミ ン グについ ての詳細は、 『ア プ リ ケーシ ョ ン テ ク ニ ッ ク 』 マ ニ ュ アル を参照 し て く だ さ い。 u_tab を使 う 場合は、 必ず以下の よ う に し ま す。 u_tab を使 う ❖ • u_tab の子孫オブジ ェ ク ト を用い る • ユーザ オブ ジ ェ ク ト ペ イ ン タ 内に、 完全な タ ブ コ ン ト ロ ール ( タ ブページ を含む) を作成す る タ ブ コ ン ト ロ ールを作成する には 1 u_tab ベース のユーザ オブジ ェ ク ト を作成 し ま す。 2 埋め込み タ ブ ページ と タ ブ ページ ユーザ オブジ ェ ク ト を追加 し ま す。埋め込み タ ブ ページの場合は、必要で あれば各種 コ ン ト ロ ー ル を追加 し ま す。 タ ブ ページ ユーザ オブジ ェ ク ト の場合は、 定義 を完全に行わ な ければな り ま せん。 つ ま り 、 各種 コ ン ト ロ ール を タ ブ コ ン ト ロ ール内か ら 追加 し た り 修正 し た り す る こ と はで き ま せん。 3 必要であれば タ ブ ページ イ ベン ト と 関数の作成、 上書 き 、 お よ び 拡張を行い ま す。 4 必要であれば タ ブ レベル イ ベン ト と 関数の作成、 上書 き 、 お よ び 拡張を行い、 ついで タ ブ ページの イ ベン ト を呼び出 し ま す。 タ ブ コ ン ト ロ ールにユーザ イ ベン ト を定義 し 、こ れに タ ブ ページ イ ベ ン ト を呼び出 さ せ る こ と も で き ま す。 5 ユーザ オブ ジ ェ ク ト を ウ ィ ン ド ウ に追加 し ま す。 PFC Library ユーザーズ ガ イ ド 179 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 u_tabpg を 使 う の は、 ユ ー ザ オ ブ ジ ェ ク ト ペ イ ン タ 内 に お い て、 u_tabpg の子孫オブジ ェ ク ト を用い る 場合に限 ら れ ま す。 u_tabpg を使 う ❖ u_tab 子孫オブ ジ ェ ク ト でサ イ ズ変更サービ ス を使 う タ ブ ページ を作成す る には 1 u_tabpg ベー ス のユーザ オブジ ェ ク ト を作成 し ま す。 2 必要で あれば、 各種 コ ン ト ロ ールを追加 し ま す。 3 必要で あれば、 加え た コ ン ト ロ ールの PowerScript コ ー ド を追加 し ま す。 4 必要で あれば タ ブ ページ イ ベン ト と 関数の作成、 上書 き 、 お よ び 拡張を行い ま す。 5 以下のいずれかに、 タ ブ ページ ユーザ オブ ジ ェ ク ト を追加 し ま す。 • u_tab ベー ス のユーザ オブ ジ ェ ク ト • タ イ プ タ ブの標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト • ウ ィ ン ド ウ ペ イ ン タ 内の タ ブ コ ン ト ロ ール サ イ ズ変更サービ ス を使 う と 、 動的なサ イ ズ変更機能を タ ブページに 追加で き ま す。 サ イ ズ変更サービ ス を ど の よ う に し て使用可能にす る かは、 タ ブ コ ン ト ロ ールに埋め込み タ ブページ が含 ま れ て い る 場合 と 、 タ ブ ページ ユーザ オブ ジ ェ ク ト が含 ま れてい る 場合 と で違い ま す。 埋め込み タ ブ ページ と タ ブ ページ ユーザ オブ ジ ェ ク ト の両方が、 1 つの タ ブ コ ン ト ロ ールに含ま れてい る 場合は、 以下に示す手順の う ち、 最初の 2 つ を組み合わせて使い ま す。 タ ブ ページ ユーザ オブ ジ ェ ク ト に現行 タ ブ上の コ ン ト ロ ールのみ生 成オプ シ ョ ン を使 う 場合は、 3 番目の手順 を と る こ と に よ っ て、 各 コ ン ト ロ ールが適切に表示 さ れ る よ う にす る 必要があ り ま す。 ❖ 埋め込み タ ブ ページ を使 っ てい る と き に、 タ ブ コ ン ト ロールのサ イ ズ変更 サー ビ ス を使用可能にする には 1 ユーザ オブ ジ ェ ク ト ペ イ ン タ を使っ て、 u_tab ベー ス の タ ブ コ ン ト ロ ールを作成 し ま す。 2 埋め込み タ ブページ を定義 し ま す。 3 タ ブ コ ン ト ロ ールのサ イ ズ変更サービ ス を使用可能に し ま す (次 の例は、 Constructor イ ベン ト か ら の も のです)。 this.of_SetResize(TRUE) 4 180 タ ブ ページ内に各種 コ ン ト ロ ール を登録 し ま す。 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 this.inv_resize.of_Register & (this.tabpage_1.mle_1, & this.inv_resize.SCALETOBOTTOM) this.inv_resize.of_Register & (this.tabpage_2.dw_1, & this.inv_resize.SCALETOBOTTOM) 5 ユーザ オブ ジ ェ ク ト を ウ ィ ン ド ウ に追加 し ま す。 6 ウ ィ ン ド ウ のサ イ ズ変更サービ ス を使用可能にす る と と も に、 影 響を 受け る コ ン ト ロ ール を 登録 し ま す (次の例は、 そ の ウ ィ ン ド ウ の Constructor イ ベン ト か ら の も のです)。 this.of_SetResize(TRUE) this.inv_resize.of_Register(tab_1, "Scale") this.inv_resize.of_Register & (cb_cancel, & this.inv_resize.FIXEDTOBOTTOM) this.inv_resize.of_Register & (cb_ok, this.inv_resize.FIXEDTOBOTTOM) this.inv_resize.of_SetMinSize & (this.width - 100, this.height - 100) ❖ u_tabpg ベースの タ ブ ページ ユーザ オ ブ ジ ェ ク ト を使 っ てい る と き に、 タ ブ コ ン ト ロ ールのサ イ ズ変更サー ビ ス を使用可能にする には 1 ユーザ オブジ ェ ク ト ペ イ ン タ を使っ て、u_tabpg ベース の タ ブペー ジ を作成 し ま す。 2 作成 し た タ ブ ページ の サ イ ズ 変更サー ビ ス を 使用可能に し ま す (次の例は、 Constructor イ ベン ト か ら の も のです)。 this.of_SetResize(TRUE) 3 タ ブ ページ内に各種 コ ン ト ロ ールを登録 し ま す。 this.inv_resize.of_Register & (this.dw_1, 0, 0, 100, 100)) 4 タ ブ ページ ユーザ オブジ ェ ク ト を タ ブ コ ン ト ロ ールに追加 し ま す。 埋め込み タ ブ ページがない場合は タ ブ コ ン ト ロ ールに u_tabpg ベー ス の タ ブページ ユーザ オブジ ェ ク ト し か含ま れていない場合 (埋め込み タ ブ ページが存在 し ない 場合) は、 タ ブ コ ン ト ロ ールのサ イ ズ変更サービ ス を使用可能に す る 必要は あ り ま せん。 PFC Library ユーザーズ ガ イ ド 181 標準 ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 5 タ ブ コ ン ト ロ ールがユーザ オブジ ェ ク ト で あ る 場合は、 こ れを ウ ィ ン ド ウ に追加 し ま す。 6 ウ ィ ン ド ウ のサ イ ズ変更サービ ス を使用可能にす る と と も に、 影 響を受け る 各種 コ ン ト ロ ールを登録 し ま す (次の例は、 Constructor イ ベン ト か ら の も のです)。 this.of_SetResize(TRUE) this.inv_resize.of_Register & (tab_1, 0, 0, 100, 100) this.inv_resize.of_Register & (cb_cancel, & this.inv_resize.FIXEDTOBOTTOM) this.inv_resize.of_Register & (cb_ok, & this.inv_resize.FIXEDTOBOTTOM) this.inv_resize.of_SetMinSize & (this.width - 100, this.height - 100) ❖ 現行 タ ブ上の コ ン ト ロ ールのみ生成プ ロパテ ィ を持つ タ ブ ページ ユーザ オ ブ ジ ェ ク ト でサ イ ズ変更サービ ス を使 う には 1 ユーザ オブ ジ ェ ク ト ペ イ ン タ 内に、 オブ ジ ェ ク ト のプ ロ パテ ィ シー ト の [位置] タ ブページ を表示 し 、 作成時刻のサ イ ズが ど れ く ら いにな る か を見極め ま す。 2 of_SetOrigSize 関数を呼び出 し 、 初期サ イ ズ を指定 し ま す (次の例 は、 タ ブ ページの Constructor イ ベン ト か ら の も のです)。 this.inv_resize.of_SetOrigSize(1637, 457) 3 タ ブ ページ コ ン ト ロ ールを登録 し ま す。 this.inv_resize.of_Register & (this.dw_1, 0, 0, 100, 100)) 4 ユーザ オブジ ェ ク ト に、 Resize イ ベン ト を発生 さ せま す (次の例 は、 タ ブ コ ン ト ロ ールの Constructor イ ベン ト か ら の も のです)。 // Resize イ ベ ン ト は、 登録 さ れた // オブ ジ ェ ク ト を適切に移動 し ます。 this.tabpage_1.TriggerEvent(Resize!) 182 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 カ ス タ ム ビ ジ ュ アル ユーザ オブ ジ ェ ク ト の使い方 PFC には、 ア プ リ ケーシ ョ ンの機能向上に役立つ、 以下のカ ス タ ム ビ ジ ュ アル ユーザ オブ ジ ェ ク ト が含 ま れて い ま す。 • 計算機 : u_calculator • カ レ ンダ : • ス プ リ ッ ト バー : u_st_splitbar • プ ロ グ レ ス バー : u_progressbar u_calendar 計算機 コ ン ト ロールの使い方 u_calculator (PFC 計算機 コ ン ト ロ ール) を使 う と 、 以下の も のが利用 で き ま す。 • デー タ ウ ィ ン ド ウ の数字カ ラ ムに用い る ド ロ ッ プ ダ ウ ン計算機 • エデ ィ ッ ト マ ス ク の数値ま たは 10 進数値に用い る ド ロ ッ プダ ウ ン計算機 • エデ ィ ッ ト マ ス ク を使 う と き に用い る ス タ ン ド ア ロ ン計算機 PFC Library ユーザーズ ガ イ ド 183 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 ユーザは、 ド ロ ッ プ ダ ウ ン計算機を使っ て計算を行い ま す。 数字を入 力す る には、 計算機のボ タ ン を ク リ ッ ク す る か、 〔Num Lock〕 を オ ン に し て テ ン キーを使用 し ま す。 計算機は、 計算結果を関連付け ら れた フ ィ ール ド に自動的に入力 し ま す。 PFC 計算機 コ ン ト ロ ールには、 計算機の動作方法のあ る 部分を制御で き る よ う にす る 関数が含 ま れてい ま す。 た と えば、 ユーザが等記号を ク リ ッ ク し た と き に、 ド ロ ッ プダ ウ ン計算機を閉 じ る か ど う か を制御 す る には、 of_SetCloseOnClick 関数を呼び出 し ま す。 デー タ ウ ィ ン ド ウ コ ン ト ロールで ド ロ ッ プ ダウ ン計算機を使 う PFC 計算機 コ ン ト ロ ールは、 数値 ま たは 10 進数のデー タ タ イ プ を持 ち、 かつ u_calculator で登録 さ れてい る デー タ ウ ィ ン ド ウ カ ラ ム で作 動 し ま す。 計算機が表示 さ れ る のは、 登録 さ れた カ ラ ム が フ ォ ーカ ス を受け た と き 、 ユーザが ド ロ ッ プ ダ ウ ン矢印を ク リ ッ ク し た と き 、 作成 し た コ ー ド が pfc_DDCalculator イ ベン ト を呼び出 し た と き 、のいずれかです。 こ れは登録方式に よ っ て異な り ま す。 ビ ジ ュ ア ル キ ュ ー を 制御 し ド ロ ッ プ ダ ウ ン 計算機 をデー タ ウ ィ ン ド ウ カ ラ ム に表示 し て使用可能にす る には、 of_Register 関数に引数を与え ま す。 ビ ジ ュ アルキ ュ ー を制御す る 引数 NONE 結果 該当す る カ ラ ム が • ド ロ ッ プダ ウ ン リ ス ト ボ ッ ク ス編集様式 を使用 し てい る 場合は、 こ の カ ラ ム が フ ォ ー カ ス を 受 け る と 計算機は自動的に表示 さ れ る • エデ ィ ッ ト 編集様式あ る いはエデ ィ ッ ト マ ス ク 編 集 様 式 を 使 用 し て い る 場 合 は、 pf_DDCalculator イ ベン ト を呼び出す と 計算機が 表示 さ れ る 184 DDLB of_Register に よ り 、 登録 さ れた カ ラ ム はすべ て ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス編集様式に変換 さ れ る 。 計算機が表示 さ れ る のはユーザが下矢印 を ク リ ッ ク し た と き 。下矢印は、計算機が表示 さ れ る と 消え る DDLB_WITHARROW of_Register に よ り 、 登録 さ れた カ ラ ム はすべ て ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス編集様式に変換 さ れ る 。 計算機が表示 さ れ る のはユーザが下矢印 を ク リ ッ ク し た と き 。下矢印は計算機が表示 さ れた後 も 残る PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 こ のサー ビ ス を 使 っ て カ ラ ム を ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス 編集様式に変換す る と 、 ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス に 適用 さ れないプ ロ パテ ィ は失われ ま す。 こ のため、 通常 ド ロ ッ プ ダ ウ ン計算機は、 すでに ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス 編集様式を用いて お り 、 かつ NONE を渡 し て of_Register を呼び出す よ う にな っ てい る カ ラ ム で使用 さ れ ま す。 カ ラ ム編集様式 ❖ デー タ ウ ィ ン ド ウ カ ラ ムで ド ロ ッ プ ダウ ン計算機を使 う には 1 ド ロ ッ プ ダ ウ ン計算機を使 う のに適 し てい る 数値デー タ ウ ィ ン ド ウ ま たは 10 進数デー タ ウ ィ ン ド ウ を探 し ま す。 た と えば、 給与カ ラ ム に計算機を 使っ て昇給額を決定す る こ と が考え ら れ ま す。 こ の よ う な カ ラ ム では、 ド ロ ッ プダ ウ ン リ ス ト ボ ッ ク ス 、 エデ ィ ッ ト 、 ま たは エデ ィ ッ ト マ ス ク のいずれかの編集様式を使わな けれ ばな り ま せん。 2 u_dw ベース の デー タ ウ ィ ン ド ウ コ ン ト ロ ールを、 ウ ィ ン ド ウ ま たはユーザ オブジ ェ ク ト に配置 し ま す。 3 u_dw の of_SetDropdownCalculator 関数を呼び出 し 、 ド ロ ッ プダ ウ ン 計 算 機 を 使 用 可 能 に し ま す (次 の 例 は、 デ ー タ ウ ィ ン ド ウ Constructor イ ベン ト か ら の も のです)。 this.of_SetDropDownCalculator(TRUE) 4 of_Register 関数を呼び出 し 、 カ ラ ム を 1 つずつ、 ま たは一度にす べて を登録 し ま す。 of_Register 関数には、 ド ロ ッ プ ダ ウ ン 様式 を 指定す る オプ シ ョ ン の引数を入れ ま す。 this.iuo_calculator.of_Register("salary", & this.iuo_calculator.NONE) 5 必要で あれば追加の関数 を呼び出 し 、 計算機の動作方式を カ ス タ マ イ ズ し ま す。 this.iuo_calculator.of_SetCloseOnClick(FALSE) this.iuo_calculator.of_SetInitialValue(TRUE) 計算機 を プ ロ グ ラ ム を 使 っ て表示す る こ と も で き ま す。 こ の方法は、 すべての of_Register 関数で使え ま す。 ま た、 NONE オプシ ョ ン を使 う 場合は、エデ ィ ッ ト カ ラ ム と エデ ィ ッ ト マ ス ク カ ラ ム で必要 と な り ま す。 プ ロ グ ラ ム を使 っ て計 算機 を表示す る ❖ ド ロ ッ プダ ウ ン計算機 を プ ロ グ ラ ム を使 っ て表示する には 1 PFC Library ユーザーズ ガ イ ド u_dw ベース の デー タ ウ ィ ン ド ウ コ ン ト ロ ールを、 ウ ィ ン ド ウ ま たはユーザ オブジ ェ ク ト に配置 し ま す。 185 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 2 u_dw の of_SetDropdownCalculator 関数を呼び出 し 、 ド ロ ッ プダ ウ ン計算機を使用可能に し ま す (次の例は、 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの イ ベン ト か ら の も のです)。 this.of_SetDropDownCalculator(TRUE) 3 of_Register 関数を呼び出 し 、 プ ロ グ ラ ム を使っ て表示す る カ ラ ム を 登録 し ま す。 of_Register 関数には、 ド ロ ッ プ ダ ウ ン 様式を指定 す る 引数が含 ま れてい ま す。 プ ロ グ ラ ム に よ る 表示は、 NONE 様 式に最適ですが、 ど の ド ロ ッ プダ ウ ン様式で も 可能です。 this.iuo_calculator.of_Register("salary", & this.iuo_calculator.NONE) 4 デー タ ウ ィ ン ド ウ コ ン ト ロ ールに フ ォ ーカ ス を設定 し 、かつ u_dw の pfc_DDCalculator イ ベン ト を呼び出すユーザ イ ベン ト ま たは ビ ジ ュ アル コ ン ト ロ ール ( コ マ ン ド ボ タ ン な ど) を定義 し ま す。 IF dw_1.SetColumn("salary") = 1 THEN dw_1.Event pfc_DDCalculator( ) END IF 数値オ プ シ ョ ン タ イ プ あ る いは 10 進数オ プ シ ョ ン タ イ プ を 用い る EditMask コ ン ト ロ ールで、 ド ロ ッ プダ ウ ン計算機を使え ま す。 エデ ィ ッ ト マス ク コ ン ト ロールで ド ロ ッ プ ダウ ン計算機を使 う ❖ エデ ィ ッ ト マス ク コ ン ト ロールで ド ロ ッ プ ダウ ン計算機を使 う には 1 u_em ベー ス のエデ ィ ッ ト マ ス ク コ ン ト ロ ールを ウ ィ ン ド ウ ま た はユーザ オブ ジ ェ ク ト に配置 し ま す。 2 u_em の of_SetDropdownCalculator 関数を呼び出 し 、 ド ロ ッ プダ ウ ン 計 算 機 を 使 用 可 能 に し ま す (次 の 例 は、 エ デ ィ ッ ト マ ス ク Constructor イ ベン ト か ら の も のです)。 this.of_SetDropDownCalculator(TRUE) 3 必要で あ れば追加の関数を呼び出 し 、 計算機の動作方式を カ ス タ マ イ ズ し ま す。 this.iuo_calculator.of_SetCloseOnClick(FALSE) this.iuo_calculator.of_SetInitialValue(TRUE) 4 u_em pfc_DDCalculator イ ベン ト を呼び出す こ と に よ っ て、 ド ロ ッ プ ダ ウ ン 計算機 を 表示す る ユーザ イ ベ ン ト ま た は ビ ジ ュ ア ル コ ン ト ロ ール (ピ ク チ ャ ボ タ ン な ど) を定義 し ま す。 em_1.Event pfc_DDCalculator( ) ス タ ン ド ア ロ ンの計算 機を使 う 186 u_calculator を直接 ウ ィ ン ド ウ ま たはユーザ オブ ジ ェ ク ト に配置 し て、 ス タ ン ド ア ロ ン の計算機を作成で き ま す。 PowerBuilder 第5章 ❖ PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ス タ ン ド ア ロ ンの計算機を作成する には 1 u_em ベース のエデ ィ ッ ト マ ス ク コ ン ト ロ ールを ウ ィ ン ド ウ ま た はユーザ オブジ ェ ク ト に配置 し ま す。 2 u_calculator の イ ン ス タ ン ス を ウ ィ ン ド ウ ま たはユーザ オブジ ェ ク ト に配置 し ま す。 3 u_calculator の of_SetRequestor 関数を呼び出 し 、 ド ロ ッ プ ダ ウ ン計 算機を エデ ィ ッ ト マ ス ク に関連付ま す (次の例は、 u_calculator の Constructor イ ベン ト か ら の も のです)。 this.of_SetRequestor(parent.em_1) 計算機のオ プ シ ョ ン を 設定する PFC 計算機 コ ン ト ロ ールには、 計算機の動作方式を制御す る ための以 下のオプ シ ョ ン が用意 さ れてい ま す。 • ユーザが等記号 を ク リ ッ ク し た と き ド ロ ッ プ ダ ウ ン計算機を閉 じ る か ど う か を制御 し ま す。 ク ロ ーズ オン ク リ ッ ク this.of_SetDropDownCalculator(TRUE) ... this.iuo_calculator.of_SetCloseOnClick(TRUE) • 計算機が最初に表示 さ れた と き ブ ラ ン ク の フ ィ ール ド を 0 で初期化す る か ど う か を制御 し ま す。 初期値 this.of_SetDropDownCalculator(TRUE) ... this.iuo_calculator.of_SetInitialValue(TRUE) Constructor イ ベ ン ト を使 う こ れ ら の動作方式を 制御す る 関数は、 通常、 u_dw の Constructor イ ベ ン ト ま たは u_em の Constructor イ ベン ト で呼び出 し ま す。 こ こ で取 り 上げた各例は、 u_dw をベー ス に し たデー タ ウ ィ ン ド ウ コ ン ト ロ ールの Constructor イ ベン ト か ら の も のです。 カ レ ン ダ コ ン ト ロールの使い方 u_calender (PFC カ レ ン ダ コ ン ト ロ ール) を使 う と 、 以下の コ ン ト ロ ー ルのデー タ 値に、 ド ロ ッ プ ダ ウ ン カ レ ン ダ を加え る こ と がで き ま す。 PFC Library ユーザーズ ガ イ ド 187 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 • u_dw ベース の デー タ ウ ィ ン ド ウ コ ン ト ロ ール • u_em ベース のエデ ィ ッ ト マ ス ク コ ン ト ロ ール ユーザは ド ロ ッ プダ ウ ン カ レ ン ダ を ク リ ッ ク し て日付を入力 し ま す。 その結果、 選択 し た日付が、 関連の フ ィ ール ド に自動的に入力 さ れ ま す。 月を変更す る には、 [>] ボ タ ン、 ま たは [<] ボ タ ン を ク リ ッ ク し ま す。 カ レ ン ダのナ ビ ゲー ト は、 キーボー ド の矢印キーで も で き ま す。 デフ ォ ル ト では、 曜日はすべて、 同 じ 特性で表示 さ れ る よ う にな っ て い ま す。 し か し 、 土曜日 と 日曜日には違っ た色を指定す る と い う こ と も で き ま す。 ま た、 ボール ド で表示 さ れ る よ う 指定す る こ と も で き ま す。 さ ら に、 こ のカ レ ン ダ では、 祝日やそ のほか特定の日を強調表示 す る こ と も 可能です。 PFC カ レ ン ダ コ ン ト ロ ールには、 カ レ ン ダの一部の動作方式を制御す る 関数が含ま れてい ま す。 た と えば、 ド ロ ッ プダ ウ ン カ レ ン ダが最初 に表示 さ れた と き 、 ブ ラ ン ク の フ ィ ール ド を当日の日付で初期化す る か を制御す る には、 of_SetInitialValue 関数を呼び出 し ま す。 デー タ ウ ィ ン ド ウ コ ン ト ロールで ド ロ ッ プ ダウ ン カ レ ン ダ を使 う 188 ド ロ ッ プ ダ ウ ン カ レ ン ダは、デー タ 型が日付で あ っ て、かつ u_calendar で登録 さ れてい る デー タ ウ ィ ン ド ウ カ ラ ム で作動 し ま す。 カ レ ン ダが表示 さ れ る のは、 登録 さ れた カ ラ ム が フ ォ ーカ ス を受け た と き 、 ユーザが ド ロ ッ プ ダ ウ ン の矢印を ク リ ッ ク し た と き 、 作成 し た コ ー ド が pfc_DDCalculator イ ベン ト を呼び出 し た と き 、 のいずれかで す。 こ れは登録方式に よ っ て異な り ま す。 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ビ ジ ュ アル キ ュ ーを制御 し 、 ド ロ ッ プ ダ ウ ン カ レ ン ダ をデー タ ウ ィ ン ド ウ カ ラ ム に表示 し て使用可能にす る に は、 of_Register 関数に引数を与え ま す。 ビ ジ ュ アルキ ュ ー を制御す る 引数 NONE 結果 該当す る カ ラ ム が • ド ロ ッ プダ ウ ン リ ス ト ボ ッ ク ス 編集様式を使用 し てい る 場合に こ の カ ラ ム が フ ォ ー カ ス を 受け る と 、 カ レ ン ダが自動的に表示 さ れ る • エデ ィ ッ ト 編集様式あ る いはエデ ィ ッ ト マ ス ク 編集様式を使用 し てい る 場合に、 pf_DDCalendar イ ベン ト を呼び出す と 、 カ レ ン ダが表示 さ れ る DDLB of_Register に よ り 、 登録 さ れた カ ラ ム はすべ て ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス 編集様式に変換 さ れ る 。カ レ ン ダが表示 さ れ る のはユーザが下矢印を ク リ ッ ク し た と き 。下矢印は、 カ レ ン ダが表示 さ れ る と 消え る DDLB_WITHARROW of_Register に よ り 、 登録 さ れた カ ラ ム はすべ て ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス 編集様式に変換 さ れ る 。 カ レ ン ダが表示 さ れ る のは、 ユーザが下矢印を ク リ ッ ク し た と き。 下矢印は、 カ レ ン ダが表示 さ れ た後 も 残 る こ のサー ビ ス を 使 っ て カ ラ ム を ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス 編集様式に変換す る と 、 ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス に 適用 さ れないプ ロ パテ ィ は失われ ま す。 こ のため、 通常 ド ロ ッ プ ダ ウ ン カ レ ン ダは、すでに ド ロ ッ プ ダ ウ ン リ ス ト ボ ッ ク ス 編集様式を用い てお り 、かつ NONE を渡 し て of_Register を呼び出す よ う にな っ てい る カ ラ ム で使用 さ れ ま す。 カ ラ ム編集様式 ❖ デー タ ウ ィ ン ド ウ カ ラ ムで ド ロ ッ プ ダウ ン カ レ ン ダ を使 う には 1 ド ロ ッ プ ダ ウ ン カ レ ン ダ を使 う のに適 し てい る デー タ ウ ィ ン ド ウ カ ラ ム を探 し ま す。 た と えば、 希望納期カ ラ ム で ド ロ ッ プ ダ ウ ン カ レ ン ダ を使 う こ と が考え ら れ ま す。 こ の よ う な カ ラ ム では、 ド ロ ッ プダ ウ ン リ ス ト ボ ッ ク ス 、 エデ ィ ッ ト 、 ま たはエデ ィ ッ ト マ ス ク のいずれかの編集様式を使わなければな り ま せん。 2 u_dw ベース のデー タ ウ ィ ン ド ウ コ ン ト ロ ールを、ウ ィ ン ド ウ ま た はユーザ オブジ ェ ク ト に配置 し ま す。 3 u_dw の of_SetDropdownCalendar 関数を呼び出 し 、 ド ロ ッ プダ ウ ン カ レ ン ダ を使用可能に し ま す (次の例は、 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの Constructor イ ベン ト か ら の も のです)。 this.of_SetDropDownCalendar(TRUE) PFC Library ユーザーズ ガ イ ド 189 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 4 of_Register 関数を呼び出 し 、 カ ラ ム を 1 つずつ、 ま たは一度にす べ て を 登録 し ま す。 of_Register 関数には、 ド ロ ッ プ ダ ウ ン 様式 を 指定す る オプシ ョ ン の引数を入れ ま す。 this.iuo_calendar.of_Register("salary" & this.iuo_calendar.NONE) 5 (オプシ ョ ン) 週末の曜日の フ ォ ン ト 様式 と 色を設定 し ま す。 this.iuo_calendar.of_SetSaturdayBold(TRUE) this.iuo_calendar.of_SetSaturdayColor & (RGB(0, 255, 0)) this.iuo_calendar.of_SetSundayBold(TRUE) this.iuo_calendar.of_SetSundayColor & (RGB(0, 255, 0)) 6 (オプシ ョ ン) フ ォ ン ト 様式 と 色を決定 し て、 祝日の リ ス ト を設定 し ま す (次に示 し た例では、祝日の設定を 1 年間に限っ てい ま す)。 Date ld_holidays[11] ld_holidays[1] = 1997-01-01 ld_holidays[2] = 1997-02-17 ld_holidays[3] = 1997-04-21 ld_holidays[4] = 1997-05-26 ld_holidays[5] = 1997-07-04 ld_holidays[6] = 1997-09-01 ld_holidays[7] = 1997-10-13 ld_holidays[8] = 1997-11-27 ld_holidays[9] = 1997-11-28 ld_holidays[10] = 1997-12-25 ld_holidays[11] = 1997-12-26 ... this.iuo_calendar.of_SetHoliday(ld_holidays) this.iuo_calendar.of_SetHolidayBold(TRUE) this.iuo_calendar.of_SetHolidayColor & (RGB(0, 255, 0)) 7 (オプシ ョ ン) フ ォ ン ト 様式 と 色を定めて、 特定日の リ ス ト を設定 し ま す。 Date ld_holidays[11], ld_marked_days[12] ld_marked_days[1] ld_marked_days[2] ld_marked_days[3] ld_marked_days[4] ld_marked_days[5] ld_marked_days[6] 190 = = = = = = 1996-06-13 1996-03-16 1996-09-23 1996-09-14 1997-06-13 1997-03-16 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ld_marked_days[7] = 1997-09-23 ld_marked_days[8] = 1997-09-14 ld_marked_days[9] = 1998-06-13 ld_marked_days[10] = 1998-03-16 ld_marked_days[11] = 1998-09-23 ld_marked_days[12] = 1998-09-14 ... this.iuo_calendar.of_SetMarkedDay(ld_marked_days) this.iuo_calendar.of_SetMarkedDayBold(TRUE) this.iuo_calendar.of_SetMarkedDayColor & (RGB(255, 0, 0)) 整合性を保つ すべてのユーザにおいて同 じ カ レ ン ダ を表示す る には、 表示特性、 祝日、 お よ び特定日を u_calendar (拡張 レ ベル オブ ジ ェ ク ト ) の Constructor イ ベン ト に定義 し ま す。 8 (オプシ ョ ン) 必要であれば追加の関数を呼び出 し 、 カ レ ン ダの動 作方式を カ ス タ マ イ ズ し ま す。 this.iuo_calendar.of_SetAlwaysRedraw(TRUE) this.iuo_calendar.of_SetInitialValue(TRUE) プ ロ グ ラ ム を 使 っ て ド ロ ッ プ ダ ウ ン カ レ ン ダ を 表示す る こ と も で き ま す。 こ の方法は、 すべての of_SetRegister オプ シ ョ ン で使え ま す。 ま た、 こ の方法は、 NONE オプシ ョ ン を使 う 場合に、 エデ ィ ッ ト カ ラ ム と エデ ィ ッ ト マ ス ク カ ラ ム に対 し て必要 と な り ま す。 プ ロ グ ラ ム を使 っ て カ レ ン ダ を表示する ❖ ド ロ ッ プダ ウ ン カ レ ン ダ を、 プ ロ グ ラ ム を使 っ て表示する には 1 u_dw ベース のデー タ ウ ィ ン ド ウ コ ン ト ロ ールを、ウ ィ ン ド ウ ま た はユーザ オブジ ェ ク ト に配置 し ま す。 2 u_dw の of_SetDropdownCalendar 関数を呼び出 し 、 ド ロ ッ プダ ウ ン カ レ ン ダ を使用可能に し ま す (次の例は、 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの Constructor イ ベン ト か ら の も のです)。 this.of_SetDropDownCalendar(TRUE) 3 of_Register 関数を呼び出 し 、 プ ロ グ ラ ム を使っ て表示す る カ ラ ム を登録 し ま す。 of_Register 関数には、 ド ロ ッ プ ダ ウ ン 様式 を指定 す る 引数が含 ま れてい ま す。 プ ロ グ ラ ム に よ る 表示は、 NONE 様 式に最適ですが、 ど の ド ロ ッ プダ ウ ン様式で も 可能です。 this.iuo_calendar.of_Register("start_date" & this.iuo_calendar.NONE) PFC Library ユーザーズ ガ イ ド 191 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 4 デー タ ウ ィ ン ド ウ コ ン ト ロ ールに フ ォ ーカ ス を設定 し 、かつ u_dw の pfc_DDCalendar イ ベン ト を呼び出す よ う なユーザ イ ベン ト 、 あ る いは ビ ジ ュ アル コ ン ト ロ ール ( コ マ ン ド ボ タ ン な ど) を定義 し ま す。 IF dw_1.SetColumn("start_date") = 1 THEN dw_1.Event pfc_DDCalendar( ) END IF 日付オプ シ ョ ン タ イ プ を用い る エデ ィ ッ ト マ ス ク コ ン ト ロ ールで、 ド ロ ッ プダ ウ ン カ レ ン ダ を使え ま す。 エデ ィ ッ ト マス ク コ ン ト ロールで ド ロ ッ プ ダウ ン カ レ ン ダ を使 う ❖ エデ ィ ッ ト マス ク コ ン ト ロールで ド ロ ッ プ ダウ ン カ レ ン ダ を使 う には 1 u_em ベー ス のエデ ィ ッ ト マ ス ク コ ン ト ロ ールを ウ ィ ン ド ウ ま た はユーザ オブ ジ ェ ク ト に配置 し ま す。 2 u_em の of_SetDropdownCalendar 関数を呼び出 し 、 ド ロ ッ プ ダ ウ ン カ レ ン ダ を使用可能に し ま す (次の例は、 エデ ィ ッ ト マ ス ク コ ン ト ロ ールの Constructor イ ベン ト か ら の も のです)。 this.of_SetDropDownCalendar(TRUE) 3 (オプシ ョ ン) 週末の曜日の フ ォ ン ト 様式 と 色を設定 し ま す。 this.iuo_calendar.of_SetSaturdayBold(TRUE) this.iuo_calendar.of_SetSaturdayColor & (RGB(0, 255, 0)) this.iuo_calendar.of_SetSundayBold(TRUE) this.iuo_calendar.of_SetSundayColor & (RGB(0, 255, 0)) 4 (オプシ ョ ン) フ ォ ン ト 様式 と 色を決定 し て、 祝日の リ ス ト を設定 し ま す (次に示 し た例では、祝日の設定を 1 年間に限っ てい ま す)。 Date ld_holidays[11] ld_holidays[1] = 1997-01-01 ld_holidays[2] = 1997-02-17 ld_holidays[3] = 1997-04-21 ld_holidays[4] = 1997-05-26 ld_holidays[5] = 1997-07-04 ld_holidays[6] = 1997-09-01 ld_holidays[7] = 1997-10-13 ld_holidays[8] = 1997-11-27 ld_holidays[9] = 1997-11-28 ld_holidays[10] = 1997-12-25 ld_holidays[11] = 1997-12-26 192 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ... this.iuo_calendar.of_SetHoliday(ld_holidays) this.iuo_calendar.of_SetHolidayBold(TRUE) this.iuo_calendar.of_SetHolidayColor & (RGB(0, 255, 0)) 5 (オプシ ョ ン) フ ォ ン ト 様式 と 色を定めて、 特定日の リ ス ト を設定 し ま す。 Date ld_holidays[11], ld_marked_days[12] ld_marked_days[1] = 1996-06-13 ld_marked_days[2] = 1996-03-16 ld_marked_days[3] = 1996-09-23 ld_marked_days[4] = 1996-09-14 ld_marked_days[5] = 1997-06-13 ld_marked_days[6] = 1997-03-16 ld_marked_days[7] = 1997-09-23 ld_marked_days[8] = 1997-09-14 ld_marked_days[9] = 1998-06-13 ld_marked_days[10] = 1998-03-16 ld_marked_days[11] = 1998-09-23 ld_marked_days[12] = 1998-09-14 ... this.iuo_calendar.of_SetMarkedDay(ld_marked_days) this.iuo_calendar.of_SetMarkedDayBold(TRUE) this.iuo_calendar.of_SetMarkedDayColor & (RGB(255, 0, 0)) 6 (オプシ ョ ン) 必要であれば追加の関数を呼び出 し 、 カ レ ン ダの動 作方式を カ ス タ マ イ ズ し ま す。 this.iuo_calendar.of_SetAlwaysRedraw(TRUE) this.iuo_calendar.of_SetInitialValue(TRUE) 7 u_em の pfc_DDCalendar イ ベン ト を呼び出 し て ド ロ ッ プダ ウ ン カ レ ン ダ を 表示す る よ う な ユーザ イ ベ ン ト ま た は ビ ジ ュ ア ル コ ン ト ロ ール ( ピ ク チ ャ ボ タ ン な ど) を定義 し ま す。 em_1.Event pfc_DDCalendar( ) PFC カ レ ン ダ コ ン ト ロ ール を使 う と 、 土曜日お よ び日曜日に、 目立つ 色やボール ド を設定で き ま す。 週末日の表示 オプ シ ョ ン を設定する ❖ 週末日の表示オ プ シ ョ ン を設定する には 1 of_SetSaturdayBold 関数を呼び出 し 、 土曜日を ボール ド 表示にす る か ど う か を指定 し ま す。 this.iuo_calendar.of_SetSaturdayBold(TRUE) PFC Library ユーザーズ ガ イ ド 193 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 2 of_SetSaturdayColor 関数を呼び出 し 、 土曜日の色を指定 し ま す。 this.iuo_calendar.of_SetSaturdayColor & (RGB(0, 255, 0)) 3 of_SetSundayBold 関数を呼び出 し 、日曜日を ボール ド 表示にす る か ど う か を指定 し ま す。 this.iuo_calendar.of_SetSundayBold(TRUE) 4 of_SetSundayColor 関数を呼び出 し 、 日曜日の色を指定 し ま す。 this.iuo_calendar.of_SetSundayColor & (RGB(0, 255, 0)) PFC カ レ ン ダ コ ン ト ロ ールを使 う と 、 一連の祝日 と 特定日が設定で き ま す。 祝日お よ び特定日を設 定す る 祝日お よ び特定日に対 し て、 目立つ色やボール ド を設定で き ま す。 2 年間以上にわた る日付を指定する PFC のカ レ ン ダ コ ン ト ロ ールでは、 複数年にわた っ て日付を指定す る こ と がで き ま す。 必要 と す る 年数にわた っ て祝日 と 特定日を設定 し て お く べ き です。 ❖ 祝日お よ び特定日を設定す る には 1 祝日お よ び特定日の リ ス ト か ら 構成 さ れ る 配列を設定 し ま す。 Date ld_holidays[11], ld_marked_days[12] ld_holidays[1] = 1997-01-01 ld_holidays[2] = 1997-02-17 ld_holidays[3] = 1997-04-21 ld_holidays[4] = 1997-05-26 ld_holidays[5] = 1997-07-04 ld_holidays[6] = 1997-09-01 ld_holidays[7] = 1997-10-13 ld_holidays[8] = 1997-11-27 ld_holidays[9] = 1997-11-28 ld_holidays[10] = 1997-12-25 ld_holidays[11] = 1997-12-26 ld_marked_days[1] ld_marked_days[2] ld_marked_days[3] ld_marked_days[4] ld_marked_days[5] 194 = = = = = 1996-06-13 1996-03-16 1996-09-23 1996-09-14 1997-06-13 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ld_marked_days[6] = 1997-03-16 ld_marked_days[7] = 1997-09-23 ld_marked_days[8] = 1997-09-14 ld_marked_days[9] = 1998-06-13 ld_marked_days[10] = 1998-03-16 ld_marked_days[11] = 1998-09-23 ld_marked_days[12] = 1998-09-14 2 デー タ ウ ィ ン ド ウ コ ン ト ロ ール、 ま たはエデ ィ ッ ト マ ス ク コ ン ト ロ ールの カ レ ン ダ を使用可能に し てか ら 、 of_SetHoliday 関数を呼 び出 し て祝日の リ ス ト を設定 し ま す。 this.iuo_calendar.of_SetHoliday(ld_holidays) 3 必要であれば、 祝日表示のオプシ ョ ン を設定 し ま す。 this.iuo_calendar.of_SetHolidayBold(TRUE) this.iuo_calendar.of_SetHolidayColor & (RGB(0, 255, 0)) 4 of_SetMarkedDay 関数を呼び出 し 、 特定日の リ ス ト を設定 し ま す。 this.iuo_calendar.of_SetMarkedDay(ld_marked_days) 5 必要であれば、 特定日のオプ シ ョ ン を設定 し ま す。 this.iuo_calendar.of_SetMarkedDayBold(TRUE) this.iuo_calendar.of_SetMarkedDayColor & (RGB(255, 0, 0)) カ レ ン ダのオプ シ ョ ン を設定す る PFC カ レ ン ダ コ ン ト ロ ールには、 カ レ ン ダの動作方式を制御す る ため のオプ シ ョ ン が用意 さ れてい ま す。 • ク ロ ーズ オン ク リ ッ ク ユーザ が日付 を ク リ ッ ク し た と き ド ロ ッ プ ダ ウ ン カ レ ン ダ を閉 じ る か ど う か を制御 し ま す。 this.of_SetDropDownCalendar(TRUE) ... this.iuo_calendar.of_SetCloseOnDClick(TRUE) • ユーザが日付を ダ ブル ク リ ッ ク し た と き ド ロ ッ プ ダ ウ ン カ レ ン ダ を閉 じ る か ど う か を制御 し ま す。 ク ロ ーズ オン ダ ブル ク リ ッ ク this.of_SetDropDownCalendar(TRUE) ... this.iuo_calendar.of_SetCloseOnDClick(TRUE) • デー タ 形式 カ レ ン ダが返 し た日付の形式を制御 し ま す。 this.of_SetDropDownCalendar(TRUE) ... this.iuo_calendar.of_SetDateFormat("mm/dd/yy") PFC Library ユーザーズ ガ イ ド 195 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 コ ン ト ロ ールの日付形式に一致 さ せる 指定 し た of_SetDateFormat は、 デー タ ウ ィ ン ド ウ カ ラ ム の編集形 式あ る いはエデ ィ ッ ト マ ス ク の日付マ ス ク に一致 し ていなければ な り ま せん。 • カ レ ン ダが表示 さ れた と き ブ ラ ン ク の フ ィ ール ド を 当日の日付で初期化す る か ど う か を制御 し ま す。 日付の初期化 this.of_SetDropDownCalendar(TRUE) ... this.iuo_calendar.of_SetInitialValue(TRUE) Constructor イ ベ ン ト を使 う こ れ ら の動作方式 を制御す る 関数は、 通常、 u_dw の Constructor イ ベ ン ト ま たは u_em の Constructor イ ベン ト で呼び出 し ま す。 スプ リ ッ ト バー コ ン ト ロールの使い方 ウ ィ ン ド ウ ま たは ビ ジ ュ ア ル ユーザ オ ブ ジ ェ ク ト に ス プ リ ッ ト バー を表示す る には、 u_st_splitbar (PFC ス プ リ ッ ト バー コ ン ト ロ ール) を 使い ま す。 ス プ リ ッ ト バーは、 2 つ以上の ビ ジ ュ アル コ ン ト ロ ールを 分割 し ま す。 ユーザは、 ス プ リ ッ ト バーを ド ラ ッ グす る こ と で、 周囲 の コ ン ト ロ ールを動的にサ イ ズ変更で き ま す。 ス プ リ ッ ト バーを使 う と 、 ウ ィ ン ド ウ の イ ン タ フ ェ ース を カ ス タ マ イ ズ で き る よ う にな り ま す。 こ れは優れた イ ン タ フ ェ ー ス 設計を す る う え で必要な基本要素の 1 つです。 ビ ジ ュ アル コ ン ト ロ ールのサ イ ズ変 更を動的に行 う こ と で、 ユーザは表示 さ れた情報の制御が簡単にで き る よ う にな り ま す。 ス プ リ ッ ト バーの通常の使い方には以下の よ う な 方法があ り ま す。 ス プ リ ッ ト バーを使 っ て コ ン ト ロールを分割 する ❖ • ツ リ ービ ュ ー と リ ス ト ビ ュ ーを分割す る • ツ リ ービ ュ ー と デー タ ウ ィ ン ド ウ を分割す る • マ ス タ デー タ ウ ィ ン ド ウ と 詳細デー タ ウ ィ ン ド ウ を分割す る ス プ リ ッ ト バー コ ン ト ロ ールを使 う には 1 196 u_st_splitbar を、 2 つ以上の コ ン ト ロ ール間にあ る ウ ィ ン ド ウ に配 置 し ま す。 PowerBuilder 第5章 2 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ス プ リ ッ ト バー オブジ ェ ク ト お よ びその周囲のオブジ ェ ク ト の移 動 と サ イ ズ変更 を行い、 それぞれが適切に関連 し あ う よ う に し ま す。 た と えば、 2 つのオブジ ェ ク ト を分割す る 縦の ス プ リ ッ ト バー は、 周囲のオブ ジ ェ ク ト と 同 じ 高 さ にす る 必要があ り ま す。 正確な寸法を設定する サ イ ズや配置を正確な も のにす る には、 ス プ リ ッ ト バー オブ ジ ェ ク ト のプ ロ パテ ィ シー ト で こ れ ら を制御 し ま す。 3 u_st_splitbar の Constructor イ ベン ト に コ ー ド を追加 し 、 ラ イ ン様式 を設定 し ま す。 ま た、 ユーザが ス プ リ ッ ト バー を移動 さ せた と き にサ イ ズ変更を行 う コ ン ト ロ ールを登録 し ま す。 this.of_Register(tv_1, LEFT) this.of_Register(lv_1, RIGHT) this.of_SetBarColor(RGB(192, 192, 192)) ス プ リ ッ ト バーのオ プ シ ョ ン を設定する PFC ス プ リ ッ ト バー コ ン ト ロ ールには、 ス プ リ ッ ト バーの表示を制御 す る ためのオプシ ョ ン が用意 さ れてい ま す。 以下の も のが制御で き ま す。 • バーの色 バーの色を 指定す る には、 of_SetBarColor 関数を呼び出 し ま す。 this.of_SetBarColor(RGB(192,192,192)) • 移動す る と き のバーの色を指定 す る には、 of_SetBarMoveColor 関数を呼び出 し ま す。 移動する と き に表示 さ れるバーの色 this.of_SetBarMoveColor(RGB(128, 128, 128)) • カー ソ ルが水平 ス プ リ ッ ト バーに重な っ た と き に表 示 さ れ る ポ イ ン タ の名前 を 指定す る には、 of_SetHorizontalPointer 関数を呼び出 し ま す。 水平ポ イ ン タ this.of_SetHorizontalPointer("SizeNS!") • カー ソ ルが垂直 ス プ リ ッ ト バーに重な っ た と き に表 示 さ れ る ポ イ ン タ の名前 を指定す る には、 of_SetVerticalPointer 関 数を呼び出 し ま す。 垂直ポ イ ン タ this.of_SetVerticalPointer("SizeNS!") • ス プ リ ッ ト バーで サ イ ズ 変更す る オ ブ ジ ェ ク ト の最小サ イ ズ を指定す る には、 of_SetMinObjectSize 関数 を呼び出 し ま す。 最小オ ブ ジ ェ ク ト サ イ ズ this.of_SetMinObjectSize(100) PFC Library ユーザーズ ガ イ ド 197 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 こ れ ら のオプシ ョ ン は、u_st_splitbar の Constructor イ ベン ト に設定 し ま す。 プ ログ レ ス バーの使い方 u_progressbar (PFC プ ロ グ レ ス バー コ ン ト ロ ール) を使 う と 、 時間の かか る 動作の達成率を、 ユーザに対 し て ビ ジ ュ アルに呈示す る こ と が で き ま す。 PFC プ ロ グ レ ス バーは、 垂直な形で も 水平な形で も 表示で き ま す。 ま た、 達成率を表示 さ せ る か、 プ ロ グ ラ ム に基づいた特定の テ キ ス ト を表示 さ せ る か を選ぶ こ と も で き ま す。 プ ロ グ レ ス バー を 表示 し て、 反復処理の達成率 を 示す こ と がで き ま す。 プ ロ グ レ ス バーの通常の用途 と し ては以下が考え ら れ ま す。 • ア プ リ ケーシ ョ ン のセ ッ ト ア ッ プ • デー タ 検索 • フ ァ イ ルの コ ピ ー操作 PFC は、 マ イ ク ロ ヘルプ MDI フ レ ーム上で同様のプ ロ グ レ ス バー機 能 を、 n_cst_winsrv_statusbar ( ウ ィ ン ド ウ ス テー タ ス バー サー ビ ス ) の一部 と し て使用で き る よ う に し ま す。 ほかの PFC プ ロ グ レ ス バー コ ン ト ロール PFC には、標準の PowerBuilder プ ロ グ レ ス バー コ ン ト ロ ールをベー ス に し た水平 (u_hpb) お よ び垂直 (u_vpb) プ ロ グ レ ス バーが用意 さ れ て い ま す。 u_progressbar コ ン ト ロ ールには、 標準の コ ン ト ロ ールでは 使用で き ない機能があ り ま す。 PFC はどの よ う に し て達成率を計算す るか 198 100% の達成率に対応すべ き 数値を指定す る には、of_SetMaximum 関数 を呼び出 し ま す。 一例 と し て、 デー タ ベー ス か ら 検索す る 行の数があ り ま す。 そ し て、 作成 し た コ ー ド で of_Increment 関数を規則的 (例 : 10 行ご と に 1 回) に呼び出 し 、 現在の進行状況を更新 し ま す。 達成率は (現在の進行状況/最大値) × 100 に等 し く な り ま す。 こ の場合だ と 、 (検索 し た行の数/行の最大数) × 100 と な り ま す。 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 検索の進行状況を示す 行検索の進行状況を 示すには、 埋め込み SQL 文 (SELECT MAX) を コ ー ド 化 し 、 検索す る 行の数を決定 し ま す。 そ し て、 進行状況を、 デー タ ウ ィ ン ド ウ の RetrieveRow イ ベ ン ト で イ ン ク リ メ ン ト さ せ ま す (RetrieveRow イ ベン ト を繰 り 返 し 実行す る と 、 パ フ ォ ーマ ン ス が低下 し ま す。 パフ ォ ーマ ン ス の問題 よ り も 、 フ ィ ー ド バ ッ ク を ビ ジ ュ アル に行 う こ と を優先す る ユーザ も い ま す)。 ウ ィ ン ド ウで プ ロ グ レ ス バー を使 う プ ロ グ レ ス オブジ ェ ク ト を直接 ウ ィ ン ド ウ に配置す る か、 ポ ッ プア ッ プ ウ ィ ン ド ウ を作成 し て、 こ こ にプ ロ グ レ ス バーを表示す る か を選択 で き ま す。 ポ ッ プ ア ッ プ ウ ィ ン ド ウ にはキ ャ ン セル ボ タ ン を入れ る 場 合 も あ り ま す。 ❖ ウ ィ ン ド ウ またはユーザ オ ブ ジ ェ ク ト で プ ロ グ レ スバー を使 う には 1 ウ ィ ン ド ウ ま たはユーザ オブジ ェ ク ト に u_progressbar を配置 し ま す。 こ れは隠す こ と も 可能です。 2 プ ロ グ レ ス バー コ ン ト ロ ールに コ ー ド を追加 し て、 デフ ォ ル ト の 動作方式を設定 し ま す (次の例はプ ロ グ レ ス バー コ ン ト ロ ールの Constructor イ ベン ト を使用 し てい ま す)。 this.of_SetFillStyle(LEFTRIGHT) this.of_SetDisplayStyle(PCTCOMPLETE) this.of_SetFillColor(RGB(128, 128, 128)) 3 100% の達成率に対応す る べ き 数値を設定 し ま す。 デー タ ウ ィ ン ド ウ に表示す る 行の数、 コ ピ ーす る フ ァ イ ルのバ イ ト 数な ど がそ の 例です (次の例では、 プ リ ン ト す る デー タ ウ ィ ン ド ウ オブジ ェ ク ト が含 ま れ て い る 配列の構成要素の数 を 最大値 と し て設定 し ま す)。 DataStore lds_data Long ll_return Integer li_count, li_max String ls_dataobject[] = & {"d_empall", "d_empbydept", "d_dept"} lds_data = CREATE DataStore li_max = UpperBound(ls_dataobject) uo_progress.of_SetMaximum(li_max) 4 PFC Library ユーザーズ ガ イ ド ト ラ ッ キ ン グの対象 と な る プ ロ セ ス に入 る 前に、0 の受け渡 し をす る of_SetPosition 関数 を呼び出 し て プ ロ グ レ ス バー を 初期化 し ま す。 199 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 uo_progress.of_SetPosition(0) 5 プ ロ セ ス 処理中の様々な時点で (あ る いは反復 ロ ジ ッ ク 中定期的 に) of_Increment 関数を呼び出 し 、 プ ロ グ レ ス バーを更新 し ま す。 FOR li_count = 1 TO li_max lds_data.DataObject = ls_dataobject[li_count] lds_data.SetTransObject(SQLCA) ll_return = lds_data.Retrieve() IF ll_return <> -1 THEN uo_progress.of_Increment(1) lds_data.Print() END IF NEXT DESTROY lds_data n_cst_winsrv_statusbar (PFC ス テー タ ス バー オブ ジ ェ ク ト ) には、 プ ロ グ レ ス バーの機能の ほ と ん ど が含 ま れ て い ま す。 こ れ を 使 う と 、 ウ ィ ン ド ウ で ス ペース を使っ た り 、 プ ロ グ レ ス ウ ィ ン ド ウ を別に開い た り す る こ と な く 、 ス テー タ ス バーに進行状況を表示で き ま す。 ス テー タ ス バーで プ ロ グ レ ス バーを使 う 関数名に bar. と い う 文字が含 ま れ る 点が異な り ま すが、 プ ロ グ レ ス バーで使用す る ス テー タ ス バー サービ ス 関数は、 プ ロ グ レ ス バー コ ン ト ロ ー ル 関 数 と 同 等 で す。 た と え ば、 of_SetBarAutoReset は、 of_SetAutoReset と 同等です。 ❖ ス テー タ ス バーで プ ロ グ レ ス バーを使 う には 1 ス テー タ ス バーが目的の フ レーム で使用可能に さ れてい る か ど う か を確かめ ま す。 2 n_cst_winsrv_statusbar の of_SetBar 関数を呼び出 し 、 プ ロ グ レ ス バーを使用可能に し ま す。 this.inv_statusbar.of_SetBar(TRUE) 3 コ ー ド を追加 し 、 プ ロ グ レ ス バーのデフ ォ ル ト の動作方式を設定 し ま す。 this.inv_statusbar.of_SetBarDisplayStyle & (this.inv_statusbar.PCTCOMPLETE) 4 100% の達成率に対応す る べ き 数値を設定 し ま す。 デー タ ウ ィ ン ド ウ に表示す る 行の数、 コ ピ ーす る フ ァ イ ルのバ イ ト 数な ど がそ の 例です。 次の例では、 プ リ ン ト す る デー タ ウ ィ ン ド ウ オブジ ェ ク ト が含 ま れ て い る 配列の構成要素の数 を 最大値 と し て 設定 し ま す。 DataStore lds_data Long ll_return 200 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 Integer li_count, li_max String ls_dataobject[] = & {"d_empall", "d_empbydept", "d_dept"} lds_data = CREATE DataStore li_max = UpperBound(ls_dataobject) this.inv_statusbar.of_SetBarMaximum(li_max) 5 ト ラ ッ キ ン グの対象 と すべ き プ ロ セ ス に入 る 前に、0 の受け渡 し を す る of_SetBarPosition 関数を呼び出 し てプ ロ グ レ ス バーを初期化 し ま す。 w_frame lw_frame lw_frame = gnv_app.of_GetFrame() lw_frame.inv_statusbar.of_SetBarPosition(0) 6 プ ロ セ ス 中の、 様々な時点で (あ る いは反復 ロ ジ ッ ク 中定期的に) of_BarIncrement 関数を呼び出 し 、 プ ロ グ レ ス バーを更新 し ま す。 FOR li_count = 1 TO li_max lds_data.DataObject = ls_dataobject[li_count] lds_data.SetTransObject(SQLCA) ll_return = lds_data.Retrieve() IF ll_return <> -1 THEN lw_frame.inv_statusbar.of_BarIncrement(1) lds_data.Print() END IF NEXT プ ロ グ レ ス バーのオ プシ ョ ン PFC プ ロ グ レ ス バー コ ン ト ロ ールには、 プ ロ グ レ ス バーを制御す る ためのオプシ ョ ンが用意 さ れてい ま す。of_Maximum と of_Minimum を 除 き 、通常 こ れ ら の関数は、u_progressbar イ ン ス タ ン ス (u_progressbar) の Constructor イ ベン ト ま たは フ レーム ウ ィ ン ド ウ の pfc_PreOpen イ ベ ン ト で呼び出 し ま す。 プ ロ グ レ ス バーのオプシ ョ ン には以下の も のがあ り ま す。 • 0% お よ び 100% を決定す る 値を制御 し ま す。 プ ロ グ レ ス バーが ウ ィ ン ド ウ に あ る か、 ス テー タ ス バーに あ る か に よ っ て、 異な っ た関数を呼び出 し ま す。 最大値 と 最小値 • u_progressbar of_SetMaximum 関数 と of_SetMinimum 関数を 呼び出 し ま す。 SELECT COUNT(emp_id) INTO :il_max FROM Employee USING SQLCA; PFC Library ユーザーズ ガ イ ド 201 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 IF il_max > 0 THEN uo_progress.of_SetMaximum(il_max) uo_progress.of_SetMinimum(0) END IF • of_SetBarMaximum of_SetBarMinimum 関数を呼び出 し ま す。 n_cst_winsrv_statusbar w_frame 関数 と lw_frame lw_frame = gnv_app.of_GetFrame() SELECT COUNT(emp_id) INTO :il_max FROM Employee USING SQLCA; IF il_max > 0 THEN lw_frame.inv_statusbar.of_SetBarMaximum & (il_max) lw_frame.inv_statusbar.of_SetBarMinimum(0) END IF • 表示形式 プ ロ グ レ ス バーに表示す る テ キ ス ト を制御 し ま す。 • テ キ ス ト な し (バーのみ) • 達成率 • 現在の イ ン ク リ メ ン ト 値 • ユーザが指定 し た テ キ ス ト プ ロ グ レ ス バーが ウ ィ ン ド ウ にあ る か、 ス テー タ ス バーにあ る か に応 じ て、 異な っ た関数を呼び出 し ま す。 • of_SetDisplayStyle 関数 を 呼び出 し ま す。 そ の 結果、整数ま たは u_progressbar 変数が渡 さ れ、プ ロ グ レ ス バー に表示す る 情報が指定 さ れ ま す。 u_progressbar this.of_SetDisplayStyle(PCTCOMPLETE) • of_SetBarDisplayStyle 関数を呼び出 し ま す。 そ の結果、 整数 ま たは u_progressbar 変数が渡 さ れ、 プ ロ グ レ ス バーに表示す る 情報が指定 さ れ ま す。 n_cst_winsrv_statusbar this.inv_statusbar.of_SetBarDisplayStyle & (this.inv_statusbar.PCTCOMPLETE) • 202 プ ロ グ レ ス バーの塗 り つぶ し を、 左か ら 右に行 う か、 右か ら 左に行 う か、 下か ら 上に行 う か、 あ る いは上か ら 下に 行 う か を制御 し ま す。 プ ロ グ レ ス バーが ウ ィ ン ド ウ に あ る か、 ス テー タ ス バーにあ る かに応 じ て、 異な っ た関数を呼び出 し ま す。 塗 り つぶ し 形式 PowerBuilder 第5章 • PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 u_progressbar of_SetFillStyle 関数を呼び出 し ま す。その結果、 整数ま たは u_progressbar 変数が渡 さ れ、 プ ロ グ レ ス バーの塗 り つぶ し 形式が指定 さ れ ま す。 this.of_SetFillStyle(LEFTRIGHT) • of_SetBarFillStyle 関数 を 呼び 出 し ま す。 そ の結果、 整数 ま たは u_progressbar 変数が渡 さ れ、 プ ロ グ レ ス バーの塗 り つぶ し 形式が指定 さ れ ま す。 n_cst_winsrv_statusbar this.inv_statusbar.of_SetBarFillStyle & (this.inv_statusbar.LEFTRIGHT) • プ ロ グ レ ス バーが塗 り つぶ さ れ る と き に表示 さ れ る 色を制御 し ま す。 プ ロ グ レ ス バーが ウ ィ ン ド ウ にあ る か、 ス テー タ ス バーに あ る かに応 じ て、 異な っ た関数を呼び出 し ま す。 塗 り つぶ し の色 • u_progressbar of_SetColor 関数 を 呼び出 し ま す。 そ の結果、 バーを塗 り つぶす と き に使われ る 色が渡 さ れ ま す。 this.of_SetFillColor(RGB(128, 128, 128)) • of_SetBarColor 関数 を 呼び出 し ま す。 その結果、 バーを塗 り つぶす と き に使われ る 色が渡 さ れ ま す。 n_cst_winsrv_statusbar this.inv_statusbar.of_SetBarFillColor & (RGB(255, 0, 0)) • プ ロ グ レ ス バーが塗 り つぶ さ れ る 前に表示 さ れ る 色を制御 し ま す。 バ ッ ク グ ラ ウ ン ド の色 • of_SetBackColor 関数を呼び出 し ま す。 その結果、 バ ッ ク グ ラ ウ ン ド の色が渡 さ れ ま す。 this.of_SetBackColor(RGB(128, 128, 128)) ス テー タ ス バーでは使用不可 ス テー タ ス バー サービ ス でプ ロ グ レ ス バーを使 う 場合は、こ のオ プ シ ョ ン が使用で き ま せん。 • プ ロ グ レ ス バーに表示 さ れ る テ キ ス ト の色 を 制御 し ま す。 プ ロ グ レ ス バーが ウ ィ ン ド ウ にあ る か、 ス テー タ ス バー にあ る かに応 じ て、 異な っ た関数を呼び出 し ま す。 テキス ト の色 • u_progressbar of_SetTextColor 関数 を 呼び出 し ま す。 そ の結 果、 テ キ ス ト に使 う 色が渡 さ れ ま す。 this.of_SetTextColor(RGB(255, 0, 0)) • PFC Library ユーザーズ ガ イ ド of_SetBarTextColor 関数を呼び出 し ま す。 その結果、 テ キ ス ト に使 う 色が渡 さ れ ま す。 n_cst_winsrv_statusbar 203 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 this.inv_statusbar.of_SetBarTextColor & (RGB(255, 0, 0)) • プ ロ グ レ ス バーが 100% に達 し た と き 、 塗 り つぶ さ れ た ま ま に し てお く か ど う か を 制御 し ま す。 プ ロ グ レ ス バーが ウ ィ ン ド ウ にあ る か、 ス テー タ ス バーにあ る かに応 じ て、 異な っ た関数を呼び出 し ま す。 自動 リ セ ッ ト • u_progressbar of_SetAutoReset 関数を呼び出 し ま す。 this.of_SetAutoReset(TRUE) • n_cst_winsrv_statusbar of_SetBarAutoClear 関数を呼び出 し ま す。 this.inv_statusbar.of_SetBarAutoReset(TRUE) • デ フ ォ ル ト のス テ ッ プ値 デフ ォ ルト のイ ン ク リ メ ン ト 値を 制御し ま す。こ の値は、引数を 持たない of_Increment (ま たは of_BarIncrement) を呼び出す と き に使い ま す。 デフ ォ ル ト の初期ス テ ッ プ値は 10 で す。 プ ロ グ レ ス バーが ウ ィ ン ド ウ にあ る か、 ス テー タ ス バーにあ る かに よ っ て、 異な っ た関数を呼び出 し ま す。 • of_SetStep 関数 を 呼び出 し 、 引数 を 持 た な い of_Increment を 呼び出す と き に使用す る イ ン ク リ メ ン ト 値 を 指定 し ま す。 u_progressbar this.of_SetStep(5) • of_SetBarStep 関数 を 呼び出 し 、 引数 を持た ない of_BarIncrement を呼び出す と き に使用す る イ ン ク リ メ ン ト 値を指定 し ま す。 n_cst_winsrv_statusbar this.inv_statusbar.of_SetBarStep(5) • フ ォ ン ト オプ シ ョ ン プ ロ グ レ ス バー テ キ ス ト の フ ォ ン ト やそ の ほかの表示特性を制御 し ま す。 以下の関数の中か ら 1 つ以上の も の を選んで呼び出す こ と がで き ま す。 this.of_SetFontBold(TRUE) this.of_SetFontFace("Monotype Corsiva") this.of_SetFontFamily(Script!) this.of_SetFontCharSet(1) this.of_SetFontItalic(TRUE) this.of_SetFontSize(10) this.of_SetFontPitch(Variable!) this.of_SetFontUnderline(TRUE) 204 PowerBuilder 第5章 PFC ビ ジ ュ アル コ ン ト ロ ールの 使い方 ス テー タ ス バーでは使用不可 ス テー タ ス バー サービ ス でプ ロ グ レ ス バーを使用 し てい る と き には、 フ ォ ン ト オプシ ョ ンは使用で き ま せん。 ❖ プ ロ グ レ ス バーに表示する ユーザー定義のテキス ト を指定す る には 1 of_SetMessageText 関数を呼び出 し 、 プ ロ グ レ ス バーに一定時間間 隔で表示す る テ キ ス ト 文字列を指定 し ま す。 ... String ls_msgtext[ ] = {"Ten", "Twenty", & "Thirty", "Forty", "Fifty", "Sixty", & "Seventy", "Eighty", "Ninety", & "One Hundred"} this.of_SetMessageText(ls_msgtext) 2 of_SetDisplayStyle 関数を呼び出 し ま す。 その結果、 3 MSGTEXT 定数が渡 さ れ ま す。 ま たは this.of_SetDisplayStyle(MSGTEXT) 塗 り つぶ さ れ る と 、 プ ロ グ レ ス バーは決ま っ た間隔で テ キ ス ト 文 字列を表示 し ま す。 ス テー タ ス バーでは使用不可 ス テー タ ス バー サービ ス でプ ロ グ レ ス バーを使 う 場合は、こ のオ プ シ ョ ンは使用で き ま せん。 PFC Library ユーザーズ ガ イ ド 205 カ ス タ ム ビ ジ ュ アル ユーザ オ ブ ジ ェ ク ト の使い方 206 PowerBuilder 第 6 章 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い 方 この章につい て こ の章では、 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方について説明 し ま す。 内容 PFC ウ ィ ン ド ウ の使い方 トピック ページ 207 PFC での メ ニ ュ ーの使い方 217 PFC ウ ィ ン ド ウの使い方 PFC には、各標準 ウ ィ ン ド ウ タ イ プで使 う 先祖 ウ ィ ン ド ウ のほか、 基本 ク ラ ス の先祖 ウ ィ ン ド ウ (w_master) が用意 さ れてい ま す。 こ れ ら の ウ ィ ン ド ウ はそれぞれ、 w_master か ら 継承 さ れ ま す。 PFC ウ ィ ン ド ウ には、 高度な機能を提供 し た り 、 そのほかの PFC オブ ジ ェ ク ト と の通信 を使用可能に し た り す る 、 イ ン ス タ ン ス 変 数、 イ ベン ト 、 お よ び関数が含 ま れてい ま す。 PFC Library ユーザーズ ガ イ ド 207 PFC ウ ィ ン ド ウの使い方 ウ ィ ン ド ウの基本的な使い方 ア プ リ ケーシ ョ ン を開発す る と き には、 通常、 以下の作業を行い ま す。 PFC ウ ィ ン ド ウで開 発す る • 基本 ク ラ ス ウ ィ ン ド ウ と 子孫ウ ィ ン ド ウ を作成す る • ウ ィ ン ド ウ サービ ス を使用可能にす る • メ ニ ュ ー項目か ら ウ ィ ン ド ウ を開 く ア プ リ ケーシ ョ ン の開発を始め る 場合は、 必要 と す る 機能について検 討 し 、 イ ン ス タ ン ス の変数、 イ ベン ト 、 お よ び関数が ど の先祖 ウ ィ ン ド ウ に属す る のか を決定す る 必要があ り ま す。 ア プ リ ケーシ ョ ン に特 有な先祖の動作方式の定義の し か たは、 開発者の拡張方針に よ っ て異 な り ま す。 拡張方針の詳細については、 22 ページの 「拡張方法の選択」 を参照 し て く だ さ い。 PFC には さ ま ざ ま な ウ ィ ン ド ウ サービ ス が用意 さ れてい ま す。 こ れ ら を使 う と 、 実稼働能力を備え た機能を ア プ リ ケーシ ョ ン に追加で き ま す。 こ れ ら のサービ ス のほ と ん ど は、 開発者側で コ ーデ ィ ン グ をす る 必要はないか、 あ る と し て も わずか と な り ま す。 次の よ う な ウ ィ ン ド ウ サービ ス があ り ま す。 各種ウ ィ ン ド ウ サー ビ ス を使用可能にする ❖ • 基本 ウ ィ ン ド ウ サービ ス • 環境設定サービ ス • ス テー タ ス バー サービ ス (フ レーム ウ ィ ン ド ウ の場合のみ) • シー ト 管理サービ ス (フ レーム ウ ィ ン ド ウ の場合のみ) • サ イ ズ変更サービ ス ( タ ブ、 タ ブ ページ、 お よ びカ ス タ ム ビ ジ ュ アル ユーザ オブ ジ ェ ク ト に も 適用可能) ウ ィ ン ド ウ サー ビ ス を使 う には 1 目的の ウ ィ ン ド ウ に合っ た ウ ィ ン ド ウ サービ ス は ど れか を見極め ま す。 2 of_Set サービ ス 名 関数を使っ て、 適切な ウ ィ ン ド ウ サービ ス を使 用可能に し ま す (次に示す、 目的の ウ ィ ン ド ウ の pfc_PreOpen イ ベ ン ト の例では、 環境設定サービ ス と サ イ ズ変更サー ビ ス を使用可 能に し ま す)。 this.of_SetPreference(TRUE) this.of_SetResize(TRUE) 208 PowerBuilder 第6章 3 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方 必要で あ れば、 そ のほかの関数を呼び出 し 、 サービ ス を初期化 し ま す (次の例では、 メ ニ ュ ーバー と ツ ールバーの環境設定サー ビ ス を使用可能に し ま す。 さ ら に、 デー タ ウ ィ ン ド ウ と 2 つの コ マ ン ド ボ タ ンのサ イ ズ変更サービ ス も 使用可能に し ま す)。 this.inv_preference.of_SetMenuItems(TRUE) this.inv_preference.of_SetToolbars(TRUE) this.inv_resize.of_Register & (dw_emplist, 0, 0, 100, 100) this.inv_resize.of_Register & (cb_ok, 0, 100, 0, 0) this.inv_resize.of_Register & (cb_cancel, 0, 100, 0, 0) 個々の ウ ィ ン ド ウ サービ ス の詳 し い使い方につい ては、 97 ページ の 「 ウ ィ ン ド ウ サービ ス 」 を参照 し て く だ さ い。 PFC ウ ィ ン ド ウ を開 く 多 く のア プ リ ケーシ ョ ン では、 ユーザが メ ニ ュ ー項目を選択 し て ウ ィ ン ド ウ を開 く よ う にな っ て い ま す。 PFC メ ッ セージルー タ を 使 う と 、 こ のプ ロ セ ス を フ レ キ シブルかつ一貫 し た方法で実行で き る よ う にな り ま す。 45 ページの 「 メ ッ セージ ルー タ 」 を参照 し て く だ さ い。 ❖ メ ニ ュ ー項目か ら PFC ウ ィ ン ド ウ を開 く には 1 目的の メ ニ ュ ー項目で、 Message.StringParm に ウ ィ ン ド ウ 名を与 え、 メ ニ ュ ー サービ ス の of_SendMessage 関数を呼び出 し ま す。 n_cst_menu lnv_menu Message.StringParm = "w_emplist" lnv_menu.of_SendMessage(this, "pfc_Open") 2 フ レーム ウ ィ ン ド ウ の pfc_Open イ ベン ト で、 コ ー ド を追加 し て メ ッ セージ オブジ ェ ク ト にア ク セ ス し 、 要求 さ れた ウ ィ ン ド ウ を 開 き ま す。 String w_sheet ls_window lw_sheet ls_window = Message.StringParm OpenSheet(lw_sheet, ls_window, this, 4, Original!) PFC Library ユーザーズ ガ イ ド 209 PFC ウ ィ ン ド ウの使い方 そのほかのオプ シ ョ ン PFC ウ ィ ン ド ウ を 開 く 方法はほ か に も あ り ま す。 メ ニ ュ ー項目か ら ウ ィ ン ド ウ を直接開 く 方法、 メ ッ セージ オブジ ェ ク ト を拡張 し て渡 さ れた引数を含め る 方法、 フ レ ーム ウ ィ ン ド ウ のユーザ イ ベン ト を追加 し て定義 し 、 ウ ィ ン ド ウ を開 く 方法な ど です。 レ スポン ス ウ ィ ン ド ウの使い方 デー タ や設定値、 あ る いは環境設定情報を表示 し た り 、 収集 し た り す る ための レ ス ポ ン ス ウ ィ ン ド ウ を作成す る には、通常 w_response(PFC レ ス ポ ン ス ウ ィ ン ド ウ ) を使い ま す。 w_response のそのほかの用途 メ ッ セージ ボ ッ ク ス の代わ り と し て使用す る レ ス ポ ン ス ウ ィ ン ド ウ を作成す る と き に w_response を使 う こ と も で き ま す。 ただ し こ の場合 は、 一般的には w_message ダ イ ア ロ グ ボ ッ ク ス (エ ラ ー メ ッ セージ サービ ス の一部) を使 う 方法が適 し てい ま す。 w_response には 3 つのユーザ イ ベン ト が含 ま れて い ま す。 こ れにユー ザ ア ク シ ョ ン を処理す る コ ー ド を追加 し ま す。 ❖ 210 イ ベン ト pfc_Apply 用途 備考 ウ ィ ン ド ウ を 開い た ま ま に し て、 その内容を処 理す る コ マ ン ド ボ タ ン Apply が こ の機 能 を 実行す る 。 こ の ボ タ ン は現 在、 多 く の ア プ リ ケー シ ョ ン に 含ま れてい る pfc_Cancel ウ ィ ン ド ウ の内容 を 無 視 し て閉 じ る Cancel プ ロ パテ ィ を こ の コ マ ン ド ボ タ ン に割 り 当 て る。 こ の ボ タ ン か ら 当 イ ベン ト を呼び出す pfc_Default ウ ィ ン ド ウ の内容 を 処 理 し て閉 じ る Default プ ロ パテ ィ を こ の コ マ ン ド ボ タ ン に割 り 当て る。 こ のボ タ ン か ら 当 イ ベン ト を呼び出す w_response イ ベ ン ト を使 う には 1 w_response か ら 継承 し た ウ ィ ン ド ウ を作成 し ま す。 2 表示やユーザの入力を扱 う コ ン ト ロ ールを追加 し ま す。 PowerBuilder 第6章 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方 PFC の標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト を使 う PFC で PowerBuilder ウ ィ ン ド ウ コ ン ト ロ ールが使え ま す。ただ し 、 本来は PFC の標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト (u_dw、 u_lb、 u_sle、 u_cb な ど ) か ら 継承 さ れたオブジ ェ ク ト を使 う のが最良の 方法です。 3 こ れ ら の コ ン ト ロ ールを サポー ト す る コ ー ド を追加 し ま す。 た と えば、 シ ン グル ラ イ ン エデ ィ ッ ト コ ン ト ロ ール内に INI フ ァ イ ル の値 を表示す る ため、 そ の値に ア ク セ ス す る コ ー ド を ウ ィ ン ド ウ の pfc_PreOpen イ ベン ト に追加 し ま す。 4 必要であれば、 pfc_Apply、 pfc_Cancel イ ベン ト お よ び pfc_Default イ ベン ト を コ ー ド 化 し ま す。 た と えば、 pfc_Default イ ベン ト では、 ウ ィ ン ド ウ の内容を INI フ ァ イ ルにセーブ し て、 ウ ィ ン ド ウ を閉 じ ま す。 String ls_temp ls_temp = trim(sle_base.Text) SetProfileString("eisapp.ini", "Files", "base", ls_temp) ls_temp = trim(sle_x1.Text) SetProfileString("eisapp.ini", "Files", "extra1", ls_temp) ls_temp = trim(sle_x2.Text) SetProfileString("eisapp.ini", "Files", "extra2", ls_temp) Close(this) 5 & & & 対応す る イ ベ ン ト を 発生 さ せ る には コ マ ン ド ボ タ ン を 追加 し ま す。 た と えば、 OK コ マ ン ド ボ タ ン を使っ て、 pfc_Default イ ベン ト を呼び出 し ま す。 parent.Event pfc_Default() pfc_Apply を使 う 再利用可能性 を最大限に高め る には、 処理を pfc_Apply に割 り 当 て、 pfc_Default か ら pfc_Apply を呼び出 し ま す。 PFC Library ユーザーズ ガ イ ド 211 PFC ウ ィ ン ド ウの使い方 pfc_Save プ ロ セスの使い方 w_master の pfc_Save イ ベン ト は、ウ ィ ン ド ウ にあ る PFC デー タ ウ ィ ン ド ウ お よ び非 PFC デー タ ウ ィ ン ド ウ に対す る 変更の有効性を自動的に 検証 し 、 その内容を自動的に保存 し ま す。 pfc_Save はそ のほか多 く の イ ベン ト を呼び出 し 、 そ の作業のほ と ん ど を論理的作業単位サービ ス にオ フ ロ ー ド し ま す。 こ のため pfc_Save は、 1 つの イ ベン ト では な く 、 1 つのプ ロ セ ス と 見なす必要があ り ま す。 論理的作業単位サービ ス pfc_Save プ ロ セ ス では論理的な作業単位サービ ス を使用 し ま す。 こ の サービ ス を使用可能にす る には、 of_SetLogicalUnitOfWork 関数を呼び 出 し ま す。 開発者が論理的作業単位サービ ス を使用可能に し ない場合 は、 w_master の方で必要で あれば こ れを自動的に使用可能に し ま す。 デー タ の保存方法はい ろ い ろ あ り ま すが、 pfc_Save イ ベン ト を使っ て 変更を保存す る のが最 も よ い方法です。単純に w_master の pfc_Save イ ベン ト を呼び出 し 、 戻 り 値をチ ェ ッ ク す る ほか、 pfc_Save 処理が呼び 出 し た イ ベン ト のカ ス タ マ イ ズ、 お よ び拡張を行 う こ と に よ っ て、 更 新処理を扱 う 完全な コ ン ト ロ ール を作成す る こ と も で き ま す。 以下の こ と が可能です。 • そのほかの自動更新オブ ジ ェ ク ト (n_ds デー タ ス ト ア、 u_tvs ツ リ ービ ュ ー、 u_lvs リ ス ト ビ ュ ーな ど) の変更を保存す る • そのほかの コ ン ト ロ ールの変更を保存す る • ど のオブ ジ ェ ク ト を更新す る か を 制御す る 。 ま た、 オブ ジ ェ ク ト の更新順序を制御す る • そのほかの ウ ィ ン ド ウ でのオブ ジ ェ ク ト の変更を保存す る 自動更新オ ブ ジ ェ ク ト PFC は更新機能を、 「自動更新オブ ジ ェ ク ト 」 と 呼ばれ る オブ ジ ェ ク ト に組み込んでい ま す。 w_master の pfc_Save イ ベン ト は、 呼び出 さ れ る と ウ ィ ン ド ウ にあ る すべての自動更新オブ ジ ェ ク ト を自動的に更新 し ま す。 デー タ ウ ィ ン ド ウ はすべて自動更新 し ま す。 n_ds、 u_lvs、 お よ び u_tvs の自動更新機能は、 明示的に使用可能にす る 必要があ り ま す。 自動更新機能は、 ビ ジ ュ アル、 非ビ ジ ュ ア ルを問わず、 いか な る コ ン ト ロ ールに も 追加で き ま す。 自動更新オブジ ェ ク ト の詳細については、 121 ページの 「論理的作業単 位サービ ス」 を参照 し て く だ さ い。 212 PowerBuilder 第6章 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方 pfc_Save プ ロ セス w_master の pfc_Save プ ロ セ ス の内容は以下の と お り です。 pfc_Save イ ベ ン ト pfc_Save プ ロ セ ス の イ ベン ト の内容を次の表に示 し ま す。 イベン ト pfc_AcceptText 目的 コメント ウ ィ ン ド ウ の自動更新 オ ブ ジ ェ ク ト すべ て に ついて、AcceptText 関数 を実行す る w_master の of_AcceptText 関数で呼び出 さ れ る pfc_UpdatesPending 保留中 の更新 を 所有す る 自動更新 オ ブ ジ ェ ク ト は ど れか を調べ る w_master の of_UpdatesPending 関数で呼び出 さ れ る PFC Library ユーザーズ ガ イ ド 213 PFC ウ ィ ン ド ウの使い方 イ ベン ト pfc_Validation 214 目的 コメント 保留状態の 更新 を 持つ 自動更新オ ブ ジ ェ ク ト すべ て に 対 し て、 有効 性の検証を実行す る of_Validation 関 数 で 呼 び 出 される pfc_UpdatePrep オ プ シ ョ ン の更新準備 ロ ジ ッ ク の 追加先 と な る ユーザ イ ベ ン ト を 空 にす る ウ ィ ン ド ウ 自体が自動更新 オ ブ ジ ェ ク ト と し て機能す る よ う に な っ て い る 場合 は、 こ の イ ベ ン ト を 拡張す る pfc_PreUpdate 追加の有効性検証 を コ ー ド 化す る の に使 う こ と ので き る イ ベン ト を空にす る 1 を返す と 成功 と な る。 pfc_Save プ ロ セ ス を終了 さ せ る には、 1 以外の任意の 値を返す pfc_BeginTran DBMS が要求 し た場合 にデー タ ベー ス ト ラ ン ザ ク シ ョ ン を 開始す る ロ ジ ッ ク を コ ー ド 化す る た め に使 う イ ベ ン ト を空にす る 1 を返す と 成功 と な る。 pfc_Save プ ロ セ ス を終了 さ せ る には、 1 以外の任意の 値を返す pfc_Update 修正 し た自動更新オ ブ ジ ェ ク ト すべ て につ い て、 デー タ ベー ス 更新 を実行す る こ の イ ベ ン ト を 拡張す る と 、 自動更新 し な い コ ン ト ロ ール を更新で き る。1 を返 す と 成功、 -1 を 返す と 失敗 と な る。 -1 を 返 す 場 合 は、 of_SetDBError イ ベン ト を呼 び出 し 、 エ ラ ー メ ッ セー ジ も 作成す る 。 作成 し た メ ッ セージは、 pfc_DBError イ ベ ン ト で表示す る pfc_EndTran デー タ ベー ス ト ラ ン ザ ク シ ョ ンの コ ミ ッ ト ま た は ロ ールバ ッ ク を 行 う ロジ ッ ク をコード化 す る た めに使 う イ ベ ン ト を空にす る 渡 さ れ た 引 数 に 基づ い て、 変更の コ ミ ッ ト ま た は ロ ー ルバ ッ ク を行 う 。 非 PFC デー タ ウ ィ ン ド ウ に つい て は、 整数 ま た は 0 以 上の longint を返す こ と で成 功 を 示す ue_validation ユ ー ザ オブ ジ ェ ク ト を コ ー ド 化 する COMMIT 文、 お よ び ROLLBACK 文の コー ド 化 はそのほかの場所で も で き る が、 こ の イ ベン ト 内で行 う 方法が最適 PowerBuilder 第6章 イベン ト pfc_DBError PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方 目的 コメント 更 新 が 失 敗 し た 場 合、 エ ラ ー サー ビ ス が使用可能 こ の イ ベ ン ト が メ ッ に さ れてい る と 、 こ の イ ベ ン ト は of_Message 関数を呼 セージ を表示す る び出す。 使用可能 と さ れ て い ない と 、 MessageBox 関数 を呼び出す pfc_Update の場合 と 異な り 、 PFC はエ ラ ー メ ッ セージの 表 示 を 遅 ら せ る の で、 pfc_EndTran イ ベ ン ト で 変 更 を ロ ールバ ッ ク さ せ て か ら 、 エ ラ ー メ ッ セージ ダ イ ア ロ グ ボ ッ ク ス を 表示で き る pfc_PostUpdate pfc_Save 戻 り 値 pfc_Save イ ベ ン ト を 拡張する コ ー ド を追加 する 更新 さ れ た 全オ ブ ジ ェ ク ト の更新フ ラ ッ グ を、 次 の よ う に リ セ ッ ト する pfc_Save プ ロ セ ス を 拡張 し て そ の ほ か の コ ン ト ロ ール を 更新 し た場合は、 こ の イ ベ ン ト を 拡張 し て更新 フ ラ ッ グを リ セ ッ ト する pfc_Save が返す値は以下の と お り です。 戻り値 1 意味 0 保留状態の更新な し コメン ト 成功 -1 AcceptText エ ラ ー pfc_Save プ ロ セ ス が停止 し た -2 pfc_UpdatesPending でエ ラ ー pfc_Save プ ロ セ ス が停止 し た -3 有効性検証エ ラ ー pfc_Save プ ロ セ ス が停止 し た -4 pfc_PreUpdate でエ ラ ー pfc_Save プ ロ セ ス が停止 し た -5 pfc_BeginTran でエ ラ ー pfc_Save プ ロ セ ス が停止 し た -6 pfc_Update でエ ラ ー pfc_EndTran お よ び pfc_DBError イ ベ ン ト が完了 し た。 pfc_PostUpdate は実行 さ れなか っ た -7 pfc_EndTran でエ ラ ー pfc_PostUpdate は 実 行 さ れ な か っ た -8 pfc_PostUpdate でエ ラ ー -9 pfc_UpdatePrep でエ ラ ー pfc_Save プ ロ セ ス が停止 し た pfc_Save プ ロ セ ス のカ ス タ マ イ ズ と 拡張がで き ま す。 た と えば、 次の よ う な こ と がで き ま す。 PFC Library ユーザーズ ガ イ ド 215 PFC ウ ィ ン ド ウの使い方 ❖ • ト ラ ン ザ ク シ ョ ン の コ ミ ッ ト お よ び ロ ールバ ッ ク を 行 う コ ー ド を、 pfc_EndTran イ ベン ト に追加す る • 有効性検証を実行す る ue_Validation ユーザ イ ベン ト の作成 と コ ー ド 化を、 非 PFC デー タ ウ ィ ン ド ウ で行 う • pfc_Save プ ロ セ ス を拡張 し て、 そのほかの タ イ プの ウ ィ ン ド ウ コ ン ト ロ ール を含め る pfc_EndTran イ ベ ン ト に コ ー ド を追加する には • ai_update_results 引数を チ ェ ッ ク し 、 かつ更新 さ れ る 可能性のあ る 各 ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト にふ さ わ し い変更の コ ミ ッ ト ま たは ロ ールバ ッ ク を行 う コ ー ド を、 pfc_EndTran イ ベン ト に追加 し ま す。 Integer li_return IF ai_update_results = 1 THEN li_return = SQLCA.of_Commit() ELSE li_return = SQLCA.of_Rollback() END IF IF li_return = 0 THEN Return 1 ELSE Return -1 END IF 自動更新オ ブ ジ ェ ク ト を使用可能にする デフ ォ ル ト では、 更新可能な自動更新オブ ジ ェ ク ト はデー タ ウ ィ ン ド ウ だけにな っ てい ま す。 そのほか (n_ds、 u_lvs、 u_tvs、 u_tab、 お よ び ユーザ定義の カ ス タ ム ビ ジ ュ アル ユーザ オブ ジ ェ ク ト ) は、 すべて 更新不可能 と な っ てい ま すので、 特定 し て使用可能にす る 必要があ り ま す。 ❖ 自動更新オ ブ ジ ェ ク ト を使用可能にする には 1 目的の自動更新オブジ ェ ク ト の of_SetUpdatabe 関数を呼び出 し ま す。 ids_data.of_SetUpdateable(TRUE) lv_1.of_SetUpdateable(TRUE) tv_1.of_SetUpdateable(TRUE) 2 216 (デー タ ス ト アの場合のみ) n_ds ベース のデー タ ス ト ア を、 更新対 象の コ ン ト ロ ールの リ ス ト に追加 し ま す。 PowerBuilder 第6章 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方 PowerObject lpo_objs[ ] Integer li_count // this = ウ ィ ン ド ウ lpo_objs = this.control li_count = UpperBound(lpo_objs) lpo_objs[li_count + 1] = ids_data this.of_SetUpdateObjects(lpo_objs) 1 回限 り の更新を使用 可能にす る PFC では、 コ ン ト ロ ール を グループ指定 し て更新で き ま す。 ❖ 1 回限 り の更新を使用可能にする には 1 更新す る コ ン ト ロ ール を特定 し ま す。 PowerObject lpo_objs[ ] Integer li_return lpo_objs[1] = lv_1 lpo_objs[2] = dw_1 lv_1.of_SetUpdateable(TRUE) 2 pfc_SaveObjects イ ベン ト を呼び出 し 、 1 回限 り の更新を実行 し ま す。 // this = ウ ィ ン ド ウ li_return = this.Event pfc_SaveObjects(lpo_objs) // リ タ ーン コ ー ド が 1 ~ -8 かど う かチ ェ ッ ク する ... PFC での メ ニ ュ ーの使い方 PFC は、 m_master で コ ー ド 化 し た関数、 メ ニ ュ ー項目お よ び イ ベン ト を通 じ て、 メ ニ ュ ーサービ ス を実行 し ま す。 m_master には以下の も の が含ま れてい ま す。 • メ ッ セージ ルー タ を呼び出す関数 • メ ッ セージ ルー タ を使っ て、 所要の機能を実行す る メ ニ ュ ー項目 PFC Library ユーザーズ ガ イ ド 217 PFC での メ ニ ュ ーの使い方 拡張レ ベルの メ ニ ュ ーか ら 継承 さ せる メ ニ ュ ーを使 う 場合は、 必ず m_prefix を持つ メ ニ ュ ーか ら 継承 さ せ ま す (pfc_prefix を 持つ メ ニ ュ ー か ら は 継 承 さ せ な い で く だ さ い) 。 pfc_prefix オ ブ ジ ェ ク ト は、 PFC のバージ ョ ン を ア ッ プ グ レ ー ド す る と 、 変更 さ れ る 可能性があ る ためです。 メ ニ ュ ー継承の 2 つの方法 PFC の メ ニ ュ ーを使用す る か、 自分で メ ニ ュ ーを作成す る かのいずれ か を選べ ま す。 PFC メ ニ ュ ーを使用 する ア プ リ ケーシ ョ ン を作成す る 場合、 その メ ニ ュ ーのベー ス と し て PFC メ ニ ュ ーを利用で き ま す。 通常は、 ア プ リ ケーシ ョ ン のシー ト ウ ィ ン ド ウ の上位オブ ジ ェ ク ト には m_master を使い、 フ レ ーム メ ニ ュ ーに は m_frame を使い ま す。 アプ リ ケーシ ョ ン に特有な メ ニ ュ ーバー項目 と メ ニ ュ ー項目はすべて、 m_master に追加 し ま す。 ま た、 シー ト メ ニ ュ ーは m_master か ら 継承 さ せ、 メ ニ ュ ー項目は適宜使用可能に し た り 、 使用不能に し た り し ま す。 m_frame では、 メ ニ ュ ーバー項目、 お よ び メ ニ ュ ー項目を適宜使用不可に し ま す。 プ ロ グ ラ マ自身で メ ニ ュ ーを作成する 上 記 の 代 わ り に、 プ ロ グ ラ マ 自 身 で カ ス タ マ イ ズ し た メ ニ ュ ー (m_master と は別) を 実行す る こ と も で き ま す。 こ の方法を と る 場合 は、 PFC メ ッ セージルー タ 機能を実装す る ために、 メ ニ ュ ーサービ ス の of_SendMessage メ ニ ュ ー関数を使 う こ と を検討 し て く だ さ い。 PFC メ ニ ュ ーの拡張の し かた PFC メ ニ ュ ーを使 う 場合、 ア プ リ ケーシ ョ ン に特有な処理を可能にす る には、 PFC メ ニ ュ ーま たはそ の子孫オブジ ェ ク ト を修正す る 必要が あ り ま す。 メ ニ ュ ーバー項目や メ ニ ュ ー項目を新 し く 追加す る と 、PFC は継承時シ フ ト プ ロ パテ ィ を使用 し て、 メ ニ ュ ー項目を ど こ に配置す る か を制御 し ま す。 このメ ニ ュー 218 PowerBuilder が新た な項目を追加する場所 メ ニ ュ ーバー [ツール] と [ウ ィ ン ド ウ ] の間 [フ ァ イ ル] メ ニ ュ ー [削除] の上 [編集] メ ニ ュ ー [ リ ン ク の更新] の上 [表示] メ ニ ュ ー [ルー ラ ] の上 [ツール] メ ニ ュー [ツールバー] の上 PowerBuilder 第6章 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方 この メ ニ ュ ー PowerBuilder が新た な項目を追加する場所 [ウ ィ ン ド ウ ] メ ニ ュ ー [元に戻す] の下 [ヘルプ] メ ニ ュ ー [バージ ョ ン情報] の上 継承時シ フ ト 機能の詳細については、 『PowerBuilder ユーザーズ ガ イ ド 』 マニ ュ アル を参照 し て く だ さ い。 プ ログ ラ マ自身で メ ニ ュ ーを作成する PFC メ ニ ュ ーに用意 さ れてい る メ ニ ュ ー項目は、 PFC コ ン ト ロ ールの イ ベン ト のほ と ん ど を カバー し てい ま す。 し か し 、 アプ リ ケーシ ョ ン に よ っ ては、 PFC ウ ィ ン ド ウ で使用す る メ ニ ュ ーを初めか ら 作成 し な ければな ら ない特別な理由があ る こ と も 考え ら れ ま す。 メ ニ ュ ー を作成す る 自分で メ ニ ュ ーを作成す る には、 メ ニ ュ ーペ イ ン タ を使い ま す。 そ の ア プ リ ケーシ ョ ン に必要な項目のみを追加 し 、 必要で あればシ ョ ー ト カ ッ ト キー、 ア ク セ ラ レー タ 、 お よ びツールバー ビ ッ ト マ ッ プ を定義 し ま す。 拡張 レ ベルを作成する オブ ジ ェ ク ト 管理者が複数の開発者やア プ リ ケーシ ョ ン の使用に供す る メ ニ ュ ーを作成す る 場合は、 (PowerScript お よ び PFC コ ー ド を使っ て) 先祖 メ ニ ュ ーお よ び空の拡張レベル メ ニ ュ ーを開発者用に作成す る こ と を検討 し て く だ さ い。 各ウ ィ ン ド ウ と 通信す る メ ニ ュ ー ウ ィ ン ド ウ の通信方法 を 自分で設定 し て使用す る か、 メ ッ セージルー タ を使用す る か を 必要で あ れば選択す る こ と がで き ま す。 メ ッ セージルー タ を使 う 場合、 イ ベン ト を呼び出すにはその メ ッ セー ジサービ ス の of_SendMessage 関数を呼び出すのが最 も 良い方法です。 各 メ ニ ュ ー項目は of_SendMessage 関数を呼び出 し 、 呼び出す イ ベン ト の 名称 を 渡 し ま す。 た と え ば、 [編集|切 り 取 り ] メ ニ ュ ー項目 の Clicked イ ベン ト は、 次の よ う に し て of_SendMessage 関数を 呼び出 し ま す。 n_cst_menu lnv_menu lnv_menu.of_SendMessage(this, "pfc_Cut") 特に注意を要す る メ ニ ュ ー項目 と し て、 以下の 2 つがあ り ま す。 • アプ リ ケーシ ョ ン マネージ ャ の pfc_Exit イ ベン ト を呼び出 し ま す。 [フ ァ イル|終了] gnv_app.Event pfc_Exit() PFC Library ユーザーズ ガ イ ド 219 PFC での メ ニ ュ ーの使い方 • メ ニ ュ ー 項目 の テ キ ス ト を Message.StringParm に コ ピ ー し てか ら 、 of_SendMessage を 呼び 出 し ま す。 MRU メ ニ ュ ー項目 (フ ァ イル メ ニ ュ ー) n_cst_menu lnv_menu Message.StringParm = this.Text lnv_menu.of_SendMessage(this, "pfc_MRUClicked") コ ピ ー と 貼 り 付け メ ニ ュ ー項目の ス ク リ プ ト は、 pfc_m_master か ら コ ピ ー と 貼 り 付け を 行 う と 、 時間の節約がで き ま す。 ウ ィ ン ド ウ メ ニ ュ ーの 各項目を使用可能にす る ウ ィ ン ド ウ シー ト マネージ ャ サービ ス を使用可能にす る と 、 PFC メ ニ ュ ーは状況に応 じ て自動的に ウ ィ ン ド ウ メ ニ ュ ー項目の使用可能、 お よ び使用不可に し ま す。 ウ ィ ン ド ウ シー ト マネージ ャ サービ ス を 使っ てい る 場合に、 こ の機能を作成中の メ ニ ュ ーに導入 し たい と き は、 pfc_m_master ウ ィ ン ド ウ メ ニ ュ ー項目の Selected イ ベン ト か ら コ ー ド を コ ピー し ま す。 標準 メ ニ ュ ー項目の使い方 m_master には、 ユーザ イ ベ ン ト を 対応す る ウ ィ ン ド ウ に呼び出す メ ニ ュ ー項目が含 ま れてい ま す。 メ ニ ュ ー項目は以下の よ う に使い ま す。 • メ ニ ュ ー項目を ウ ィ ン ド ウに適用 し ない場合 こ の項目 を 非表示に し ま す。 • メ ニ ュ ー項目を ウ ィ ン ド ウに適用す る場合 関連付け さ れ た ウ ィ ン ド ウ 、 デー タ ウ ィ ン ド ウ 、 ま たは ビ ジ ュ アル コ ン ト ロ ールに対応す る ユーザ イ ベン ト の PowerScript コ ー ド を見直 し ま す。 m_master メ ニ ュ ー項目はそれぞれ、 一定の イ ベン ト を発生 さ せ ま す。 こ れ ら のユーザ イ ベン ト には空の も の も あ り ま す。 こ の場合は、 アプ リ ケ ー シ ョ ン に 特 有 な 処 理 を 実 行 す る と き に、 そ れ に 対 応 し た PowerScript コ ー ド を追加す る 必要があ り ま す。 PFC ユーザ イ ベン ト の詳細については、 『PFC オブ ジ ェ ク ト リ フ ァ レ ン ス』 マニ ュ アル を参照 し て く だ さ い。 [ フ ァ イル] メ ニ ュ ー メ ニ ュ ー項目 新規作成 220 発生 さ せる イ ベ ン ト pfc_New ユーザ イ ベ ン ト を 含む オ ブ ジ ェ クト w_master PowerBuilder 第6章 メ ニ ュ ー項目 開く 発生 さ せる イ ベ ン ト pfc_Open 閉じ る pfc_Close PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方 ユ ーザ イ ベ ン ト を 含む オ ブ ジ ェ クト u_rte、 w_master w_master 上書 き保存 pfc_Save u_rte、 w_master 名前 を付け て保 存 pfc_SaveAs u_rte、 w_master 印刷 pfc_Print u_dw、 u_rte、 w_master 印刷プ レ ビ ュ ー pfc_PrintPreview u_dw、 u_rte ページ設定 pfc_PageSetup u_dw、 w_master 今す ぐ 印刷 pfc_PrintImmediate u_dw、 u_rte、 w_master 削除 空の メ ニ ュー項目 自分で作成 し た イ ベン ト ま たは関 数を追加 プ ロ パテ ィ 空の メ ニ ュー項目 終了 pfc_exit 自分で作成 し た イ ベン ト ま たは関 数を追加 n_cst_appmanager メ ニ ュ ー項目 元に戻す 発生 さ せる イ ベ ン ト pfc_Undo 切り取り pfc_Cut u_ddlb、 u_ddplb、 u_dw、 u_em、 u_mle、 u_oc、 u_rte、 お よ び u_sle コ ピー pfc_Copy u_ddlb、 u_ddplb、 u_dw、 u_em、 u_mle、 u_oc、 u_rte、 お よ び u_sle 貼 り 付け pfc_Paste 形式 を選択 し て 貼 り 付け pfc_PasteSpecial u_ddlb、 u_ddplb、 u_dw、 u_em、 u_mle、 u_oc、 u_rte、 お よ び u_sle u_oc ク リア pfc_Clear u_ddlb、 u_ddplb、 u_dw、 u_em、 u_mle、 u_oc、 u_rte、 お よ び u_sle すべて を選択 pfc_SelectAll u_ddlb、 u_ddplb、 u_dw、 u_em、 u_mle、 u_rte、 お よ び u_sle 検索 pfc_FindDlg u_dw と u_rte 置換 pfc_ReplaceDlg リ ン ク の更新 pfc_UpdateLinks u_dw と u_rte u_oc オブ ジ ェ ク ト 編集 pfc_EditObject u_oc オブ ジ ェ ク ト 開く pfc_OpenObject u_oc [編集] メ ニ ュ ー PFC Library ユーザーズ ガ イ ド ユ ーザ イ ベ ン ト を 含む オ ブ ジ ェ クト u_dw、 u_em、 u_mle、 u_rte、 お よ び u_sleu_sle 221 PFC での メ ニ ュ ーの使い方 [表示] メ ニ ュ ー メ ニ ュ ー項目 ルー ラ 大き いア イ コ ン 空の メ ニ ュ ー項目 u_lvs に ロ ジ ッ ク を 追加 し て 大 き いア イ コ ン ビ ュ ーに切 り 替え る 小 さ いア イ コ ン 空の メ ニ ュ ー項目 u_lvs に ロ ジ ッ ク を 追加 し て 小 さ い ア イ コ ン ビ ュ ーに切 り 替え る 。 こ の メ ニ ュー項目か ら 呼び出す 一覧 空の メ ニ ュ ー項目 u_lvs に ロ ジ ッ ク を 追加 し て リ ス ト ビ ュ ー に 切 り 替 え る。 こ の メ ニ ュ ー項目か ら 呼び出す 詳細 空の メ ニ ュ ー項目 u_lvs に ロ ジ ッ ク を 追加 し て 詳細 ビ ュ ー に 切 り 替 え る。 こ の メ ニ ュ ー項目か ら 呼び出す ア イ コ ン の整列 |順整列 空の メ ニ ュ ー項目 u_lvs に ロ ジ ッ ク を追加 し 、あ る 共 通のプ ロ パテ ィ に も と づい てア イ コ ン を整列。 こ の メ ニ ュー項目か ら 呼び出す ア イ コ ン の整列 |ア イ コ ン の自 動整列 空の メ ニ ュ ー項目 u_lvs に ロ ジ ッ ク を 追加 し て ア イ コ ン を整列。 こ の メ ニ ュー項目か ら 呼び出す 先頭ページ pfc_FirstPage u_dw と u_rte 次ページ pfc_NextPage u_dw と u_rte 前ページ pfc_PreviousPage u_dw と u_rte 最終ページ pfc_LastPage ソ ー ト の指定 pfc_SortDlg u_dw と u_rte u_dw フ ィ ル タ の指定 pfc_FilterDlg u_dw 拡大 / 縮小 pfc_Zoom u_dw メ ニ ュ ー項目 フ ァ イル 発生 さ せる イ ベ ン ト pfc_InsertFile ユーザ イ ベ ン ト を 含む オ ブ ジ ェ クト u_rte 図 pfc_InsertPicture u_rte オブジ ェ ク ト pfc_InsertObject u_oc メ ニ ュ ー項目 発生 さ せる イ ベ ン ト pfc_Toolbars ユーザ イ ベ ン ト を含む オブジ ェ ク ト w_frame [挿入] メ ニ ュ ー [ツール] メ ニ ュ ー ツールバー 222 ユーザ イ ベ ン ト を 含む オ ブ ジ ェ クト 動作 pfc_Ruler u_dw と u_rte PowerBuilder 第6章 PFC ウ ィ ン ド ウ と メ ニ ュ ーの使い方 [ウ ィ ン ド ウ] メ ニュー 動作 pfc_Cascade ユーザ イ ベ ン ト を含む オブ ジ ェ ク ト w_frame 上下に並べて表 示 pfc_TileHorizontal w_frame 左右に並べて表 示 pfc_TileVertical w_frame 上重ね表示 pfc_Layer w_frame ウ ィ ン ド ウ の最 小化 pfc_MinimizeAll w_frame 元に戻す pfc_UndoArrange w_frame メ ニ ュ ー項目 重ねて表示 [ヘルプ] メ ニ ュ ー ト ピ ッ ク の検索 発生 さ せる イ ベ ン ト pfc_Help ユ ーザ イ ベ ン ト を 含む オ ブ ジ ェ クト w_master バージ ョ ン情報 of_About n_cst_appmanager メ ニ ュ ー項目 ポ ッ プ ア ッ プ メ ニ ュ ーの使い方 ア プ リ ケーシ ョ ン や PFC サー ビ ス で使用す る た めのポ ッ プ ア ッ プ メ ニ ュ ー も PFC に用意 さ れてい ま す。表示 さ れ る ポ ッ プ ア ッ プ メ ニ ュ ー は、 右 ク リ ッ ク す る コ ン ト ロ ールに よ っ て違っ て き ま す。 コ ン ト ロ ー ル の Constructor イ ベ ン ト の 中 で ib_rmbmenu イ ン ス タ ン ス 変 数 を FALSE に設定す る こ と で、ポ ッ プ ア ッ プ メ ニ ュ ー機能を無効にす る こ と がで き ま す。 ま た、 ア プ リ ケーシ ョ ン独自の機能を追加す る よ う に ポ ッ プ ア ッ プ メ ニ ュ ーを拡張す る こ と も 可能です。 標準 コ ン ト ロ ールで提供 さ れ る ポ ッ プ ア ッ プ メ ニ ュ ーの リ ス ト につ いては、 142 ページの 「マ ウ ス の右ボ タ ン サポー ト の使い方」 を参照 し て く だ さ い。 PFC Library ユーザーズ ガ イ ド 223 PFC での メ ニ ュ ーの使い方 224 PowerBuilder 第 7 章 PFC ユーテ ィ リ テ ィ この章につい て こ の章では、 各 PFC ユーテ ィ リ テ ィ の内容 と 、 その使い方につい て説明 し ま す。 内容 デー タ ウ ィ ン ド ウ プ ロ パテ ィ ウ ィ ン ド ウ トピック ページ 225 SQL ス パ イ 229 セキ ュ リ テ ィ 232 ラ イブ ラ リ エ ク ス テンダ 244 マ イ グ レーシ ョ ン ア シ ス タ ン ト 246 デー タ ウ ィ ン ド ウ プ ロパテ ィ ウ ィ ン ド ウ デー タ ウ ィ ン ド ウ プ ロ パテ ィ ウ ィ ン ド ウ では、以下の こ と が可能 です。 • デー タ ウ ィ ン ド ウ サービ ス の使用可能/使用不可の切 り 替え • 選択 し たサービ ス の PFC 構文の表示 • デー タ ウ ィ ン ド ウ プ ロ パテ ィ へのア ク セ ス 、 お よ びデー タ ウ ィ ン ド ウ プ ロ パテ ィ の修正を イ ン タ ラ ク テ ィ ブに行 う デー タ ウ ィ ン ド ウ バ ッ フ ァ 行 と カ ラ ム の状態 統計情報 デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト 上にあ る 全オブ ジ ェ ク ト のプ ロ パテ ィ デー タ ウ ィ ン ド ウ プ ロ パテ ィ サービ ス は、PFC チ ュ ー ト リ アルの レ ッ ス ン 4 「最初のシー ト ウ ィ ン ド ウ の作成」 で起動 さ れ ま す。 デー タ ウ ィ ン ド ウ プ ロパ テ ィ ウィ ンドウ タブ PFC Library ユーザーズ ガ イ ド デー タ ウ ィ ン ド ウ プ ロ パテ ィ ウ ィ ン ド ウ には次の 3 つの タ ブがあ り ま す。 225 デー タ ウ ィ ン ド ウ プ ロパテ ィ ウ ィ ン ド ウ • 226 デー タ ウ ィ ン ド ウ サービ ス の リ ス ト を表示 し ま す。サー ビ ス を 選択 し 、 [使用可能] か [使用不可] を 状況に応 じ て選び、 ク リ ッ ク し ま す。 [プ ロ パテ ィ ] を ク リ ッ ク す る と 、 現在選択 し て い る サービ ス の情報が表示 さ れ ま す。 サー ビ ス PowerBuilder 第7章 PFC ユーテ ィ リ テ ィ マ ウ ス の右ボ タ ン を ク リ ッ ク す る と 、 ポ ッ プ ア ッ プ メ ニ ュ ーが表示 さ れ、 行の操作が可能にな り ま す。 • バッ フ ァ • 必要に応 じ て、 デー タ ウ ィ ン ド ウ の ス テー タ ス フ ラ グ を変更 し ま す。 [ス テー タ ス の変更] チ ェ ッ ク ボ ッ ク ス を使 う と 、 2 ス テ ッ プ を要す る ス テー タ ス 変更の操作が、 1 ス テ ッ プで で き る よ う にな り ま す。 PFC Library ユーザーズ ガ イ ド ス テー タ ス フ ラ グ 227 デー タ ウ ィ ン ド ウ プ ロパテ ィ ウ ィ ン ド ウ サー ビ ス ダ イ ア ロ グ ボッ クス タブ 各サービ ス は、 そのサービ ス のプ ロ パテ ィ を示す タ ブ を一式持っ てい ま す。 こ こ では、 ソ ー ト サービ ス の タ ブ を示 し ま す。 • 全般 選択 し たサービ ス についての情報を表示 し ま す。 • 構文 選択 し たサービ ス で使用す る PFC 構文を表示 し ま す。 用途 ア プ リ ケーシ ョ ンお よ びア プ リ ケーシ ョ ン で使用す る デー タ ウ ィ ン ド ウ サービ ス のデバ ッ グ と テ ス ト を行 う には、デー タ ウ ィ ン ド ウ プ ロ パ テ ィ を使い ま す。 228 PowerBuilder 第7章 ❖ PFC ユーテ ィ リ テ ィ デー タ ウ ィ ン ド ウ プ ロパテ ィ ウ ィ ン ド ウ を表示する には 1 u_dw の of_SetProperty 関数を呼び出 し 、 デー タ ウ ィ ン ド ウ プ ロ パ テ ィ サービ ス を使用可能に し ま す。 this.of_SetProperty(TRUE) 2 デー タ ウ ィ ン ド ウ が表示 さ れた ら 、 右 ク リ ッ ク し てデー タ ウ ィ ン ド ウ プ ロ パテ ィ を選択 し ま す。 デー タ ウ ィ ン ド ウ プ ロ パテ ィ ウ ィ ン ド ウ が表示 さ れ ま す。 SQL スパ イ SQL ス パイ ユーテ ィ リ ティ は、データ ウ ィ ン ド ウ と EXEC IMMEDIATE SQL 文の SQL を 自動的に ト ラ ッ プ し て保存 し ま す。 SQL ス パ イ は、 デー タ ウ ィ ン ド ウ の SQL 文を表示 し 、 必要で あれば修正 し た り 、 ネ イ テ ィ ブ SQL の ロ グ を取 る こ と も で き ます。 SQL を修正する ODBC デー タ ソ ース を使用 し てい る 場合は、接続文字列で、DisableBind を 1 に設定す る 必要があ り ま す。 SQL ス パ イ は、SQL の ロ グ を フ ァ イ ルに記録 し ま す。 こ の ロ グは、ポ ッ プ ア ッ プ ウ ィ ン ド ウ に表示す る こ と も で き ま す。 SQL ス パ イ を使 う には、 こ のユーテ ィ リ テ ィ を 使用可能にす る 関数、 ロ グ フ ァ イ ルを指定す る 関数、 お よ び w_sqlspy ウ ィ ン ド ウ の表示を制 御す る 関数を それぞれ呼び出 し ま す。 ネ イ テ ィ ブ SQL の ロ グ を取 る 関 数を呼び出す こ と も で き ま す。 用途 通常、SQL ス パ イ の初期化はア プ リ ケーシ ョ ン マネージ ャ の pfc_Open イ ベン ト か ら 行い ま す。 ただ し 、 SQL ス パ イ 関数は、 ア プ リ ケーシ ョ ン内部で あれば、 ど こ か ら で も 呼び出す こ と が可能です。 ❖ SQL スパ イ を使用可能にする には 1 n_cst_appmanager の of_SetDebug 関数を呼び出 し て、デバ ッ グ サー ビ ス を使用可能に し ま す。 this.of_SetDebug(TRUE) 2 n_cst_debug の of_SetSQLSpy 関数を呼び出 し 、 SQL ス パ イ を使用 可能に し ま す。 this.inv_debug.of_SetSQLSpy(TRUE) PFC Library ユーザーズ ガ イ ド 229 SQL スパ イ 3 (オプシ ョ ン) n_cst_sqlspy の of_SetLogFile 関数を呼び出 し 、 ロ グ フ ァ イ ルを指定 し ま す。 this.inv_debug.inv_sqlspy.of_SetLogFile & ("c:¥MyPFCApps¥ThisApp¥appdbug.log") ❖ w_sqlspy ポ ッ プ ア ッ プ ウ ィ ン ド ウ を表示す る には • n_cst_sqlspy の of_OpenSQLSpy 関数を呼び出 し ま す。 gnv_app.inv_debug.inv_sqlspy.of_OpenSQLSpy(TRUE) w_sqlspy ポ ッ プ ア ッ プ ウ ィ ン ド ウ には、 ロ グ フ ァ イ ルの最新の入 力項目が表示 さ れ ま す。 w_sqlspyinspect ダ イ ア ロ グ ボ ッ ク ス を 使 う と 、 デー タ ウ ィ ン ド ウ が デー タ ベース に SQL を発行す る 前に、 SQL を表示 し た り 、 必要があれ ば こ れを修正す る こ と がで き ま す。 ❖ w_sqlspyinspect ダ イ ア ロ グボ ッ ク ス を表示する には • n_cst_sqlspy の of_SetBatchMode(FALSE) 関数を呼び出 し ま す。 gnv_app.inv_debug.inv_sqlspy.of_SetBatchMode & (FALSE) ❖ w_sqlspyinspect ダ イ ア ロ グボ ッ ク ス を使 う には 1 230 デー タ ベース を更新 し 、 行の挿入、 削除、 お よ び修正を行い ま す。 PowerBuilder 第7章 PFC ユーテ ィ リ テ ィ w_sqlinspect ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 SQL 文を見直 し 、 必要で あれば値を修正 し ま す。 3 目的に応 じ た コ マ ン ド ボ タ ン (下記参照) を ク リ ッ ク し ま す。 • [ステ ッ プ実行] 現在の行を 更新 し 、 更新す る 次の行の情報 を 表示 し ま す。 現在の行 と 残 り すべての行を更新 し ま す。 SQL ス パ イ イ ン ス ペ ク ト 機能を使用不可に し ま す。 • [再開] • [キ ャ ン セル] 現在の行は更新せずに、 更新す る 次の行を表示 し ま す。 • ❖ [すべて をキ ャ ン セル] 残 り すべての行を更新 し ま せん。 SQL 文のロ グ を手動で取る には • n_cst_sqlspy の of_SQLSyntax 関数を コ ー ド 化 し ま す。 ロ グ を取 る SQL が渡 さ れ ま す。 String ls_sql ls_sql = "SELECT * FROM employee;" gnv_app.inv_debug.inv_sqlspy.of_SQLSyntax & ("Native SQL", String(Now()) + ": " + & String(Today()) + ":" + ls_sql) ... PFC Library ユーザーズ ガ イ ド 231 セキ ュ リ テ ィ セキ ュ リ テ ィ PFC には、 デー タ ベース で作動す る セキ ュ リ テ ィ シ ス テ ム が用意 さ れ てい ま す。 こ のシ ス テ ム は、 ア プ リ ケーシ ョ ン で最小限の コ ーデ ィ ン グ を行 う だけで済みま す。 こ れ を使 う と 、 セキ ュ リ テ ィ デー タ ベー ス に以下の よ う な情報を入れ る こ と がで き ま す。 • ウ ィ ン ド ウ コ ン ト ロ ール • デー タ ウ ィ ン ド ウ カ ラ ム • ユーザ オブ ジ ェ ク ト • メ ニ ュ ー項目 上記の情報が入っ た ら 、 ユーザ と グループのマ ト リ ク ス を作成 し 、 こ れ ら 項目へのア ク セ ス を制御 し ま す。 実行時に、 PFC はセ キ ュ リ テ ィ 項目を使用可能にす る か、 使用不可に す る か、 ま たは隠すか を選択 し ま す。 いずれ を選択す る かは、 セキ ュ リ テ ィ デー タ ベー ス に指定 し ま す。 PFC セ キ ュ リ テ ィ シ ス テ ム には下記の も のが含ま れてい ま す。 • セキ ュ リ テ ィ 管理ユーテ ィ リ テ ィ セ キ ュ リ テ ィ の対象 と す る ユ ー ザ、 グループ、 お よ び項目の定義 と 、 ユーザ ア ク セ ス の定義がで き ま す。 • ユーザが指定 し た オブ ジ ェ ク ト を ス キ ャ ン し て、 セ キ ュ リ テ ィ の対象 と な り う る 、 すべての項目の情報 を収 集 し ま す。 • セキ ュ リ テ ィ デー タ ベース セ キ ュ リ テ ィ の対象にす る ユーザ、 グ ループ、 お よ び項目についての情報、 こ れ ら 項目へのユーザ ア ク セ ス についての情報が含ま れてい ま す。 セキ ュ リ テ ィ スキ ャ ナ ロー カル デー タ ベース と し て配布する PFC にはセ キ ュ リ テ ィ 情報を保持す る ロ ーカル デー タ ベース が用意 さ れてい ま す。ただ し 、セ キ ュ リ テ ィ 機能を実装す る 場合は、サーバ デー タ ベース を利用す る 必要があ る で し ょ う 。 例外に対する セキ ュ リ テ ィ 機能 232 PFC セ キ ュ リ テ ィ 機能には、 例外に対す る セ キ ュ リ テ ィ 機能が用意 さ れて い ま す。 デ フ ォ ル ト では、 こ の セ キ ュ リ テ ィ シ ス テ ム は、 オ ブ ジ ェ ク ト のそ の時点におけ る 設定を使用す る よ う にな っ てい ま す。 つ ま り 、 PFC は、 セキ ュ リ テ ィ デー タ ベー ス で明示的に指定 さ れた箇所 のみの設定を修正 し ま す。 PowerBuilder 第7章 プ ロ セス PFC ユーテ ィ リ テ ィ セ キ ュ リ テ ィ 管理 ユ ー テ ィ リ テ ィ は、 以下 を 目的 と し て 実行 す る PowerBuilder ア プ リ ケーシ ョ ン です。 • ユーザ と グループ を定義す る • セ キ ュ リ テ ィ ス キ ャ ナ を作動 さ せ る • オブジ ェ ク ト と コ ン ト ロ ールのセキ ュ リ テ ィ を定義す る • ユーザ と グループ を、 オブ ジ ェ ク ト と コ ン ト ロ ールに関連付け る 以下の よ う に し て、 セ キ ュ リ テ ィ を実行す る コ ー ド を アプ リ ケーシ ョ ン に追加 し ま す。 当該オ ブ ジ ェ ク ト 追加する コ ー ド ア プ リ ケーシ ョ ン マ ネージ ャ n_cst_appmanager の of_SetSecurity 関数 を呼び出 し 、 セキ ュ リ テ ィ サービ ス n_cst_security を使用可能に する ア プ リ ケーシ ョ ン マ ネージ ャ ま たは フ レー ムウ ィ ンド ウ ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト を設定 し 、 セ キ ュ リ テ ィ デー タ ベー ス に接続 し た後、 n_cst_security の of_InitSecurity 関数を呼び出す of_InitSecurity 関数 を使っ て、 ユーザのデ フ ォ ル ト グループが設定で き る。ユーザのグループ設定がほ かに行われてい な ければ、 当セ キ ュ リ テ ィ シ ス テ ムは こ の グループ を使用す る セキ ュ リ テ ィ を必要 と する ウ ィ ン ド ウ of_SetSecurity 関数 を 目的の ウ ィ ン ド ウ の Open イ ベン ト で呼び出す ア プ リ ケ ー シ ョ ン で セ キ ュ リ テ ィ を 使用可能にす る 方法 の詳細は、 242 ページの 「ア プ リ ケーシ ョ ン でセ キ ュ リ テ ィ を実行す る 方法」 を 参照 し て く だ さ い。 ユーザ と グループ を定義する方法 概要 PFC セキ ュ リ テ ィ を使 う には、 ユーザ と グループ を定義す る 必要があ り ま す。 1 人のユーザは、 0 以上のグループの メ ンバー と な る こ と がで き ま す。 ユーザ設定は、 グループ設定 よ り 常に優先 さ れ ま す。 用途 セ キ ュ リ テ ィ 管理ユーテ ィ リ テ ィ を使用 し て、 ユーザお よ びグループ のほか、 グループに関連付け ら れたユーザ を定義 し ま す。 PFC Library ユーザーズ ガ イ ド 233 セキ ュ リ テ ィ 既存の タ ーゲ ッ ト フ ァ イルの使用 セ キ ュ リ テ ィ 管理ユーテ ィ リ テ ィ に対す る タ ーゲ ッ ト フ ァ イ ルがす で に存在す る 場合、 PowerBuilder ワ ー ク ス ペー ス にそれ を追加 し 、 そ の ラ イ ブ ラ リ リ ス ト がすべての PFC ラ イ ブ ラ リ を含む よ う にす る と 、 次の手順の最初の 4 ス テ ッ プ を省略で き ま す。 ❖ ユーザを定義する には 1 既存のア プ リ ケーシ ョ ン タ ーゲ ッ ト を PowerBuilder ワー ク ス ペー ス に追加 し ま す (PowerBuilder メ ニ ュ ー バーか ら [フ ァ イ ル|新 規作成] を 選択 し て か ら [ タ ーゲ ッ ト ] タ ブ を ク リ ッ ク し 、 さ ら に [既存のア プ リ ケーシ ョ ン] タ ーゲ ッ ト ア イ コ ン を ク リ ッ ク し てか ら [OK] を ク リ ッ ク し ま す)。 2 タ ーゲ ッ ト ウ ィ ザー ド の [ ラ イ ブ ラ リ と アプ リ ケーシ ョ ン の選択] のページで、 PFC¥Security デ ィ レ ク ト リ 内の PFCSECAD.PBL ラ イ ブ ラ リ の pfcsecurity_admin アプ リ ケーシ ョ ン を選択 し てか ら 、 [次 へ] を ク リ ッ ク し ま す。 3 タ ーゲ ッ ト ウ ィ ザー ド の [ ラ イ ブ ラ リ 探索パ ス の設定] ページで、 ラ イ ブ ラ リ リ ス ト にすべての PFC ラ イ ブ ラ リ を追加 し てか ら 、[次 へ] を ク リ ッ ク し ま す。 4 タ ーゲ ッ ト ウ ィ ザー ド の [ タ ーゲ ッ ト フ ァ イ ルの指定] ページで、 [完了] を ク リ ッ ク し ま す。 デフ ォ ル ト の タ ーゲ ッ ト フ ァ イ ル名は、 PBT 拡張子で選択 し たセ キ ュ リ テ ィ ア プ リ ケーシ ョ ン と 同 じ 名前です。 5 PowerBuilder メ ニ ュ ー バーか ら [実行|選択 し て実行] を選択 し 、 security_admin タ ーゲ ッ ト を選択 し てか ら 、 [OK] を ク リ ッ ク し ま す。 セキ ュ リ テ ィ 管理 デー タ ベース と INI フ ァ イル PFC.DB デー タ ベース に接続で き ない場合は、PFCSECAD.INI フ ァ イ ル と 、 使用 し てい る ワ ー ク ス テーシ ョ ン の ODBC 設定を確認 し て く だ さ い。 PFC セ キ ュ リ テ ィ テーブルが PFC.DB か ら 別のデー タ ベー ス に移 動 さ れて いた場合は、 PFCSECAD.INI フ ァ イ ルのデー タ ベー ス 部 を更新 し て、 デー タ ベー ス 接続パ ラ メ ー タ を適切に反映 さ せな け ればな り ま せん。 6 234 セキ ュ リ テ ィ 管理ユーテ ィ リ テ ィ メ ニ ュ ー バーか ら [ フ ァ イ ル| ユーザ / グループ] を選択 し ま す。 PowerBuilder 第7章 PFC ユーテ ィ リ テ ィ ユーザ / グループ管理 ウ ィ ン ド ウ が表示 さ れ ま す。 7 [ユーザ] カ ラ ム を右 ク リ ッ ク し 、 [項目の追加] を選択 し ま す。 ユーザの追加 ダ イ ア ロ グボ ッ ク ス が表示 さ れ ま す。 8 ユーザ名 と 詳細情報を入力す る ユーザ名は、 実行時にア プ リ ケー シ ョ ン がア ク セ ス で き る ID に対応 し なければな り ま せん。 9 [OK] を ク リ ッ ク し ま す。 10 必要であれば、 ユーザ名を追加 し てい き ま す。 11 ❖ メ ニ ュ ーバーか ら 、 [フ ァ イ ル|上書 き 保存] を選択 し ま す。 グループ を定義す る には 1 PFC Library ユーザーズ ガ イ ド [グループ] カ ラ ム を右 ク リ ッ ク し 、 [項目の追加] を選択 し ま す。 235 セキ ュ リ テ ィ グループの追加 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 ❖ 2 グループ名、 詳細情報、 お よ び優先順位を入力 し ま す。 0 は最優先 を表わ し ま す。 ただ し 、 ユーザ指定がグループ指定に優先 し ま す。 3 [OK] を ク リ ッ ク し ます。 4 必要で あれば、 グループ名を追加 し てい き ま す。 5 メ ニ ュ ーバーか ら 、 [フ ァ イ ル|上書 き 保存] を選択 し ま す。 ユーザを グループに関連付け る には • ❖ ユーザ を目的のグループに ド ラ ッ グ ア ン ド ド ロ ッ プ し ま す。 ユーザを グループか ら 削除する には 1 目的のユーザ を右 ク リ ッ ク し 、 [項目の削除] を選択 し ま す。 グループ ユーザの削除 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 ❖ 2 [OK] を ク リ ッ ク し ます。 3 メ ニ ュ ーバーか ら 、 [フ ァ イ ル|上書 き 保存] を選択 し ま す。 定義済みのユーザ、 ま たはグループ を修正す る には 1 目的の項目を右 ク リ ッ ク し 、 [項目の編集] を選択 し ま す。 ユーザの編集 ダ イ ア ロ グ ボ ッ ク ス ま た は グ ループ の編集 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 目的の情報を修正 し ま す。 3 [OK] を ク リ ッ ク し ます。 4 メ ニ ュ ー バーか ら 、 [フ ァ イ ル|上書 き 保存] を選択 し ま す。 セキ ュ リ テ ィ スキ ャ ナの実行の し かた セ キ ュ リ テ ィ ス キ ャ ナは、 ア プ リ ケーシ ョ ン のすべての ウ ィ ン ド ウ 、 デー タ ウ ィ ン ド ウ 、 メ ニ ュ ー、 お よ びユーザ オブ ジ ェ ク ト を検査 し ま す。 以下の情報が PFC デー タ ベー ス に保存 さ れ ま す。 236 PowerBuilder 第7章 PFC ユーテ ィ リ テ ィ • ウィンドウ • ウ ィ ン ド ウ コ ン ト ロ ール • 関連付け さ れたデー タ ウ ィ ン ド ウ オブジ ェ ク ト 内のカ ラ ムの情報 (デー タ ウ ィ ン ド ウ コ ン ト ロ ールの場合) • メ ニ ュ ー項目 • ユーザ オブ ジ ェ ク ト と タ ブ コ ン ト ロ ール。ユーザ オブジ ェ ク ト ま たは タ ブ ページに定義 さ れたすべての コ ン ト ロ ールに関す る 情報 が収集 さ れ ま す。 セ キ ュ リ テ ィ ス キ ャ ナは、 PowerBuilder ま たはセ キ ュ リ テ ィ 管理ユー テ ィ リ テ ィ か ら 実行で き ま す。 用途 ❖ セキ ュ リ テ ィ スキ ャ ナ を PowerBuilder か ら 実行する には 1 ワ ー ク ス ペー ス に、 PFCSECSC.PBL ラ イ ブ ラ リ お よ び pfcsecurity_scanner アプ リ ケーシ ョ ン を使用す る 既存のア プ リ ケー シ ョ ン タ ーゲ ッ ト を追加 し ま す。 利用可能な場合の既存 タ ーゲ ッ ト の使用 pfcsecurity_scanner ア プ リ ケー シ ョ ン に対す る タ ーゲ ッ ト フ ァ イ ルがすでにあ る 場合は、 新規の タ ーゲ ッ ト フ ァ イ ルを作成す る か わ り に ワ ー ク ス ペー ス に こ の既存の フ ァ イ ルを追加 し ま す。 2 [実行|選択 し て実行] を選択 し 、 pfcsecurity_scanner タ ーゲ ッ ト を 選択 し てか ら 、 [OK] を ク リ ッ ク し ま す。 接続上の問題があ る場合 PFC.DB デー タ ベー ス に接続で き ない場合は、 PFCSECAD.INI フ ァ イ ル と 、 使用 し てい る ワー ク ス テーシ ョ ン の ODBC 設定を確認 し て く だ さ い。 ❖ セキ ュ リ テ ィ スキ ャ ナ を セキ ュ リ テ ィ 管理ユーテ ィ リ テ ィ 内か ら 実行する に は 1 セ キ ュ リ テ ィ 管理ユーテ ィ リ テ ィ (PFCSECAD.PBT) を選択 し て 実行 し ま す。 ワ ー ク ス ペース にセ キ ュ リ テ ィ 管理 タ ーゲ ッ ト フ ァ イ ル を追加す る 手順につい ては、 233 ページ の 「ユーザ と グループ を 定義す る 方法」 を参照 し て く だ さ い。 2 PFC Library ユーザーズ ガ イ ド セ キ ュ リ テ ィ 管理ユーテ ィ リ テ ィ メ ニ ュ ー バーか ら [フ ァ イ ル| ア プ リ ケーシ ョ ン を ス キ ャ ン] を選択 し ま す。 237 セキ ュ リ テ ィ ア プ リ ケーシ ョ ン 選択 ダ イ ア ロ グ ボ ッ ク ス にて タ ーゲ ッ ト フ ァ イ ル を指定す る こ と に よ り 、 タ ーゲ ッ ト フ ァ イ ルの ラ イ ブ ラ リ リ ス ト で定義 さ れた アプ リ ケーシ ョ ン の リ ス ト が表示 さ れ ま す。 3 [選択] を ク リ ッ ク し ま す。 ス キ ャ ン済 ダ イ ア ロ グ ボ ッ ク ス の [オブ ジ ェ ク ト 選択] に以下が 表示 さ れ ま す。 4 238 〔Ctrl〕 ま たは 〔Shift〕 を押 し な が ら ク リ ッ ク し て、 ス キ ャ ンす る オブ ジ ェ ク ト を選択状態に し ま す。 PowerBuilder 第7章 PFC ユーテ ィ リ テ ィ オ ブ ジ ェ ク ト の選択 セ キ ュ リ テ ィ デー タ ベー ス のサ イ ズ を最小限にす る には、 セキ ュ リ テ ィ を割 り 当て る 予定の ないオブ ジ ェ ク ト は選択 し ない よ う に し ま す。 5 [ ス キ ャ ン] を ク リ ッ ク し ま す。 スキ ャ ナ実行 フ ァ イル セ キ ュ リ テ ィ 管理 ユーテ ィ リ テ ィ は、 pfcsecsc.exe フ ァ イ ルを使っ て ス キ ャ ン を実行 し ま す。 PowerBuilder は こ の フ ァ イ ル を PFC セ キ ュ リ テ ィ デ ィ レ ク ト リ に イ ン ス ト ール し ま す。 6 ❖ ス キ ャ ン が終わ っ た ら 、 [閉 じ る ] を ク リ ッ ク し ま す。 セキ ュ リ テ ィ を使用可能にする コ ン ト ロ ールを カ ス タ マ イ ズす る には 1 セ キ ュ リ テ ィ 管理ユーテ ィ リ テ ィ を選択 し て実行 し ま す。 2 セ キ ュ リ テ ィ 管理ユーテ ィ リ テ ィ メ ニ ュ ー バーか ら [フ ァ イ ル| テ ンプ レ ー ト ] を選択 し ま す。 テ ンプ レ ー ト 管理ウ ィ ン ド ウ が表示 さ れ ま す。 3 PFC Library ユーザーズ ガ イ ド ス キ ャ ン後、 ア プ リ ケーシ ョ ン を ダ ブル ク リ ッ ク す る と 、 ウ ィ ン ド ウ の リ ス ト が表示 さ れ ま す。 239 セキ ュ リ テ ィ 4 ウ ィ ン ド ウ の リ ス ト か ら 、 1 つを選択す る と 、 コ ン ト ロ ールの リ ス ト が表示 さ れ ま す。 5 説明を修正 し ま す。 ユーザお よ びグ ループ を、 ウ ィ ン ド ウ 、 ウ ィ ン ド ウ コ ン ト ロ ール お よ び メ ニ ュ ー項目に関連付け る 場合、 こ の ウ ィ ン ド ウ の説明内 容を修正す る と 、 わか り やす く な り ま す。 6 セ キ ュ リ テ ィ の対象 と し な い項目 を削除 し ま す。 こ れは、 目的の 項目を右 ク リ ッ ク し 、 [削除] を選択す る こ と で行い ま す。 不必要な項目を削除す る と 、 セ キ ュ リ テ ィ デー タ ベー ス のサ イ ズ が小 さ く な り 、 パ フ ォ ーマ ン ス が向上 し ま す。 7 上記の作業が終わ っ た ら 、 メ ニ ュ ー バーか ら [ フ ァ イ ル|上書 き 保存] を選択 し ま す。 8 ス キ ャ ンす る オブ ジ ェ ク ト すべてについ て、 上記の手順を繰 り 返 し ま す。 ユーザ と グループのセキ ュ リ テ ィ を定義する方法 ス キ ャ ナ を作動 さ せて オブ ジ ェ ク ト と コ ン ト ロ ールを記録 し 、 セキ ュ リ テ ィ の必要がない項目を選択 し て削除 し た あ と 、 ユーザ と グループ を オブ ジ ェ ク ト と コ ン ト ロ ールに関連付け てセ キ ュ リ テ ィ を指定 し ま す。 240 PowerBuilder 第7章 PFC ユーテ ィ リ テ ィ セ キ ュ リ テ ィ を 実行す る オ ブ ジ ェ ク ト そ れぞれの ウ ィ ン ド ウ コ ン ト ロ ール、 デー タ ウ ィ ン ド ウ カ ラ ム、 ユーザ オブ ジ ェ ク ト 、 お よ び メ ニ ュ ー項目へのア ク セ ス を、 各ユーザお よ び各グループについて、 使 用可能にす る か、 ま たは使用不可に し ま す。 用途 ユーザ を、 0 以上の グループに所属 さ せ る こ と がで き ま す。 ユーザ設 定は、 常に グループ設定 よ り 優先 さ れ ま す。 ユーザ設定がな さ れてい ない場合は、 最優先順位の グループ設定が使われ ま す (0 が最優先順 位 と な り ま す)。 ❖ ユーザまたはグループのセキ ュ リ テ ィ を定義する には 1 セ キ ュ リ テ ィ 管理ユーテ ィ リ テ ィ (PFCSECAD.PBT) を選択 し て 実行 し ま す。 ワ ー ク ス ペース にセ キ ュ リ テ ィ 管理 タ ーゲ ッ ト フ ァ イ ル を追加す る ス テ ッ プについては、233 ページの 「ユーザ と グループ を定義す る 方法」 を参照 し て く だ さ い。 2 メ ニ ュ ーバーか ら 、 [フ ァ イ ル|ユーザ / オブジ ェ ク ト ] を選択 し ま す。 ユーザ / オブ ジ ェ ク ト 管理 ウ ィ ン ド ウ が表示 さ れ ま す。 3 [ユーザ] ド ロ ッ プダ ウ ン リ ス ト を ク リ ッ ク し 、 セキ ュ リ テ ィ を設 定す る ユーザ を選択 し ま す。 4 セ キ ュ リ テ ィ を実行す る オ ブ ジ ェ ク ト を含んだ ア プ リ ケーシ ョ ン を ダブル ク リ ッ ク し ま す。 5 [すべて] ラ ジオボ タ ン を選択 し ま す (未選択の場合)。 PFC Library ユーザーズ ガ イ ド 241 セキ ュ リ テ ィ こ れで、 各項目に対 し セキ ュ リ テ ィ を実行す る 準備がで き ま し た。 6 [ ス テー タ ス ] ド ロ ッ プダ ウ ン リ ス ト で、[使用可能]、[使用不可]、 ま たは [非表示] のいずれか を、 セ キ ュ リ テ ィ を実行す る 項目に 指定 し ま す ([設定な し ] を選択す る と 、 オブ ジ ェ ク ト の設定は変 わ り ま せん)。 7 上記の作業が終わ っ た ら 、 メ ニ ュ ーバーか ら [フ ァ イ ル|上書 き 保存] を選択 し ま す。 8 すべてのユーザお よ びグループに対す る 設定が終わ る ま で、 こ の オブ ジ ェ ク ト で上記の作業を繰 り 返 し ま す。 9 そのほかのオブ ジ ェ ク ト で上記の作業を繰 り 返 し ま す。 ア プ リ ケーシ ョ ン でセキ ュ リ テ ィ を実行する方法 セキ ュ リ テ ィ デー タ ベー ス の設定が終わ っ た ら 、 アプ リ ケーシ ョ ン の セキ ュ リ テ ィ サービ ス を使用可能に し ま す。 ア プ リ ケ ーシ ョ ン で セ キ ュ リ テ ィ サー ビ ス を 使用可能にす る た めに は、 次の こ と を行 う 必要があ り ま す。 用途 ❖ • セキ ュ リ テ ィ サービ ス を使用可能にす る • セキ ュ リ テ ィ テーブルが入っ てい る デー タ ベース へのデー タ ベー ス 接続を確立 し 、 こ の情報を セ キ ュ リ テ ィ サービ ス に伝達す る • 適切な ウ ィ ン ド ウ で、 セ キ ュ リ テ ィ サービ ス を使用可能にす る ア プ リ ケーシ ョ ンのセキ ュ リ テ ィ サー ビ ス を使用可能にする には • n_cst_appmanager の of_SetSecurity 関数を呼び出 し ま す。 gnv_app.of_SetSecurity(TRUE) 242 PowerBuilder 第7章 ❖ PFC ユーテ ィ リ テ ィ セキ ュ リ テ ィ テーブルが入 っ てい るデー タ ベースへの接続を確立 し 、 これ を セキ ュ リ テ ィ シ ス テムに伝達する には 1 ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト を作成 し 、 デー タ ベー ス に接続 し ま す (次の例は、 itr_security イ ン ス タ ン ス 変数が、 カ ス タ マ イ ズ し た n_cst_appmanager 子孫に存在す る こ と を前提 と し てい ま す)。 gnv_app.itr_security = CREATE n_tr gnv_app.itr_security.of_Init & (gnv_app.of_GetAppINIFile(), "Security") gnv_app.itr_security.of_Connect() セキ ュ リ テ ィ テーブルの配置 ア プ リ ケーシ ョ ン が保有す る デー タ ベー ス 接続の数を最小限にす る ため、 セ キ ュ リ テ ィ テーブルはアプ リ ケーシ ョ ン デー タ ベー ス に配置 し て く だ さ い。 2 n_cst_security の of_InitSecurity 関数を呼び出 し ま す。 Integer li_return li_return = & gnv_app.inv_security.of_InitSecurity & (gnv_app.itr_security, "EISAPP", & gnv_app.of_GetUserID(), "Default") ❖ ウ ィ ン ド ウのセキ ュ リ テ ィ を使用可能にする には • n_cst_security の of_SetSecurity 関数を、 目的の ウ ィ ン ド ウ の Open イ ベン ト ま たは pfc_PreOpen イ ベン ト で呼び出 し ま す。 gnv_app.inv_security.of_SetSecurity(this) セキ ュ リ テ ィ デー タ ベースの管理の し かた PFC セ キ ュ リ テ ィ シ ス テ ム テーブルは、 PFC.DB ロ ーカル デー タ ベー ス と し て配布 さ れ ま す。 PFC セ キ ュ リ テ ィ テーブルには以下の も のが あ り ま す。 Message Security_apps Security_groups Security_info Security_template Security_users PFC Library ユーザーズ ガ イ ド 243 ラ イ ブ ラ リ エ クステンダ PFC.DB ロ ーカル デー タ ベース を使っ て、 ユーザお よ びグループの定 義、 オブジ ェ ク ト の ス キ ャ ン、 お よ びア ク セ ス 権の定義を行 う こ と が で き ま す。 ただ し 、 ア プ リ ケーシ ョ ン を配布す る 前に こ れ ら のテーブ ル を サーバ デー タ ベー ス に移行す る 必要が あ り ま す。 PFC セ キ ュ リ テ ィ シ ス テ ムお よ びセキ ュ リ テ ィ デー タ ベー ス は、サーバ デー タ ベー ス に簡単に移行で き る よ う に設計 さ れてい ま す。 用途 • PFC セ キ ュ リ テ ィ に関す る デー タ ベース 間のや り と り は、 すべて デー タ ウ ィ ン ド ウ を通 じ て行われ る (埋め込み SQL は存在 し ない) • PFC セ キ ュ リ テ ィ は、 削除項目のカ ス ケー ド を手動で行 う よ う 強 制す る ア プ リ ケ ーシ ョ ン の全ユーザのセ キ ュ リ テ ィ を使用可能にす る には、 PFC セ キ ュ リ テ ィ テーブルをサーバ デー タ ベース に移動 し ま す。 ❖ PFC セキ ュ リ テ ィ テーブル をサーバ デー タ ベースに移行する には 1 デー タ パ イ プ ラ イ ン ペ イ ン タ を使っ て、 テーブル定義 と デー タ を サーバ デー タ ベー ス に移動 し ま す。 テーブル名 と カ ラ ム名はで き る 限 り 変更 し ない よ う に し ま す。 2 デー タ ウ ィ ン ド ウ ペ イ ン タ を使っ て、 PFC セ キ ュ リ テ ィ デー タ ウ ィ ン ド ウ にア ク セ ス し ま す。 その場合、 以下の事柄に注意 し て く だ さ い。 3 • デー タ ウ ィ ン ド ウ の カ ラ ム の順序お よ びカ ラ ム 名は変更 し な いでお く • 関連付け ら れたデー タ ベー ス テーブル ま たはカ ラ ム の名称を 変え る 必要が あ る と き は、 セ レ ク ト ペ イ ン タ を 使 っ て行い、 サーバ デー タ ベース 上の も のに合致 さ せ る デー タ ウ ィ ン ド ウ のカ ラ ム名は変更 し ない よ う にす る セキ ュ リ テ ィ テーブルが入っ てい る サーバ デー タ ベー ス の適切 な ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト を、 ア プ リ ケーシ ョ ン で表示 し ま す。 ラ イブ ラ リ エ ク ステンダ PFC ラ イ ブ ラ リ エ ク ス テ ン ダ を使用 し て、 既存の 2 レベル間に中間の 拡張 レベル を自動的に作成 し て値を入れ、 継承の階層構造を再定義 し ま す。 244 PowerBuilder 第7章 PFC ユーテ ィ リ テ ィ ラ イ ブ ラ リ エ ク ス テ ン ダ に上位お よ び下位 レ ベルの名前 を 指定す る と 、 ラ イ ブ ラ リ エ ク ス テ ン ダは次の操作を実行 し ま す。 • PBL を新規作成す る • 新 し い PBL の中に、 上位レベルのオブジ ェ ク ト か ら 継承 さ れ る オ ブ ジ ェ ク ト を作成す る • 新 し い PBL 内のオブジ ェ ク ト か ら 継承で き る よ う に、 下位レベル にオブ ジ ェ ク ト を再作成す る 通常は、 ラ イ ブ ラ リ エ ク ス テ ン ダ を 使用 し て PFC 先祖 レ ベル と PFC 拡張レ ベルの間に中間レベル (複数可) を追加 し ま す。 全社レ ベルの 拡張子、 お よ び部門 レ ベルの拡張子 を 中間拡張 レ ベルに追加す る と 、 ア プ リ ケ ーシ ョ ン プ ロ グ ラ マ が拡張 レ ベル を フ ルに活用で き る よ う にな り ま す。 用途 ラ イ ブ ラ リ エ ク ス テ ン ダは、 新規作成 ダ イ ア ロ グ ボ ッ ク ス の [ツ ー ル] タ ブにあ り ま す。 使い方についての詳細は、 ラ イ ブ ラ リ エ ク ス テ ン ダのオ ン ラ イ ン ヘル プ を参照 し て く だ さ い。 PFC Library ユーザーズ ガ イ ド 245 マ イ グ レーシ ョ ン ア シ ス タ ン ト マ イ グ レ ーシ ョ ン ア シ ス タ ン ト マ イ グ レーシ ョ ン ア シ ス タ ン ト は、PowerBuilder ラ イ ブ ラ リ (PBL) を ス キ ャ ン し 、 古 く な っ た関数や イ ベン ト の使用法をハ イ ラ イ ト 表示 し ま す。 古 く な っ た関数や イ ベ ン ト で も 、 PowerBuilder の現行バージ ョ ン では使用可能ですが、 今後のバージ ョ ン では使え な く な る 可能性が あ り ま す。 アプ リ ケーシ ョ ン を今後 も 維持す る ので あれば、 現行の構 文 と イ ベン ト を使 う のが最 も よ い方法です。 用途 マ イ グ レ ーシ ョ ン ア シ ス タ ン ト は、 新規作成 ダ イ ア ロ グ ボ ッ ク ス の [ツ ール] タ ブか ら 選択で き ま す。 使い方についての詳細は、 マ イ グ レーシ ョ ン ア シ ス タ ン ト のオ ン ラ イ ン ヘルプ を参照 し て く だ さ い。 246 PowerBuilder 第 8 章 PFC ア プ リ ケーシ ョ ンの配布 この章につい て こ の章では、 PFC アプ リ ケーシ ョ ン の配布上の留意事項について 説明 し ま す。 内容 配布方針の選定 トピック ページ 247 PBR フ ァ イ ルの使い方 249 デー タ ベー ス テーブルの配布方法 249 PFC ダ イ ア ロ グ ボ ッ ク ス ヘルプの配布 250 配布方針の選定 PFC を使用 し て実稼動に耐え う る ア プ リ ケーシ ョ ン を作成す る こ と がで き ま す。 あ ら ゆ る ア プ リ ケーシ ョ ン につい て言え る こ と で すが、 PFC ア プ リ ケーシ ョ ン を配布す る 際に も 、 慎重に計画 し て 実行に移す こ と が不可欠です。 目的 PFC Library ユーザーズ ガ イ ド 選定 し た配布方針に よ っ て、 PFC ア プ リ ケーシ ョ ン を実行す る 際 に必要 と す る すべての も の を ユーザの ワ ー ク ス テーシ ョ ン に提供 し なければな り ま せん。 それ ら は以下の も のです。 • ア プ リ ケーシ ョ ン実行 (EXE) フ ァ イ ル • ア プ リ ケーシ ョ ン PBD ま たは DLL (EXE フ ァ イ ルが単独で な い場合) • PFC PBD、 ま たは DLL (EXE フ ァ イ ルが単独で ない場合) • ア プ リ ケーシ ョ ン で使 う そ のほか の フ ァ イ ルお よ びエ ン ト リ (ActiveX コ ン ト ロ ール、 レ ジ ス ト リ エ ン ト リ 、 INI フ ァ イ ル、 ビ ッ ト マ ッ プ な ど) • PowerBuilder 実行モ ジ ュ ール (ユーザの ワ ー ク ス テーシ ョ ン に イ ン ス ト ール済みの可能性があ る ) • デー タ ベー ス ク ラ イ ア ン ト ソ フ ト ウ ェ ア (ユーザの ワ ー ク ス テーシ ョ ン に イ ン ス ト ール済みの可能性があ る ) 247 配布方針の選定 4 通 り の配布オ プ シ ョ ン PFC ア プ リ ケーシ ョ ン には、 ほかの PowerBuilder アプ リ ケーシ ョ ン と 同 じ く 4 通 り の配布オプシ ョ ン があ り ま す。 こ れ ら のオプシ ョ ン には それぞれ、 利点 と 欠点があ り ま す。 こ れ ら を 考慮に入れ、 配布方針を 決定す る 必要があ り ま す。 配布 オプシ ョ ン Pcode 実行フ ァ イ ル 利点 欠点 フ ァ イ ル が 1 つで 済む 配布が簡単 サ イ ズが大 き い (最小で 3M) 更 新す る と き は、 ア プ リ ケ ー シ ョ ン 全体 を 再生成 し な け れ ばな ら ない コ ン パ イ ル済み 実行フ ァ イ ル フ ァ イ ル が 1 つで 済む 配布が簡単 コー ド がコ ンパイ ル済み サ イ ズが非常に大 き い (最小で 8M) 更 新す る と き は、 ア プ リ ケ ー シ ョ ン 全体 を 再生成 し な け れ ばな ら ない Pcode PBD EXE が小 さ く な る 更 新 す る と き は、 PBD を 1 つ置 き 換 え る だ けで よ い フ ァ イ ルが複数に な る 物理 フ ァ イ ル が 別 に 一式必要 となる コ ン パ イ ル済み の DLL EXE が小 さ く な る コー ド がコ ンパイ ル済み 更 新 す る と き は、 DLL を 1 つ置 き 換 え る だ けで よ い フ ァ イ ルが複数に な る 物理 フ ァ イ ル が 別 に 一式必要 となる ア プ リ ケーシ ョ ン に、 P-code PBD ま たは コ ン パ イ ル済み DLL が使われてい る 場合は、 通常配布す る PFC ア プ リ ケーシ ョ ン ご と に、 物理フ ァ イ ルが一式別に必要 と な り ま す。 その理 由は、 w_master、 n_cst_dwsrv、 n_cst_winsrv、 n_cst_dssrv な ど の高レベ ル拡張オブ ジ ェ ク ト か ら 発生す る 、内部の相互依存性に よ る も のです。 物理 フ ァ イルに関する問題 31 ページの 「ア プ リ ケーシ ョ ン マネージ ャ の設定」 を参照 し て く だ さ い。 共通の物理 フ ァ イル一式を使 う 配布 し た ア プ リ ケーシ ョ ン に、 PFC 先祖レ イ ヤ と PFC 拡張レ イ ヤの ど ち ら かに変更を加え る よ う な も のがない場合は、 各ア プ リ ケーシ ョ ン に PBD フ ァ イ ル ま たは DLL フ ァ イ ルを共有 さ せ る こ と がで き ま す。た だ し 、 管理 と ア ッ プ グ レ ー ド を容易に行え る よ う にす る には、 配布す る ア プ リ ケーシ ョ ン ご と に、 別の PBD 物理フ ァ イ ルお よ び DLL 物理 フ ァ イ ルを付与す る のが最 も よ い方法です。 248 PowerBuilder 第8章 PFC ア プ リ ケーシ ョ ンの配布 PBR フ ァ イルの使い方 PFC と 一緒に、 6 つの PBR が同梱 さ れ ま す。 • 1 つは各ビ ッ ト マ ッ プ を EXE に配置す る と き に使い ま す。 • 5 つは一式で、 PBD、 ま たは DLL を配布す る と き に使い ま す。 こ れ ら の フ ァ イ ルは次の よ う に使い ま す。 配布方法 各 ビ ッ ト マ ップを単 独の EXE に 配置す る PBD ま た は DLL を 配 布 する 使用する PBR フ ァ イル Pfc.pbr PBR で 配布する場合 ビ ッ ト マ ッ プ、 お よ び 動的 に参照 さ れ ( こ の PBR には、 た デ ータウ ィ ン ド 動的デー タ ウ ィ ン ド ウ へ の 参照 ウ オ ブ ジ ェ ク ト が EXE に コ ピ ー さ れ が含 ま れ る ) る Pfcapsrv.pbr 各 PBR で 記述 さ れ た ビ ッ ト マ ッ プ が、 Pfcdwsrv.pbr 関連付け ら れた Pfcmain.pbr PBD、ま たは DLL に Pfcutil.pbr コ ピー さ れ る Pfcwnsrv.pbr PBR な し で 配布す る場合 PBR な し で 配 布 す る こ と はでき ない (動的デー タ ウ ィ ン ド ウ へ の 参 照は 失 敗す る ) ビ ッ ト マップ ファ イ ル は別々 に 配布 す る必要が あ る 。 ま た、 こ れ ら の ビ ッ ト マ ッ プ フ ァ イ ルは、 実行時に ア ク セ ス でき るディ レ ク ト リ に配置 し な けれ ばな ら ない デー タ ベース テーブルの配布方法 PFC には、 PFC.DB デー タ ベース が同梱 さ れ ま す。 テーブル 参照 PFC.DB を直接参照す る PFC サービ ス はあ り ま せんが、PFC.DB には最 初か ら テーブル を参照す る サービ ス が同梱 さ れい ま す。 PFC サー ビ ス 参照す る テーブル エ ラ ー メ ッ セージ サービ ス (n_cst_error) メ ッ セージ セキ ュ リ テ ィ サービ ス (n_cst_security) Security_apps Security_groupings Security_info Security_template Security_users PFC Library ユーザーズ ガ イ ド 249 PFC ダ イ ア ロ グボ ッ ク ス ヘルプの配布 注意事項 ア プ リ ケーシ ョ ン に保持 さ せ る デー タ ベー ス 接続の数を最小限にす る には、 こ れ ら のテーブルを アプ リ ケーシ ョ ン デー タ ベース に移動 さ せ る のが、 一般的に最 も よ い方法です。 いずれの場合 も 、 ア プ リ ケーシ ョ ン が要求す る すべてのデー タ ベー ス テーブルにユーザがア ク セ ス で き る よ う な配布方針で あ る 必要があ り ま す。すなわち、 ク ラ イ ア ン ト ソ フ ト ウ ェ ア の イ ン ス ト ール、 INI フ ァ イ ル と レ ジ ス ト リ エ ン ト リ の更新、 さ ら にデー タ ベー ス 配布に関す る そのほかすべての留意事項 ( 『アプ リ ケーシ ョ ン テ ク ニ ッ ク 』 マニ ュ ア ルのデー タ ベース 配布の概略説明を参照) な ど を考慮す る 必要があ り ま す。 PFC ダ イ ア ロ グボ ッ ク ス ヘルプの配布 PFC には、 PFCDLG.HLP フ ァ イ ルが入 っ て い ま す。 こ の フ ァ イ ルは、 PFC ダ イ ア ロ グ ボ ッ ク ス のオ ン ラ イ ン ヘルプ を含んでい ま す。 アプ リ ケーシ ョ ンが PFC ダ イ ア ロ グ ボ ッ ク ス (w_find、 w_replace、 w_sortdragdrop な ど) を 使用 し てい る 場合は、 PFCDLG.HLP を 配布 し て、 ユーザがダ イ ア ロ グ ボ ッ ク ス ヘルプ を利用で き る よ う に し ま す。 PFC には さ ら に、 PFCDLG.RTF が入っ てい ま す。 こ の フ ァ イ ルは、 PFC ヘルプ ダ イ ア ロ グ ボ ッ ク ス の ソ ース テ キ ス ト を含んでい ま す。アプ リ ケーシ ョ ン が PFC ダ イ ア ロ グ ボ ッ ク ス の使用 を指定 し てい る 場合は、 こ の フ ァ イ ルを修正 し てヘルプ フ ァ イ ルを再 コ ンパ イ ルで き ま す。 250 PowerBuilder 第 4 部 PFC チ ュ ー ト リ アル 第 4 部で は、 PFC の使用 を 開始す る 際に役立つ簡単 な チ ュ ー ト リ アルを提供 し ま す。 第 4 部は、 すべての PFC ユーザを対象 と し てい ます。 PFC ア プ リ ケーシ ョ ンの生成 レ ッ ス ン 1 こ のチ ュ ー ト リ アルでは、テ ン プ レ ー ト アプ リ ケーシ ョ ン ウ ィ ザー ド を使っ て PFC アプ リ ケーシ ョ ン を生成 し ま す。 次に、 PFC ア プ リ ケー シ ョ ン マ ネージ ャ オブ ジ ェ ク ト か ら 継承す る ユーザ オブ ジ ェ ク ト を 作成 し 、 ア プ リ ケーシ ョ ン オ ブ ジ ェ ク ト の イ ベ ン ト を 新規作成 し た ユーザ オブ ジ ェ ク ト に リ ダ イ レ ク ト し ま す。 こ の レ ッ ス ン では、 以下の こ と を行い ま す。 • PFC アプ リ ケーシ ョ ン の作成 • ア プ リ ケーシ ョ ン マネージ ャ の修正 • グ ロ ーバル変数の再定義 と イ ベン ト の検証 • PFC ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト サービ ス の使い方 この レ ッ ス ン に必要な時間 約 20 分 PFC に関する学習内容 • テ ンプ レ ー ト アプ リ ケーシ ョ ン ウ ィ ザー ド を使っ た PFC アプ リ ケーシ ョ ンの作成方法 • n_tr、 つま り PFC のカ ス タ マ イ ズ さ れた ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト の使用方法 • ア プ リ ケーシ ョ ン マネージ ャ の使用方法 PFC Library ユーザーズ ガ イ ド 253 PFC ア プ リ ケーシ ョ ンの作成 PFC ア プ リ ケーシ ョ ンの作成 現在の学習個所 > PFC ア プ リ ケーシ ョ ン の作成 ア プ リ ケーシ ョ ン マネージ ャ の修正 グロ ーバル変数の再定義と イ ベン ト の検証 PFC ト ラ ン ザク シ ョ ン オブ ジ ェ ク ト サービ ス の使い方 PowerBuilder を開始す る と き は、 既存の ワ ー ク ス ペー ス を開 く か、 新 し い ワ ー ク ス ペース を生成 し な ければな り ま せん。 こ の演習では、 新 規の PowerBuilder ワー ク スペー ス でア プ リ ケーシ ョ ン タ ーゲ ッ ト を作 成 し ま す。 こ のアプ リ ケーシ ョ ンは、 PFC ラ イ ブ ラ リ のオブ ジ ェ ク ト を使用 し 、 継承 し ま す。 必要なチ ュ ー ト リ アル セ ッ ト ア ッ プ こ のチ ュ ー ト リ アルでは、PowerBuilder で イ ン ス ト ールす る EAS Demo DB デー タ ベー ス を使用 し ま す。 こ れは Adaptive Server Anywhere デー タ ベース で あ り 、 Adaptive Server Anywhere エ ン ジ ン が必要です。 ロ ーカ ルの マ シ ン ま た はサーバに Adaptive Server Anywhere が ま だ な い場合は、 今す ぐ イ ン ス ト ール し な ければな り ま せん (PowerBuilder の CD か ら イ ン ス ト ー ル で き ま す) 。 デ フ ォ ル ト 以 外 の 位 置 に PowerBuilder を イ ン ス ト ール し てい る 場合には、 デー タ ソ ー ス と し て の EAS Demo DB を定義 し てい る odbc.ini レ ジ ス ト リ 項目が Adaptive Server Anywhere エ ン ジ ン の正 し い位置を指 し 示 し てい る か確認す る 必 要があ り ま す。 1 PowerBuilder の メ ニ ュ ー バーか ら [フ ァ イ ル|新規作成] を選択 し ま す。 新規作成 ダ イ ア ロ グ ボ ッ ク ス の [ワ ー ク ス ペー ス] のページが表 示 さ れてい る こ と を確認 し ま す。 ワ ー ク ス ペース ウ ィ ザー ド を選択 し [OK] を ク リ ッ ク し ま す。 新 し い ワ ー ク ス ペース ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 254 [フ ァ イ ル名] ボ ッ ク ス に リ ッ ク し ま す。 「PFCTutorial」 と 入力 し [保存] を ク PowerBuilder Lesson 1 PFC ア プ リ ケーシ ョ ンの生成 シ ス テ ム ツ リ ーに新規 ワ ー ク ス ペー ス の ア イ コ ン が表示 さ れ ま す。 シ ス テ ム ツ リ ーが表示 さ れない場合は、 ツ ールバーの [シ ス テ ム ツ リ ー] ツールを選択す る か、 [ ウ ィ ン ド ウ ] メ ニ ュ ーの [シ ス テ ム ツ リ ー] メ ニ ュ ー項目を選択 し ま す。 3 PowerBuilder の メ ニ ュ ー バーか ら [フ ァ イ ル|新規作成] を選択 し ま す。 新規作成 ダ イ ア ロ グ ボ ッ ク ス の [ タ ーゲ ッ ト ] タ ブ を ク リ ッ ク し ま す。 テ ン プ レ ー ト ア プ リ ケーシ ョ ン ウ ィ ザー ド を選択 し て [OK] を ク リ ッ ク し ま す。 ウ ィ ザー ド が ウ ィ ザー ド 自体に関す る 概要を表示 し ま す。 4 [次へ] を 2 回 ク リ ッ ク す る と 、 [新規アプ リ ケーシ ョ ン と ラ イ ブ ラ リ の指定] ページが表示 さ れ ま す。 [ア プ リ ケーシ ョ ン名] ボ ッ ク ス に 「my_pfc_app」 と 入力 し ま す。 ウ ィ ザー ド が、 ア プ リ ケーシ ョ ン ラ イ ブ ラ リ お よ び タ ーゲ ッ ト に 対す る デフ ォ ル ト の フ ァ イ ル名を リ セ ッ ト し ま す。 5 [ ラ イ ブ ラ リ ] ボ ッ ク ス の横にあ る [参照] (...) ボ タ ン を ク リ ッ ク し ま す。 PFC チ ュ ー ト リ アルのデ ィ レ ク ト リ に移 し ま す。 [フ ァ イ ル名] ボ ッ ク ス に my_pfc_app.pbl が表示 さ れてい る こ と を 確認 し て、 [保存] を ク リ ッ ク し ま す。 通常のイ ン ス ト ールでは、PFC のチュ ート リ ア ル ディ レ ク ト リ は次 のと おり です。C:¥Program Files¥Sybase¥PowerBuilder 9.0¥PFC¥Tutorial 6 [ タ ーゲ ッ ト ]ボ ッ ク ス の隣の[参照](...)ボ タ ン を ク リ ッ ク し ま す。 PFC チ ュ ー ト リ アルのデ ィ レ ク ト リ に移 し ま す。 my_pfc_app.pbt が [フ ァ イ ル名] ボ ッ ク ス に表示 さ れてい る こ と を 確認 し てか ら 、 [保存 ] を ク リ ッ ク し 、 さ ら に [次へ] を ク リ ッ ク し ま す。 7 [ア プ リ ケーシ ョ ン の種類の指定] ページの [PFC ベー ス のアプ リ ケーシ ョ ン] ラ ジオボ タ ン を選択 し て、 も う 一度 [次へ] を ク リ ッ ク し ま す。 [ア プ リ ケーシ ョ ン ラ イ ブ ラ リ 探索パ ス の追加] ページが表示 さ れ ま す。 リ ス ト ボ ッ ク ス には唯一の ラ イ ブ ラ リ と し て my_pfc_app.pbl フ ァ イ ルが表示 さ れ ま す。 PFC Library ユーザーズ ガ イ ド 255 PFC ア プ リ ケーシ ョ ンの作成 8 [ ラ イ ブ ラ リ 探索パ ス ] リ ス ト ボ ッ ク ス の右横に あ る [参照] (...) ボ タ ン を ク リ ッ ク し ま す。 標準の ラ イ ブ ラ リ の選択 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 9 PFC デ ィ レ ク ト リ (PFC チ ュ ー ト リ アル デ ィ レ ク ト リ の 1 レベル 上) に移 り ま す。 〔Ctrl〕 + ク リ ッ ク 、 ま たは 〔Shift〕 + ク リ ッ ク を使っ て、 メ イ ン レ イ ヤお よ び拡張レ イ ヤか ら こ れ ら の ラ イ ブ ラ リ を選択 し ま す。 PFC メ イ ン レ イ ヤ ラ イ ブ ラ リ pfcapsrv.pbl PFC 拡張 レ イヤ ラ イ ブ ラ リ pfeapsrv.pbl pfcmain.pbl pfemain.pbl pfcwnsrv.pbl pfewnsrv.pbl pfcdwsrv.pbl pfedwsrv.pbl pfcutil.pbl pfeutil.pbl 10 [開 く ] を ク リ ッ ク し ま す。 リ ス ト に PFC ラ イ ブ ラ リ が追加 さ れた状態で [ ラ イ ブ ラ リ 探索パ ス ] リ ス ト ボ ッ ク ス が再表示 さ れ ま す。 11 [次へ] を 2 回 ク リ ッ ク す る と 、 [アプ リ ケーシ ョ ン の作成準備完 了] ページが表示 さ れ ま す。 PowerBuilder が リ ス ト ボ ッ ク ス 内の ウ ィ ザー ド 選択項目を ま と め ま す。 [To-Do リ ス ト の作成] チ ェ ッ ク ボ ッ ク ス が選択状態にな り ま す。 12 [完了] を ク リ ッ ク し ま す。 256 PowerBuilder Lesson 1 PFC ア プ リ ケーシ ョ ンの生成 ア プ リ ケーシ ョ ン マネージ ャ の修正 現在の学習個所 PFC ア プ リ ケーシ ョ ン の作成 > ア プ リ ケーシ ョ ン マ ネージ ャ の修正 グロ ーバル変数の再定義と イ ベン ト の検証 PFC ト ラ ン ザク シ ョ ン オブ ジ ェ ク ト サービ ス の使い方 テ ン プ レー ト アプ リ ケーシ ョ ン ウ ィ ザー ド を使っ て PFC アプ リ ケー シ ョ ン を作成す る と 、 ウ ィ ザー ド はア プ リ ケーシ ョ ン オブジ ェ ク ト 処 理を PFC アプ リ ケーシ ョ ン マネージ ャ に リ ダ イ レ ク ト し ま す。 こ の機 能に よ り 、 拡張機能や再使用を含む、 多 く の利点が得 ら れ ま す。 n_cst_appmanager カ ス タ ム ク ラ ス ユーザ オブジ ェ ク ト ま たはカ ス タ ム 子孫を通 し て ア プ リ ケーシ ョ ン マネージ ャ を実装 し ま す。 こ のチ ュ ー ト リ ア ルでは、 n_cst_appmanager の子孫を作成す る こ と に よ っ て、 ア プ リ ケーシ ョ ン マネージ ャ を実装 し ま す。 そのあ と で、 新 し いアプ リ ケ ーシ ョ ン マ ネージ ャ 内の ア プ リ ケーシ ョ ン 全体に渡 る 変数 を 初期 化 し ま す。 ア プ リ ケーシ ョ ン マ ネージ ャ の詳 し い実装手順につい ては、 第 3 章 「PFC プ ロ グ ラ ミ ン グ の基礎」 を参照 し て く だ さ い。 1 パ ワーバーの [オブ ジ ェ ク ト の継承] ボ タ ン を ク リ ッ ク し ま す。 オブジ ェ ク ト か ら 継承 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 PFC Library ユーザーズ ガ イ ド My_PFC_App が [ タ ーゲ ッ ト ] リ ス ト ボ ッ ク ス に表示 さ れてい る こ と を確認 し ま す。 [ ラ イ ブ ラ リ ] ド ロ ッ プ ダ ウ ン リ ス ト で、 「pfeapsrv.pbl」 を選択 し ま す。 [オ ブ ジ ェ ク ト の種類] ド ロ ッ プ ダ ウ ン リ ス ト で、 「ユーザ オ ブ ジ ェ ク ト 」 を選択 し ま す。 257 ア プ リ ケーシ ョ ン マネージ ャ の修正 ダ イ ア ロ グ ボ ッ ク ス を 拡張 し て、 ラ イ ブ ラ リ 名全体 を表示で き ま す。 3 [オ ブ ジ ェ ク ト ] リ ス ト ボ ッ ク ス か ら 「n_cst_appmanager」 を選択 し て、 [OK] を ク リ ッ ク し ま す。 ユーザ オブ ジ ェ ク ト ペ イ ン タ の ワ ー ク ス ペー ス が表示 さ れ ま す。 ユーザ オ ブ ジ ェ ク ト ペ イ ン タ に対す る デフ ォ ル ト の ビ ュ ー レ イ ア ウ ト ス キーム には、 ス ク リ プ ト ビ ュ ー、 プ ロ パテ ィ ビ ュ ー、 非 ビ ジ ュ アル オブジ ェ ク ト リ ス ト 、 お よ び タ ブ付ペ イ ン が含ま れて い ま す。 ス タ ッ ク 内で、 イ ベン ト リ ス ト 、 関数 リ ス ト 、 ま たは変 数ビ ュ ーを表示で き ま す。 デ フ ォ ル ト のビ ュ ー レ イ ア ウ ト スキームへの リ セ ッ ト レ イ ア ウ ト をデフ ォ ル ト の ス キーム に リ セ ッ ト す る には、 [ビ ュ ー|レ イ ア ウ ト | (デフ ォ ル ト )] を選択 し ま す。 4 ス ク リ プ ト ビ ュ ーの 1 つ目の ド ロ ッ プ ダ ウ ン リ ス ト の中にユー ザ オブ ジ ェ ク ト の名前 と し て 「 タ イ ト ル未設定」 が表示 さ れてい る か確認 し ま す。 ス ク リ プ ト ビ ュ ーの 2 番目の ド ロ ッ プ ダ ウ ン リ ス ト の中に選択中 の イ ベン ト と し て Constructor イ ベン ト が表示 さ れてい る か確認 し ま す。 Constructor イ ベ ン ト 名の前 に あ る 紫色の ア イ コ ン は、 先祖 オ ブ ジ ェ ク ト の中で こ の イ ベン ト 用の ス ク リ プ ト が コ ー ド 化 さ れてい る こ と を 示 し ま す。 PowerBuilder では、 (関数の場合 と は異な り ) イ ベ ン ト は、 先祖オブ ジ ェ ク ト の中で最初に発生 し 、 次に子孫オ ブ ジ ェ ク ト の中で発生 し ま す。 258 PowerBuilder Lesson 1 5 PFC ア プ リ ケーシ ョ ンの生成 ス ク リ プ ト ビ ュ ーの 3 番目の ド ロ ッ プ ダ ウ ン リ ス ト か ら 「pfc_n_cst_appmanager」 を選択 し ま す。 先祖オブ ジ ェ ク ト の コ ー ド を調べ ま す。 ほ と ん ど の先祖 ス ク リ プ ト は コ メ ン ト にな っ てい ま す。 先祖 コ ン パ イ ラ イ ベン ト 用の コ ー ド は、 代入文 ( イ ン ス タ ン ス 変数にア プ リ ケーシ ョ ン オブ ジ ェ ク ト を代入す る ) と 、 環境オブ ジ ェ ク ト に 値を入れ る GetEnvironment シ ス テ ム関数で構成 さ れ ま す。 6 プ ロ パ テ ィ ビ ュ ーの中の各ボ ッ ク ス に以下の情報 を 入力 し ま す ( ド ラ イ ブ と パ ス名には、 PFC デ ィ レ ク ト リ の位置を表す ワー ク ス テーシ ョ ンのパ ス を入れ ま す)。 プ ロパテ ィ is_appinifile 値 drive:¥pathname¥pfc¥tutorial¥pfctutor.ini is_helpfile drive:¥pathname¥pfc¥tutorial¥pfctutor.hlp is_version PFC 9.0 is_logo drive:¥pathname¥pfc¥tutorial¥tutsport.bmp is_copyright PFC tutorial application PFC Library ユーザーズ ガ イ ド 259 ア プ リ ケーシ ョ ン マネージ ャ の修正 最初の 2 つのプ ロ パテ ィ に よ っ て、 ア プ リ ケーシ ョ ン で使用す る INI フ ァ イ ル と オ ン ラ イ ン ヘルプ フ ァ イ ル を設定 し ま す。 ほかの プ ロ パテ ィ に よ っ て、 アプ リ ケーシ ョ ン のバージ ョ ン情報 ダ イ ア ロ グ ボ ッ ク ス と ス プ ラ ッ シ ュ 画面で使用す る 情報を設定 し ま す。 Constructor イ ベ ン ト に コ ー ド を追加 し たい場合 プ ロ パテ ィ ビ ュ ーの中の [プ ロ パテ ィ ] ボ ッ ク ス に入力す る 代わ り に、 PFC 関数を呼び出す以下の ス ク リ プ ト を入力 し ま す。 this.of_SetAppIniFile & ("drive:¥pathname¥pfc¥tutorial¥tutsport.bmp") this.of_SetHelpFile & ("drive:¥pathname¥pfc¥tutorial¥pfctutor.hlp") this.of_SetLogo & ("drive:¥pathname¥pfc¥tutorial¥tutsport.bmp") this.of_SetCopyright("PFC Tutorial application.") this.of_SetVersion("PFC 9.0") 7 メ ニ ュ ーバーか ら [フ ァ イ ル|名前を付け て保存] を選択 し ま す。 ユーザ オブ ジ ェ ク ト の保存 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 260 PowerBuilder Lesson 1 8 PFC ア プ リ ケーシ ョ ンの生成 [ア プ リ ケーシ ョ ン ラ イ ブ ラ リ ] ボ ッ ク ス の中の 「my_pfc_app.pbl」 を選択 し ま す。 [ユーザ オブジ ェ ク ト ] ボ ッ ク ス に 「n_cst_tutappmanager」 を入力 し ま す。 [ コ メ ン ト ] ボ ッ ク ス に次の コ メ ン ト を入力 し ま す。 これは PFC チ ュ ー ト リ アル ア プ リ ケーシ ョ ン マネージ ャ です。 9 [OK] を ク リ ッ ク し ま す。 PowerBuilder は、ユーザ オブジ ェ ク ト を保存 し て、ユーザ オブジ ェ ク ト ペ イ ン タ ワー ク スペー ス の中に再表示 し ま す。ペ イ ン タ タ イ ト ルバー、 オブ ジ ェ ク ト ビ ュ ー、 お よ びス ク リ プ ト ビ ュ ーの 1 つ 目の ド ロ ッ プ ダ ウ ン リ ス ト の中に n_cst_tutappmanager 名が表示 さ れ ま す。 10 メ ニ ュ ーバーか ら [ フ ァ イ ル|閉 じ る ] を選択 し ま す。 PFC Library ユーザーズ ガ イ ド 261 グ ロ ーバル変数の再定義 と イ ベ ン ト の検証 グ ロ ーバル変数の再定義 と イ ベ ン ト の検証 現在の学習個所 PFC ア プ リ ケーシ ョ ン の作成 ア プ リ ケーシ ョ ン マネージ ャ の修正 > グロ ーバル変数の再定義と イ ベン ト の検証 PFC ト ラ ン ザク シ ョ ン オブ ジ ェ ク ト サービ ス の使い方 テ ン プ レ ー ト アプ リ ケーシ ョ ン ウ ィ ザー ド を使っ て PFC アプ リ ケー シ ョ ン を作成す る と 、 ア プ リ ケーシ ョ ン オブジ ェ ク ト のすべての イ ベ ン ト が ア プ リ ケ ー シ ョ ン マ ネ ー ジ ャ (n_cst_appmanager ま た は n_cst_appmanager の子孫) 内の対応す る イ ベン ト を呼び出 し ま す。 た と えば、 Open イ ベン ト は、 ア ラ ー ト ア プ リ ケーシ ョ ン マネージ ャ の pfc_Open イ ベン ト を呼び出 し 、 Close イ ベン ト は pfc_Close を呼び出 し ま す。 PFC は、 gnv_app グ ロ ーバル変数を使用 し て実行時にア プ リ ケーシ ョ ン マネージ ャ にア ク セ ス し ま す。 こ の変数を修正 し て カ ス タ ム アプ リ ケーシ ョ ン マネージ ャ を使用 し 、アプ リ ケーシ ョ ン マネージ ャ に リ ダ イ レ ク ト さ れ る ア プ リ ケーシ ョ ン オ ブ ジ ェ ク ト の イ ベン ト を 検証す る こ と にな り ま す。 1 パ ワ ーバーの [開 く ] ボ タ ン を ク リ ッ ク し ま す。 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「my_pfc_app.pbl」 を選択 し ま す。 [オブジ ェ ク ト の種類] ド ロ ッ プ ダ ウ ン リ ス ト で、「ア プ リ ケーシ ョ ン」 を選択 し ま す。 [オブジ ェ ク ト ] ボ ッ ク ス には、 選択 し た ラ イ ブ ラ リ フ ァ イ ル内の ア プ リ ケーシ ョ ン (my_pfc_app) だけが表示 さ れ ま す。 2 [OK] を ク リ ッ ク し ます。 ア プ リ ケーシ ョ ン ペ イ ン タ の中に my_pfc_app ア プ リ ケ ーシ ョ ン オブ ジ ェ ク ト が表示 さ れ ま す。 3 ス ク リ プ ト ビ ュ ーが、アプ リ ケーシ ョ ン オブジ ェ ク ト my_pfc_app に対 し て Open イ ベン ト を表示 し てい る こ と を確認 し て く だ さ い。 コ ー ド の 1 行目は、 アプ リ ケーシ ョ ン マネージ ャ の イ ン ス タ ン ス を作成 し て グ ロ ーバル変数 gnv_app に代入す る 代入文です。 コ ー ド の次の行に よ っ て、ア プ リ ケーシ ョ ン マネージ ャ の pfc_Open イ ベン ト が呼び出 さ れ ま す。 262 PowerBuilder Lesson 1 4 PFC ア プ リ ケーシ ョ ンの生成 コ ー ド の 1 行目を次の よ う に変更 し ま す。 gnv_app = CREATE n_cst_tutappmanager こ の コ ー ド に よ っ て、 PFC の先祖ではな く 、 アプ リ ケーシ ョ ン マ ネージ ャ の子孫の イ ン ス タ ン ス が作 ら れ ま す。 コ ー ド の 2 行目を 変更 し ま せんが、 グ ロ ーバル変数のデー タ 型宣言を変更 し ま す。 PFC ロ グ イ ン ウ ィ ン ド ウ PFC ロ グ イ ン ウ ィ ン ド ウ は こ のチ ュ ー ト リ アルでは使われてい ま せんが、 実行時に ロ グ イ ン ウ ィ ン ド ウ が必要な場合はア プ リ ケー シ ョ ン オブ ジ ェ ク ト の Open イ ベン ト に次の行を追加で き ま す。 gnv_app.of_LogonDlg ( ) pfc_open イ ベ ン ト の呼出 し の前に こ の行 を 入力すれば、 デー タ ベース と の接続が設定 さ れ る 前に ロ グ イ ン ウ ィ ン ド ウ が必ず開か れ ま す。 ロ グ イ ン ウ ィ ン ド ウ か ら ユーザ定義の情報にデー タ ベー ス 接続を行いたい場合は、 w_logon ウ ィ ン ド ウ の [OK] ボ タ ン の Clicked イ ベン ト に コ ー ド を追加 し てか ら 、 その情報がア プ リ ケー シ ョ ン の INI フ ァ イ ル と し て 選択 し た pfctutor.ini に あ る 情報 に よ っ て上書 き さ れない よ う に し ておいて く だ さ い。 5 変数ビ ュ ーの 2 番目の ド ロ ッ プダ ウ ン リ ス ト で 「Global Variables」 を選択 し ま す。 変数ビ ュ ーが、 グ ロ ーバル変数の宣言を表示 し ま す。 PFC Library ユーザーズ ガ イ ド 263 グ ロ ーバル変数の再定義 と イ ベ ン ト の検証 ス ク リ プ ト ビ ュ ーの使用 1 番目の ド ロ ッ プダ ウ ン リ ス ト で 「Declare」 を選択 し た場合は、変 数ビ ュ ーの代 り に ス ク リ プ ト ビ ュ ーを使用で き ま す。PowerBuilder は、 同 じ ス ク リ プ ト に対 し て 2 つの ビ ュ ーを開か ない よ う に し ま す。 そ のため、 変数ビ ュ ーが グ ロ ーバル変数 ス ク リ プ ト を表示す る 際に 2 つのビ ュ ーを開 く こ と はで き ま せん。 6 n_cst_tutappmanager を使用す る よ う に gnv_app グ ロ ーバル変数宣 言を修正 し ま す。 n_cst_tutappmanager gnv_app n_cst_tutappmanager 型 と し て gnv_app を定義す る こ と で、すべての n_cst_appmanager 機能のほ か、 新 し い イ ン ス タ ン ス 変数、 ユーザ イ ベン ト 、 お よ び n_cst_tutappmanager に定義 さ れてい る 関数すべ て に ア ク セ ス で き ま す。 7 264 my_pfc_app が ス ク リ プ ト ビ ュ ーの 1 番目の ド ロ ッ プ ダ ウ ン リ ス ト に表示 さ れてい る こ と を確認 し て く だ さ い。 ア プ リ ケーシ ョ ン オブジ ェ ク ト の組込み イ ベン ト を確認 し ま す。 イ ベン ト Close 内容 ConnectionBegin ア プ リ ケーシ ョ ン マネージ ャ の pfc_ConnectionBegin イ ベン ト を呼び出す。 3 つの引数が渡 さ れ、 接続権限 が返 さ れ る (分散アプ リ ケーシ ョ ン で使用) ConnectionEnd ア プ リ ケ ー シ ョ ン マ ネ ー ジ ャ の pfc_ConnectionEnd イ ベン ト を呼び出す (分散ア プ リ ケーシ ョ ン で使用) Idle ア プ リ ケーシ ョ ン マネージ ャ の pfc_Idle イ ベン ト を 呼び出す SystemError ア プ リ ケー シ ョ ン マ ネ ー ジ ャ の pfc_SystemError イ ベ ン ト を呼び出す ア プ リ ケーシ ョ ン マネージ ャ の pfc_Close イ ベ ン ト を呼び出 し 、 gnv_app 変数 を破棄す る PowerBuilder Lesson 1 PFC ア プ リ ケーシ ョ ンの生成 PFC ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト サービ スの使い方 現在の学習個所 PFC ア プ リ ケーシ ョ ン の作成 ア プ リ ケーシ ョ ン マ ネージ ャ の修正 グロ ーバル変数の再定義と イ ベン ト の検証 > PFC ト ラ ン ザク シ ョ ン オブ ジ ェ ク ト サービ ス の使い方 こ こ では、 デフ ォ ル ト の ト ラ ンザ ク シ ョ ン オブ ジ ェ ク ト の定義を見て い き ま す。 標準の PowerBuilder ア プ リ ケーシ ョ ン では、 デフ ォ ル ト の ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト と し て SQLCA (SQL 通信領域) が定 義 さ れてい ま す。デフ ォ ル ト の ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト は、PFC ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト サービ ス に よ っ て割 り 当て ら れ ま す。 n_tr ユーザ オブジ ェ ク ト は、 pfemain.pbl に定義 さ れてい る ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト です。 こ のオブジ ェ ク ト は、 pfcmain.pbl ラ イ ブ ラ リ 内の pfc_n_tr オブ ジ ェ ク ト か ら 継承 さ れ ま す。 こ こ では、 PFC ト ラ ンザ ク シ ョ ン登録サービ ス に よ る SQLCA ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト の登録方法につい て説明 し ま す (登録は、 テ ン プ レ ー ト ア プ リ ケーシ ョ ン ウ ィ ザー ド に よ っ て自動設定 さ れてい ま す)。 前の実習か ら 継続 し ていない場合 ア プ リ ケーシ ョ ン ペ イ ン タ を閉 じ てい る 場合には、 ペ イ ン タ を再び開 いて、 自動的に PowerBuilder アプ リ ケーシ ョ ン の一部 と な る グ ロ ーバ ル SQLCA 変数を表示 し て く だ さ い。 1 ア プ リ ケーシ ョ ン オブ ジ ェ ク ト 用のプ ロ パテ ィ ビ ュ ーの [全般] ページの [付加的なプ ロ パテ ィ ] ボ タ ン を ク リ ッ ク し ま す。 ア プ リ ケーシ ョ ン プ ロ パテ ィ シー ト 上に タ ブ ページ書式で追加 のプ ロ パテ ィ が表示 さ れ ま す。 PFC Library ユーザーズ ガ イ ド 265 PFC ト ラ ンザ ク シ ョ ン オ ブ ジ ェ ク ト サービ スの使い方 2 [変数の型] タ ブ を ク リ ッ ク し ま す。 3 SQLCA 変数定義を調べま す。 PowerBuilder は、SQLCA で PFC の n_tr ト ラ ンザ ク シ ョ ン を使用 し ま す。 PFC ラ イ ブ ラ リ を指定 し てい ないア プ リ ケーシ ョ ン を作成 し て い た 場合 に は、 SQLCA グ ロ ーバ ル 変数 に 代入 さ れ た 値 が "transaction" にな っ てい ま す。 4 Message 変数定義を調べ ま す。 こ のグ ロ ーバル変数は、 PFC の n_msg サービ ス を呼び出 し ま す。 5 [ア プ リ ケーシ ョ ン] プ ロ パーテ ィ シー ト を閉 じ ま す。 メ ニ ュ ーバーか ら [フ ァ イ ル|上書 き 保存] を選択 し ま す。 PowerBuilder は、 更新済みの ア プ リ ケーシ ョ ン オブ ジ ェ ク ト を保 存 し ま す。 6 メ ニ ュ ーバーか ら [フ ァ イ ル|閉 じ る ] を選択 し ま す。 ア プ リ ケーシ ョ ン ペ イ ン タ が終了 し ま す。 266 PowerBuilder フ レーム ウ ィ ン ド ウの作成 レ ッ ス ン 2 一般的な MDI アプ リ ケーシ ョ ン では、MDI フ レーム タ イ プの ウ ィ ン ド ウ を定義 し 、 そのほかの ウ ィ ン ド ウ を フ レ ーム内のシー ト と し て開 き ま す。 PFC では、 w_frame と い う フ レ ーム ウ ィ ン ド ウ を提供 し てい ま す。 こ の フ レ ー ム ウ ィ ン ド ウ では、 ス テー タ ス バーやシー ト マ ネー ジ ャ な ど 、 さ ま ざ ま な MDI 機能が使用可能です。 こ の レ ッ ス ン では、 以下の こ と を行い ま す。 • 子孫フ レーム ウ ィ ン ド ウ の作成 • ウ ィ ン ド ウ を開 く 前の処理 と 開いた後の処理の定義 • フ レ ーム ウ ィ ン ド ウ を開 く ための ス ク リ プ ト の追加 • ア プ リ ケーシ ョ ン の実行 この レ ッ ス ン に必要な時間 約 15 分 PFC に関する学習内容 • メ ッ セージ ルー タ を介 し て渡 さ れ る 文字列を使用 し て、 シー ト を 開 く 方法 • ス テー タ ス バー サービ ス を使用可能にす る 方法 • シー ト 管理サービ ス を使用可能にす る 方法 • n_tr の関数を使用 し て、 デー タ ベー ス に接続す る 方法 PFC Library ユーザーズ ガ イ ド 267 子孫 フ レーム ウ ィ ン ド ウの作成 子孫 フ レ ーム ウ ィ ン ド ウの作成 現在の学習個所 > 子孫フ レ ーム ウィ ン ド ウの作成 ウィ ン ド ウを 開く 前の処理と 開いた後の処理の定義 フ レ ーム ウィ ン ド ウを 開く た めのス ク リ プ ト の追加 ア プ リ ケーシ ョ ン の実行 こ こ では、w_frame か ら 継承 し て フ レーム を作成 し ま す。次に pfc_Open ス ク リ プ ト に対 し て新規 フ レ ーム ウ ィ ン ド ウ 用の ス ク リ プ ト を 定義 し ま す。 ユーザが メ ニ ュ ーバーか ら [フ ァ イ ル|開 く ] を選択す る と 、 PFC が こ の イ ベン ト を呼び出 し ま す。 必要に応 じ て アプ リ ケーシ ョ ン のほ か の部分 を 呼び出 し て、 シー ト ウ ィ ン ド ウ を 開 く こ と がで き ま す。 1 パ ワ ーバーの [オブジ ェ ク ト の継承] ボ タ ン を ク リ ッ ク し ま す。 オブ ジ ェ ク ト か ら 継承 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「pfemain.pbl」 フ ァ イ ル を選択 し ま す。 [オ ブ ジ ェ ク ト の種類] ド ロ ッ プ ダ ウ ン リ ス ト で、 「 ウ ィ ン ド ウ 」 を選択 し ま す。 [オ ブ ジ ェ ク ト 名] リ ス ト ボ ッ ク ス か ら 「w_frame」 を 選択 し て、 [OK] を ク リ ッ ク し ます。 ウ ィ ン ド ウ ペ イ ン タ の ワ ー ク ス ペース が表示 さ れ ま す。 3 プ ロ パテ ィ ビ ュ ーの [ タ イ ト ル] ボ ッ ク ス に 「PFC チ ュ ー ト リ ア ル フ レ ーム 」 と 入力 し ま す。 プ ロ パテ ィ ビ ュ ーの [ツ ールバー] タ ブ を ク リ ッ ク し ま す。 [ツ ールバーの表示] チ ェ ッ ク ボ ッ ク ス を ク リ ア し ま す。 フ レ ーム ウ ィ ン ド ウ 内の ツ ールバーではな く 、 シー ト ウ ィ ン ド ウ 内の ツールバーのみを使用 し ま す。 4 イ ベン ト リ ス ト ビ ュ ーの中の pfc_Open を ダブル ク リ ッ ク し ま す。 pfc_Open イ ベン ト 用の ス ク リ プ ト ビ ュ ーが表示 さ れ ま す。 ス ク リ プ ト ビ ュ ーが イ ベ ン ト リ ス ト ビ ュ ー付 き の ス タ ッ ク の一部で あ る 場合には、 イ ベン ト リ ス ト 枠の代わ り に ス ク リ プ ト 枠が表示 さ れ ま す。 268 PowerBuilder Lesson 2 フ レ ーム ウ ィ ン ド ウの作成 イ ベ ン ト リ ス ト ビ ュ ーか ら pfc_Open イ ベ ン ト を見つけ る イ ベン ト リ ス ト ビ ュ ー (お よ び ス ク リ プ ト ビ ュ ー) 内の イ ベン ト は、 2 つのアルフ ァ ベ ッ ト 順にな っ てい ま す。 コ ーデ ィ ン グ済みの イ ベン ト は、 末 コ ーデ ィ ン グ の イ ベン ト よ り 前に一覧表示 さ れ ま す。 pfc_Open は、 ど の先祖ス ク リ プ ト に も 組み込 ま れて い ま せん。 5 ス ク リ プ ト ビ ュ ーに次の 4 行を入力 し ま す。 String w_sheet ls_sheet lw_sheet ls_sheet = Message.StringParm OpenSheet(lw_sheet, ls_sheet, this, 0, Layered!) こ の ス ク リ プ ト は、 渡 さ れた StringParm に指定 さ れてい る シー ト ウ ィ ン ド ウ の イ ン ス タ ン ス を開 き ま す。 こ のチ ュ ー ト リ ア ルの後 半で、 2 つのシー ト ウ ィ ン ド ウ 用の StringParm 値を初期化 し ま す。 PFC Library ユーザーズ ガ イ ド 269 ウ ィ ン ド ウ を開 く 前の処理 と 開いた後の処理の定義 ウ ィ ン ド ウ を開 く 前の処理 と 開いた後の処理の定義 現在の学習個所 子孫フ レ ーム ウィ ン ド ウの作成 > ウィ ン ド ウを 開く 前の処理と 開いた後の処理の定義 フ レ ーム ウィ ン ド ウを 開く た めのス ク リ プ ト の追加 ア プ リ ケーシ ョ ン の実行 こ こ では、 2 つの ス ク リ プ ト を定義 し ま す。 1 つは シー ト マ ネージ ャ を使用可能にす る pfc_PreOpen イ ベン ト 用で、 も う 1 つはデー タ ベー ス に接続す る ための pfc_PostOpen イ ベン ト 用です。 1 ス ク リ プ ト ビ ュ ーの 2 番目の ド ロ ッ プ ダ ウ ン リ ス ト か ら 「pfc_PreOpen」 を選択 し て、 次の行を入力 し ま す。 this.of_SetSheetManager(TRUE) this.of_SetStatusBar(TRUE) this.inv_statusbar.of_SetTimer(TRUE) こ の ス ク リ プ ト に よ っ て シー ト 管理サー ビ ス が使用可能に な り 、 すべてのシー ト を最小化 し た り 、 最後に行 っ た シー ト 配置 コ マ ン ド を取 り 消 し た り す る こ と がで き る よ う にな り ま す。 ま た、 フ レー ム の右下に日付 と 時間の情報を表示す る 、 ス テー タ ス バー サービ ス も 使用可能にな り ま す。 2 ス ク リ プ ト ビ ュ ーの 2 番目の ド ロ ッ プ ダ ウ ン リ ス ト か ら 「pfc_PostOpen」 を選択 し て、 以下の行を入力 し ま す。 Integer String li_return ls_inifile ls_inifile = gnv_app.of_GetAppIniFile() IF SQLCA.of_Init(ls_inifile,"Database") = -1 THEN MessageBox(" デー タ ベース ", & ls_inifile + " か ら の初期化で エ ラ ーが発生 し ま し た ") HALT CLOSE END IF IF SQLCA.of_Connect() = -1 THEN MessageBox(" デー タ ベース ", & ls_inifile + " を使用 し て接続で き ません ") HALT CLOSE ELSE this.SetMicroHelp (" 接続が完了 し ま し た ") END IF 270 PowerBuilder Lesson 2 フ レ ーム ウ ィ ン ド ウの作成 こ の ス ク リ プ ト は、 ト ラ ンザ ク シ ョ ン サービ ス (n_tr) of_Init 関数 を使用 し てデー タ ベー ス 接続パ ラ メ ー タ にア ク セ ス し 、 ト ラ ン ザ ク シ ョ ン サービ ス of_Connect 関数を使用 し て接続 し ま す。 こ れ ら の関数が う ま く 実行 さ れ る と 、 ス ク リ プ ト が ス テ ー タ ス バーに メ ッ セージ を表示 し ま す。 先祖ス ク リ プ ト の拡張 pfc_postopen イ ベン ト の前にあ る 紫色のア イ コ ンは、 こ の イ ベン ト 用の先祖 ウ ィ ン ド ウ に ス ク リ プ ト が記述 さ れてい る こ と を示 し ま す。 デ フ ォ ル ト では、 各 イ ベ ン ト が拡張 さ れ ま す。 ス ク リ プ ト の 実行は、最初に先祖オブジ ェ ク ト か ら 処理 さ れ、次に子孫オブジ ェ ク ト か ら 処理 さ れ ま す。 ス ク リ プ ト ビ ュ ーの 3 番目の ド ロ ッ プ ダ ウ ン リ ス ト か ら pfc_w_frame を選択す る こ と に よ っ て、 こ の先祖 ス ク リ プ ト を参照す る こ と がで き ま す。 3 メ ニ ュ ー バーか ら [フ ァ イ ル|上書 き 保存] を選択 し ま す。 ウ ィ ン ド ウ の保存 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 4 [ア プリ ケ ーショ ン ラ イ ブラ リ ]リ ス ト ボッ ク ス で「my_pfc_app.pbl」 が選択状態にな っ てい る こ と を確認 し ま す。 [ ウ ィ ン ド ウ ] ボ ッ ク ス に 「w_tut_frame」 と 入力 し ま す。 [ コ メ ン ト ] ボ ッ ク ス に次の コ メ ン ト を入力 し ま す。 PFC チ ュ ー ト リ アル ア プ リ ケーシ ョ ンの フ レーム ウ ィ ン ド ウ 5 [OK] を ク リ ッ ク し ま す。 メ ニ ュ ー バーか ら [フ ァ イ ル|閉 じ る ] を選択 し ま す。 PowerBuilder が ウ ィ ン ド ウ を保存 し た後、 ウ ィ ン ド ウ ペ イ ン タ を 閉 じ ま す。 PFC Library ユーザーズ ガ イ ド 271 フ レーム ウ ィ ン ド ウ を開 く ためのス ク リ プ ト の追加 フ レ ーム ウ ィ ン ド ウ を開 く ためのス ク リ プ ト の追加 現在の学習個所 子孫フ レ ーム ウィ ン ド ウの作成 ウィ ン ド ウを 開く 前の処理と 開いた後の処理の定義 > フ レ ーム ウィ ン ド ウを 開く た めのス ク リ プ ト の追加 ア プ リ ケーシ ョ ン の実行 こ こ では、 フ レーム ウ ィ ン ド ウ を開 く ための コ ー ド を ア プ リ ケーシ ョ ン マネージ ャ pfc_Open イ ベン ト に追加 し ま す。 1 パ ワ ーバーの [開 く ] ボ タ ン を ク リ ッ ク し ま す。 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「my_pfc_app.pbl」 を選択 し ま す。 [オ ブ ジ ェ ク ト の種類] ド ロ ッ プ ダ ウ ン リ ス ト で、 「ユーザ オ ブ ジ ェ ク ト 」 を選択 し ま す。 こ の ラ イ ブ ラ リ の n_cst_tutappmanager ユーザ オブ ジ ェ ク ト が唯一 のユーザ オ ブ ジ ェ ク ト です。 こ れは、 [オブ ジ ェ ク ト 名] リ ス ト ボ ッ ク ス で選択 し ま す。 2 [OK] を ク リ ッ ク し ます。 ユーザ オブ ジ ェ ク ト ペ イ ン タ の ワ ー ク ス ペース が表示 さ れ ま す。 3 ス ク リ プ ト ビ ュ ーの最初の ド ロ ッ プダ ウ ン リ ス ト に 「n_cst_tutappmanager」 が表示 さ れてい る こ と を確認 し ま す。 2 番目の ド ロ ッ プダ ウ ン リ ス ト か ら 「pfc_Open」 を選択 し ま す。 pfc_Open ス ク リ プ ト 用に次の行を入力 し ま す。 this.of_splash (1) Open(w_tut_frame) 最初の行に よ っ て、 PFC ス プ ラ ッ シ ュ 画面が開かれ ま す。 2 番目の 行に よ っ て、アプ リ ケーシ ョ ン用の MDI フ レーム ウ ィ ン ド ウ が開 かれ ま す。n_cst_tutappmanager がデー タ ベー ス 接続を設定 し てか ら 1 秒間、 ス プ ラ ッ シ ュ 画面が開いた ま ま にな り ま す。 4 メ ニ ュ ー バーか ら [ フ ァ イ ル|上書 き 保存] を選択 し ま す。 ス ク リ プ ト の変更が保存 さ れ ま す。 5 メ ニ ュ ー バーか ら [ フ ァ イ ル|閉 じ る ] を選択 し ま す。 ユーザ オブ ジ ェ ク ト ペ イ ン タ が閉 じ ま す。 272 PowerBuilder Lesson 2 フ レ ーム ウ ィ ン ド ウの作成 ア プ リ ケーシ ョ ンの実行 現在の学習個所 子孫フ レ ーム ウィ ン ド ウの作成 ウィ ン ド ウを 開く 前の処理と 開いた後の処理の定義 フ レ ーム ウィ ン ド ウを 開く た めのス ク リ プ ト の追加 > ア プ リ ケーシ ョ ン の実行 1 パ ワーバー の [実行] ま たは [選択 し て実行] ボ タ ン を ク リ ッ ク し ま す。 my_pfc_app タ ー ゲ ッ ト が 選 択 さ れ て い る こ と を 確 認 し て か ら [OK] を ク リ ッ ク し ま す。 ス プ ラ ッ シ ュ ウ ィ ン ド ウ が表示 さ れ、 デー タ ベース 接続が設定 さ れ ま す。 ス プ ラ ッ シ ュ ウ ィ ン ド ウ では、 n_cst_tutappmanager ユー ザ オ ブ ジ ェ ク ト の イ ン ス タ ン ス 変数に入力 し た情報が使われ ま す。 デー タ ベース 接続エ ラ ーがあ る 場合、pfctutor.ini フ ァ イ ルを修正 し て EAS Demo DB V9 に対す る 有効なデー タ ソ ー ス を指定す る 必要 があ り ま す。 PFC Library ユーザーズ ガ イ ド 273 ア プ リ ケーシ ョ ンの実行 ス プ ラ ッ シ ュ ウ ィ ン ド ウ の背後に MDI フ レーム ウ ィ ン ド ウ が表 示 さ れ、 ス プ ラ ッ シ ュ 画面を閉 じ る ま で開いた ま ま にな り ま す。 2 メ ニ ュ ー バーか ら [ フ ァ イ ル|終了] を選択 し ま す。 ア プ リ ケーシ ョ ン が終了 し ま す。 274 PowerBuilder メ ニ ュ ーの作成 レ ッ ス ン 3 PFC アプ リ ケーシ ョ ン の メ ニ ュ ーはすべて、m_master(ま たは m_master の子孫オブ ジ ェ ク ト ) か ら 継承 さ れ る のが普通です。 必要で あれば、 項目の追加、 削除、 お よ び非表示化を行 う こ と がで き ま す。 m_master 先祖 メ ニ ュ ーには、 PFC ウ ィ ン ド ウ 、 デー タ ウ ィ ン ド ウ 、 ビ ジ ュ アル コ ン ト ロ ールで使用す る 項目があ り ま す。 メ ニ ュ ーの使い方 こ のチ ュ ー ト リ アルでは、 メ ニ ュ ーの実装方法を 1 通 り し か使用 し ま せんが、 PFC ではほかの方法 も 使用で き ま す。 た と えば、 m_master を 直接修正 し た り 、 新たに メ ニ ュ ーを定義す る こ と も 可能です。 こ の レ ッ ス ン では、 以下の こ と を行い ま す。 • 子孫 メ ニ ュ ーの作成 • 項目の追加 と 修正 • フ レ ーム メ ニ ュ ーの作成 • フ レ ーム ウ ィ ン ド ウ と メ ニ ュ ーの関連付け • w_products シー ト 用 メ ニ ュ ーの作成 • w_product_report シー ト 用 メ ニ ュ ーの作成 この レ ッ ス ン に必要な時間 約 40 分 PFC に関する学習内容 • m_master を カ ス タ マ イ ズ し た子孫の作成方法 • シー ト を開 き 、 Message.StringParm で ウ ィ ン ド ウ 名を渡す方法 PFC Library ユーザーズ ガ イ ド 275 子孫 メ ニ ュ ーの作成 子孫 メ ニ ュ ーの作成 現在の学習個所 > 子孫メ ニュ ーの作成 項目の追加と 修正 フ レ ーム メ ニュ ーの作成 フ レ ーム ウィ ン ド ウと メ ニュ ーの関連付け w_products シ ート 用メ ニ ュ ーの作成 w_product_report シ ート 用メ ニ ュ ーの作成 こ こ では、 チ ュ ー ト リ ア ル用マ ス タ ー メ ニ ュ ーを m_master メ ニ ュ ー か ら 継承 し て作成 し ま す。 1 パ ワ ーバーの [オブジ ェ ク ト の継承] ボ タ ン を ク リ ッ ク し ま す。 オブ ジ ェ ク ト か ら 継承 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「pfewnsrv.pbl」 を選択 し ま す。 [オブ ジ ェ ク ト の種類] ド ロ ッ プ ダ ウ ン リ ス ト で、 「 メ ニ ュ ー」 を 選択 し ま す。 「m_master」 を選択 し て [OK] を ク リ ッ ク し ま す。 メ ニ ュ ー ペ イ ン タ の ワ ー ク ス ペー ス が表示 さ れ ま す。 3 メ ニ ュ ー バーか ら [フ ァ イ ル|名前を付け て保存] を選択 し ま す。 メ ニ ュ ーの保存 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 4 [アプリ ケーショ ン ラ イ ブラ リ ]リ ス ト ボッ ク ス から 「my_pfc_app.pbl」 を選択 し ま す。 [ メ ニ ュ ー] ボ ッ ク ス か ら 「m_tut_master」 と 入力 し ま す。 [ コ メ ン ト ] ボ ッ ク ス に次の コ メ ン ト を入力 し ま す。 チ ュ ー ト リ アル用 フ レ ーム メ ニ ュ ー と シー ト 用 メ ニ ュ ーの先祖 と な る メ ニュー 5 [OK] を ク リ ッ ク し ます。 PowerBuilder が メ ニ ュ ーを保存 し ま す。 276 PowerBuilder Lesson 3 メ ニ ュ ーの作成 項目の追加 と 修正 現在の学習個所 子孫メ ニ ュ ーの作成 > 項目の追加と 修正 フ レ ーム メ ニ ュ ーの作成 フ レ ーム ウィ ン ド ウと メ ニ ュ ーの関連付け w_products シ ート 用メ ニ ュ ーの作成 w_product_report シ ート 用メ ニュ ーの作成 こ こ では、 m_tut_master への メ ニ ュ ー項目の追加、 お よ び項目の修正 を行い ま す。 ス ク リ プ ト 、 プ レ ビ ュ ー、 お よ び メ ニ ュ ー ペ イ ン タ のプ ロ パテ ィ ビ ュ ーを使用 し て、 こ れ ら の変更を行い ます。 m_master を直接修正する PFC チ ュ ー ト リ ア ルでは、 ま ず m_master の子孫オ ブ ジ ェ ク ト を作成 し 、 こ れを修正 し てマ ス タ ー メ ニ ュ ーで使用す る と い う 方法を取っ て い ま す。 し か し 実際には、 こ こ で行 う 修正は、 ほ と ん ど のア プ リ ケー シ ョ ン で m_master に直接加え る こ と が可能です。 し たがっ てその場合 は、 継承の レ イ ヤが不要 と な り ま す。 1 ス ク リ プ ト ビ ュ ーの最初の ド ロ ッ プダ ウ ン リ ス ト か ら 「m_file.m_open」 を選択 し ま す。 こ れは、 [フ ァ イ ル|開 く ] メ ニ ュ ー項目を表す m_master (お よ び m_tut_master) 名です。 2 ス ク リ プ ト ビ ュ ーの 2 番目の ド ロ ッ プ ダ ウ ン リ ス ト か ら 「 Clicked イ ベン ト 」 を選択 し ま す。 イ ベ ン ト 名の前に あ る 紫色の ア イ コ ン は、 先祖 メ ニ ュ ーの中の Clicked イ ベン ト に ス ク リ プ ト が記述 さ れて い る こ と を 示 し ま す。 デ フ ォ ル ト では、 各 イ ベン ト が拡張 さ れ ま す。 ス ク リ プ ト は、 最 初に先祖オブ ジ ェ ク ト か ら 処理 さ れ、 次に子孫オブ ジ ェ ク ト が処 理 さ れ ま す。 3 ス ク リ プ ト ビ ュ ーで次の コ メ ン ト を入力 し ま す。 // [フ ァ イル|開 く ] のス ク リ プ ト の上書 き PFC Library ユーザーズ ガ イ ド 277 項目の追加 と 修正 4 PowerBuilder メ ニ ュ ーバーか ら [編集|先祖 ス ク リ プ ト を拡張] を 選択 し ま す。 [先祖ス ク リ プ ト を拡張] メ ニ ュ ー項目の前にあ る チ ェ ッ ク マー ク を ク リ ア し ま す。 こ れに よ っ て、 [開 く ] メ ニ ュ ー項目の Clicked イ ベ ン ト 用の先祖 ス ク リ プ ト を 処理す る こ と な く 、 ア プ リ ケ ー シ ョ ン の [フ ァ イ ル|開 く ] メ ニ ュ ー コ マ ン ド に よ っ て サ ブ メ ニ ュ ーを開 く こ と がで き ま す。 5 プ レ ビ ュ ー ビ ュ ーの中の [フ ァ イ ル] メ ニ ュ ーを ク リ ッ ク し ま す。 [フ ァ イ ル] メ ニ ュ ーの下の [開 く ] メ ニ ュ ー項目を右 ク リ ッ ク し ま す。 ポ ッ プ ア ッ プ メ ニ ュ ーか ら [サブ メ ニ ュ ー項目の挿入] を選択 し ま す。 [開 く ] メ ニ ュ ー項目の横に空のボ ッ ク ス が表示 さ れ ま す。 ボ ッ ク ス の中で カー ソ ルが明滅表示 さ れ、 [フ ァ イ ル|開 く ] 用のサブ メ ニ ュ ー項目を定義す る よ う に要求 し て き ま す。 6 空のボ ッ ク ス に 「&Product List」 と 入力 し て 〔Enter〕 を押 し ま す。 ア ン パサ ン ド (&) は、 そ れに続 く 文字 を ホ ッ ト キーに変換 し ま す。 〔Enter〕 を押す と 、 プ レ ビ ュ ー ビ ュ ーの中の [Product List] メ ニ ュ ー項目が実行時 と 同 じ 形式で表示 さ れ ま す。 その場合、 P の下 にア ン ダース コ ア が付 き 、 ア ンパサ ン ド は省略 さ れ ま す。 プ ロ パテ ィ ビ ュ ーの [テ キ ス ト ] ボ ッ ク ス では、 ア ンパサン ド は ア ン ダー ス コ ア に置 き 換え ら れ ま せん。 プ ロ パテ ィ ビ ュ ーの [名 前] ボ ッ ク ス には、 m_productlist と い う 通常の メ ニ ュ ー名が表示 さ れ ま す。 278 PowerBuilder Lesson 3 メ ニ ュ ーの作成 プ ロパテ ィ ビ ュ ーを使 っ て項目テキス ト を入力する メ ニ ュ ー項目名を入力す る 前にプ レ ビ ュ ー ビ ュ ーか ら 離れた場所 を ク リ ッ ク す る と 、 そ の名前用のボ ッ ク ス が黒い表示にな り 、 修 正で き な く な り ま す。その場合には、プ ロ パテ ィ ビ ュ ーの中の [項 目名固定] ボ ッ ク ス を ク リ ア し て、 プ ロ パテ ィ ビ ュ ーの [テ キ ス ト ] ボ ッ ク ス の中に 「&Product List」 と 入力 し ま す。 ペ イ ン タ 内の ほかの場所を ク リ ッ ク す る と 、 [名前] ボ ッ ク ス の中の値が自動的 に変更 さ れ ま す。 7 プ ロ パテ ィ ビ ュ ーの中の [マ イ ク ロ ヘルプ] ボ ッ ク ス に [Product list] と 入力 し ま す。 プ レ ビ ュ ー ビ ュ ーの中の [Product List] を ダブル ク リ ッ ク し ま す。 ス ク リ プ ト ビ ュ ーの最初の ド ロ ッ プダ ウ ン リ ス ト に m_file.m_open.m_productlist が表示 さ れ ま す。 [Product List] メ ニ ュ ー項目を作成す る と 、 PowerBuilder がその項目を リ ス ト に追 加 し ま す。 8 ス ク リ プ ト ビ ュ ーの 2 番目の ド ロ ッ プ ダ ウ ン リ ス ト の中で 「Clicked イ ベン ト 」 が選択状態にな っ てい る こ と を確認 し ま す。 以下の行を入力 し ま す。 Message.StringParm = "w_products" of_SendMessage("pfc_Open") PFC Library ユーザーズ ガ イ ド 279 項目の追加 と 修正 上記の行は、 StringParm の値を初期化 し て of_SendMessage 関数を 呼び出す も のです。 of_SendMessage 関数は、 フ レ ーム ウ ィ ン ド ウ の pfc_Open イ ベン ト を呼び出 し ま す。 メ ニ ュ ー サービ ス こ の機能は、 n_cst_menu の of_SendMessage 関数を呼び出 し て実行 す る こ と も で き ま す。 9 プ レ ビ ュ ー ビ ュ ーの中の [Product list] メ ニ ュ ー項目を右 ク リ ッ ク し ま す。 ポ ッ プ ア ッ プ メ ニ ュ ーか ら [ メ ニ ュ ー項目の最後に挿入] を選択 し ま す。 [Product List] メ ニ ュ ー項目の下に空のボ ッ ク ス が表示 さ れ ま す。 10 新規 メ ニ ュ ー項目に 「Product & Sales Report」 と 入力 し て 〔Enter〕 を押 し ま す。 プ ロ パテ ィ ビ ュ ーの中のマ イ ク ロ ヘルプに 「Product Sales Report」 と 入力 し ま す。 プ レ ビ ュ ー ビ ュ ーの中の 「Product Sales Report」 を ダブル ク リ ッ ク し ま す。 ス ク リ プ ト ビ ュ ーの最初の ド ロ ッ プダ ウ ン リ ス ト に m_file.m_open.m_productsalesreport が表示 さ れ ま す。 11 ス ク リ プト ビ ュ ーの 2 番目のド ロ ッ プダ ウ ン リ ス ト の中で Clicked イ ベン ト が選択状態にな っ てい る こ と を確認 し ま す。 以下の行を入力 し ま す。 Message.StringParm = "w_product_report" of_SendMessage("pfc_Open") こ れ ら の 行 は、 StringParm 値 を 初 期 化 し て、 of_SendMessage メ ニ ュ ー関数を呼び出 し ま す。 こ の関数は、 フ レ ーム ウ ィ ン ド ウ 上 の pfc_Open イ ベン ト を呼び出 し ま す。 12 プ レ ビ ュ ー ビ ュ ーの [ フ ァ イ ル|新規作成] の メ ニ ュ ー項目を ク リ ッ ク し ま す。 プ ロ パテ ィ ビ ュ ーに m_new メ ニ ュ ーのプ ロ パテ ィ が表示 さ れ ま す。 280 PowerBuilder Lesson 3 メ ニ ュ ーの作成 13 プ ロ パテ ィ ビ ュ ーの [全般] ページにあ る [表示可能] チ ェ ッ ク ボ ッ ク ス を ク リ ア し ま す。 プ ロ パテ ィ ビ ュ ーの [ツ ールバー] タ ブ を選択 し ま す。 [ツールバー] ページにあ る [表示可能] チ ェ ッ ク ボ ッ ク ス を ク リ ア し ま す。 チ ュ ー ト リ ア ル ア プ リ ケーシ ョ ン の中の [ フ ァ イ ル|新規作成] メ ニ ュ ーの Clicked イ ベン ト に コ ー ド を追加 し ないため、 メ ニ ュ ー 項目 と その ツールバー ピ ク チ ャ を実行時に表示で き る よ う に し ま す。 前の レ ッ ス ン では、 アプ リ ケーシ ョ ン フ レーム ウ ィ ン ド ウ に ツ ー ルバーが表示 さ れない よ う にす る ための選択を行い ま し た。 し か し 、 それで も PFC ウ ィ ン ド ウ サービ ス を使用す る ア プ リ ケーシ ョ ン の フ レ ー ム メ ニ ュ ー ツ ールバー を 表示す る こ と が可能です。 ユ ーザ が こ の方法 を 選択 し た 場合 で も 、 [フ ァ イ ル|新規作成] ツ ールバー ピ ク チ ャ が表示 さ れない こ と を確認 し て く だ さ い。 プ レ ビ ュ ー ビ ュ ーでの淡色表示 実行時に表示で き ない メ ニ ュ ー項目は、 プ レ ビ ュ ー ビ ュ ーでは淡 色で表示 さ れ ま す。 た と え メ ニ ュ ー項目が表示で き ない場合で も 、 そ の メ ニ ュ ー項目用の ツ ールバー ピ ク チ ャ がプ ロ パ テ ィ シー ト に示 さ れてい る 場合には、 [ツ ールバー] ページにあ る [表示可能] ボ タ ン を ク リ ア し な ければな り ま せん。 こ れを ク リ ア し ない と 、実 行時にツ ールバー ピ ク チ ャ が表示 さ れ ま す (ま たはユーザ選択に よ っ て表示可能にな り ま す)。 14 プ レ ビ ュ ー ビ ュ ーの中の [挿入] メ ニ ュ ーバーを ク リ ッ ク し ま す。 プ ロ パテ ィ ビ ュ ーの [全般] ページにあ る [表示可能] チ ェ ッ ク ボ ッ ク ス を ク リ ア し ま す。 表示可能プ ロ パテ ィ が True に設定 さ れていて も 、[挿入] メ ニ ュ ー の中の メ ニ ュ ー項目は実行時には選択可能にな り ま せん。 15 以下の メ ニ ュ ー項目 と ツールバー ピ ク チ ャ を非表示に し ま す。 メ ニュー メ ニ ュ ー項目 フ ァ イル 新規 開く 名前 を 付 け て 保 存 PFC Library ユーザーズ ガ イ ド 項目を非表 示にす る Yes (実行済み) No Yes ツ ールバー ピ ク チ ャ を 非表示にす る Yes (実行済み) Yes デ フ ォ ル ト では 表示不可 281 項目の追加 と 修正 メ ニ ュー メ ニ ュ ー項目 編集 形式 を 選択 し て 貼 り 付け m_dash23 ( [すべて を選択] の下の区分線) 表示 項目を 非表 示にする Yes ツ ールバー ピ ク チ ャ を 非表示にす る 非表示にす る ピ クチャなし Yes 非表示にす る ピ クチャなし 検索 Yes Yes 置換 m_dash24 ([置換] の下の区 分線) Yes Yes Yes 非表示にす る ピ クチャなし リ ン ク の更新 Yes 非表示にす る ピ クチャなし オブ ジ ェ ク ト Yes 非表示にす る ピ クチャなし ルー ラ Yes 非表示にす る ピ クチャなし m_dash31 ([ルー ラ ] の下の 区分線) Yes 非表示にす る ピ クチャなし フ ィ ル タ の指定 Yes 非表示にす る ピ クチャなし 項目 と ツ ールバー を別々に非表示にする い っ たん リ ス ト の下 ま で移動 し て メ ニ ュ ー項目 を非表示に し てか ら 、次に ツールバーを非表示に し た方が作業を素早 く 行え ま す。 こ の方法に よ り 、 プ ロ パ テ ィ ビ ュ ーの [全般] ペー ジ と [ツ ール バー] ページ を行っ た り 来た り し て ク リ ッ ク す る 必要は あ り ま せ ん。 16 ペ イ ン タ バー 1 の [保存 ] を ク リ ッ ク し ま す。 ペ イ ン タ バー 1 の [閉 じ る ] ボ タ ン を ク リ ッ ク し ま す。 PowerBuilder が修正済みの メ ニ ュ ーを保存 し ま す。 282 PowerBuilder Lesson 3 メ ニ ュ ーの作成 フ レ ーム メ ニ ュ ーの作成 現在の学習個所 子孫メ ニ ュ ーの作成 項目の追加と 修正 > フ レ ーム メ ニ ュ ーの作成 フ レ ーム ウィ ン ド ウと メ ニ ュ ーの関連付け w_products シ ート 用メ ニ ュ ーの作成 w_product_report シ ート 用メ ニュ ーの作成 こ こ では、 m_tut_master メ ニ ュ ーか ら 継承 し て フ レ ーム メ ニ ュ ーを作 成 し ま す。 こ の実習の主な目的は、 フ レ ーム だけ を表示す る と き に適 用 し ない メ ニ ュ ー と メ ニ ュ ー項目を非表示にす る こ と です。 1 パ ワーバーの [オブ ジ ェ ク ト の継承] ボ タ ン を ク リ ッ ク し ま す。 オブジ ェ ク ト か ら 継承 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「my_pfc_app.pbl」 が選択 さ れて い る こ と を確認 し ま す。 [オブジ ェ ク ト の種類] ド ロ ッ プ ダ ウ ン リ ス ト で、 「 メ ニ ュ ー」 が 選択 さ れてい る こ と を確認 し ま す。 [オ ブ ジ ェ ク ト 名] リ ス ト ボ ッ ク ス か ら 「m_tut_master」 を 選択 し て [OK] を ク リ ッ ク し ま す。 メ ニ ュ ー ペ イ ン タ の ワ ー ク ス ペース が表示 さ れ ま す。 3 ペ イ ン タ バー 1 の [保存 ] ボ タ ン を ク リ ッ ク し ま す。 メ ニ ュ ーの保存 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 4 [ メ ニ ュ ー] ボ ッ ク ス に 「m_tut_frame」 と 入力 し ま す。 [ コ メ ン ト ] ボ ッ ク ス に次の コ メ ン ト を 入力 し て [OK] を ク リ ッ ク し ま す。 PFC チ ュ ー ト リ アル ア プ リ ケーシ ョ ンの フ レーム メ ニ ュ ー PowerBuilder が メ ニ ュ ーを保存 し て、 メ ニ ュ ー ペ イ ン タ ワー ク ス ペース を表示 し ま す。 5 PFC Library ユーザーズ ガ イ ド プ レ ビ ュ ー ビ ュ ーお よ びプ ロ パテ ィ ビ ュ ーを使用 し て、[編集] メ ニ ュ ー、 [表示] メ ニ ュ ー、 お よ び [ ツ ール] メ ニ ュ ーを非表示に し ま す。 283 フ レーム メ ニ ュ ーの作成 こ れに よ り 、 チ ュ ー ト リ ア ル ア プ リ ケーシ ョ ン 用の フ レ ー ム メ ニ ュ ーには、 [フ ァ イ ル] 、 [ ウ ィ ン ド ウ ] 、 お よ び [ヘルプ] メ ニ ュ ーだけが表示 さ れ る よ う にな り ま す。 6 以下の メ ニ ュ ー項目お よ びツ ールバー ボ タ ン ピ ク チ ャ を非表示 に し ま す。 メ ニ ュー メ ニ ュ ー項目 フ ァ イル 閉じ る 編集 284 項目 を 非表示 にする Yes ツ ー ルバ ー ピ ク チ ャ を非表示にする デ フ ォ ル ト では 表示不可 Yes 上書 き 保存 m_dash12 ( [名前 を付け て 保 存] の 下 の 区 分線) Yes Yes 非表示にす る ピ ク チ ャ はない 印刷 Yes 印刷プ レ ビ ュー Yes 非表示にす る ピ ク チ ャ はない Yes す ぐ に印刷 先祖の中で非 表示に し て あ る Yes 元に戻す 必ず し も 非表 示に し な く て よ い、[編集] メ ニ ュ ー を 非表 示にす る Yes 切り取り 必ず し も 非表 示に し な く て よ い、[編集] メ ニ ュ ー を 非表 示にす る Yes コ ピー 必ず し も 非表 示に し な く て よ い、[編集] メ ニ ュ ー を 非表 示にす る Yes 貼 り 付け 必ず し も 非表 示に し な く て よ い、[編集] メ ニ ュ ー を 非表 示にす る Yes PowerBuilder Lesson 3 メ ニュー メ ニ ュ ー項目 ク リア 7 メ ニ ュ ーの作成 項目 を 非表示 にす る ツ ー ルバ ー ピ ク チ ャ を非表示にす る 必ず し も 非表 示に し な く て よ い、[編集] メ ニ ュ ー を 非表 示にす る デ フ ォ ル ト では 表示不可 メ ニ ュ ー バーか ら [フ ァ イ ル|上書 き 保存] を選択 し ま す。 PowerBuilder が修正済みの メ ニ ュ ーを保存 し ま す。 8 メ ニ ュ ー バーか ら [フ ァ イ ル|閉 じ る ] を選択 し ま す。 メ ニ ュ ー ペ イ ン タ が終了 し ま す。 PFC Library ユーザーズ ガ イ ド 285 フ レーム ウ ィ ン ド ウ と メ ニ ュ ーの関連付け フ レ ーム ウ ィ ン ド ウ と メ ニ ュ ーの関連付け 現在の学習個所 子孫メ ニュ ーの作成 項目の追加と 修正 フ レ ーム メ ニュ ーの作成 > フ レ ーム ウィ ン ド ウと メ ニュ ーの関連付け w_products シ ート 用メ ニ ュ ーの作成 w_product_report シ ート 用メ ニ ュ ーの作成 こ こ では、 さ き ほ ど 作成 し た フ レ ーム メ ニ ュ ー m_tut_frame に フ レー ム ウ ィ ン ド ウ を関連付け ま す。 1 パ ワ ーバーの [開 く ] ボ タ ン を ク リ ッ ク し ま す。 開 く ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「my_pfc_app.pbl」 を選択 し ま す。 [オ ブ ジ ェ ク ト の種類] ド ロ ッ プ ダ ウ ン リ ス ト で、 「 ウ ィ ン ド ウ 」 を選択 し ま す。 [オブジ ェ ク ト 名] リ ス ト ボ ッ ク ス か ら 「w_tut_frame」 を選択 し て [OK] を ク リ ッ ク し ます。 ウ ィ ン ド ウ ペ イ ン タ の ワ ー ク ス ペース が表示 さ れ ま す。 3 プ ロ パテ ィ ビ ュ ーの [ メ ニ ュ ー名] ボ ッ ク ス の横にあ る [参照] (...) ボ タ ン を ク リ ッ ク し ま す。 オブ ジ ェ ク ト 選択 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 4 m_tut_frame を選択 し [OK] を ク リ ッ ク し ま す。 選択 し た メ ニ ュ ー と と も に [ ウ ィ ン ド ウ ] プ ロ パテ ィ シー ト が表 示 さ れ ま す。 5 メ ニ ュ ー バーか ら [ フ ァ イ ル|上書 き 保存] を選択 し ま す。 PowerBuilder が修正済みの ウ ィ ン ド ウ を保存 し ま す。 6 メ ニ ュ ー バーか ら [ フ ァ イ ル|閉 じ る ] を選択 し ま す。 ウ ィ ン ド ウ ペ イ ン タ が終了 し ま す。 286 PowerBuilder Lesson 3 メ ニ ュ ーの作成 w_products シー ト 用 メ ニ ュ ーの作成 現在の学習個所 子孫メ ニ ュ ーの作成 項目の追加と 修正 フ レ ーム メ ニ ュ ーの作成 フ レ ーム ウィ ン ド ウと メ ニ ュ ーの関連付け > w_products シ ート 用メ ニ ュ ーの作成 w_product_report シ ート 用メ ニュ ーの作成 こ こ では、m_tut_master、つ ま り PFC チ ュ ー ト リ アル マ ス タ ー メ ニ ュ ー か ら 継承 し て シー ト メ ニ ュ ーを作成 し ま す。 1 パ ワーバーの [オブ ジ ェ ク ト の継承] ボ タ ン を ク リ ッ ク し ま す。 オブジ ェ ク ト か ら 継承 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「my_pfc_app.pbl」 を選択 し ま す。 [オブジ ェ ク ト の種類] ド ロ ッ プダ ウ ン リ ス ト で、 「 メ ニ ュ ー」 を 選択 し ま す。 「m_tut_master」 を選択 し て [OK] を ク リ ッ ク し ま す。 メ ニ ュ ー ペ イ ン タ の ワ ー ク ス ペー ス が表示 さ れ ま す。 シー ト メ ニ ュ ーに対 し ては、 [編集] 、 [表示] 、 お よ び [ツ ール] メ ニ ュ ー を表示可能な ま ま に し ま す。 3 以下の メ ニ ュ ー項目 と ツールバーを非表示に し ま す。 メ ニュー メ ニ ュ ー項目 フ ァ イル 印刷 表示 PFC Library ユーザーズ ガ イ ド 印刷 プ レ ビ ュー m_dash35 ([最終ページ] の 下の区分線) m_dash36 ( [フ ィ ル タ の指 定] の 下 の 区 分 線) 項 目 を 非 表示 にする Yes Yes ツ ールバー ピ ク チ ャ を非表示にする 非表示にす る ピ クチャなし Yes Yes 非表示にす る ピ クチャなし Yes 非表示にす る ピ クチャなし 287 w_products シ ー ト 用 メ ニ ュ ーの作成 メ ニ ュー メ ニ ュ ー項目 拡大 / 縮小 4 項目 を 非 表 示 にする Yes ツ ールバー ピ ク チ ャ を非表示にする 非表示にす る ピ クチャなし メ ニ ュ ー バーか ら [フ ァ イ ル|名前を付け て保存] を選択 し ま す。 メ ニ ュ ーの保存 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 5 [ メ ニ ュ ー] ボ ッ ク ス に 「m_products」 と 入力 し ま す。 [ コ メ ン ト ] ボ ッ ク ス に次の行を入力 し て、 [OK] を ク リ ッ ク し ま す。 w_products シ ー ト 用 メ ニ ュ ー PowerBuilder が m_tut_master の子孫 と し て新規 メ ニ ュ ーを 保存 し ま す。 288 PowerBuilder Lesson 3 メ ニ ュ ーの作成 w_product_report シー ト 用 メ ニ ュ ーの作成 現在の学習個所 子孫メ ニ ュ ーの作成 項目の追加と 修正 フ レ ーム メ ニ ュ ーの作成 フ レ ーム ウィ ン ド ウと メ ニ ュ ーの関連付け w_products シ ート 用メ ニ ュ ーの作成 > w_product_report シ ート 用メ ニュ ーの作成 こ こ では、 m_tut_master (PFC チ ュ ー ト リ アル マ ス タ ー メ ニ ュ ー) か ら 継承 し て、 w_product_report シー ト 用のシー ト メ ニ ュ ーを 作成 し ま す。 1 パ ワーバーの [オブ ジ ェ ク ト の継承] ボ タ ン を ク リ ッ ク し ま す。 オブジ ェ ク ト か ら 継承 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「my_pfc_app.pbl」 を選択 し ま す。 [オブジ ェ ク ト の種類] ド ロ ッ プダ ウ ン リ ス ト で、 「 メ ニ ュ ー」 を 選択 し ま す。 「m_tut_master」 を選択 し て [OK] を ク リ ッ ク し ま す。 メ ニ ュ ー ペ イ ン タ の ワ ー ク ス ペース が表示 さ れ ま す。 3 [編集] メ ニ ュ ーバー項目を非表示に し ま す。 こ れに よ り 、 実行時にユーザが製品 レ ポー ト を修正 し た り 、 デー タ ベー ス を更新す る こ と がで き な く な り ま す。 4 以下の メ ニ ュ ー項目 と ツールバー ピ ク チ ャ を非表示に し ま す。 メ ニュー メ ニ ュ ー項目 フ ァ イル 上書 き保存 m_dash12 ( [名前 を 付け て保 存] の下の区分線) 編集 PFC Library ユーザーズ ガ イ ド 元に戻す 項目 を 非表示 に する Yes ツ ールバー ピ チ ャ を非表示にする Yes Yes 非表示にす る ピ クチャなし 必ず し も 非表示 に し な く て よ い、 [編 集] メ ニ ュ ー を 非表示 にす る Yes 289 w_product_report シー ト 用 メ ニ ュ ーの作成 メ ニ ュー 表示 メ ニ ュ ー項目 ツ ールバー ピ チ ャ を非表示にする Yes 切り取り 必 ず し も 非表 示 に し な く て よ い、 [編 集] メ ニ ュ ー を 非表 示 にす る コ ピー 必 ず し も 非表 示 に し な く て よ い、 [編 集] メ ニ ュ ー を 非表 示 にす る Yes 貼 り 付け 必 ず し も 非表 示 に し な く て よ い、 [編 集] メ ニ ュ ー を 非表 示 にす る Yes ク リア 必 ず し も 非表 示 に し な く て よ い、 [編 集] メ ニ ュ ー を 非表 示 にす る Yes デ フ ォ ル ト で は表 示不可 ソ ー ト の指定 m_dash36 ( [フ ィ ル タ の指定] の下の区分線) 5 項 目 を 非表示 に する Yes 非表示にす る ピ クチャなし 非表示にす る ピ クチャなし メ ニ ュ ー バーか ら [フ ァ イ ル|名前を付け て保存] を選択 し ま す。 メ ニ ュ ーの保存 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 6 [ メ ニ ュ ー] ボ ッ ク ス に 「m_product_report」 と 入力 し ま す。 [ コ メ ン ト ] ボ ッ ク ス に次の行を入力 し て、 [OK] を ク リ ッ ク し ま す。 w_products_report シ ー ト 用 メ ニ ュ ー PowerBuilder が m_tut_master の子孫 と し て新規 メ ニ ュ ーを 保存 し ま す。 7 290 メ ニ ュ ー ペ イ ン タ を終了 し ま す。 PowerBuilder 最初のシー ト ウ ィ ン ド ウの作成 レ ッ ス ン 4 MDI シー ト は、 PFC の w_sheet ウ ィ ン ド ウ か ら 継承す る こ と に よ っ て 作成 し ま す。 こ の レ ッ ス ン では、 以下の こ と を行い ま す。 • ラ イ ブ ラ リ リ ス ト への ラ イ ブ ラ リ の追加 • 子孫 ウ ィ ン ド ウ の作成 • デー タ ウ ィ ン ド ウ コ ン ト ロ ールの追加 • デー タ ウ ィ ン ド ウ サー ビ ス の利用 • 行の検索 • ア プ リ ケーシ ョ ン の実行 この レ ッ ス ン に必要な時間 約 30 分 PFC に関する学習内容 • w_sheet ウ ィ ン ド ウ の子孫の作成方法 • デー タ ウ ィ ン ド ウ プ ロ パテ ィ 、 行選択、 お よ び行管理サービ ス を 使用可能にす る 方法 • u_dw デー タ ウ ィ ン ド ウ コ ン ト ロ ールの使い方 • デー タ ベース ア ク セ ス 機能お よ び更新機能を u_dw ユーザ イ ベン ト に追加す る 方法 PFC Library ユーザーズ ガ イ ド 291 ラ イ ブ ラ リ リ ス ト への ラ イ ブ ラ リ の追加 ラ イ ブ ラ リ リ ス ト への ラ イ ブ ラ リ の追加 現在の学習個所 > ラ イ ブ ラ リ リ ス ト へのラ イ ブ ラ リ の追加 子孫ウィ ン ド ウの作成 データ ウィ ン ド ウ コ ン ト ロ ールの追加 データ ウィ ン ド ウ サービ スの利用 行の検索 ア プ リ ケーシ ョ ン の実行 こ こ では、 ア プ リ ケーシ ョ ン タ ーゲ ッ ト ラ イ ブ ラ リ リ ス ト に ラ イ ブ ラ リ を追加 し ま す。 追加す る ラ イ ブ ラ リ には、 こ のチ ュ ー ト リ アルで 作成 し たデー タ ウ ィ ン ド ウ が含ま れてい ま す。 1 シ ス テ ム ツ リ ーの ワ ー ク ス ペース ページ上で my_pfc_app タ ー ゲ ッ ト を右 ク リ ッ ク し ま す。 ポ ッ プア ッ プ メ ニ ュ ーか ら [プ ロ パテ ィ ] を選択 し ま す。 プ ロ パテ ィ ダ イ ア ロ グ ボ ッ ク ス の [ ラ イ ブ ラ リ リ ス ト ] ページに、 ラ イ ブ ラ リ 探索パ ス 中のすべての ラ イ ブ ラ リ が表示 さ れ ま す。 2 [参照] ボ タ ン を ク リ ッ ク し ま す。 PFC¥Tutorial デ ィ レ ク ト リ に移 し ま す。 デ ィ レ ク ト リ フ ァ イ ル リ ス ト か ら 「pfctutor.pbl」 を選択 し て、 [開 く ] を ク リ ッ ク し ま す。 [ ラ イ ブ ラ リ 探索パ ス ] リ ス ト ボ ッ ク ス の一番下に 「pfctutor.pbl」 ラ イ ブ ラ リ が表示 さ れ ま す。 3 292 [OK] を ク リ ッ ク し ます。 PowerBuilder Lesson 4 最初のシ ー ト ウ ィ ン ド ウの作成 子孫ウ ィ ン ド ウの作成 現在の学習個所 ラ イ ブ ラ リ リ ス ト へのラ イ ブ ラ リ の追加 > 子孫ウィ ン ド ウの作成 データ ウィ ン ド ウ コ ン ト ロ ールの追加 データ ウィ ン ド ウ サービ ス の利用 行の検索 ア プ リ ケーシ ョ ン の実行 こ こ では、 w_sheet ウ ィ ン ド ウ か ら 継承 し た シー ト ウ ィ ン ド ウ を作成 し ま す。 1 パ ワーバーの [オブ ジ ェ ク ト の継承] ボ タ ン を ク リ ッ ク し ま す。 オブジ ェ ク ト か ら 継承 選択ダ イ ア ロ グボ ッ ク ス が表示 さ れ ま す。 2 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「pfemain.pbl」 を選択 し ま す。 [オ ブ ジ ェ ク ト の種類] ド ロ ッ プ ダ ウ ン リ ス ト で、 「 ウ ィ ン ド ウ 」 を選択 し ま す。 [オブジ ェ ク ト 名] リ ス ト ボ ッ ク ス か ら 「w_sheet」 を選択 し て [OK] を ク リ ッ ク し ま す。 ウ ィ ン ド ウ ペ イ ン タ の ワー ク ス ペース が表示 さ れ ま す。 3 プ ロ パテ ィ ビ ュ ーの [ タ イ ト ル] ボ ッ ク ス に 「製品 リ ス ト 」 と 入 力 し ま す。 こ れに よ っ て、 シー ト ウ ィ ン ド ウ の タ イ ト ルを定義 し ま す。 4 [ メ ニ ュ ー名] ボ ッ ク ス の横にあ る [参照] (...) ボ タ ン を ク リ ッ ク し ま す。 オブジ ェ ク ト 選択 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 5 [アプリ ケーショ ン ラ イ ブラ リ ]リ ス ト ボッ ク ス から 「pfc_my_app.pbl」 を選択 し ま す。 「m_products」 を選択 し て [OK] を ク リ ッ ク し ま す。 [ メ ニ ュ ー名] ボ ッ ク ス に値が入力 さ れた状態で ウ ィ ン ド ウ ペ イ ン タ が再表示 さ れ ま す。 PFC Library ユーザーズ ガ イ ド 293 子孫ウ ィ ン ド ウの作成 6 メ ニ ュ ー バーか ら [ フ ァ イ ル|名前を付けて保存] を選択 し ま す。 ウ ィ ン ド ウ の保存 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 [ア プ リ ケ ー シ ョ ン ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス の 中で pfc_my_app.pbl フ ァ イ ルが選択状態にな っ てい ま す。 7 [ ウ ィ ン ド ウ ] ボ ッ ク ス に 「w_products」 と 入力 し ま す。 [ コ メ ン ト ] ボ ッ ク ス に次の行を入力 し て、 [OK] を ク リ ッ ク し ま す。 製品 リ ス ト 用シー ト ウ ィ ン ド ウ 294 PowerBuilder Lesson 4 最初のシ ー ト ウ ィ ン ド ウの作成 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの追加 現在の学習個所 ラ イ ブ ラ リ リ ス ト へのラ イ ブ ラ リ の追加 子孫ウィ ン ド ウの作成 > データ ウィ ン ド ウ コ ン ト ロ ールの追加 データ ウィ ン ド ウ サービ ス の利用 行の検索 ア プ リ ケーシ ョ ン の実行 こ こ では、 w_products ウ ィ ン ド ウ にデー タ ウ ィ ン ド ウ コ ン ト ロ ールを 追加 し ま す。こ のデー タ ウ ィ ン ド ウ コ ン ト ロ ールは、PFC の u_dw デー タ ウ ィ ン ド ウ ユーザ オブジ ェ ク ト をベー ス に し ま す。 1 ペ イ ン タ バー 1 (パ ワーバーではない) の中の [ユーザ オブジ ェ ク ト ] ボ タ ン を選択 し て ク リ ッ ク し ま す。 ま たは メ ニ ュ ー バーか ら [挿入| コ ン ト ロ ール|ユーザ オブ ジ ェ ク ト ] を選択 し ま す。 [ユーザ オブ ジ ェ ク ト ] ボ タ ンが見つか ら ない場合 [ユーザ オ ブ ジ ェ ク ト ] ボ タ ン を ク リ ッ ク す る には、 ま ず最初に ペ イ ン タ バー 1 にあ る コ ン ト ロ ール ボ タ ンの ド ロ ッ プ ダ ウ ン リ ス ト か ら [ユーザ オブ ジ ェ ク ト ] ア イ コ ン を選択す る 必要があ り ま す ( こ のボ タ ン は通常、 ウ ィ ン ド ウ ペ イ ン タ を開いた と き に コ マ ン ド ボ タ ン を表示 し ま す)。 オブジ ェ ク ト 選択 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ア プ リ ケーシ ョ ン ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス か ら 「pfemain.pbl」 を選択 し ま す。 [ユーザ オブ ジ ェ ク ト ] リ ス ト ボ ッ ク ス か ら 「u_dw」 を 選択 し て [OK] を ク リ ッ ク し ま す。 u_dw は、PFC デー タ ウ ィ ン ド ウ サービ ス を使用可能/使用不可に す る 組込み イ ベン ト 、 イ ン ス タ ン ス 変数、お よ び関数を含んだデー タ ウ ィ ン ド ウ コ ン ト ロ ールに基づい た標準の ビ ジ ュ ア ル ユーザ オブジ ェ ク ト です。 3 PFC Library ユーザーズ ガ イ ド レ イ ア ウ ト ビ ュ ーの中の ウ ィ ン ド ウ の左上隅を ク リ ッ ク し ま す。 295 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの追加 PowerBuilder は、 選択 し た位置にデー タ ウ ィ ン ド ウ コ ン ト ロ ール を配置 し ま す。 こ のデー タ ウ ィ ン ド ウ コ ン ト ロ ールは u_dw の子 孫で あ り 、 u_dw の イ ベン ト 、 関数、 お よ び イ ン ス タ ン ス 変数への ア ク セ ス が可能です。 4 プ ロ パテ ィ ビ ュ ーの [名前] ボ ッ ク ス の中のテ キ ス ト 「dw_1」 を 選択 し ま す。 [名前] ボ ッ ク ス に 「dw_list」 と 入力 し ま す。 新規 コ ン ト ロ ールが選択状態にな っ てい る こ と を確認する [名前] ボ ッ ク ス に dw_1 と い う 名前が見つか ら ない場合には、 レ イ ア ウ ト ビ ュ ーに追加 し た コ ン ト ロ ール を ク リ ッ ク し て く だ さ い。 こ の コ ン ト ロ ール を レ イ ア ウ ト ビ ュ ーで選択状態にす る と 、 プ ロ パテ ィ ビ ュ ーで も 選択状態にな り ま す。 5 プ ロ パテ ィ ビ ュ ーの [デー タ オブジ ェ ク ト ] ボ ッ ク ス の横にあ る [参照] (...) ボ タ ン を ク リ ッ ク し ま す。 オブ ジ ェ ク ト 選択 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 6 [ア プ リ ケーシ ョ ン ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス か ら 「pfctutor.pbl」 を選択 し ま す。 [デー タ ウ ィ ン ド ウ ] リ ス ト ボ ッ ク ス か ら 「d_prodlist」 を 選択 し [OK] を ク リ ッ ク し ます。 ウ ィ ン ド ウ ペ イ ン タ が再表示 さ れ ま す。 296 PowerBuilder Lesson 4 最初のシ ー ト ウ ィ ン ド ウの作成 7 コ ン ト ロ ールを レ イ ア ウ ト ビ ュ ーの中の ウ ィ ン ド ウ と 同 じ ほぼ同 じ 大 き さ に設定 し 、 必要に応 じ て レ イ ア ウ ト ビ ュ ーを最大化 し ま す。 8 メ ニ ュ ー バーか ら [フ ァ イ ル|上書 き 保存] を選択 し ま す。 PowerBuilder が更新済みの ウ ィ ン ド ウ を保存 し ま す。 PFC Library ユーザーズ ガ イ ド 297 デー タ ウ ィ ン ド ウ サー ビ スの利用 デー タ ウ ィ ン ド ウ サービ スの利用 現在の学習個所 ラ イ ブ ラ リ リ ス ト へのラ イ ブ ラ リ の追加 子孫ウィ ン ド ウの作成 データ ウィ ン ド ウ コ ン ト ロ ールの追加 > データ ウィ ン ド ウ サービ スの利用 行の検索 ア プ リ ケーシ ョ ン の実行 こ こ では、 ウ ィ ン ド ウ ペ イ ン タ の ス ク リ プ ト ビ ュ ーを使用 し て、 デー タ ウ ィ ン ド ウ コ ン ト ロ ールに ス ク リ プ ト を追加 し ま す。 追加す る ス ク リ プ ト に よ っ て、 PFC デー タ ウ ィ ン ド ウ の ソ ー ト 、 行選択、 お よ び行 管理サービ ス を使用可能にす る 関数が呼び出 さ れ ま す。 1 ス ク リ プ ト ビ ュ ーの最初の ド ロ ッ プ ダ ウ ン リ ス ト か ら 「dw_list」 を選択 し ま す。 2 番目の ド ロ ッ プ ダ ウ ン リ ス ト か ら 「Constructor イ ベン ト 」 を選 択 し ま す。 ス ク リ プ ト ビ ュ ーの中の 3 番目の ド ロ ッ プダ ウ ン リ ス ト には、 親 ウ ィ ン ド ウ の名前、 つ ま り w_products が表示 さ れ ま す。 現在のオ ブ ジ ェ ク ト や、 u_dw お よ び pfc_u_dw 先祖 オ ブ ジ ェ ク ト に は、 Constructor イ ベン ト 用の コ ー ド は ま だ設定 さ れてい ま せん。 2 Constructor イ ベン ト 用に次の ス ク リ プ ト を入力 し ま す。 this.of_SetRowSelect(TRUE) this.of_SetRowManager(TRUE) this.of_SetSort(TRUE) this.of_SetProperty(TRUE) this.of_SetTransObject(SQLCA) こ れ ら の行は、 デー タ ウ ィ ン ド ウ 用のプ ロ パテ ィ 、 行選択、 行管 理、 お よ び ソ ー ト サービ ス を使用可能にす る ための も のです。 こ れ ら の行に よ り 、 デー タ ウ ィ ン ド ウ 用の ト ラ ン ザ ク シ ョ ン オ ブ ジ ェ ク ト も 設定 さ れ ま す。 298 PowerBuilder Lesson 4 最初のシ ー ト ウ ィ ン ド ウの作成 シ ス テム ツ リ ーか ら の ド ラ ッ グ ア ン ド ド ロ ッ プの使用 シ ス テ ム ツ リ ーか ら ス ク リ プ ト ビ ュ ーへ メ ソ ッ ド お よ びプ ロ パ テ ィ を ド ラ ッ グ ア ン ド ド ロ ッ プで き ま す。of_SetRowSelect の よ う な関数を ド ラ ッ グ ア ン ド ド ロ ッ プす る と 、 プ レー ス ホルダ と し て 機能 し 関数の引数のデー タ 型を与え る コ メ ン ト が PowerBuilder に よ っ て追加 さ れ ま す。 3 入力 し た行のあ と に次の ス ク リ プ ト を追加 し ま す。 this.inv_rowselect.of_SetStyle & (dw_list.inv_rowselect.EXTENDED) this.inv_sort.of_SetStyle & (dw_list.inv_sort.DRAGDROP) this.inv_sort.of_SetColumnHeader(TRUE) こ れ ら の行に よ っ て、 行選択サービ ス と ソ ー ト サービ ス が初期化 さ れ ま す。 of_SetStyle 関数の行選択サー ビ ス に よ っ て、 〔Ctrl〕 と 〔Shift〕 で の拡張行選択が可能にな り ま す。 of_SetStyle 関数の ソ ー ト サービ ス は、 ユーザが メ ニ ュ ーバーか ら [表示| ソ ー ト ] を選択 し た と き に ド ラ ッ グ ア ン ド ド ロ ッ プの ソ ー ト ダ イ ア ロ グ ボ ッ ク ス を 表 示す る よ う に PFC に指示 し ま す。 of_SetColumnHeader 関数の ソ ー ト サービ ス は、 カ ラ ム ヘ ッ ダの ク リ ッ ク に よ る ソ ー ト を使用可能に し ま す。 こ れは、 現在の多 く の ア プ リ ケーシ ョ ンに見 ら れ る 機能です。 4 入力 し た行のあ と に次の ス ク リ プ ト を追加 し ま す。 IF this.of_Retrieve() = -1 THEN SQLCA.of_Rollback() MessageBox(" エ ラ ー "," 検索エ ラ ー ") ELSE SQLCA.of_Commit( ) this.SetFocus() END IF PFC Library ユーザーズ ガ イ ド 299 デー タ ウ ィ ン ド ウ サー ビ スの利用 こ れ ら の ス ク リ プ ト は、 ユーザ オブ ジ ェ ク ト 用の of_Retrieve 関数 を呼び出 し ま す。 こ の関数は、 u_dw コ ン ト ロ ールの中には コ ー ド 化 さ れていないため、 PowerBuilder は、 こ の コ ー ド を pfc_u_dw 先 祖内の同 じ 関数 と し て解釈 し ま す。 5 ペ イ ン タ バー 2 にあ る [ コ ンパ イ ル] ボ タ ン を ク リ ッ ク し ま す。 PowerBuilder は、 dw_list の Constructor イ ベン ト に対 し て入力 し た ス ク リ プ ト を コ ンパ イ ル し ま す。 300 PowerBuilder Lesson 4 最初のシ ー ト ウ ィ ン ド ウの作成 行の検索 現在の学習個所 ラ イ ブ ラ リ リ ス ト へのラ イ ブ ラ リ の追加 子孫ウィ ン ド ウの作成 データ ウィ ン ド ウ コ ン ト ロ ールの追加 データ ウィ ン ド ウ サービ ス の利用 > 行の検索 ア プ リ ケーシ ョ ン の実行 こ こ では、 デー タ ベー ス か ら 行 を検索す る ス ク リ プ ト を 追加 し ま す。 最後の演習で、 of_Retrieve 関数に対 し て行っ た呼び出 し が、 PFC リ ン ケージ サービ ス が実行 さ れていない と き に pfc_Retrieve イ ベン ト を発 生 さ せ ま す (チ ュ ー ト リ アル ア プ リ ケーシ ョ ン では リ ン ケージ サービ ス を開始 し ま せん) 。 デフ ォ ル ト では イ ベン ト が拡張 さ れ る ため、PowerBuilder は、pfc_u_dw 先祖 と 現行の u_dw コ ン ト ロ ールの両方にあ る イ ベン ト ス ク リ プ ト を 解釈 し ま す。 1 ス ク リ プ ト ビ ュ ーの 2 番目の ド ロ ッ プ ダ ウ ン リ ス ト か ら 「pfc_Retrieve」 を選択 し ま す。 pfc_u_dw 先祖 コ ン ト ロ ールには こ の イ ベン ト 用の ス ク リ プ ト がす でに存在 し ま す。 こ こ では、 先祖 ス ク リ プ ト を 拡張す る コ ー ド を 追加 し ま す。 2 次の ス ク リ プ ト を入力 し ま す。 Return this.Retrieve() こ の行は、 Retrieve 関数の戻 り 値を返 し ま す。 こ の値に よ っ て、 検 索成功時のプ ラ イ マ リ バ ッ フ ァ 内の行数がわか り ま す。 3 メ ニ ュ ー バーか ら [フ ァ イ ル |上書 き 保存] を選択 し ま す。 PowerBuilder が ス ク リ プ ト を コ ン パ イ ル し て ウ ィ ン ド ウ を 保存 し ま す。 4 メ ニ ュ ー バーか ら [フ ァ イ ル|閉 じ る ] を選択 し ま す。 ウ ィ ン ド ウ ペ イ ン タ が終了 し ま す。 PFC Library ユーザーズ ガ イ ド 301 ア プ リ ケーシ ョ ンの実行 ア プ リ ケーシ ョ ンの実行 現在の学習個所 ラ イ ブ ラ リ リ ス ト へのラ イ ブ ラ リ の追加 子孫ウィ ン ド ウの作成 データ ウィ ン ド ウ コ ン ト ロ ールの追加 データ ウィ ン ド ウ サービ スの利用 行の検索 > ア プ リ ケーシ ョ ン の実行 こ こ では、 PFC チ ュ ー ト リ アル ア プ リ ケーシ ョ ン を実行 し て、 シー ト ウ ィ ン ド ウ が正 し く 開かれてい る か確認 し ま す。 1 パ ワ ーバーの [実行] ボ タ ン を ク リ ッ ク し ま す。 ア プ リ ケーシ ョ ン がデー タ ベー ス に接続 し て、 PFC チ ュ ー ト リ ア ル フ レーム ウ ィ ン ド ウ を表示 し ま す。MDI フ レーム メ ニ ュ ーバー には [フ ァ イ ル]、 [ ウ ィ ン ド ウ ]、 お よ び [ヘルプ] メ ニ ュ ーのみ が表示 さ れ ま す。 2 302 メ ニ ュ ーバーか ら [フ ァ イ ル|開 く | Product List] を選択 し ま す。 PowerBuilder Lesson 4 最初のシ ー ト ウ ィ ン ド ウの作成 w_products ウ ィ ン ド ウ が表示 さ れ ま す。 3 〔Ctrl〕 ま たは 〔Shift〕 を 押 し なが ら 、 選択 し たい行の中の最初の カ ラ ム のす ぐ 左側を ク リ ッ ク す る こ と に よ っ て、 複数の行を 選択 し ま す。 カ ラ ム ヘ ッ ダ を ク リ ッ ク し て行を ソ ー ト し ま す。 同 じ カ ラ ム ヘ ッ ダ を 2 回 ク リ ッ ク し て、 ソ ー ト の順序を変更 し ま す。 PFC の選択サービ ス と ソ ー ト サービ ス を テ ス ト し ま す。 複数行の選択 選択 し たい行のす ぐ 左側 を ク リ ッ ク し な ければな り ま せん。 行内 部を ク リ ッ ク し て も その行を選択す る こ と はで き ません。 4 PFC Library ユーザーズ ガ イ ド デー タ ウ ィ ン ド ウ 内のいずれかの カ ラ ム を マ ウ ス の右ボ タ ン で ク リ ッ ク し ま す。 303 ア プ リ ケーシ ョ ンの実行 デー タ ウ ィ ン ド ウ にポ ッ プア ッ プ メ ニ ュ ーが表示 さ れ ま す。 こ の メ ニ ュ ーか ら 共通のア ク シ ョ ン に素早 く ア ク セ ス で き ま す。 5 [デー タ ウ ィ ン ド ウ プ ロ パテ ィ ] を選択 し ま す。 デー タ ウ ィ ン ド ウ プ ロ パテ ィ ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 こ のダ イ ア ロ グ ボ ッ ク ス か ら デー タ ウ ィ ン ド ウ サービ ス を使 用可能 ま た は使用不可にす る こ と がで き ま す。 ま た、 使用可能に な っ てい る サービ ス のプ ロ パテ ィ を変更す る こ と がで き ま す。 304 PowerBuilder Lesson 4 6 最初のシ ー ト ウ ィ ン ド ウの作成 デー タ ウ ィ ン ド ウ の リ ス ト 内の [計算機サー ビ ス] チ ェ ッ ク ボ ッ ク ス を ク リ ッ ク し ま す。 [プ ロ パテ ィ ] ボ タ ン を ク リ ッ ク し ま す。 [プ ロパテ ィ ] ボ タ ンがグ レ ー表示に な っ てい る場合 選択中のデー タ ウ ィ ン ド ウ サービ ス が使用可能な場合にのみ [プ ロ パテ ィ ] ボ タ ン が使用可能にな り ま す (グ レー表示にな ら ない)。 計算機サー ビ ス のプ ロ パ テ ィ ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 計算機サー ビ ス のプ ロ パ テ ィ ダ イ ア ロ グ ボ ッ ク ス の [全般] ページには数値デー タ 型の 2 つのカ ラ ム (id お よ び unit_price) が 表示 さ れ ま す。 7 unit_price カ ラ ム用の [登録] チ ェ ッ ク ボ ッ ク ス を選択 し ま す。 unit_price カ ラ ム の ド ロ ッ プダ ウ ン リ ス ト か ら [DDLB(矢印付 き )] を選択 し ま す。 8 [構文] タ ブ を ク リ ッ ク し ま す。 こ の [構文] ページには、 選択 し た プ ロ パテ ィ を 設定す る ス ク リ プ ト が表示 さ れ ま す。 9 [OK] を 2 回 ク リ ッ ク し ま す。 こ れに よ り 、 unit_price カ ラ ム内の ド ロ ッ プ ダ ウ ン計算機能を使っ て、 カ ラ ムの値を変更で き ま す。 PFC Library ユーザーズ ガ イ ド 305 ア プ リ ケーシ ョ ンの実行 変更 し た カ ラ ム値の表示 ド ロ ッ プ ダ ウ ン計算機能を使用 し て入力 (ま たは キーボー ド か ら 入力) し た値は、 対応す る カ ラ ム 表示書式で表示 さ れ ま す。 こ の ケー ス では、 ユーザが別の行 ま たは カ ラ ム 内を ク リ ッ ク し た と き に、 ¥ 記号で値が表示 さ れ ま す。 ほかのデー タ ウ ィ ン ド ウ サービ ス を使用可能に し た り 、 それ ら の プ ロ パテ ィ を変更す る 操作を試す こ と がで き ま す。 10 メ ニ ュ ー バーか ら [ フ ァ イ ル|終了] を選択 し ま す。 実行時ア プ リ ケーシ ョ ン が終了 し ま す。 306 PowerBuilder 第 2 シー ト ウ ィ ン ド ウの作成 レ ッ ス ン 5 PFC の w_sheet ウ ィ ン ド ウ か ら 継承 し て第 2 の MDI シー ト ウ ィ ン ド ウ を作成 し ま す。 こ の レ ッ ス ン では、 以下の こ と を行い ま す。 • 子孫 ウ ィ ン ド ウ の作成 • デー タ ウ ィ ン ド ウ コ ン ト ロ ールの追加 • レ ポー ト サービ ス と 印刷プ レ ビ ュ ー サービ ス の使用可能化 • ア プ リ ケーシ ョ ン の実行 この レ ッ ス ン に必要な時間 約 10 分 PFC Library ユーザーズ ガ イ ド 307 子孫ウ ィ ン ド ウの作成 子孫ウ ィ ン ド ウの作成 現在の学習個所 > 子孫ウィ ン ド ウの作成 データ ウィ ン ド ウ コ ン ト ロ ールの追加 レ ポート サービ ス と 印刷プ レ ビ ュ ー サービ スの使用可能化 ア プ リ ケーシ ョ ン の実行 こ こ では、 w_sheet ウ ィ ン ド ウ か ら 継承 し て シー ト ウ ィ ン ド ウ を作成 し ま す。 1 パ ワ ーバーの [オブジ ェ ク ト の継承] ボ タ ン を ク リ ッ ク し ま す。 オブ ジ ェ ク ト か ら 継承 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス で 「pfemain.pbl」 を ク リ ッ ク し ま す。 [オブ ジ ェ ク ト の種類] ド ロ ッ プダ ウ ン リ ス ト の 「オブ ジ ェ ク ト 」 か ら 、 「 ウ ィ ン ド ウ 」 を選択 し ま す。 [オブジ ェ ク ト 名] リ ス ト ボ ッ ク ス か ら 「w_sheet」 を選択 し て [OK] を ク リ ッ ク し ま す。 ウ ィ ン ド ウ ペ イ ン タ の ワ ー ク ス ペース が表示 さ れ ま す。 3 プ ロ パテ ィ ビ ュ ーの [ タ イ ト ル] ボ ッ ク ス に [製品売上 レ ポー ト ] と 入力 し ま す。 こ れに よ っ て、 新規シー ト ウ ィ ン ド ウ の タ イ ト ルを定義 し ま す。 4 プ ロ パテ ィ ビ ュ ーの [ メ ニ ュ ー名] ボ ッ ク ス の横にあ る [参照] (...) ボ タ ン を ク リ ッ ク し ま す。 オブ ジ ェ ク ト 選択 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 5 [アプリ ケーショ ン ラ イ ブラ リ ]リ ス ト ボッ ク ス から 「my_pfc_app.pbl」 を選択 し ま す。 [ メ ニ ュ ー] リ ス ト ボ ッ ク ス か ら 「m_product_report」 を 選択 し て [OK] を ク リ ッ ク し ます。 [ メ ニ ュ ー名] フ ィ ール ド に値が入力 さ れた状態で ウ ィ ン ド ウ プ ロ パテ ィ シー ト が再表示 さ れ ま す。 6 308 メ ニ ュ ーバーか ら [ フ ァ イ ル|名前を付け て保存] を選択 し ま す。 PowerBuilder Lesson 5 第 2 シ ー ト ウ ィ ン ド ウの作成 ウ ィ ン ド ウ の保存 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 7 [ ウ ィ ン ド ウ ] ボ ッ ク ス に 「w_product_report」 と 入力 し ま す。 [ コ メ ン ト ] ボ ッ ク ス に次の行を入力 し て、 [OK] を ク リ ッ ク し ま す。 これは PFC チ ュ ー ト リ アルのレ ポー ト シー ト です。 PFC Library ユーザーズ ガ イ ド 309 デー タ ウ ィ ン ド ウ コ ン ト ロ ールの追加 デー タ ウ ィ ン ド ウ コ ン ト ロールの追加 現在の学習個所 子孫ウィ ン ド ウの作成 > データ ウィ ン ド ウ コ ン ト ロ ールの追加 レ ポート サービ ス と 印刷プ レ ビ ュ ー サービ スの使用可能化 ア プ リ ケーシ ョ ン の実行 こ こ では、 PFC の u_dw デー タ ウ ィ ン ド ウ ユーザ オブ ジ ェ ク ト を使っ てデー タ ウ ィ ン ド ウ コ ン ト ロ ール を作成 し ま す。 1 ペ イ ン タ バー 1 (パ ワーバーではない) の中の [ユーザ オブジ ェ ク ト コ ン ト ロ ールの作成] ボ タ ン を選択 し て ク リ ッ ク し ま す。 ま たは メ ニ ュ ー バーか ら [挿入| コ ン ト ロ ール|ユーザ オブ ジ ェ ク ト コ ン ト ロ ールの作成] を選択 し ま す。 オブ ジ ェ ク ト の選択 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 2 [ア プ リ ケーシ ョ ン ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス か ら 「pfemain.pbl」 を選択 し ま す。 [ユーザ オ ブ ジ ェ ク ト ] リ ス ト ボ ッ ク ス か ら 「u_dw」 を選択 し て [OK] を ク リ ッ ク し ます。 レ イ ア ウ ト ビ ュ ーの中の ウ ィ ン ド ウ の左上隅を ク リ ッ ク し ま す。 PowerBuilder は、 選択 し た位置にデー タ ウ ィ ン ド ウ コ ン ト ロ ール を配置 し ま す。 こ のデー タ ウ ィ ン ド ウ コ ン ト ロ ールは u_dw の子 孫で あ り 、 u_dw の イ ベン ト 、 関数、 お よ び イ ン ス タ ン ス 変数への ア ク セ ス が可能です。 3 プ ロ パテ ィ ビ ュ ーの [名前] ボ ッ ク ス の中のテ キ ス ト 「dw_1」 を 選択 し ま す。 [名前] ボ ッ ク ス に 「dw_report」 と 入力 し ま す。 [水平ス ク ロ ールバー] チ ェ ッ ク ボ ッ ク ス を選択 し ま す。 こ れに よ り 、 実行時に表示可能 な水平 ス ク ロ ール バーがデー タ ウ ィ ン ド ウ に追加 さ れ ま す。 4 [デー タ オブ ジ ェ ク ト ] ボ ッ ク ス の横にあ る [参照] (...) ボ タ ン を ク リ ッ ク し ま す。 オブ ジ ェ ク ト 選択 ダ イ ア ロ グ ボ ッ ク ス が表示 さ れ ま す。 310 PowerBuilder Lesson 5 5 第 2 シ ー ト ウ ィ ン ド ウの作成 [ア プ リ ケーシ ョ ン ラ イ ブ ラ リ ] リ ス ト ボ ッ ク ス か ら 「pfctutor.pbl」 を選択 し ま す。 [デー タ ウ ィ ン ド ウ ] リ ス ト ボ ッ ク ス か ら 「d_sales_report」 を選択 し て [OK] を ク リ ッ ク し ま す。 [デー タ オブ ジ ェ ク ト ] ボ ッ ク ス に値が入力 さ れた状態でデー タ ウ ィ ン ド ウ プ ロ パテ ィ シー ト が表示 さ れ ま す。 6 コ ン ト ロ ールを レ イ ア ウ ト ビ ュ ーの中の ウ ィ ン ド ウ と 同 じ ほぼ同 じ 大 き さ に設定 し ま す。 必要に応 じ て レ イ ア ウ ト ビ ュ ーを最大化 し ま す。 7 メ ニ ュ ーバーか ら [ フ ァ イ ル|上書 き 保存] を選択 し ま す。 PFC Library ユーザーズ ガ イ ド 311 レ ポー ト サービ ス と 印刷プ レ ビ ュ ー サービ スの使用可能化 レ ポー ト サービ ス と 印刷プ レ ビ ュ ー サービ スの使用可能 化 現在の学習個所 子孫ウィ ン ド ウの作成 データ ウィ ン ド ウ コ ン ト ロ ールの追加 > レ ポート サービ ス と 印刷プ レ ビ ュ ー サービ スの使用可能化 ア プ リ ケーシ ョ ン の実行 こ こ で は、 PFC デー タ ウ ィ ン ド ウ の レ ポ ー ト サ ー ビ ス と 印刷 プ レ ビ ュ ー サー ビ ス を 使用可能にす る 関数 を 呼び出す ス ク リ プ ト を 追加 し ま す。 さ ら に、 デー タ ベー ス か ら 行を検索す る コ ー ド を追加 し ま す。 1 ス ク リ プト ビ ュ ーの最初のド ロ ッ プダウ ン リ ス ト から 「dw_report」 を選択 し ま す。 2 番目の ド ロ ッ プダ ウ ン リ ス ト か ら 「constructor イ ベン ト 」 を選択 し ま す。 Constructor イ ベン ト に次の ス ク リ プ ト を入力 し ま す。 this.of_SetReport(TRUE) this.of_SetPrintPreview(TRUE) this.of_SetTransObject(SQLCA) this.of_SetUpdateable(FALSE) こ れ ら の行は、 レ ポー ト サービ ス と 印刷プ レ ビ ュ ー サービ ス を使 用可能に し 、 ト ラ ン ザ ク シ ョ ン オブ ジ ェ ク ト と し て SQLCA を設 定 し 、 デー タ ウ ィ ン ド ウ を更新不可 と し て登録 し ま す。 更新不可 のデー タ ウ ィ ン ド ウ では、 PFC はデフ ォ ル ト の CloseQuery 処理を 無視 し ま す。 2 入力 し た行のあ と に次の ス ク リ プ ト を追加 し ま す。 IF this.of_Retrieve() = -1 THEN SQLCA.of_Rollback() MessageBox(" エ ラ ー "," 検索エ ラ ー ") ELSE SQLCA.of_Commit( ) END IF こ れ ら の ス ク リ プ ト は、デー タ ウ ィ ン ド ウ 用の u_dw of_Retrieve イ ベン ト を呼び出 し ま す。 ほ かのすべての処理は、 組み込 ま れてい る レ ポー ト サービ ス イ ベン ト お よ び関数に よ っ て処理 さ れ ま す。 312 PowerBuilder Lesson 5 3 第 2 シ ー ト ウ ィ ン ド ウの作成 ス ク リ プ ト ビ ュ ーの 2 番目の ド ロ ッ プ ダ ウ ン リ ス ト か ら 「pfc_Retrieve」 を選択 し ま す。 PowerBuilder が Constructor イ ベン ト 用の ス ク リ プ ト を コ ンパ イ ル し ま す。 4 pfc_retrieve イ ベン ト 用に次の ス ク リ プ ト を入力 し ま す。 Return this.Retrieve() 5 メ ニ ュ ー バーか ら [フ ァ イ ル|上書 き 保存] を選択 し ま す。 PowerBuilder が ス ク リ プ ト を コ ン パ イ ル し て ウ ィ ン ド ウ を 保存 し ま す。 6 メ ニ ュ ー バーか ら [フ ァ イ ル|閉 じ る ] を選択 し ま す。 ウ ィ ン ド ウ ペ イ ン タ が終了 し ま す。 PFC Library ユーザーズ ガ イ ド 313 ア プ リ ケーシ ョ ンの実行 ア プ リ ケーシ ョ ンの実行 現在の学習個所 子孫ウィ ン ド ウの作成 データ ウィ ン ド ウ コ ン ト ロ ールの追加 レ ポート サービ ス と 印刷プ レ ビ ュ ー サービ スの使用可能化 > ア プ リ ケーシ ョ ン の実行 こ こ では、完成 し た PFC チ ュ ー ト リ アル ア プ リ ケーシ ョ ン を実行 し ま す。 1 パ ワ ーバーの [実行] ボ タ ン を ク リ ッ ク し ま す。 ア プ リ ケーシ ョ ン がデー タ ベー ス に接続 し て、 PFC チ ュ ー ト リ ア ル フ レ ーム ウ ィ ン ド ウ を表示 し ま す。 2 メ ニ ュ ーバーか ら [フ ァ イ ル|開 く | Product Sales Report] を選択 し ま す。 w_product_report ウ ィ ン ド ウ が表示 さ れ ま す。 3 314 ツ ールバーの [印刷プ レ ビ ュ ー] ボ タ ン を ク リ ッ ク し ま す。 ま たは PowerBuilder Lesson 5 第 2 シ ー ト ウ ィ ン ド ウの作成 メ ニ ュ ーバーか ら [ フ ァ イ ル|印刷プ レ ビ ュ ー] を選択 し ま す。 印刷プ レ ビ ュ ーの青色のボ ッ ク ス の中に印刷可能領域が示 さ れ ま す。 レ ポー ト 全体を表示す る には、 プ レ ビ ュ ー ウ ィ ン ド ウ の ス ク ロ ール ま たは拡大 / 縮小が必要にな る 場合が あ り ま す。 4 メ ニ ュ ーバーか ら [表示|拡大 / 縮小] を選択 し ま す。 拡大 / 縮小 ダ イ ア ロ グボ ッ ク ス が表示 さ れ ま す。 拡大 / 縮小 ダ イ ア ロ グボ ッ ク スが表示 さ れない場合 [印刷プ レ ビ ュ ー] モー ド に設定 し て、 拡大 / 縮小 ダ イ ア ロ グ ボ ッ ク ス を表示 し なければな り ま せん。 5 レ ポー ト 全体を表示す る よ う に 拡大 / 縮小 ダ イ ア ロ グ ボ ッ ク ス の 設定を変更 し て、 [OK] を ク リ ッ ク し ま す。 必要な ら ばレ ポー ト を印刷 し ま す。 6 メ ニ ュ ー バーか ら [フ ァ イ ル|終了] を選択 し ま す。 ア プ リ ケーシ ョ ン が終了 し て ウ ィ ン ド ウ ペ イ ン タ の ワ ー ク ス ペー ス が表示 さ れ ま す。 7 ウ ィ ン ド ウ ペ イ ン タ を終了 し ま す。 こ れで こ のチ ュ ー ト リ ア ルは終了 し ま し た。 なお、 こ こ で作成 し た よ う な シ ン プルな ア プ リ ケーシ ョ ン を導入す る 前に、 自分自身 のヘルプ フ ァ イ ル を 追加 し 、 [バージ ョ ン 情報] ボ ッ ク ス を 編集 し 、 ほかの PFC サービ ス を使用可能にす る こ と も 可能です。 PFC の関数 と イ ベ ン ト の詳細については、 『PFC オブ ジ ェ ク ト リ フ ァ レ ン ス 』 マ ニ ュ アルを参照 し て く だ さ い。 オ ン ラ イ ン ブ ッ クの使い方 PowerBuilder のすべて のマ ニ ュ ア ルは、 「テ ク ニ カ ル ラ イ ブ ラ リ CD」 のほか、 Sybase Web サイ ト www.sybase.com (英語版) で も 参 照で き ま す。 PFC Library ユーザーズ ガ イ ド 315 ア プ リ ケーシ ョ ンの実行 316 PowerBuilder 索引 フ レ ーム メ ニ ュ ー (チ ュ ー ト リ アル) 283 Message.StringParm (チ ュー ト リ アルの例) 280 数字 10 進数の 2 進数への変換 2 進数の 10 進数への変換 113 113 N A autorollback 49, 69 G gnv_app チ ュ ー ト リ アルの定義 定義 32 262 I INI フ ァ イ ル INI フ ァ イ ル サービ ス 111 ウ ィ ン ド ウ設定 101 INI フ ァ イ ル サービ ス 111 M m_dw ポ ッ プア ッ プ メ ニ ュ ー 142 m_edit ポ ッ プ ア ッ プ メ ニ ュ ー 142 m_lvs ポ ッ プア ッ プ メ ニ ュ ー 142 m_master か ら の継承 276 m_oc ポ ッ プ ア ッ プ メ ニ ュー 142 m_tvs ポ ッ プア ッ プ メ ニ ュ ー 142 MDI アプ リ ケーシ ョ ン 構築 35 シー ト 管理サービ ス 102 ス テー タ ス バー サー ビ ス 103 フ レ ーム ウ ィ ン ド ウ (チ ュー ト リ アル) PFC Library ユーザーズ ガ イ ド 267 n_cst_appmanager gnv_app の定義 262 設定 31 n_cst_apppreference 59 n_cst_debug 58 n_cst_dwcache 56 n_cst_dwsrv 72 n_cst_dwsrv_dropdownsearch 74 n_cst_dwsrv_filter 75 n_cst_dwsrv_find 77 n_cst_dwsrv_linkage 79 n_cst_dwsrv_multitable 82 n_cst_dwsrv_printpreview チ ュ ー ト リ アルの使用 312 用途 83 n_cst_dwsrv_property チ ュ ー ト リ アルの使用 298 用途 84 n_cst_dwsrv_querymode 85 n_cst_dwsrv_report チ ュ ー ト リ アルの使用 312 用途 86 n_cst_dwsrv_reqcolumn 89 n_cst_dwsrv_resize 93 n_cst_dwsrv_rowmanager チ ュ ー ト リ アルの使用 298 用途 90 n_cst_dwsrv_rowselection チ ュ ー ト リ アルの使用 298 用途 92 n_cst_dwsrv_sort チ ュ ー ト リ アルの使用 298 317 索引 用途 95 n_cst_error 63 n_cst_luw w_master pfc_Save 処理 212 用途 121 n_cst_mru の用途 60 n_cst_resize 105 n_cst_security 67 n_cst_tmgmultiple 136 n_cst_tmgsingle 136 n_cst_trregistration 68 n_cst_winsrv 101 n_cst_winsrv_preference 101 n_cst_winsrv_sheetmanager 用途 102 n_cst_winsrv_statusbar 用途 103 n_tmg 136 n_tr autorollback 49, 69 イ ン ス タ ン ス の作成 48 初期化 49 デ フ ォ ル ト ト ラ ン ザ ク シ ョ ン オブジ ェ ク ト の置換 48, 265 ト ラ ンザ ク シ ョ ン の登録 69 用途 48 nilisnull プ ロ パテ ィ 89 O of_SendMessage 関数 使用 99 チ ュー ト リ アルの例 280 プ ロ セ ス ダ イ ア グ ラ ム 46 P PBL 16 PBR フ ァ イ ル 249 PFC DLL 247 サービ ス 10 318 ラ イ ブ ラ リ 16, 256 pfc_MessageRouter イ ベン ト 使用 99 プ ロ セ ス ダ イ ア グ ラ ム 47 pfc_Save 処理 212 PFCDLG.HLP 250 PFC 拡張 PFE を使っ て拡張子を含め る 25 中間拡張レ ベルの作成 23 ラ イ ブ ラ リ エ ク ス テ ン ダ 245 PowerBuilder の概念 5 S SDI アプ リ ケーシ ョ ン の構築 36 SQL Spy ユーテ ィ リ テ ィ 229 SQLCA、 n_tr の使用 48, 265 SQL 解析サービ ス 117 StringParm の使用 (チ ュー ト リ アルの例) 280 U u_calculator 183 u_calendar 187 u_ddlb editing 関数 141 オー ト ス ク ロ ール 143 オー ト セ レ ク ト 144 右マ ウ ス ボ タ ン のサ ポー ト 142 u_ddplb editing 関数 141 オー ト ス ク ロ ール 143 オー ト セ レ ク ト 144 右マ ウ ス ボ タ ン のサ ポー ト 142 u_dw editing 関数 141 概要 146 行の取 り 出 し 299, 313 削除の取 り 消 し 92 チ ュー ト リ アルの使用 295, 310 デー タ ウ ィ ン ド ウ サービ ス 70 右マ ウ ス ボ タ ン のサ ポー ト 142 PowerBuilder 索引 行の検索 301 u_em editing 関数 141 オー ト セ レ ク ト 144 右マ ウ ス ボ タ ン のサ ポー ト u_lvs 右マ ウ ス ボ タ ン のサ ポー ト 用途 153 u_mle editing 関数 141 オー ト セ レ ク ト 144 右マ ウ ス ボ タ ン のサ ポー ト u_oc editing 関数 141 右マ ウ ス ボ タ ン のサ ポー ト u_progressbar 198 u_rte editing 関数 141 右マ ウ ス ボ タ ン のサ ポー ト 用途 172 u_sle editing 関数 141 オー ト セ レ ク ト 144 右マ ウ ス ボ タ ン のサ ポー ト u_st_splitbar 196 u_tab 178 u_tabpg 178 u_tvs 右マ ウ ス ボ タ ン のサ ポー ト 用途 158 142 142 142 142 142 142 142 専用の物理 フ ァ イ ルを使用す る 22 作成 253 ア プ リ ケーシ ョ ン オブジ ェ ク ト か ら の イ ベン ト の リ ダイ レク ト 262 ア プ リ ケーシ ョ ン サービ ス ア プ リ ケーシ ョ ン の環境設定 59 エ ラ ー メ ッ セージ 63 最新使用オブジ ェ ク ト 60 セキ ュ リ テ ィ 67 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ 56 デバ ッ グ 58 ト ラ ンザ ク シ ョ ン登録 68 リ ス ト 55 ア プ リ ケーシ ョ ン マネージ ャ gnv_app グ ロ ーバル変数 262 サービ ス 33, 55 子孫の カ ス タ マ イ ズ 257 ス プ ラ ッ シ ュ画面 34 設定 31 ロ グ イ ン ダ イ ア ロ グ ボ ッ ク ス 34 い イ ベン ト 関数 と の比較 7 使用 39 先祖の上書 き (チ ュ ー ト リ アルの例) 印刷プ レ ビ ュー サービ ス チ ュー ト リ アルの使用 312 用途 83 278 W w_logon ダ イ ア ロ グ ボ ッ ク ス の表示 34, 263 w_product_report の作成 (チ ュ ー ト リ アル) 308 w_products の作成 (チ ュー ト リ アル) 293 w_sheet か ら の継承 293, 308 w_splash ウ ィ ン ド ウ 34, 272 あ ア プ リ ケーシ ョ ン オブジ ェ ク ト PFC Library ユーザーズ ガ イ ド う ウィンドウ pfc_Save 処理 212 応答 210 基本的な使用 208 サ イ ズ変更 105 使用可能サービ ス 208 開いた後の処理 270 開 く 前の処理 270 319 索引 カ プセル化 8 カ レ ン ダ コ ン ト ロ ール 187 環境設定サービ ス ア プ リ ケーシ ョ ン 59 ウ ィ ン ド ウ 101 関数 イ ベン ト と の比較 7 上書 き 9 概要 6 多重定義 9 呼び出 し 37 関数の上書 き 9 関数の多重定義 9 ウ ィ ン ド ウ サービ ス 基本 101 シー ト 管理 102 ス テー タ ス バー 103 選択 101 リ ス ト 98 え エ ラ ー メ ッ セージ サー ビ ス シ ン ボ リ ッ ク パ ラ メ ー タ に よ る 置 き 換え 電子 メ ールに よ る通知 66 用途 63 66 き お オー ト ス ク ロ ール、 使用可能 143 オー ト セ レ ク ト の有効化 144 オブジ ェ ク ト 管理者 22 オブジ ェ ク ト 指向言語 PFC での使用 9 カ プセル化 8 継承 8 借用 11 多相性 (ポ リ モ フ ィ ズ ム) 8 オ ン ラ イ ン へルプ ア プ リ ケーシ ョ ン のヘルプ を使用可能にす る ダ イ ア ロ グ ボ ッ ク ス ヘルプ 250 か 拡大 / 縮小 絶対 83 相対 89 拡張選択、 行選択サービ ス 92 拡張レ ベル 概要 13 サ ン プル シナ リ オ 15 方法 22 カ ス タ ム ク ラ ス ユーザ オブジ ェ ク ト 6 カ ス タ ム ビ ジ ュ アル ユーザ オブジ ェ ク ト 320 行管理サービ ス チ ュー ト リ アルの使用 用途 90 行選択サービ ス チ ュー ト リ アルの使用 用途 92 切 り 取 り 141 298 298 く 50 ク エ リ モー ド サー ビ ス 85 ク ラ ス ユーザ オブ ジ ェ ク ト 、 カ ス タ ム グ ロ ーバル変数の定義 262 6 け 計算機 コ ン ト ロ ール 183 形式を選択 し て貼 り 付け 141 継承 8 継承オブジ ェ ク ト 間の多相性 (ポ リ モ フ ィ ズ ム) 9 検索お よ び置換サービ ス 77 5, 139 PowerBuilder 索引 こ せ コ ピー 141 コ ン ポーネ ン ト 16 コ ン ポ ジ ッ ト デー タ ウ ィ ン ド ウ セキ ュ リ テ ィ サービ ス ア プ リ ケーシ ョ ンへのセキ ュ リ テ ィ の実装 242 デー タ ベー ス 243 用途 67 セキ ュ リ テ ィ ユーテ ィ リ テ ィ 概要 232 管理ユーテ ィ リ テ ィ 233 ス キ ャ ナ 236 セキ ュ リ テ ィ コ ン ト ロ ールの指定 239 セキ ュ リ テ ィ デー タ ベー ス 243 ユーザ と グループ 233 ユーザ と グループに割 り 当て 240 先祖の上書 き (チ ュ ー ト リ アルの例) 278 先祖レ ベル コ ン テ ン ツ 13, 16 内部的な依存関係 22 選択サービ ス 116 88 さ サービ ス の代行 従属関係 11 独立関係 12 サービ ス の リ ス ト 10 最新使用オブジ ェ ク ト サービ ス サ イ ズ変更 PFC 105 デー タ ウ ィ ン ド ウ 93 削除の取 り 消 し 92 参照変数 6, 70 60 し シー ト ウ ィ ン ド ウ チ ュー ト リ アルの使用 293, 308 開 く 268 メ ニ ュ ー (チ ュ ー ト リ アル) 275 シー ト 管理 サービ ス 102 シー ト メ ニ ュ ー、 チ ュー ト リ アルの例 自己更新オブジ ェ ク ト 概要 121 使用可能 216 知っ てお く 必要のあ る概念 5 従属関係 11 す 数値サービ ス 113 ス テー タ ス バー サービ ス 103 ス テー タ ス フ ラ グ 227 ス プ ラ ッ シ ュ画面 34, 272 ス プ リ ッ ト バー コ ン ト ロ ール 196 すべて を選択 141 PFC Library ユーザーズ ガ イ ド そ ソ ー ト サービ ス チ ュー ト リ アルの使用 用途 95 298 287, 289 た ダ イ ア ロ グ ボ ッ ク ス ヘルプ 250 タ イ ミ ン グ サービ ス 136 多相性 (ポ リ モ フ ィ ズ ム) 8 タ ブ コ ン ト ロ ール サ イ ズ変更 105 用途 178 単一行選択、 行選択サー ビ ス 92 ち 置換サービ ス 77 321 索引 つ ツールバー、 制御 100 ツ リ ービ ュ ー 158 SQL スパ イ 用途 58 229 と て デー タ ウ ィ ン ド ウ オブジ ェ ク ト オブジ ェ ク ト 情報へのア ク セ ス 72 キ ャ ッ シ ュ 56 デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ 、 アプ リ ケーシ ョ ン サービ ス 56 デー タ ウ ィ ン ド ウ コ ン ト ロ ール SQL スパ イ 229 using u_dw 146 検索 148 作成 (チ ュ ー ト リ アル) 295, 310 デー タ ウ ィ ン ド ウ サービ ス ア ク セ ス 70 印刷プ レ ビ ュー 83 基本 72 行管理 90 行選択 92 ク エ リ モー ド 85 検索お よ び置換 77 ソ ー ト 95 チ ュー ト リ アルの使用 298, 312 デー タ ウ ィ ン ド ウ サ イ ズ変更 93 デー タ ウ ィ ン ド ウ プ ロ パテ ィ 84, 225, 298 ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ 検索 74 必須カ ラ ム 89 フ ィ ル タ 75 マルチテーブル更新 82 リ ス ト 71 リ ン ク 79 レ ポー ト 86 デー タ ウ ィ ン ド ウ プ ロ パテ ィ ウ ィ ン ド ウ 225 デー タ ベー ス 検索 148 更新 100 セ キ ュ リ テ ィ 243 接続 270 デバ ッ グ サービ ス 322 独立関係 12 独立 し たオブジ ェ ク ト 間の多相性 (ポ リ モ フ ィ ズ ム) 8 ト ラ ンザ ク シ ョ ン オブジ ェ ク ト using n_tr as 265 初期化 49 登録 68 ト ラ ンザ ク シ ョ ン管理 48 ト ラ ンザ ク シ ョ ン登録サービ ス 68 ド ロ ッ プダ ウ ン デー タ ウ ィ ン ド ウ 検索サービ ス 74 リ フ レ ッ シ ュ 73 ド ロ ッ プダ ウ ン リ ス ト ボ ッ ク ス 、 オー ト ス ク ロ ー ル 143 は 配布 PBR フ ァ イ ル 249 PFC ダ イ ア ロ グ ボ ッ ク ス ヘルプ 250 PFC デー タ ベー ス テーブル 249 方法 247 バッ フ ァ デー タ ウ ィ ン ド ウ キ ャ ッ シ ュ サービ ス デー タ ウ ィ ン ド ウ プ ロ パテ ィ サービ ス 貼 り 付け 141 56 227 ひ ビ ジ ュ アル ユーザ オブ ジ ェ ク ト カ ス タ ム 5, 139 標準 5, 139 必須カ ラ ム サービ ス 89 日付 / 時刻サービ ス 108 ビ ッ ト のア ク セ ス 113 標準 ク ラ ス ユーザ オブ ジ ェ ク ト 6 標準ビ ジ ュ アル ユーザ オブ ジ ェ ク ト 5, 139 PowerBuilder 索引 み 開いた後の処理 270 開 く 前の処理 270 右マ ウ ス ボ タ ン のサポー ト 使用不可 143 ポ ッ プ ア ッ プ メ ニ ュー 142 ふ フ ァ イ ル サービ ス 110 フ ィ ル タ サービ ス 75 複数行選択、 行選択サー ビ ス 92 プ ラ ッ ト フ ォ ーム サービ ス 114 フ レーム ウ ィ ン ド ウ 修正 267 開 く 272 メ ニ ュ ー と の関連付け 286 メ ニ ュ ー (チ ュ ー ト リ アル) 275 フ レーム メ ニ ュ ー、 チ ュ ー ト リ アルの例 283 プ ロ グ レ ス バー コ ン ト ロ ール 198 プ ロ パテ ィ ウ ィ ン ド ウ 225 め 275, へ へルプ ア プ リ ケーシ ョ ン のヘルプ を使用可能にす る 50 ダ イ ア ロ グ ボ ッ ク ス ヘルプ 250 変換サービ ス 107 編集 141 メ タ ク ラ ス サービ ス 120 メ ッ セージ ルー タ of_pfc_MessageRouter イ ベン ト of_SendMessage 関数 46 概要 45 使用 99 メ ッ セージ ロ グ 63, 229 メ ニ ュー 拡張 218 継承の方法 218 サービ ス概要 217 修正 275 独自の メ ニ ュー作成 219 標準 メ ニ ュ ー項目 220 ポ ッ プ ア ッ プ 142, 223 メ ニ ュ ー サービ ス 104 47 も 文字列処理サー ビ ス 元に戻す 141 119 ほ ポ ッ プ ア ッ プ メ ニ ュ ーの リ ス ト 142 ま マ イ グ レーシ ョ ン ア シ ス タ ン ト 246 マ イ ク ロ ヘルプの自動更新 145 マ ス タ ー / 詳細処理 79 マルチテーブル更新サー ビ ス 82 ゆ ユーザ オブジ ェ ク ト クラス 6 ビ ジ ュ アル 5 ら ラ イブラ リ PFC 16, 256 探索パ ス の追加 PFC Library ユーザーズ ガ イ ド 31, 292 323 索引 ラ イブ ラ リ エ ク ス テ ンダ 245 り リ ス ト サー ビ ス 123 リ ス ト ビ ュ ー 153 リ ッ チテ キ ス ト エデ ィ ッ ト リ ン ク サー ビ ス 79 172 れ レジス ト リ ウ ィ ン ド ウ 設定 101 レ ス ポ ン ス ウ ィ ン ド ウ 210 レ ポー ト サービ ス 用途 86 ろ ロ グ イ ン ダ イ ア ロ グボ ッ ク ス 34, 263 論理的作業単位サービ ス w_master pfc_Save 処理 212 用途 324 121 PowerBuilder