As you know by now if you have read the rest of the workflow basics section, Operations Manager runs workflows. There are different types of workflows such as rules and tasks and these workflows use modules of a specific type. In order to complete the discussion of module types and workflows you must understand the concept of a data type.
Operations Manager passes data between modules. The format of this data varies depending on the module that output the data. For example a data source that reads from the event log will output a different type of data that a module that reads from Windows performance counters. Some module types expect a certain type of data. For example a threshold module type expects performance data and the module type that writes data to the Operations Manager database expects event data. Therefore it is necessary for Operations Manager to define and use different data types.
Data types are defined in management packs. However this definition is merely a pointer to a code implementation of the data type. Operations Manager 2007 does not support the extension of the data types provided out of the box. This may be something that is exposed in future but this is not decided currently. You can see the list of data types provided out of the box
here together with samples of a data item of each type.
Data types follow an inheritance model in a similar way to class definitions. Where the class hierarchy starts with a base class called System.Entity, the data type hierarchy starts with a data type called System.BaseData. All data types eventually inherit from the base data type.
When a module type is defined it must specify the input and output data types that it accepts and provides where applicable. This must be a valid data type defined in the same management pack or a referenced management pack.
When a module is used in a workflow the data types that the module type accepts and provides must be compatible with the other modules in the work flow.
For example consider an event provider data source:

The module type defines that modules of this type output event data. The next module in the workflow must be a module that accepts this type of data or a more general data type. Since System.Event.Data inherits from System.BaseData a module that accepts either type could be used. However you could not use a module that accepted System.Performance.Data. MP Verify will check all workflow definitions to ensure that you do not mismatch data types.
Many module types such as filter module types accept System.BaseData. This means that they can accept any data input. You will then normally specify some XPath over the data item to retrieve a value of the incoming data. I will have a dedicated section for XPath expressions and $Data expressions on this site soon.