gpt4 book ai didi

c# - 将触发器添加到过渡

转载 作者:行者123 更新时间:2023-11-30 16:09:55 25 4
gpt4 key购买 nike

如何将触发器添加到 Enterprise Architect 中状态机转换的“属性-约束-触发器”区域?引号是您在 EA 中手动到达那里的方式。

我尝试过的

下面,这实际上导致触发器被添加到状态机,但我需要将它链接到特定的转换。变量 stateMachine 是 EA.Element 类型。

EA.Element trigger = (EA.Element)stateMachine.Elements.AddNew("trigger", "Trigger");

State 是 EA.Element 类型。 connector 是 EA.Connector 类型(我尝试将触发器添加到的特定 StateFlow 转换)。所有这些似乎都毫无作用。事实上,Constraints 似乎是一个空集合,即使在我添加了新项目之后也是如此。

state.Constraints.AddNew("trigger", "Trigger");
connector.Constraints.AddNew("trigger", "Trigger");
state.StateTransitions.AddNew("trigger", "Trigger");

我也通过 EA 帮助进行了挖掘,但运气不佳。虽然搜索功能不是很好,所以我可能错过了一些东西。

有趣的信息(可能与某事有关)

Connector 类型的 MiscData 似乎有状态流触发信息。根据一本非常可靠的书(谢谢 Kilian 先生),MiscDataPDATA1 似乎是状态流触发器的名称。但是如何添加新触发器呢? MiscData 是只读的。

最佳答案

API 本身可能不支持这种特定关系(从 Transition 到 Trigger)。在这种情况下,您将不得不使用解决方法。

首先,您需要弄清楚 EA 存储这些信息的确切位置。解决这个问题的最简单方法是从一个空模型开始,仅创建您需要的元素(状态机、两个状态、一个转换和一个触发器)并使用 EA GUI 创建链接。

然后检查数据库。由于您只有这几个元素,因此应该很容易找到 EA 存储关系的位置。

如果我不得不猜测,我会说它可能会存储在 t_xref 表中,或者存储在 style 或 styleEx 列(或您自己指定的 Pdata 列)中的其他地方。然后,您需要使用 SQL 更新或插入查询以及未记录的 Repository.Execute 操作将此信息直接添加到数据库中。你可以在 github 上找到这样的例子:

        /// <summary>
/// copy the workingset tot the given user
/// </summary>
/// <param name="user">the user to copy the working set to</param>
/// <param name="overwrite">if true then the first workingset found with the same name
/// for the given user will be overwritten</param>
public void copyToUser(User user, bool overwrite)
{
if (overwrite)
{
//check if a workingset with the same name already exists
WorkingSet workingSetToOverwrite = this.model.workingSets.Find(w =>
w.user != null
&& w.user.login == user.login
&& w.name == this.name);
if (workingSetToOverwrite != null)
{
workingSetToOverwrite.delete();
}
}
string insertQuery = @"insert into t_document (DocID,DocName, Notes, Style,ElementID, ElementType,StrContent,BinContent,DocType,Author,DocDate )
select '"+Guid.NewGuid().ToString("B")+@"',d.DocName, d.Notes, d.Style,
d.ElementID, d.ElementType,d.StrContent,d.BinContent,d.DocType,'" + user.fullName + @"',d.DocDate from t_document d
where d.DocID like '"+this.ID+"'";
this.model.executeSQL(insertQuery);

}

关于c# - 将触发器添加到过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com