You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeneXus扩展:遍历KB所有生成器属性的C#实现咨询

GeneXus Gx16/Gx17 扩展开发:对象层级逻辑与生成器属性遍历实现

Gx16/Gx17 知识库对象建模层级逻辑

Gx16、Gx17版本的知识库对象采用固定的层级嵌套结构,从顶层到底层的关系如下:

  • 最顶层为KB(知识库)对象,即你现有代码中UIServices.KB.CurrentKB对应的实例,是所有知识库操作的统一入口
  • KB下挂载多个Version(版本)对象,对应知识库的不同版本分支,每个版本独立管理自身的环境、模型资源
  • 每个Version下包含若干Environment(环境)对象,用于隔离开发、测试、生产等不同场景的配置
  • 每个Environment关联一个对应的Model(模型)对象,承载业务对象、配置数据的实际存储
  • 每个Model下挂载多个Generator(生成器)对象,对应不同目标平台(.NET、Java、移动端等)的代码生成规则配置,生成器的所有可配置属性都挂载在Generator实例的Properties集合下

生成器属性遍历C#实现代码

以下代码和你已实现的KB属性遍历逻辑完全等效,支持遍历知识库下所有生成器的全部属性,可直接复用现有表写入逻辑:

KB currentKb = UIServices.KB.CurrentKB;

// 逐层遍历到所有生成器实例
foreach (Version kbVersion in currentKb.Versions)
{
    foreach (Environment kbEnv in kbVersion.Environments)
    {
        Model envModel = kbEnv.Model;
        if (envModel == null) continue;

        foreach (Generator targetGen in envModel.Generators)
        {
            // 遍历单个生成器的所有属性,逻辑与KB属性遍历完全一致
            foreach (Property genProperty in targetGen.Properties.Properties)
            {
                string propValue = string.Empty;
                if (genProperty.Value != null)
                {
                    propValue = genProperty.Value.ToString();
                }

                writer.AddTableData(new string[] 
                { 
                    // 第一列可自定义标识,这里标注生成器、版本、环境信息方便区分
                    $"Generator: {targetGen.Name} | Version: {kbVersion.Name} | Env: {kbEnv.Name}",
                    genProperty.Name,
                    propValue,
                    genProperty.IsDefault.ToString()
                });
            }
        }
    }
}

如果只需要获取单个指定生成器的属性,不需要全量遍历,可以直接通过生成器名称从模型的Generators集合索引获取目标实例,例如:

// 替换为你需要查询的生成器名称
Generator specificGen = envModel.Generators.GetByName("CSharp Web");
// 后续遍历specificGen.Properties.Properties的逻辑和上述代码完全一致

内容的提问来源于stack exchange,提问作者ealmeida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:24:22