1Use DfAllRpt.pkg 2Use Crystal\CheckForCrystal.dg 3Use dfrptvw.pkg 4Use Windows.pkg 5Use DfLine.Pkg 6Use cRichEdit.pkg 7Use File_dlg.Pkg 8Use cCrystal.pkg 9 10DEFERRED_VIEW Activate_oReportInformationCR FOR ; 11; 12Object oReportInformationCR is a ReportView 13 14 // This ReportView is a sample of the use of cCrystal.pkg. This package 15 // allows a connection to Crystal Reports by calling the RDC COM methods. 16 // It is based on Crystal Reports XI. This sample shows how to get information from 17 // a Crystal Report. It gets the selection formula, the sort order defintion 18 // and all formulas of the report. 19 20 Set Border_Style to Border_Thick 21 Set Label to "Report Information" 22 Set Location to 6 7 23 Set Size to 326 359 24 Set piMinSize to 326 359 25 26 Object oReportnameTextBox is a Textbox 27 Set Label to "Last report read:" 28 Set FontSize to 4 0 29 Set Location to 36 8 30 Set Size to 10 53 31 Set TypeFace to "MS Sans Serif" 32 End_Object // oReportnameTextBox 33 34 Object oReportNameForm is a Form 35 Set Label to "Crystal Report:" 36 Set Size to 13 244 37 Set Location to 10 56 38 Set peAnchors to anTopLeftRight 39 Set Label_Col_Offset to 2 40 Set Label_Justification_Mode to jMode_Right 41 Set Prompt_Button_Mode to pb_PromptOn 42 43 Procedure Entering 44 // clear information from previous report 45 Send ClearAllData 46 47 // clear report name 48 Set value to "" 49 50 // disable the run button 51 Set enabled_state of oRunButton to False 52 End_Procedure 53 54 // Sent when the prompt key is pressed, start selection list 55 Procedure Prompt 56 Integer iSelected iNumPaths 57 String sSelectedFile 58 String sDataDir 59 60 Get psDataPath of (phoWorkspace(ghoApplication)) to sDataDir 61 Get CountOfPaths of (phoWorkspace(ghoApplication)) sDataDir to iNumPaths 62 If (iNumPaths > 1) Get PathAtIndex of (phoWorkspace(ghoApplication)) sDataDir 1 to sDataDir 63 Set Initial_Folder of oNewDialog to sDataDir 64 65 // disable the run button 66 Set enabled_state of oRunButton to False 67 68 // Start the save as dialog 69 Get Show_Dialog of oNewDialog to iSelected 70 If iSelected Begin 71 Get File_Name of oNewDialog to sSelectedFile 72 Set Value to sSelectedFile 73 End 74 End_Procedure // Start_Prompt 75 76 End_Object // oReportNameForm 77 78 Object oReadReportButton is a Button 79 Set Label to "Read Report" 80 Set Size to 14 51 81 Set Location to 10 304 82 Set peAnchors to anTopRight 83 Set Default_State to True 84 85 Procedure OnClick 86 Boolean bReportOK bCrystalOK 87 String sReportName 88 89 Get Value of oReportNameForm to sReportName 90 91 // Check if the report name was specified and report actually exists 92 Get ValidateReportName sReportName to bReportOK 93 If (bReportOK) Begin 94 Get CheckCrystalEnvironment of oCheckForCrystal to bCrystalOK 95 If (bCrystalOK) Begin 96 Send ReadReport of oCrystalReport1 sReportName 97 End 98 Else Begin 99 Send DisplayDialog of oCheckForCrystal 100 End 101 End 102 Else Begin 103 Send activate of oReportNameForm 104 End 105 106 End_Procedure // OnClick 107 108 End_Object // oReadReportButton 109 110 Object oLineControl1 is a LineControl 111 Set Size to 2 349 112 Set Location to 26 6 113 Set peAnchors to anLeftRight 114 115 End_Object // oLineControl1 116 117 Object oSelectionEdit is a cRichEdit 118 Set Label to "Selection" 119 Set Size to 38 349 120 Set Location to 63 6 121 Set Color to clWhite 122 Set TextColor to clBlack 123 Set peAnchors to anLeftRight 124 Set Read_Only_State to True 125 126 End_Object // oSelectionEdit 127 128 Object oSortOrderList is a List 129 Set Label to "Sort Order" 130 Set Size to 52 349 131 Set Location to 114 6 132 Set peAnchors to anTopLeftRight 133 Set Label_Col_Offset to 0 134 Set Label_Row_Offset to 1 135 Set Label_Justification_Mode to jMode_Top 136 137 End_Object // oSortOrderList 138 139 Object oFormulas is a cRichEdit 140 Set Label to "Formulas" 141 Set Size to 52 349 142 Set Location to 180 6 143 Set Color to clWhite 144 Set TextColor to clBlack 145 Set peAnchors to anBottomLeftRight 146 Set Label_Col_Offset to -1 147 Set Read_Only_State to True 148 149 End_Object // oFormulas 150 151 Object oTablesAndFields is a cRichEdit 152 Set Size to 52 349 153 Set Location to 249 6 154 Set Label to "Tables and Fields" 155 End_Object 156 157 Object oRunButton is a Button 158 Set Label to "Run Report" 159 Set Location to 308 251 160 Set peAnchors to anBottomRight 161 Set Enabled_State to False 162 163 Procedure OnClick 164 Send RunReport of oCrystalReport1 165 End_Procedure // OnClick 166 167 End_Object // oRunButton 168 169 Object oCancelButton is a Button 170 Set Label to "Cancel" 171 Set Location to 308 304 172 Set peAnchors to anBottomRight 173 174 Procedure OnClick 175 Send Request_Cancel 176 End_Procedure // OnClick 177 178 End_Object // oCancelButton 179 180 Object oNewDialog is a OpenDialog 181 Set Dialog_Caption to "Select Crystal Report" 182 Set Filter_String to "Crystal Report (*.rpt)|*.rpt|All Files|*.*" 183 Set HideReadOnly_State to True 184 185 End_Object // oNewDialog 186 187 Object oCrystalReport1 is a cCrystal 188 Set psReportName to "" 189 190 Procedure ProcessReportData 191 Handle hoReport 192 Handle hoSortFields hoSortField hoField hoFormulas hoFormula 193 Integer iSortItem iSortCount iFormulaItem iFormulaCount 194 Boolean bAttached 195 String sRptTitle sSelection sCurSortField sCurFormName sCurFormContents 196 Variant vSortField vField vFormulaField 197 Handle hoGroups hoGroup 198 Variant vGroups vGroup 199 Integer iGroups iGroup 200 201 // for Tables and Fields 202 Handle hoDatabaseTable hoFieldDefinitions hoFieldDefinition 203 Handle[] hoTables 204 String sDLL sTableFullName sTableAliasName sFilePath sConnectString 205 String sFieldDisplayName sFieldName sTableAliasFieldIn 206 Integer iNumTables iTableItem iNumFields iFieldItem 207 Variant vFieldDefinitions vFieldDefinition 208 Boolean bSuccess 209 210 211 Get ReportObject to hoReport 212 213 // Show report title. If no title exists, just show file name 214 Get ComReportTitle of hoReport to sRptTitle 215 If (sRptTitle='') Get psReportName to sRptTitle 216 Set Label of oReportNameTextBox to ("Last report read:" * sRptTitle) 217 218 // Get Selection 219 Get ComRecordSelectionFormula of hoReport to sSelection 220 Send AppendText of oSelectionEdit sSelection 221 222 // Get sort order 223 // First show group sort fields, then regular sort fields 224 Get Create of hoReport U_cCrystalGroupNameFieldDefinitions to hoGroups 225 Get Create of hoReport U_cCrystalGroupNameFieldDefinition to hoGroup 226 227 Get ComGroupNameFields of hoReport to vGroups 228 Set pvComObject of hoGroups to vGroups 229 Get IsComObjectCreated of hoGroups to bAttached 230 If (bAttached) Begin 231 Get ComCount of hoGroups to iGroups 232 For iGroup From 1 to iGroups 233 Get ComItem of hoGroups iGroup to vGroup 234 Set pvComObject of hoGroup to vGroup 235 Get IsComObjectCreated of hoGroup to bAttached 236 If (bAttached) Begin 237 Get ComName of hoGroup to sCurSortField 238 Send Add_Item of oSortOrderList MSG_None sCurSortField 239 End 240 Loop 241 End 242 243 Get SortFieldsObject of hoReport to hoSortFields 244 If (hoSortFields) Begin 245 Get Create of hoSortFields U_cCrystalSortField to hoSortField 246 Get Create of hoSortFields U_cCrystalFieldObject to hoField 247 Get ComCount of hoSortFields to iSortCount 248 For iSortItem From 1 to iSortCount 249 Get ComItem of hoSortFields iSortItem to vSortField 250 Set pvComObject of hoSortField to vSortField 251 Get IsComObjectCreated of hoSortField to bAttached 252 If (bAttached) Begin 253 Get ComField of hoSortField to vField 254 Set pvComObject of hoField to vField 255 Get IsComObjectCreated of hoField to bAttached 256 If (bAttached) Begin 257 Get ComName of hoField to sCurSortField 258 Send Add_Item of oSortOrderList MSG_None sCurSortField 259 End 260 End 261 Loop 262 End 263 264 // Get formulas 265 Get FormulaFieldDefinitionsObject of hoReport to hoFormulas 266 If (hoFormulas) Begin 267 Get Create of hoFormulas U_cCrystalFormulaFieldDefinition to hoFormula 268 Get ComCount of hoFormulas to iFormulaCount 269 For iFormulaItem From 1 to iFormulaCount 270 Get ComItem of hoFormulas iFormulaItem to vFormulaField 271 Set pvComObject of hoFormula to vFormulaField 272 Get IsComObjectCreated of hoFormula to bAttached 273 If (bAttached) Begin 274 Get ComFormulaFieldName of hoFormula to sCurFormName 275 Get ComText of hoFormula to sCurFormContents 276 Send AppendText of oFormulas (sCurFormName + ":" + sCurFormContents +Character(10)+Character(13)) 277 End 278 Loop 279 End 280 281 282 283 284 // Get Tables and Fields information 285 // Tables 286 Get TableObjects of hoReport to hoTables 287 Move (SizeOfArray(hoTables)) to iNumTables 288 289 // Loop through all tables 290 For iTableItem from 0 to (iNumTables-1) 291 Move hoTables[iTableItem] to hoDatabaseTable 292 If (hoDatabaseTable) Begin 293 Get ComConnectBufferString of hoDatabaseTable to sConnectString 294 Get ComDllName of hoDatabaseTable to sDLL 295 Get ComLocation of hoDatabaseTable to sTableFullName 296 Get ComName of hoDatabaseTable to sTableAliasName 297 Set pbBold of oTablesAndFields to True 298 Send AppendTextLn of oTablesAndFields ("Table Name:" * sTableFullName) 299 Send AppendTextLn of oTablesAndFields ("Alias Name:" * sTableAliasName) 300 Set pbBold of oTablesAndFields to False 301 302 // Read fields from table 303 Get Create of hoTables[iTableItem] U_cCrystalDatabaseFieldDefinitions to hoFieldDefinitions 304 Get ComFields of hoTables[iTableItem] to vFieldDefinitions 305 Set pvComObject of hoFieldDefinitions to vFieldDefinitions 306 Get IsComObjectCreated of hoFieldDefinitions to bAttached 307 If (bAttached) Begin 308 Get ComCount of hoFieldDefinitions to iNumFields 309 310 If (iNumFields > 0) Begin 311 Set pbBold of oTablesAndFields to True 312 Send AppendTextLn of oTablesAndFields "" 313 Send AppendTextLn of oTablesAndFields ("Fields from" * sTableAliasName - ":") 314 Set pbBold of oTablesAndFields to False 315 End 316 317 // loop through all fields from that table that are in the report 318 For iFieldItem from 1 to iNumFields 319 Get ComItem of hoFieldDefinitions item iFieldItem to vFieldDefinition 320 Get Create of hoFieldDefinitions U_cCrystalDatabaseFieldDefinition to hoFieldDefinition 321 322 Set pvComObject of hoFieldDefinition to vFieldDefinition 323 Get IsComObjectCreated of hoFieldDefinition to bAttached 324 If (bAttached) Begin 325 Get ComDatabaseFieldDisplayName of hoFieldDefinition to sFieldDisplayName 326 Get ComDatabaseFieldName of hoFieldDefinition to sFieldName 327 Get ComTableAliasName of hoFieldDefinition to sTableAliasFieldIn 328 Set peBullets of oTablesAndFields to buBullets 329 Send AppendTextln of oTablesAndFields ("Display Name:" * sFieldDisplayName) 330 Set peBullets of oTablesAndFields to buNone 331 Send AppendTextLn of oTablesAndFields ("Field Name:" * sFieldName) 332 Send AppendTextLn of oTablesAndFields "" 333 334 End 335 Loop 336 337 End 338 339 End 340 341 Loop 342 343 344 345 End_Procedure // ProcessReportData 346 347 Procedure ReadReport String sReportName 348 Boolean bReportOK 349 Boolean bOk 350 351 // Clear all child object 352 Send ClearAllData 353 354 // Setup the reportname and open the report so we can query information from it 355 Set psReportName to sReportName 356 357 Get OpenReport to bOk 358 If bOk Begin 359 Send ProcessReportData 360 Send CloseReport 361 Set enabled_state of oRunButton to True 362 End 363 End_Procedure // ReadReport 364 365 End_Object // oCrystalReport1 366 367 Procedure ClearAllData 368 Send Delete_Data of oSelectionEdit 369 Send Delete_Data of oSortOrderList 370 Send Delete_Data of oFormulas 371 End_Procedure 372 373 Function ReportExists String sRPTName Returns Boolean 374 Boolean bReportExists 375 376 // Check if the report actually exists 377 File_Exist sRPTName bReportExists 378 379 Function_Return bReportExists 380 End_Function 381 382 Function ValidateReportName String sReportName Returns Boolean 383 Boolean bReportNameOK 384 385 Move False to bReportNameOK 386 387 If (sReportName="") Begin 388 Send Info_Box "Select or specify a report." "Report Information" 389 End 390 Else Begin 391 Get ReportExists sReportName to bReportNameOK 392 If (not(bReportNameOK)) Begin 393 Send Info_Box ("The report file " + sReportName + " does not exist. Select or specify another one.") "Report Information" 394 End 395 End 396 397 Function_Return bReportNameOK 398 End_Function 399 400CD_End_Object // oReportInformationCR