2011-03-02 35 views
3

我不是P4.NET插件的专家,但我想在组合框中显示用户的现有工作空间,以便我可以将p4.Client设置为选定的工作空间。P4.NET - 如何列出用户的工作区?

using (var p4 = new P4Connection()) 
      { 
       p4.Connect(); 
       ???    
      } 

如何获取现有工作区的列表? 我觉得在命令行来实现,这将是

p4 clients -m 100 -u username 
+0

Intellisense在'p4.'上提供了哪些选项?你想要像'Workspaces'这样的东西,但是我没有在这里安装代码。 – ChrisF 2011-03-02 11:35:26

+0

如果这是如此明显,我会打我自己。 ;)没有工作区。仅用于捕获单个工作区的p4.Client。 – Houman 2011-03-02 12:10:24

+0

还有其他什么方法可用?我试图进入http://p4dotnet.sourceforge.net/,但我得到一个500错误代码。 – ChrisF 2011-03-02 12:20:57

回答

2

好吧我没有别的办法,只能回答我自己的问题,因为代码太多了,无法作为评论插入jhwist的答案。对不起,jhwist。我没有选择。

@appinger,我希望你觉得这个答案有帮助。花了我几个小时来弄清楚这个API工作。 :)

cmbBoxPerforceWorkspaceLocation只是您的工作空间的组合框。顺便说一句,我正在使用Winforms。

我需要从windows用户名中提取一个短名称。 Windows用户名通常以xxxx \\用户名开头。在我的代码中,我将用户名从长名称中提取出来并保存为短名称。如果您的网络设置不同,则此代码可能必须相应更改。

让我知道它是否适合你。

using (var p4 = new P4Connection()) 
      { 
       p4.Connect(); 
       var longName = WindowsIdentity.GetCurrent().Name; 
       var shortname = longName.Substring(longName.IndexOf("\\") + 1); 
       var records = p4.Run("clients", "-u", shortname); 

       cmbBoxPerforceWorkspaceLocation.Items.Clear(); 

       foreach (P4Record record in records.Records) 
       { 
        cmbBoxPerforceWorkspaceLocation.Items.Add(record["client"]); 
       } 
      } 
+1

你真的期望我编码整个事情?好吧。 – jhwist 2011-03-07 15:08:07

4

如果P4.Net行为类似官方的API Perforce公司,那么你很可能要运行:

p4.Run("clients", "-m 100 -u username") 

或相似。灵感来自P4Ruby文件。

+0

其实际上是p4.Run(“客户端”,“-m 100 -u用户名”)。但是,谢谢你让我朝着正确的方向前进。 – Houman 2011-03-02 14:42:48

+1

已修复答案。很高兴帮助。 – jhwist 2011-03-02 15:12:26

+0

我已经添加了一些更多的C#代码,以使其更清晰。该API根本不直观。这花了我很多时间。希望我的更新能够帮助别人。 – Houman 2011-03-03 16:25:13

0

P4.Net被设计成类似于脚本的API,而这又是围绕命令行界面设计。它绝对没有一个直观的面向对象的界面......首先关闭。但是,如果您从命令行(esp -ztag标志)开始并将应用程序需要的所有数据/操作组合在一起,则会发现使用P4.Net非常容易。由于它与所有脚本API类似,如果您愿意,您会发现自动拾取Python或Ruby :-)