【问题标题】:Delete step in scenario in Add-in for Enterprise Architect在 Add-in for Enterprise Architect 中删除场景中的步骤
【发布时间】:2014-05-30 12:31:52
【问题描述】:

我在从 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();
                }

你有什么想法吗?

【问题讨论】:

  • 感谢您的快速响应,我尝试按照您的建议更改我的代码,但我仍然需要帮助。这些空行没有被删除,只是在步骤集合的末尾移动。我在不同的部分尝试了延迟、更新和刷新,但仍然不正确。你能帮帮我吗?
  • 我更正了有问题的代码,它可以工作,但是......这个“已删除”的步骤在这种情况下仍然存在。这些空行没有被删除,只是在步骤集合的末尾移动。我尝试在不同的部分使用 delate()、update() 和 refresh(),但仍然不正确。我认为这在 API 中是不正确的。

标签: c# enterprise-architect scenarios


【解决方案1】:

看起来像一个接一个。 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 完成。

【讨论】:

  • 我更正了有问题的代码,它可以工作,但是......这个“已删除”的步骤在这种情况下仍然存在。这些空行没有被删除,只是在步骤集合的末尾移动。我尝试在不同部分使用 delate()、update() 和 refresh(),但仍然不正确。我认为这在 API 中是不正确的
【解决方案2】:

我认为问题在于Update() 调用。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多