Genexus Extensions SDK - 如何通过代码管理 KB Team Development?

Genexus Extensions SDK - How to manage KB Team Development by code?

我正在寻找使用 SDK 获取 Genexus 团队开发部分的信息和方法的方法,例如:

我在“Artech.Packages.TeamDevClient...”DLL 中发现了一些 类,但这些 DLL 不是随 SDK 安装一起提供的,我在我的 Genexus 16 安装文件夹中找到了这些 DLL(在./Packages),所以我不确定是否应该使用它。所以我的问题是:

编辑:

为了执行这些操作,我们显然需要连接到 GX 服务器实例,因此,如果未设置 Genexus 服务器凭据,它将无法工作。

也就是说,我如何以编程方式正确设置(和获取)这些配置? 我在 类 上挖掘了一下,从 Artech.Architecture.Common.Services.TeamDevData.Client 中发现了这个 TeamDevelopmentData,它已经超载以接受工作模型,所以我尝试了以下操作(已经使用我的 genexus 服务器凭据在团队开发部分配置):

TeamDevelopmentData teamDevData = new TeamDevelopmentData(UIServices.KB.CurrentModel);
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(teamDevData))
{
    string name = descriptor.Name;
    object value = descriptor.GetValue(teamDevData);
    CommonServices.Output.AddLine(name+" = "+ value);
}

结果是 teamDevData 个属性是 null。如何正确使用它?

Packages文件夹下的二进制文件是SDK中定义的服务的实现细节。不建议引用它们中的任何一个,因为它们很容易发生变化,如果发生这种情况,您的扩展将会中断。我们对兼容性的承诺是对 GeneXus SDK。

在SDK中您可以找到为团队开发服务定义的接口,这将允许您完成您提到的大部分用例。请记住,某些操作将 运行 在本地客户端 KB 中进行,而其他操作可能需要向远程 KB 请求一些信息。对于这些后续操作,公开的操作需要发送用户凭据。如果您的扩展将 运行 作为用户界面扩展,那么您可以使用 UI 包中定义的服务,它负责请求凭据并在需要时将它们发送到服务器。

  1. 要获取远程知识库的名称,您可以询问相应的知识库属性:
KnolwedgeBase kb = UIServices.KB.CurrentKB;
string remoteKBName = (string) kb.Properties.GetPropertyValue(Artech.Genexus.Common.Properties.KB.RemoteKb);
  1. 要获取在提交对话框中定义的更改列表,您可以使用以下命令:
var changeLists = BLServices.TeamDevClient.GetChangelists(UIServices.KB.CurrentModel);

此操作returns定义的所有更改列表的序列,以及对于每个更改列表,分配给该更改列表的所有待处理提交项的键集。

  1. 目前无法直接提交更改列表的对象,但可以根据所需更改列表的键过滤待处理的提交对象。
var localChanges = BLServices.TeamDevClient.GetLocalChanges(UIServices.KB.CurrentModel);
List<KBObjectHistory> objectList = …..
var data = new SendChangesData {
    Comment = “Commit comment”,
    Options = ExportOptions.Default,
    ObjectList = objectList
};
bool result = UIServices.TeamDevelopment.SendChanges(data);

localChanges 变量包含当前待定提交的历史信息序列。每个历史记录条目都有一个键 属性,您可以使用它与给定更改列表的键进行比较,以便创建既在本地更改列表中又在特定更改列表中的键集。

  1. 触发当前 KB 的完全更新
var data = new ReceiveChangesData();
var pendingUpdate =  UIServices.TeamDevClient.JustReceiveChanges(ref data);

希望这能让您入门。 如果您有任何问题,请随时提出。