Genexus Extensions SDK如何通过代码管理KB团队开发相关功能
Genexus SDK调用团队开发模块相关问题
待实现功能
- 获取Genexus Server上托管的KB原始名称,而非本地下载KB时自定义的名称
- 获取Changeset信息
- 触发Changeset的Commit操作
- 对当前KB触发Full Update操作
已排查情况
已在Genexus 16安装目录的./Packages文件夹下找到Artech.Packages.TeamDevClient相关DLL,该类库未包含在官方SDK安装包中,不确定是否可直接使用。
核心疑问
- SDK环境下是否可以获取Genexus团队开发模块的相关信息,包括变更集、Genexus Server端KB名称等内容?
- 是否可以通过SDK触发提交、更新、锁定这类Genexus Server相关操作?
- 如何通过编程方式正确设置、获取Genexus Server的连接凭证配置?
- 调用
Artech.Architecture.Common.Services.TeamDevData.Client命名空间下的TeamDevelopmentData类,传入当前工作模型后所有属性返回null,该类的正确使用方式是什么?
问题解答
1. 团队开发相关DLL的使用说明
你找到的Artech.Packages.TeamDevClient系列DLL属于Genexus官方团队开发模块的内部依赖,虽然没有打包到独立SDK安装包中,但只要你使用的DLL版本和目标Genexus IDE版本完全一致,就可以正常引用调用,不需要额外授权。注意不要跨大版本调用(比如用Genexus 17的DLL给Genexus 16的SDK项目用),否则会出现兼容性异常。
2. 核心功能实现方案
你提到的所有需求都可以通过调用上述类库实现,具体逻辑如下:
(1)Genexus Server连接凭证配置
不需要手动构造凭证配置,只要当前KB已经在IDE中完成过Genexus Server的绑定和登录,凭证会自动存储在本地配置中,调用API时会自动读取。如果需要程序化配置,可使用Artech.Packages.TeamDevClient.Configuration.TeamDevConfiguration类的GetServerConnection方法获取现有连接,或SetServerConnection方法写入新的连接配置。
(2)TeamDevelopmentData返回空的问题修复
你实例化该类的方式有误,该类本身只是数据容器,不会主动拉取服务端数据,需要先调用Load()方法完成数据加载,正确代码示例如下:
using Artech.Architecture.Common.Services.TeamDevData.Client; using Artech.Packages.TeamDevClient.API; // 先获取当前KB的团队开发服务实例 var teamDevService = TeamDevService.GetForModel(UIServices.KB.CurrentModel); if (teamDevService == null || !teamDevService.IsConnected) { CommonServices.Output.AddLine("当前KB未绑定Genexus Server或未连接"); return; } // 加载团队开发数据 TeamDevelopmentData teamDevData = new TeamDevelopmentData(UIServices.KB.CurrentModel); teamDevData.Load(); // 必须调用Load方法才会拉取服务端和本地的团队开发数据 // 输出属性 foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(teamDevData)) { string name = descriptor.Name; object value = descriptor.GetValue(teamDevData); CommonServices.Output.AddLine($"{name} = {value ?? "null"}"); }
(3)各需求的具体实现方法
- 获取服务端KB原始名称:加载完成后直接读取
teamDevData.ServerKBName属性即可,该属性就是Genexus Server上托管的原始KB名称,和本地自定义名称无关。 - 获取Changeset信息:通过
teamDevService.ChangesetService.GetPendingChanges()方法获取本地待提交变更集,调用teamDevService.ChangesetService.GetHistory(int topCount)可以获取历史提交记录。 - 触发Commit操作:构造
CommitOptions对象,传入待提交的变更项、提交注释,调用teamDevService.ChangesetService.Commit(CommitOptions options)即可完成提交。 - 触发Full Update操作:调用
teamDevService.UpdateService.FullUpdate()方法即可,该方法和IDE中点击「完整更新」的执行逻辑完全一致。 - 锁定/解锁对象:调用
teamDevService.LockService.LockObjects()和teamDevService.LockService.UnlockObjects()方法即可实现对象的锁定和解锁操作。
内容的提问来源于stack exchange,提问作者Bruno.S
相关产品推荐
相关产品推荐

