2015-06-10 32 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中遇到同樣的問題,我想知道爲什麼連接器是靜態的會很重要,因爲我也將它抽象爲一個單獨的靜態實用類。你能澄清嗎? –