程序genexus中的无限循环

Infinite loop in procedure genexus

我有一个名为 Categoria 的 table,它具有 CategoriaId 主键和 CategoriaPaiId 外键,与 CategoriaId.

我需要创建一个 return 类别树的过程。

假设我有这个类别和这个子类别:

易腐 > 饮料 > 葡萄酒 > 红色

在注册 Drinks 时,我需要变量 &CategoriaSubCategoriaNome returns 这个 varchar:

易腐烂>饮料。

在寄存器 Red 中,我需要在变量 &CategoriaSubCategoriaNome 中 return 字符串:

易腐食品>饮料>葡萄酒

这是我创建的程序:

&isTrue = true
&isAchou = true
do while &isTrue = true
    if &isAchou = true
            &isAchou = false    
            for each
                where CategoriaId = &CategoriaPaiId
                &CategoriaSubCategoriaNome = &CategoriaSubCategoriaNome+ " > " + CategoriaNome
                &isAchou = true
            endfor
        if &isAchou = false
            return
        endif
    endif
enddo

但是我在这个过程中遇到了一个无限循环。

我不确定您的交易结构。对于这个答案,我将向您展示如何使用公式获取类别名称层次结构:

交易类别:

CategoryId*
CategoryName
CategoryFullName  formula: GetCategoryFullName(CategoryId)
CategoryParentId  <nullable=Yes>
CategoryParentName

子类型组类别父组

CategoryParentId* sbt CategoryId
CategoryParentName sbt CategoryName

程序GetCategoryFullName

在规则中:parm(in: CategoryId, out: &CategoryFullName)

来源:

for each
    &CategoryFullName = iif(CategoryParentId.IsNull(), 
                            CategoryName, 
                            GetCategoryFullName(CategoryParentId) + !' > ' + CategoryName)
endfor

我会定期解决它:

过程:类别列表

规则:

Parm(in:&CategoriaId, out:&CategoriaStr);

来源:

for each Categoria
where CategoriaId = &CategoriaId
if CategoriaPaiId.IsEmpty()
    &CategoriaStr = CategoriaNome
else
    &CategoriaStr = CategoryList(CategoriaPaiId) + !" > " + CategoriaNome
endif
when none
    &CategoriaStr.SetEmpty()
endfor