DXL:需要从以前的对象基线中提取数据

问题描述

基本上,我必须遍历对象的所有基线,直到找到修改“_ReqStatus”属性的作者并将该值复制到“_Ownr”属性中。对于当前基线,一切正常,但我无法通过模块的旧基线。我不得不提一下,我为 2000 个对象运行了脚本,每个对象至少有 20 个基线。

我的代码如下:

//scriptul recunoaste obiectele cu "ReqStatus modifica"

pragma runLim,0
Module m = current
History h
HistoryType ht 
Object o
string attributName
string attributNameBaseline
string authorName
string newOwner
Baseline lBaseLine

noError()
for o in entire m do {
**for lBaseLine in module(o) do{ //These 2 code lines were my try to load all baselines
Module lBaseMod = load(module(o),false) //but with no results**
for h in o do
{   

    
    string owner = ""
    attributName=""
    attributName = h.attrName
    authorName=""
    owner = o."_Owner"

    if isDeleted(o) then continue 
    
    
    if(attributName=="_ReqStatus")
    {   
        authorName=h.author
        //print authorName
        //print "\n"
        if(null owner)
        {   
            print identifier(o)
            print "\n"
            newOwner = authorName
            print newOwner"\n"
            o."_Ownr" = newOwner    
            //print newOwner
            break       
        }
        
    }
}
}
}
ErrMess = lastError()

谢谢

解决方法

Tony Goodman 在 http://www.smartdxl.com/content/?p=418 提供了一个脚本“Smart History Viewer”,Michael Sutherland 在 https://www.ibm.com/mysupport/s/forumsquestion?id=0D50z00006HIGSUCA5 提供了一个脚本,如果您在 https://www.ibm.com/mysupport/s/forumshome 上搜索例如“dxl 历史”,您可能会发现更多代码示例,它们应该可以帮助您解决此主题。

您的问题是变量 o。它仅在循环 for o in entire m 中设置,它始终引用当前版本的 o 中的 m,从不引用基线中的相应对象。当您打开模块 lBaseMod 时,o 不会自动重新分配。

因此,使用类型为 Object 的新变量,将其设置为与 o 对应的基线中的对象,并浏览此新对象的历史记录,请参阅链接脚本以供参考。

此外,您应该重新设计脚本流程。使用您的方法,您可以为每个对象打开 m 的所有基线。在您的情况下,这意味着 2000 * 20 loadclose。在外循环中打开 m 的所有基线会快得多(虽然不一定消耗内存),可能使用跳过列表来收集必要的信息。

另请注意,当您测试脚本时,一段时间后“打印”会变得非常慢。如果您记住要打印的所有值,速度会更快,例如在 Buffer 中并在脚本末尾打印它,或将输出写入文件。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...