Best Practice: Workflows should use the correct scheduler module

 

What does this best practice check for?

Different types of workflows cannot always use the same modules to accomplish their end result. For discoveries and monitors which run on a specific schedule, such is the case. The best practice is that discoveries should use the System.Discovery.Schedulermodule, and monitors and rules should use the System.Schedulermodule.

Why is it important to follow this best practice? What is the impact of not following this best practice?

System.Discovery.Schedulerand System.Scheduleruse different expressions that are specific to the workflow that they are meant to support. Using the wrong scheduler can break basic functionality of a workflow, and can break cookdown.

How do I fix this in my MP?

Using the Authoring Console:

1.        Choose a Data Source module that is intended to be used for discovery workflows (for example).

2.        Open up the Properties for the module, and under the Member Modules tab, ensure that there is a scheduler module of type System.Discovery.Scheduler.

Using XML:

     < DataSourceModuleType ID = " Microsoft.Windows.Server.2008.Discovery.DataSource" RunAs =" System!System.PrivilegedMonitoringAccount" Accessibility =" Internal" >

       < Configuration >

         < xsd:element minOccurs = " 1" name =" IntervalSeconds" type =" xsd:unsignedInt" />

         < xsd:element minOccurs = " 1" name =" TimeoutSeconds" type =" xsd:unsignedInt" />

         < xsd:element minOccurs = " 1" name =" SourceId" type =" xsd:string" />

       </ Configuration >

       < OverrideableParameters >

         < OverrideableParameter ID = " IntervalSeconds" Selector =" $Config/IntervalSeconds$" ParameterType =" int" />

          < OverrideableParameter ID = " TimeoutSeconds" Selector =" $Config/TimeoutSeconds$" ParameterType =" int" />

       </ OverrideableParameters >

       < ModuleImplementation Isolation = " Any" >

         < Composite >

           < MemberModules >

             < DataSource ID = " Scheduler" TypeID =" System!System.Discovery.Scheduler" >

               < Scheduler >

                 < SimpleReccuringSchedule >

                   < Interval Unit = " Seconds" >$Config/IntervalSeconds$ </ Interval >

                 </ SimpleReccuringSchedule >

                 < ExcludeDates />

               </ Scheduler >

             </ DataSource >

     < Discovery ID = " Microsoft.Windows.Server.2008.Computer.Discovery" Enabled =" onEssentialMonitoring" Target =" Windows!Microsoft.Windows.Server.Computer" >

       < Category > Discovery </ Category >

       

       < DataSource ID = " DS" TypeID =" Microsoft.Windows.Server.2008.Discovery.DataSource" >

         < IntervalSeconds > 86400 </ IntervalSeconds >

         < TimeoutSeconds > 360 </ TimeoutSeconds >

         < SourceId > $MPElement$ </ SourceId >

       </ DataSource >

     </ Discovery >