System Center Orchestrator: Build Custom Activity withc C# - Limitations

For those of us who find SCORCH lacking in Activities, we may look into creating our own Orchestrator Integration Package known as an OIP using C#.

But what is the limit of what we can accomplish from a custom OIP, what restrictions are placed upon our code, what reality are we really living in?

Now then, let's list out the main limitations that affect the coding process.

General Custom Activity Limits

 We cannot override the GUI with our own or add additional functionality beyond what is given through the interface in the SCORCH SDK (Microsoft.SystemCenter.Orchestrator.Integration.dll).  That is, we cannot modify how Orchestrator uses a custom activity, what we see is what we get.

Activity Configuration

Limited to a single "ActivityConfiguration" class per Activity and the Getter/Setter Property must be a class with a constructor inside

Activity Input - Limits regarding Activity Properties

  • Properties may be based on a pre-defined "ActivityConfiguration"
  • Properties cannot be dynamically added and removed based on an input of another property, we cannot choose from a list on a property to show other properties, even from one activity to the next.
  • The "designer.AddCorellatedData" is only meant to be used on a public class with the "ActivityData" Attribute so it can add its own defined ActivityInput/ActivityOutput

Activity Output - What is made available/published for the next activity

  • Variables - Only String, Int32, and DateTime are allowed
  • Arrays - the items also must be of only String, Int32, or DateTime (if the output cast is not specified, it will be forcibly cast to an string, there is no "AsObject" on an ActivityOutput)

How Arrays are Passed

  • They are added as an IEnumerable list when the response uses the PublishRange, however in SCORCH this list becomes a column in a table owned by said Activity.
  • In the event there are multiple lists, there will be a corresponding column.
  • Foreach "Row" of the array(s), it calls the next activity and passes the row
  • The "Run Behavior" section can "Flatten" the array(s) to a string format.
  • If flattened to string, it passes the entire string into the next activity

Using the above, an advanced C# programmer should be able to map out their list of Activity Nodes to create and how they will interact with one another.#.

References

https://blogs.technet.microsoft.com/orchestrator/2012/06/05/ip-development-best-practices-declarative-imperative-or-both/