2015-06-10 34 views
1

我遇到了VersionOneAPIClient的一个问题,因为它不会识别任何我给它的资产类型。我理解属性定义可能没有任何意义,但我一直在尝试几乎所有的东西。我的最终目标是查询TeamRooms并从队伍中的所有团队获取团队名称。VersionOne API客户端不识别资产类型?

这是我的理解从asset typeshow to query的文档,这应该工作,但这就是我们都说。

我使用: C#ASP.NET,VersionOneAPIClient 15.0.0.0

弦乐我曾尝试:

  • 工作室
  • 任务
  • 范围
  • 项目

    public bool APIgetTeams() 
    { 
        IAssetType teamroomType = services.Meta.GetAssetType("Task"); 
        Query query = new Query(teamroomType); 
        IAttributeDefinition teamAttribute = teamroomType.GetAttributeDefinition("Children:Room.Team.Name"); 
        query.Selection.Add(teamAttribute); 
        IAttributeDefinition scheduleAttribute = teamroomType.GetAttributeDefinition("Children:Scope.Room.Schedule.Name"); 
        query.Selection.Add(scheduleAttribute); 
        query.Find = new QueryFind(scheduleName, new AttributeSelection(scheduleAttribute)); 
        query.Paging.PageSize = 1; 
        query.Paging.PageSize = 0; 
        teamRoomAsset = (Asset)services.Retrieve(query).Assets.ToArray().GetValue(0); 
    
        return true; 
    } 
    

我的服务和接口的定义:

 public static V1Connector connector = V1Connector 
      .WithInstanceUrl("http://versionone.cscinfo.com/VersionOneProd/") 
      .WithUserAgentHeader("New Dashboard?", "1.0") 
      .WithWindowsIntegrated() 
      .Build(); 
    public IServices services = new Services(connector); 

这些都是我的错误/堆栈跟踪: Error Server Error Meta Stack Trace

的错误是在我的脸上可能简单而正确的,但我无法弄清楚。

回答

5

你有几件事情在这里。我会解决你的问题“我的最终目标是查询TeamRooms并从团队室的所有球队获得球队名称。”

下面是一段代码,它读取您所有的TeamRooms并打印Team Room和Team Name的名称。一旦你在你的机器上工作,尝试做分页。逐步添加过滤器以保持调试周期低。

static void Main(string[] args) 
    { 

     V1Connector connector = V1Connector 
      .WithInstanceUrl("https://www.MyV1INstance") 
      .WithUserAgentHeader("HappyApp", "0.1") 
      .WithUsernameAndPassword("login", "pwd") 
      .Build(); 


     IServices services = new Services(connector); 

     IAssetType trType = services.Meta.GetAssetType("TeamRoom"); 
     Query query = new Query(trType); 
     IAttributeDefinition teamAttribute = trType.GetAttributeDefinition("Team.Name"); 
     IAttributeDefinition nameAttribute = trType.GetAttributeDefinition("Name"); 
     query.Selection.Add(teamAttribute); 
     query.Selection.Add(nameAttribute); 


     QueryResult result = services.Retrieve(query); 
     Asset teamRooms = result.Assets[0]; 

     foreach (Asset story in result.Assets) 
     { 
      Console.WriteLine(story.Oid.Token); 
      Console.WriteLine(story.GetAttribute(teamAttribute).Value); 
      Console.WriteLine(story.GetAttribute(nameAttribute).Value); 
      Console.WriteLine(); 
     } 

附录

我才意识到,你是使用WithWindowsIntegrated()而不是WithUsernameAndPassword()。

只需更改我的示例中的内容,然后确认您已作为已在VersionOne中设置的成员登录到机器中。 windows int auth信任IIS决定信任你,但是在允许auth之后,你必须在VersionOne中拥有一个活跃的成员帐户才能访问VersionOne资产。

+1

你永远不会明白我是多么感激你的指导。 – Griffin

+0

发现问题。我正在使连接器变成静态的,这样它就可以通过服务,并且这样做可以打破所有问题。我应该看到这一点。 – Griffin

+0

我在Java中遇到同样的问题,我想知道为什么连接器是静态的会很重要,因为我也将它抽象为一个单独的静态实用类。你能澄清吗? –