如何解决如何以编程方式从 sql 查询中获取字段的值?
我正在编写一个脚本来查询 t_object 和 t_objectproperties 表并迭代结果元素。 这实际上相当简单。我正在使用这个:
function find_model_doc() {
var query = "select o.Object_ID,o.Name,op.Value from t_objectproperties op inner join (select * from t_object where stereotype = 'model document') o on o.Object_ID = op.Object_ID where op.Property = 'RTFTemplate'"
var all_modeldocs = Repository.GetElementSet(query,2);
for (var o = 0; o < all_modeldocs.Count; o++) {
elem_name = all_modeldocs.GetAt(o).Name;
elem_value = all_modeldocs.GetAt(o).Value;
Session.Output("name|value: " + elem_name + " | " + elem_value)
}}
但是,使用脚本我似乎无法从“值”字段中获取字符串。 关于我如何做到这一点的任何建议?
解决方法
方法 EA.Repository.GetElementSet(query,2)
返回一个 EA.Collection
,其中包含类型为 EA.Element
的项目。它根据查询返回的 Object_ID 执行此操作。所有其他返回值都将被忽略。
这些对象没有 Value
属性。
您似乎在寻找的是元素上定义的名称为“RTFTemplate”的标记值的值。
你可以通过两种方式做到这一点
迭代GetElementSet返回的元素的标记值
这样的东西(vbscript)
for each element in all_modeldocs
elem_name = element.Name
for each tag in element.TaggedValues
if tag.Name = "RTFTemplate" then
elem_value : tag.Value
end if
next
next
使用 Repository.SQLQuery 并解析生成的 xml 字符串
这样的东西(vbscript)
function getArrayListFromQuery(sqlQuery)
dim xmlResult
xmlResult = Repository.SQLQuery(sqlQuery)
set getArrayListFromQuery = convertQueryResultToArrayList(xmlResult)
end function
Function convertQueryResultToArrayList(xmlQueryResult)
Dim result
set result = CreateObject("System.Collections.ArrayList")
Dim xDoc
Set xDoc = CreateObject( "MSXML2.DOMDocument" )
'load the resultset in the xml document
If xDoc.LoadXML(xmlQueryResult) Then
'select the rows
Dim rowList
Set rowList = xDoc.SelectNodes("//Row")
Dim rowNode
Dim fieldNode
'loop rows and find fields
For Each rowNode In rowList
dim rowArrayList
set rowArrayList = CreateObject("System.Collections.ArrayList")
'loop the field nodes
For Each fieldNode In rowNode.ChildNodes
'add the contents
rowArrayList.Add fieldNode.Text
Next
'add the row the the general list
result.Add rowArrayList
Next
end if
set convertQueryResultToArrayList = result
end function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。