Building EDWStandAlone and EDWConsoleStandAlone should just work. These projects include everything in EDW and don't need any run time packages to work. This means that they will probably need to be tweaked to your own needs. For example, if your application doesn't need the ability to send SMS messages, you will want to exclude the EDWSMS* units from the projects this lifting a dependency on the Async Pro units. The following sections guide you through the process of recognizing and deleting the features you don't want, and adding your own custom features and changes.
Keep in mind that all units have a description, which you can read by opening the unit, and are documented in the EDW reference. This, and the naming convention, should help identifying what is what.
The EDWStandAlone project includes non-visual units and command line specific units. EDWConsoleStandAlone includes non-visual and visual units, but not command line specific units. The following table lists the units and groups them into functional categories. If you want to exclude a particular feature, you'll generally exclude one or more similarly named units from the project. These units will often be located in the same sub-folder of EDW's src folder.
Table 8.4. EDW units by functional group
| Unit names | Functional group | Notes |
|---|---|---|
| EDWAgent, EDWBase, EDWData, EDWEnvironment, Models\*, EDWInstantUtils, PascalScript\*, EDWProgram*, EDWResourceStrings, Search\*, EDWThreads, EDWTypes, EDWUtils, EDWVersion, EF* | Core | An application is not an EDW application without these units. You don't want to exclude them. |
| EDWDBBase, EDWDBAgent, EDWDBDataSetBuilder, EDWDBExtractor, EDWDBFiler, EDWDBLoader, EDWDBResourceStrings, EDWDBTableWriter, EDWDBUtils, EDWSQLUtils, EDWDBValidator, EDWMidas, EDWTransformer, EDWDBXMLDataSetStructure, EDWPredefinedDBAgents | DB core | An application doing any DB-related activity will need these units. It is very unlikely that you will ever want to remove them. |
| EDWFiler | ETL core | All applications using programs that feature loaders, validators, readers, writers, need this. |
| EDWText* | Text-based ETL | Applications that need to read and write text-based (not xml) data need these units. |
| EDWXML*, EDWXSLT | Xml-based ETL | Applications that need to read and write xml-based data need these units. Please note that several parts in the ETL area need xml functionality to load and interpret templates, structure files, and such. So, these units will rarely be excluded. Also, these units need the MSXML system component, which is almost always present in any Windows computer nowadays. |
| EDWReport, EDWReportResourceStrings, EDWDBReport | Report core | An application that produces EDW reports need these units (plus units for any specific reporting technology it uses). |
| EDWCBReport*, EDWRBReport | CBLib Reports | You can exclude these units if you don't need reports based of Report Builder or OpenOffice.org, which EDW provides through the relevant features in CBLib. |
| EDWCmdLine* | Command line | These units are needed to make the command line EDWStandAlone application work. You con't want to exclude them. |
| EDWDataMap*, EDW*DataPipes | Data maps | ETL programs that use data maps need these units. Generally you will be able to exclude them only if you exclude all ETL features, which would mean being left with not very much. |
| EDWDBADO*, EDWXLSAgent | ADO data access | These units add support for ADO. If your application only uses the other data access layers to access databases and other external data sources, then you can safely do without these units. Please note that support for producing Microsoft Excel documents is implemented here as well. |
| EDWDBdbX | dbX data access | This unit add support for dbX (dbExpress). If your application only uses the other data access layers to access databases and other external data sources, then you can safely do without this unit. |
| EDWDBIBX | IBX data access | This unit add support for IBX (InterBase Express). If your application only uses the other data access layers to access databases and other external data sources, then you can safely do without this unit. |
| EDWGUI*, GUI\* | GUI | These units are pretty much all needed for GUI applications. You might want to exclude specific units, like EDWSimpleWizardFormUnit if you don't use wizards, or EDWDialogFormUnit if you don't use dialogs, or EDWDataRowDataPacketFormUnit if you don't need a dialog to set configuration parameters, and so on. |
| Cube\* | Cube | Needed in order to enable the multi-dimensional analysis feature. Needs PivotCube. |
| EDWDataSetReport, EDWUtilAgents, EDWPredefinedDBAgents | Misc | The units in this group might be excluded on a case-by-case basis, depending on what they define. They are either loosely coupled or entirely decoupled with one another |
| EDWSMS* | SMS support | Exclude these units (and, as a consequence, the Async Pro units) if you don't need to sens SMS messages from your application. |
The techniques used to extend EDW at the source code level are illustrated in the next chapter. The ways in which you add your extension code varies depending on whether you are using a packaged EDW, in which case you package your code in Plugins, or you are building it stand-alone, in which case you just add units to the project file. Example of units added to EDWConsoleStandAlone:
EDWJLTDWCubeFormUnit in 'S:\JLTDW\trunk\src\EDWJLTDWCubeFormUnit.pas' {EDWJLTDWCubeForm},
EDWJLTDWFirstSequenceAgent in 'S:\JLTDW\trunk\src\EDWJLTDWFirstSequenceAgent.pas',
EDWJLTDWFourthSequenceAgent in 'S:\JLTDW\trunk\src\EDWJLTDWFourthSequenceAgent.pas',
EDWJLTDWModelBuilder in 'S:\JLTDW\trunk\src\EDWJLTDWModelBuilder.pas',As an alternative, at least for units that don't have an associated dfm, you could just make the source files available somewhere in the search path and reference the units somewhere in the project. Referencing the units is vital, because very often they will have initialization sections. Delphi only runs the initialization section of a unit when it's included in a uses clause. One good place to add these required reference is the project file itself. Here is an example for the same four units:
EDWJLTDWCubeFormUnit in 'S:\JLTDW\trunk\src\EDWJLTDWCubeFormUnit.pas' {EDWJLTDWCubeForm},
EDWJLTDWFirstSequenceAgent,
EDWJLTDWFourthSequenceAgent,
EDWJLTDWModelBuilder,See the relevant section for information about how to package your extension code in EDW Plugins.