我正在将Sparx EA 14.x与基于文件的存储库一起使用,并很快移入基于SQL Server的环境。当前正在创建一些基本模板级别的模型,稍后将在基于SQL Server的存储库中与实际客户数据一起使用。 我已经为例如创建了标记值(type = RefGUIDList)将关联添加到我的数据元素中的现有Bus.Process中。可以选择现有业务流程的列表,并将其.ea_guid作为值存储在标记的值中。
我创建了带有附加sql的HeatMap图表。
如果标记的值仅选择了一个业务流程,则sql正常运行,问题是如果我添加更多的流程将没有结果。
SELECT (SELECT t_object.Name FROM t_object
WHERE t_object.ea_guid = tv.Value) AS Series,
t_object.Alias AS GroupName, Packages.Name
FROM t_object,
t_package RootPackage,
t_package Packages,
t_objectproperties tv
WHERE RootPackage.Name = 'Data elements' AND
Packages.Parent_ID = RootPackage.Package_ID AND
t_object.Package_ID = Packages.Package_ID AND
t_object.Object_ID = tv.Object_ID AND
tv.Property = 'APM:Prosesses'
我一直在寻找的一种解决方案是将列出的Bus.processes名称连接起来并显示结果。
我知道SQL Server方言不同于当前基于Access的存储库。
答案 0 :(得分:0)
问题是Sparx t_objectproperties.ea_guid多次存储到t_objectproperties.Value中,我确实需要将对应的t_object.Name逗号连接起来。
在我的案例中,找到了一个解决方案,我首先将存储库移至基于SQL Server的存储库中,并创建了如下功能:
CREATE FUNCTION fnSplitString
(
@string NVARCHAR(1000),
@delimiter CHAR(1)
)
RETURNS VARCHAR(1000) AS
BEGIN
DECLARE @csvObjectname VARCHAR(1000)
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
SELECT @csvObjectname = COALESCE(@csvObjectname + ', ', '') +
COALESCE(t_Object.Name,'')
FROM t_Object
WHERE t_Object.ea_guid = SUBSTRING(@string, @start, @end - @start)
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN @csvObjectname
END