删除Enterprise Architect加载项中的方案中的步骤

时间:2014-05-30 12:31:53

标签: c# enterprise-architect scenarios

我在从Enterprise Architect的加载项中删除场景中的步骤时遇到问题

我希望从元素中删除方案的空步骤,但它不起作用,此方案中存在此“已删除”步骤。 我的代码在哪里出错?

short esCnt = element.Scenarios.Count;
                for (short esIdx = (short)(esCnt - 1); esIdx >= 0; --esIdx)
                {
                    EA.IDualScenario es = element.Scenarios.GetAt(esIdx);
                    short essCnt = es.Steps.Count;
                    for (short essIdx = (short)(essCnt - 1); essIdx >= 0; --essIdx)
                    {
                        EA.IDualScenarioStep ess = es.Steps.GetAt(essIdx);
                        if (ess.Name.Trim().Length == 0 &&
                            ess.Uses.Trim().Length == 0 &&
                            ess.Results.Trim().Length == 0)
                        {
                            //1. section 
                            es.Steps.Delete(essIdx);
                            ess.Update();
                        }
                    }
                    //2. section 
                    es.Update();
                }

你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

看起来像是一个接一个。 Collection索引从零开始,但GUI中的方案步骤编号(如ScenarioStep.Pos中所示)从1开始。因此,您实际上可能正在删除错误的步骤。

为了安全起见,当您对正在循环的集合进行更改时,不应使用foreach循环,而是反向for循环:

int nrScenarios = element.Scenarios.Count;
for (int scenIx = nrScenarios - 1; scenIx >= 0; --scenIx) {
    Scenario scenario = element.Scenarios.GetAt(scenIx);
    int nrSteps = scenario.Steps.Count;
    for (int stepIx = nrSteps - 1; stepIx >= 0; --stepIx) {

在这种情况下,外圈不如内圈那么重要,因为那是你操纵的集合。

除此之外,您根本不需要调用es.Update(),并且应该在内循环之外调用element.Scenarios.Refresh()

最后,您确定Step.Name实际上是空的吗?我无法在GUI中创建空名称(“Action”)的步骤,但您可以通过API完成此操作。

答案 1 :(得分:0)

我认为问题在于Update()来电。

EA.Collection.DeleteAt()将立即从数据库中删除该元素(但不会从内存中的集合中删除)。但是,如果你在刚刚创建的对象上调用Update(),我认为它会重新创建它,可能还有一个新的序列号;这解释了为什么删除的步骤现在被移动"到最后。

尝试删除Update()电话,看看是否有帮助。