Genexus Extensions SDK - 如何通过代码管理 KB Team Development?
Genexus Extensions SDK - How to manage KB Team Development by code?
我正在寻找使用 SDK 获取 Genexus 团队开发部分的信息和方法的方法,例如:
- 获取 Genexus 服务器上托管的 KB 的名称(不是我从服务器下载 KB 时输入的名称)
- 获取变更集信息
- 触发变更集提交
- 触发当前 KB 的完全更新
我在“Artech.Packages.TeamDevClient...”DLL 中发现了一些 类,但这些 DLL 不是随 SDK 安装一起提供的,我在我的 Genexus 16 安装文件夹中找到了这些 DLL(在./Packages),所以我不确定是否应该使用它。所以我的问题是:
在SDK环境中,能否获取到Genexus的Team Dev Section的信息?对于变更集之类的东西,Genexus Server KB 名称...
我可以触发 Genexus 服务器事件,如提交、更新和锁定吗?
编辑:
为了执行这些操作,我们显然需要连接到 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 包中定义的服务,它负责请求凭据并在需要时将它们发送到服务器。
- 要获取远程知识库的名称,您可以询问相应的知识库属性:
KnolwedgeBase kb = UIServices.KB.CurrentKB;
string remoteKBName = (string) kb.Properties.GetPropertyValue(Artech.Genexus.Common.Properties.KB.RemoteKb);
- 要获取在提交对话框中定义的更改列表,您可以使用以下命令:
var changeLists = BLServices.TeamDevClient.GetChangelists(UIServices.KB.CurrentModel);
此操作returns定义的所有更改列表的序列,以及对于每个更改列表,分配给该更改列表的所有待处理提交项的键集。
- 目前无法直接提交更改列表的对象,但可以根据所需更改列表的键过滤待处理的提交对象。
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
变量包含当前待定提交的历史信息序列。每个历史记录条目都有一个键 属性,您可以使用它与给定更改列表的键进行比较,以便创建既在本地更改列表中又在特定更改列表中的键集。
- 触发当前 KB 的完全更新
var data = new ReceiveChangesData();
var pendingUpdate = UIServices.TeamDevClient.JustReceiveChanges(ref data);
希望这能让您入门。
如果您有任何问题,请随时提出。
我正在寻找使用 SDK 获取 Genexus 团队开发部分的信息和方法的方法,例如:
- 获取 Genexus 服务器上托管的 KB 的名称(不是我从服务器下载 KB 时输入的名称)
- 获取变更集信息
- 触发变更集提交
- 触发当前 KB 的完全更新
我在“Artech.Packages.TeamDevClient...”DLL 中发现了一些 类,但这些 DLL 不是随 SDK 安装一起提供的,我在我的 Genexus 16 安装文件夹中找到了这些 DLL(在./Packages),所以我不确定是否应该使用它。所以我的问题是:
在SDK环境中,能否获取到Genexus的Team Dev Section的信息?对于变更集之类的东西,Genexus Server KB 名称...
我可以触发 Genexus 服务器事件,如提交、更新和锁定吗?
编辑:
为了执行这些操作,我们显然需要连接到 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 包中定义的服务,它负责请求凭据并在需要时将它们发送到服务器。
- 要获取远程知识库的名称,您可以询问相应的知识库属性:
KnolwedgeBase kb = UIServices.KB.CurrentKB;
string remoteKBName = (string) kb.Properties.GetPropertyValue(Artech.Genexus.Common.Properties.KB.RemoteKb);
- 要获取在提交对话框中定义的更改列表,您可以使用以下命令:
var changeLists = BLServices.TeamDevClient.GetChangelists(UIServices.KB.CurrentModel);
此操作returns定义的所有更改列表的序列,以及对于每个更改列表,分配给该更改列表的所有待处理提交项的键集。
- 目前无法直接提交更改列表的对象,但可以根据所需更改列表的键过滤待处理的提交对象。
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
变量包含当前待定提交的历史信息序列。每个历史记录条目都有一个键 属性,您可以使用它与给定更改列表的键进行比较,以便创建既在本地更改列表中又在特定更改列表中的键集。
- 触发当前 KB 的完全更新
var data = new ReceiveChangesData();
var pendingUpdate = UIServices.TeamDevClient.JustReceiveChanges(ref data);
希望这能让您入门。 如果您有任何问题,请随时提出。