Book a Demo

Author Topic: Sample for creating a structured scenario from C#  (Read 3973 times)

Colin Richardson

  • EA User
  • **
  • Posts: 52
  • Karma: +0/-0
    • View Profile
Sample for creating a structured scenario from C#
« on: March 16, 2011, 06:32:36 pm »
Hi All,

I'm having troubles creating a structured scenario for a use case.

I've got all the scenarios in place, but I'm just not getting the ScenarioExtensions to save.  The step's extensions collection has a count of 1 in the code, but afterwards, can't find any trace in the scenario editor, or in the database  >:(


A nice little working sample would be wonderful if someone has one...  

 :)

~ Colin

Colin Richardson

  • EA User
  • **
  • Posts: 52
  • Karma: +0/-0
    • View Profile
Re: Sample for creating a structured scenario from
« Reply #1 on: May 05, 2011, 09:21:12 am »
Should've posted this earlier.

Here's a sterilised version of what I ended up creating.  Be warned this sterilised version hasn't been tested - use at own risk.

 private void insertBasicPath(string name)
        {
            var scenario = (Scenario)_selectedUseCase.Scenarios.AddNew(name, "Basic Path");
            scenario.Update();
        }


        private void insertBasicPathStep(Scenario scenario, int position, string text)
        {
            ScenarioStep step;

            if (text.ToUpper().StartsWith("ACTOR"))
            {
                step =
                    (ScenarioStep)
                    scenario.Steps.AddNew(text.Trim(), "1");
            }
            else
            {
                step =
                    (ScenarioStep)
                    scenario.Steps.AddNew(text.Trim(), "0");
            }

            step.Pos = position;
            step.Update();

            scenario.Update();
            scenario.Steps.Refresh();
        }

        private void insertConstraint(string text, string type)
        {

            var constraint = (EA.Constraint)_selectedUseCase.Constraints.AddNew(text, type);
            constraint.Update();
        }

        private List<Message> insertAlternateCourse(string name, List<string> steps, short varies, short? rejoins)
        {
            var messages = new List<Message>();
            _selectedUseCase.Scenarios.Refresh();
            _selectedUseCase.Update();


            var scenario = (Scenario) _selectedUseCase.Scenarios.AddNew(name, "Alternate");
            scenario.Update();
            _selectedUseCase.Scenarios.Refresh();

            // create the varies and joins!
            Scenario basicPath =
                _selectedUseCase.Scenarios.Cast<Scenario>().FirstOrDefault(
                    thisScenario => thisScenario.Name == "Basic Path");

            if (basicPath == null)
            {
                messages.Add(new WarningMessage("Unable to find basic path"));
                return messages;
            }

            // varies from
            short variesStep = varies;

            if (variesStep <= basicPath.Steps.Count)
            {
                var basicPathVariesStep = (ScenarioStep) basicPath.Steps.GetAt(varies);
                var extension =
                    (ScenarioExtension)
                    basicPathVariesStep.Extensions.AddNew(scenario.Name, scenario.ScenarioGUID);

                //rejoins at
                if (!rejoins.HasValue)
                {
                    extension.Join = "End";
                }
                else
                {
                    var basicPathJoinStep = (ScenarioStep) basicPath.Steps.GetAt(rejoins.Value);
                    extension.Join = basicPathJoinStep.StepGUID;
                }
                extension.Update();
                basicPath.Update();
            }
            else
            {
                messages.Add(
                    new ErrorMessage("Step " + variesStep +
                                     " does not exist in the basic flow. Alternate course not created for '" +
                                     name + "'"));
            }

            var stepPos = 1;

            foreach (var step in steps)
            {
                var scenarioStep =
                    (ScenarioStep)
                    scenario.Steps.AddNew(step, "System");
                scenarioStep.Pos = stepPos;
                scenarioStep.Update();
                stepPos++;
            }
            scenario.Update();
            return messages;
        }