P4 .NET API を使用して指定ユーザーが作成したワークスペース名を取得する方法です。
こちらのメソッドを使用します。
結果から言えばこちらのような内容でうまくいきました。
public void ConnectWS()
{
Server srv = new Server(new ServerAddress(P4PORT));
p4 = new Repository(srv);
con = p4.Connection;
con.UserName = P4USER;
con.Client = new Client();
con.Client.Name = P4CLIENT;
connected = con.Connect(null);
if (connected)
{
try
{
Credential cred = con.Login(P4PASSWD);
ClientsCmdOptions opts = new ClientsCmdOptions(ClientsCmdFlags.None, P4USER, null, 10, null);
IList<Client> clients = p4.GetClients(opts);
var wsList = new List<string>();
foreach (var client in clients)
{
wsList.Add(client.Name.ToString());
}
if (wsList.Contains(P4CLIENT))
{
MessageBox.Show(P4CLIENT + " は存在します");
}
else
{
MessageBox.Show(P4CLIENT + " は存在しません");
}
}
catch (P4Exception e)
{
connected = false;
MessageBox.Show("接続に失敗しました。設定を確認してください");
Console.WriteLine("Couldn't connect P4-Server!\n {0} : {1}", e.ErrorCode, e.Message);
}
}
}
接続先のディポの情報の取得がこちらで、公式ドキュメントのサンプル通りになります。
// Get workspace name
ClientsCmdOptions opts =
new ClientsCmdOptions(ClientsCmdFlags.None, P4USER, null, 10, null);
IList<Client> clients = p4.GetClients(opts);
第二引数でユーザー名を指定しています。
複数存在する可能性があるのでリストに格納しています。
試しにメッセージボックスで表示してみると下図のような感じで、ディポの様々な情報が取得できますが、欲しいのは「Client」の値です(プロパティ一覧)。
この Client の項目は Name プロパティで取得できるようです。
そこで別途リストを作成して Foreach でワークスペース名だけ抽出しています。
var wsList = new List<string>();
foreach (var client in clients)
{
wsList.Add(client.Name.ToString());
}
そしてリストに対して Contains メソッドで一致するものが含まれるか調べています。
// Check to exist the workspace
if (wsList.Contains(P4CLIENT))
{
MessageBox.Show(P4CLIENT + " は存在します");
}
else
{
MessageBox.Show(P4CLIENT + " は存在しません");
}
以上、メモでした!