C# VersionOne API客户端无法识别资产类型?

C# VersionOne API客户端无法识别资产类型?,c#,asp.net-mvc,versionone,C#,Asp.net Mvc,Versionone,我遇到了VersionNoAppClient的问题,因为它无法识别我给它的任何资产类型。我理解属性定义可能没有任何意义,但我已经尝试了几乎所有的方法。我的最终目标是查询TeamRoom并从TeamRoom中的所有团队中获取团队名称 我从上的文档中了解到,这应该是可行的,但我们都这么说 我正在使用: C#ASP.NET,VersionNoapicClient 15.0.0.0 我尝试过的字符串: 团队室 任务 范围 计划 public bool APIgetTeams() { I

我遇到了VersionNoAppClient的问题,因为它无法识别我给它的任何资产类型。我理解属性定义可能没有任何意义,但我已经尝试了几乎所有的方法。我的最终目标是查询TeamRoom并从TeamRoom中的所有团队中获取团队名称

我从上的文档中了解到,这应该是可行的,但我们都这么说

我正在使用: C#ASP.NET,VersionNoapicClient 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);
以下是我的错误/堆栈跟踪:


在我看来,这个错误很简单而且正确,但我无法理解。

这里发生了一些事情。我将针对您的声明“我的最终目标是查询团队会议室并从团队会议室中的所有团队中获取团队名称”

下面是一段工作代码,它读取您的所有团队室,并打印团队室的名称和团队名称。一旦你在你的机器上开始工作,试着做分页。以增量方式添加筛选以保持较低的调试周期

 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()而不是WithUserName和Password()


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

您在这里遇到了一些问题。我将针对您的声明“我的最终目标是查询团队会议室并从团队会议室中的所有团队中获取团队名称”

下面是一段工作代码,它读取您的所有团队室,并打印团队室的名称和团队名称。一旦你在你的机器上开始工作,试着做分页。以增量方式添加筛选以保持较低的调试周期

 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()而不是WithUserName和Password()


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

您永远不会明白我是多么感激您的指导。发现问题了。我将连接器设置为静态,这样就可以将其传递给服务,这样就破坏了一切。我应该看到这一点。我在Java中也遇到了同样的问题,我想知道为什么连接器是静态的会很重要,因为我还将其抽象为一个单独的静态实用程序类。你能澄清一下吗?你永远不会明白我是多么感激你的指导。我发现了问题。我将连接器设置为静态,这样就可以将其传递给服务,这样就破坏了一切。我应该看到这一点。我在Java中也遇到了同样的问题,我想知道为什么连接器是静态的会很重要,因为我还将其抽象为一个单独的静态实用程序类。你能澄清一下吗?