I would like to find a good design pattern on how to implement this example business workflow. Instead of using one giant monolithic procedural-like method call, I was thinking I would like to use a fluent method chaining -- basically, a simple workflow pipeline without using one of those workflow or BPM frameworks. Suggestions on best practice, perhaps a known design pattern?
My Example
- get configuration / user preferences
 - validate config/preferences
 - look up / standardize additional config/preferences
 - get report 1 (with above input)
 - get report 2, etc.
 - email reports
 
The inputs/user preferences causes a lot of if/else logic, so I don't want to have my method have to contain all my if/else logic to see if each step was successful or not, and handle. (i.e. I do NOT want)
   myOutput1 = CallMethod1(param1, param2, our errorMsg)
   if (error)
   { // do something, then break }
   myOutput2 = CallMethod2(param1, param2, our errorMsg)
   if (error)
   { // do something, then break }
   ...
   myOutput9 = CallMethod9(param1, param2, our errorMsg)
   if (error)
   { // do something, then break }
Sample Idea Pipeline code Perhaps something like this? Would it work? How can I improve upon it?
public class Reporter
{
   private ReportSettings Settings {get; set;}
   private ReportResponse Response {get; set;}
   public ReportResponse GenerateAndSendReports(string groupName)
   {
       ReportResponse response = this.GetInputConfiguration()
                                 .ValidateConfiguration()
                                 .StandardizeConfiguration(groupName)
                                 .PopulateReport1()
                                 .PopulateReport2()
                                 .PopulateReport99()
                                 .EmailReports()
                                 .Output();
      return response;
    }
   public Reporter GetInputConfiguration()
   {
        this.Response = new ReportResponse();
        this.Settings = new ReportSetting();
        this.Settings.IsReport1Enabled = ConfigurationManager.GetSetting("EnableReport1");
        this.Settings.Blah1 = ConfigurationManager.GetSetting("Blah1");
        this.Settings.Blah2 = ConfigurationManager.GetSetting("Blah2");
         return this;
}
   public Reporter StandardizeConfiguration(string groupName)
   {
        this.Settings.Emails = myDataService.GetEmails(groupName);
        return this;
   }
public Reporter PopulateReport1()
{
    if (!this.Setting.HasError && this.Settings.IsReport1Enabled)
    {
        try
        {
            this.Response.Report1Content = myReportService.GetReport1(this.Settings.Blah1, this.Blah2)
        }
        catch (Exception ex)
        {
            this.Response.HasError = true;
            this.Response.Message = ex.ToString();
        }
    }
    return this;
}
}
I was thinking of something like this
                        
I know this is an old question, but this is a pretty recent video explaining how to build a nice Fluent API. One thing mentioned, that I think is great, is the idea of using interfaces to enforce the correct order to call the APIs.
https://www.youtube.com/watch?v=1JAdZul-aRQ