Математика | ||||
Pro VS 2005 Reporting Using SQL Server and Crystal Reports - 2006 Kevin S 480 2006 by Kevin S. Goff and Rod Paddock | ||||
Pro VS 2005 Reporting Using SQL Server and Crystal Reports - 2006 Kevin S 480
2006 by Kevin S. Goff and Rod Paddock Contents at a Glance About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii PART 1 The Requirements: Begin with the End in Mind CHAPTER 1 Defining the Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 PART 2 Building the Database with SQL Server 2005 CHAPTER 2 Generating Result Sets with T-SQL 2005 Stored Procedures and UDFs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 CHAPTER 3 More T-SQL 2005 Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 PART 3 Defining and Building the Architecture CHAPTER 4 Building Remoting/Web Service Solutions with Interfaces . . . . . . 57 CHAPTER 5 Building a Data Access Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 CHAPTER 6 Using Strongly-Typed DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 CHAPTER 7 Middleware Data Summarization Using Typed DataSets . . . . . . . 143 PART 4 Report Writers CHAPTER 8 Basic/Intermediate Report Design with Crystal Reports . . . . . . . . 167 CHAPTER 9 Advanced Report Design with Crystal Reports . . . . . . . . . . . . . . . . . 199 CHAPTER 10 Using ActiveReports for .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 v CHAPTER 11 Using Microsoft SQL Server Reporting Services . . . . . . . . . . . . . . . 269 CHAPTER 12 Integrating the Reporting Tool with the Application . . . . . . . . . . . . 299 PART 5 Building the Client Piece CHAPTER 13 Constructing the User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 CHAPTER 14 Building Report Output Using Microsoft PowerPoint . . . . . . . . . . . 401 PART 6 Appendixes APPENDIX A Client Specs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 APPENDIX B Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 APPENDIX C Technical Roadmap and Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 vi Contents About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii PART 1 The Requirements: Begin with the End in Mind CHAPTER 1 Defining the Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 The First Meeting: Defining the Requirements . . . . . . . . . . . . . . . . . . . . . . . 3 Building the Plan of Attack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Building a Report Draft and Report Style Guide . . . . . . . . . . . . . . . . . . . . . . 9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 PART 2 Building the Database with SQL Server 2005 CHAPTER 2 Generating Result Sets with T-SQL 2005 Stored Procedures and UDFs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Defining the Result Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Querying on a Variable Number of Selections . . . . . . . . . . . . . . . . . . . . . . . 16 Handling Variable Selections with XML . . . . . . . . . . . . . . . . . . . . . . . . 19 Table-Valued UDFs and How to APPLY Them . . . . . . . . . . . . . . . . . . . 20 Moving On: UDF to Get Worker Rates . . . . . . . . . . . . . . . . . . . . . . . . . 22 Putting It All together: Stored Procedure GetTimeSheetData . . . . . . . . . . 24 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 vii CHAPTER 3 More T-SQL 2005 Stored Procedures . . . . . . . . . . . . . . . . . . . . . . 29 Building the Construction Job Summary Report . . . . . . . . . . . . . . . . . . . . . 30 Determining the Total Labor Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Retrieving Material Purchases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Retrieving Invoiced Amounts and Payments . . . . . . . . . . . . . . . . . . . 34 Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Building the Result Sets for an Aging Receivables Report . . . . . . . . . . . . 36 General SQL Server Programming Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 TOP N Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Common Table Expressions/Recursive Queries . . . . . . . . . . . . . . . . . 41 Implementing Audit Trail Functionality . . . . . . . . . . . . . . . . . . . . . . . . 43 Getting Immediate Feedback with OUTPUT and OUTPUT INTO in SQL Server 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Using Dynamic SQL (and Finding Alternatives) . . . . . . . . . . . . . . . . . 45 New Functions in SQL Server 2005 to Assign Ranking Values . . . . 47 Implementing Better Error Handling with TRY...CATCH . . . . . . . . . . . 48 Using LIKE to Perform Text Searches . . . . . . . . . . . . . . . . . . . . . . . . . 49 Working with XML Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Using Date Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 A Cleaner Alternative to IN: INTERSECT and EXCEPT . . . . . . . . . . . . 52 APPLY Revisited: Using UDFs with Correlated Subqueries . . . . . . . . 52 Using SQL Server 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Recommended Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 PART 3 Defining and Building the Architecture CHAPTER 4 Building Remoting/Web Service Solutions with Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Begin with the End in Mind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 .NET Remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 .NET Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Your Development Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Remoting and Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 General Usage Notes for .NET Remoting . . . . . . . . . . . . . . . . . . . . . . 68 General Usage Notes for .NET Web Services . . . . . . . . . . . . . . . . . . . 68 viii CONTENTS Defining the Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Building a Remoting Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Writing the Server-Side Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Building the Client-Side of a Remoting Piece . . . . . . . . . . . . . . . . . . 73 Building a Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Building a Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Using the Web Service from a Client Application . . . . . . . . . . . . . . . 79 Creating a Factory to Simplify the Process . . . . . . . . . . . . . . . . . . . . . . . . . 84 New Features for Remoting in Visual Studio 2005 . . . . . . . . . . . . . . . . . . . 88 Secure TCP Remoting and TCP Channel Timeouts . . . . . . . . . . . . . . 88 The New IPC Client Channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Serializing DataSets in a Binary Format . . . . . . . . . . . . . . . . . . . . . . . 89 Using .NET Generics to Simplify Remoting Interfaces . . . . . . . . . . . 90 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Recommended Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 CHAPTER 5 Building a Data Access Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Overview: What Is a Data Access Layer? . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Requirements for a DAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Building a Data Access Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Handling Multiple Databases with a DBKey Identifier . . . . . . . . . . 95 Handling Stored Procedure Parameters . . . . . . . . . . . . . . . . . . . . . . . 98 Implementing a Custom Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Using Your Basic Data Access Class . . . . . . . . . . . . . . . . . . . . . . . . . 102 Are You Satisfied with This? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Populating Typed DataSets Using .NET Generics . . . . . . . . . . . . . . . . . . . 103 Looking at Where You Are . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 The Aging Report Business Object (bzAgingReport) . . . . . . . . . . . . 106 The Aging Report Web Service (wAgingReport.asmx) . . . . . . . . . . 106 The Aging Report Data Access Class (daAgingReport.cs) . . . . . . . 107 Your Final Data Access Class (cgsDataAccess.cs) . . . . . . . . . . . . . 108 Extending a Data Access Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Multiple Active Result Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Loading a DataSet from a DataReader . . . . . . . . . . . . . . . . . . . . . . . 112 Using Provider Factories to Support Multiple Database Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Asynchronous Processing Made Simple . . . . . . . . . . . . . . . . . . . . . . 113 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 CONTENTS ix CHAPTER 6 Using Strongly-Typed DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . 119 What Are Typed DataSets? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Building Typed DataSets for This Application . . . . . . . . . . . . . . . . . . . . . . 120 Building a Utility to Generate a Typed DataSet from Your Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Creating a Typed DataSet Manually . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Benefits of Typed DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Strong Typing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Easier Traversing of Hierarchical Data . . . . . . . . . . . . . . . . . . . . . . . 127 Find Your Way Easier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Null Value Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 But Wait—More Benefits! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Subclassing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Simplify Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Using Typed DataSets with Designer Tools . . . . . . . . . . . . . . . . . . . . . . . . 129 Using Typed DataSets for Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Viewing Typed DataSets in Windows Forms . . . . . . . . . . . . . . . . . . . 130 Overcoming the Shortcomings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 The Great Debate on Typed DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Stop the Presses! Something Doesn’t Match . . . . . . . . . . . . . . . . . . . . . . 134 Breakpoint: The Architecture As It Stands . . . . . . . . . . . . . . . . . . . . . . . . . 136 Breaking Down the Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Recommended Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 CHAPTER 7 Middleware Data Summarization Using Typed DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Capabilities in ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 The Scenario: Produce an Aging Report Result Set from a Flat List of Invoices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Step 1: Creating an Instance and Adding Rows . . . . . . . . . . . . . . . . 146 Step 2: Creating Default Column Values for New Rows . . . . . . . . . 147 Step 3: Looping Through Strongly-Typed Rows . . . . . . . . . . . . . . . . 148 Step 4: Performing Date Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Step 5: Performing Lookups on Primary Keys . . . . . . . . . . . . . . . . . 149 Step 6: Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Step 7: Performing the Equivalent of SELECT DISTINCT . . . . . . . . 152 Step 8: Handling Data Relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 x CONTENTS Step 9: Computing Subtotals Automatically . . . . . . . . . . . . . . . . . . . 154 Step 10: Computing Subtotals Manually . . . . . . . . . . . . . . . . . . . . . . 155 Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Some Miscellaneous ADO.NET Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Reading/Writing NULL Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 More Date Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Choices, Choices: When to Use RowFilter, When to Use Select()? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 PART 4 Report Writers CHAPTER 8 Basic/Intermediate Report Design with Crystal Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Versions of Crystal Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 The Crystal Reports Push Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Building a Reusable Header and Footer Subreport . . . . . . . . . . . . . . . . . . 169 Creating the Generic Report Header and Defining the Data Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Editing Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Using Report Sections to Build the Report Header . . . . . . . . . . . . . 178 Building the Footer Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Using the Report Header and Footer in a New Report . . . . . . . . . . . . . . . 182 “Houston,We Have a Problem” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Implementing a Base Report Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 The End Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Integrating the Header Subreport and a New Base Report Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Using Your New Base Report Template . . . . . . . . . . . . . . . . . . . . . . . 196 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 CHAPTER 9 Advanced Report Design with Crystal Reports . . . . . . . . . . 199 Report 1: Implementing the Timesheet Report . . . . . . . . . . . . . . . . . . . . . 200 The End Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 The Result Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 The Steps to Build It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Final Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 CONTENTS xi Report 2: Implementing the Gantt Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 The End Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 The Result Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 The Steps to Build It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Report 3: Implementing Dynamic Images on a Customer Invoice . . . . . 227 The End Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 The Result Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 The Steps to Build It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Report 4: Implementing a Stacked Bar Chart . . . . . . . . . . . . . . . . . . . . . . 229 The End Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 The Result Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 The Steps to Build It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Report 5: Implementing the Labor/Cost Report/Graph . . . . . . . . . . . . . . . 234 The End Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 The Result Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 The Steps to Build It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Final Note: The Aging Receivables Report . . . . . . . . . . . . . . . . . . . . . . . . . 242 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 CHAPTER 10 Using ActiveReports for .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 ActiveReports Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Creating Your First Reporting Application . . . . . . . . . . . . . . . . . . . . . 243 Binding to the XML-XSD File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Simple ActiveReports Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Creating a Report Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Building Header and Footer Subreports . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Header/Footer Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Creating the Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 The Timesheet Details Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Creating Subtotals and Totals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Exporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 CHAPTER 11 Using Microsoft SQL Server Reporting Services . . . . . . . . 269 What Is SQL Server Reporting Services? . . . . . . . . . . . . . . . . . . . . . . . . . . 269 SSRS Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Creating a Report Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Configuring Your Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Reporting Project Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 xii CONTENTS Accessing XML Data with SSRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Accessing Data from a Static XML Data Source . . . . . . . . . . . . . . . 272 Creating Your First Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Examining the Report Designer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Creating an SSRS Dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Basic XML Query Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Presenting Your Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Deploying Your Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Accessing Data from Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Creating the Test Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Creating the Data Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Basic Web Service Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Understanding SOAP Request and Response Packets . . . . . . . . . . 291 Parameter Query Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Recommended Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 CHAPTER 12 Integrating the Reporting Tool with the Application . . . . 299 Begin with the End in Mind: Your Final Result . . . . . . . . . . . . . . . . . . . . . . 299 Using the Crystal Reports .NET Object Model . . . . . . . . . . . . . . . . . . . . . . 300 The ReportDocument Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Building a Generic Crystal Reports .NET Library . . . . . . . . . . . . . . . . . . . . 314 The Generic Report Manager: ccCrystalManager . . . . . . . . . . . . . . 315 Report Header/Footer Data Objects: ccReportInfo . . . . . . . . . . . . . . 321 The Generic Print Options Form: ccCrystalPrintOptionForm . . . . . 322 The Generic Report Preview Form: ccCrystalViewer . . . . . . . . . . . . 323 Miscellaneous Reporting Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Determining the Current Executing Folder for Exporting to a Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Loading Untyped Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Changing Report Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Utilizing Your Library to Generate a Report . . . . . . . . . . . . . . . . . . . . . . . . 326 Building the Aging Receivables Report . . . . . . . . . . . . . . . . . . . . . . . 326 The Final Results for the Aging Receivables Report . . . . . . . . . . . . 327 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 Recommended Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 CONTENTS xiii PART 5 Building the Client Piece CHAPTER 13 Constructing the User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . 343 Building Reusable Winforms Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 Creating Winform Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Subclassing the Windows Forms Controls . . . . . . . . . . . . . . . . . . . . 349 Creating an Inherited Windows Form . . . . . . . . . . . . . . . . . . . . . . . . 355 Some Commentary on the Visual Studio Forms Designer . . . . . . . 361 Building an Authentication Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Building the Layers, Redux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Creating a Report Options Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Creating a Reusable Record Selection Screen . . . . . . . . . . . . . . . . . 383 Creating a Reusable Footnote Entry Screen . . . . . . . . . . . . . . . . . . . 391 Building Your Report Options Screen . . . . . . . . . . . . . . . . . . . . . . . . . 391 Viewing Previously Saved PDF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 CHAPTER 14 Building Report Output Using Microsoft PowerPoint . . . . 401 Introducing PowerPointTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Creating PowerPointTools: Begin with the End in Mind, Times Two! . . . 402 An Overview of PowerPointTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Adding COM References to the PowerPoint and Excel Object Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 The Source Code for PowerPointTools . . . . . . . . . . . . . . . . . . . . . . . 405 Using PowerPointTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Creating an Instance of PowerPointTools . . . . . . . . . . . . . . . . . . . . . 418 Starting a New Presentation with a Template and a Title Page . . 419 Creating a Text-Only Slide with a Title and a Set of Bullet Points . . 422 Building an Excel Table to Be Used As the Source of a PowerPoint Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Creating a Slide That Displays an Excel Table . . . . . . . . . . . . . . . . . 426 Building an Excel Table to Be Used As a Source of an Excel Chart Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 Setting Animations and Slide Transitions . . . . . . . . . . . . . . . . . . . . . 438 Defining Slide Footer Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Saving the Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Closing Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 When in Doubt, Use Office Macros! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 xiv CONTENTS PART 6 Appendixes APPENDIX A Client Specs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 1. Timesheet Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 2. Construction Job Summary/Profit Report . . . . . . . . . . . . . . . . . . . . . . . 446 3. Project Timeline (Gantt) Chart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 4. Client Invoice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 5. Aging Receivables Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 6. Combination Report/Graph of Labor and Costs . . . . . . . . . . . . . . . . . . 450 7. Stacked Bar Chart Showing Labor/Costs by Month . . . . . . . . . . . . . . . 452 8. Construction Job Profile Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 APPENDIX B Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Categories of Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Employees and Rates and Rate Types . . . . . . . . . . . . . . . . . . . . . . . 461 Overhead Rates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Construction Job Master Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 Timesheet/Labor Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 Material Purchases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 Jobs and Invoices and Invoice Receipts . . . . . . . . . . . . . . . . . . . . . . 464 APPENDIX C Technical Roadmap and Reference . . . . . . . . . . . . . . . . . . . . . . 465 Application Component Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 The Common Ground Framework Library . . . . . . . . . . . . . . . . . . . . 465 The Construction Demo Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Class Library Project: ConstructionDemo.Business . . . . . . . . . . . . 472 Class Library Project: ConstructionDemo.DataAccess . . . . . . . . . . 473 Windows Application Project: ConstructionDemo.RemotingServer . . . . . . . . . . . . . . . . . . . . . . . 475 Class Library Project: ConstructionDemo.CrystalReports . . . . . . . 475 Class Library Project: ConstructionDemo.Datasets . . . . . . . . . . . . . 476 Class Library Project: ConstructionDemo.Interfaces . . . . . . . . . . . . 476 Class Library Project: ConstructionDemo.WebServices . . . . . . . . . 477 Main Windows Application: ConstructionDemo.Client.Winforms . . . 478 CONTENTS xv Some Final Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Setting Project Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Alternative Approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 Handling Master Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Looking at the User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Цена: 200руб. |
||||