Condividi tramite


How to Reference a Workflow

Applies To: System Center Service Manager 2010

Management pack monitoring can be used with Windows Workflow Foundation to provide workflow logic to the management pack. A workflow can be integrated into the management pack by using the WorkflowSubscription subscription action. The following table describes the two key fields required to link the workflow binary with the subscription action.

Field Description Example value

AssemblyName

The name of the assembly installed on the Service Manager server.

WorkflowPackageRequest

WorkflowTypeName

The fully-qualified name of the class inside the assembly.

WorkflowPackageRequest.PackageInitial

The workflow can be customized by providing parameters. The name and type of a parameter correspond to the name and type of the desired property on the class instance specified by the subscription action WorkflowTypeName setting. The only valid parameter types are those defined by the WorkflowParameterType enumeration.

Important

The release version of Service Manager requires that a subscription containing a workflow action be associated with a category to appear in the Service Manager console.

To specify parameters on the workflow

  1. Create an instance of the WorkflowSubscription class.

  2. Set the AssemblyName and WorkflowTypeName properties.

  3. Enable the workflow by setting the Enabled property to true.

  4. Add any workflow parameters needed by the workflow.

  5. Insert the subscription by using the enterprise management group’s subscription API.

  6. Have the management pack accept the changes.

The following example demonstrates how to create a workflow subscription action by using instance criteria and setting two workflow parameters.

string managementPackName = "RePackaging.Library";
string managementClassName = "RePackaging.Request";

ManagementPackCriteria searchCrit = new ManagementPackCriteria("$Name='" + managementPackName + "'$");
foreach (var mp in mg.ManagementPacks.GetManagementPacks(searchCrit))
{
    InstanceTypeSubscription subCriteria = new InstanceTypeSubscription(OperationType.Add, mp.GetClass(managementClassName).Id, "");
    subCriteria.BatchSize = 100;
    subCriteria.PollingIntervalInSeconds = 60;

    WorkflowSubscription subAction = new WorkflowSubscription("WF_AcceptPackageRequest", "Accepts the package request.", subCriteria);
    subAction.AssemblyName = "WorkflowPackageRequest";
    subAction.WorkflowTypeName = "WorkflowPackageRequest.PackageInitial";
    subAction.Enabled = true;
    subAction.Parameters.Add(new KeyValuePair<string, IWorkflowParameterValueBase>("InternalID", new WorkflowParameterValue(WorkflowParameterType.GuidType, "$Data/BaseManagedEntityId$")));
    subAction.Parameters.Add(new KeyValuePair<string, IWorkflowParameterValueBase>("ClassGUID", new WorkflowParameterValue(WorkflowParameterType.GuidType, "$MPElement[Name='RePackaging.Request']$")));
    
    mg.Subscription.InsertSubscription(mp.Id, subAction);
    mp.AcceptChanges();

    break;
}
<ManagementPack ContentReadable="true" SchemaVersion="1.1" OriginalSchemaVersion="1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <Monitoring>
    <Rules>
      <Rule ID="WorkflowSubscription_378b1659_ad6c_405b_b301_2a929e56523b" Enabled="true" Target="SystemCenter!Microsoft.SystemCenter.SubscriptionWorkflowTarget" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
        <Category>System</Category>
        <DataSources>
          <DataSource ID="DS" TypeID="SystemCenter1!Microsoft.SystemCenter.CmdbInstanceSubscription.DataSourceModule">
            <Subscription>
              <InstanceSubscription Type="$MPElement[Name='RePackaging.Request']">
                <AddInstance />
              </InstanceSubscription>
              <PollingIntervalInSeconds>60</PollingIntervalInSeconds>
              <BatchSize>100</BatchSize>
            </Subscription>
          </DataSource>
        </DataSources>
        <WriteActions>
          <WriteAction ID="WA" TypeID="SystemCenter1!Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction">
            <Subscription>
              <EnableBatchProcessing>false</EnableBatchProcessing>
              <WindowsWorkflowConfiguration>
                <AssemblyName>AcceptPackageRequest</AssemblyName>
                <WorkflowTypeName>WorkflowAuthoring.AcceptPackageRequest</WorkflowTypeName>
                <WorkflowParameters>
                  <WorkflowParameter Name="InternalID" Type="guid">$Target/Id$</WorkflowParameter>
                </WorkflowParameters>
                <RetryExceptions />
                <RetryDelaySeconds>60</RetryDelaySeconds>
                <MaximumRunningTimeSeconds>7200</MaximumRunningTimeSeconds>
              </WindowsWorkflowConfiguration>
            </Subscription>
          </WriteAction>
        </WriteActions>
      </Rule>
    </Rules>
  </Monitoring>
  <LanguagePacks>
    <LanguagePack ID="ENU" IsDefault="false">
      <DisplayStrings>
        <DisplayString ElementID="WorkflowSubscription_378b1659_ad6c_405b_b301_2a929e56523b">
          <Name>WF_AcceptPackageRequest</Name>
          <Description>Accepts the package request.</Description>
        </DisplayString>
      </DisplayStrings>
    </LanguagePack>
  </LanguagePacks>
</ManagementPack>

Namespaces

Microsoft.EnterpriseManagement

Microsoft.EnterpriseManagement.Configuration

Microsoft.EnterpriseManagement.Subscriptions

Assemblies

Microsoft.EnterpriseManagement.Core

See Also

Tasks

How to Create a Subscription