程序过程中的无限循环

时间:2019-07-09 17:31:57

标签: procedure genexus

我有一个名为Categoria的表,该表具有 CategoriaId 主键和CategoriaPaiId外键,它们与CategoriaId具有自动关系。

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

假设我在以下子类别中具有此类别:

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

在寄存器Drinks中,我需要变量&CategoriaSubCategoriaNome返回此varchar:

易腐烂>饮料。

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

易腐烂>饮料>葡萄酒

这是我创建的过程:

&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

但是我在此过程中遇到了无限循环。

2 个答案:

答案 0 :(得分:1)

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

交易类别:

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

子类型组CategoryParentGroup

CategoryParentId* sbt CategoryId
CategoryParentName sbt CategoryName

过程GetCategoryFullName

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

在来源中:

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

答案 1 :(得分:0)

我会反复解决它:

过程:类别列表

规则:

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