2012-04-12 63 views
0

在可信應用程序端點中,我必須基於外部狀態提供程序發佈用戶狀態,我可以這樣做(稍後在外部源「空閒」是一個不同的問題)發佈在用戶lync客戶端上沒有顯示的Lync 2010用戶狀態

但是,有什麼問題是,如果我爲用戶A發佈新狀態,並不反映在該用戶自己的Lync客戶端上,但其他人都會得到更新。

此時此刻我正在使用此代碼段做出版:

user.Endpoint.LocalOwnerPresence.BeginPublishPresence(
     user.categories, 
     arBeginPublishPresence => 
     { 
      try 
      { 
       user.Endpoint.PresenceServices.EndUpdatePresenceState(arBeginPublishPresence); 
       logger.log("Published presence for {0} with state {1}.", user.SipUserUri, newState.Availability); 
      } 
      catch (RealTimeException ex) 
      { 
       logger.log("Failed publishing presence for {0}. {1}", user.SipUserUri, ex); 
      } 
     }, 
     null); 

其中user.categories是:

  PresenceCategoryWithMetaData stateWithMetaDataForPersonal = new PresenceCategoryWithMetaData(++instanceId, 400, newState); 
      PresenceCategoryWithMetaData stateWithMetaDataForWorkgroup = new PresenceCategoryWithMetaData(instanceId, 300, newState); 
      PresenceCategoryWithMetaData stateWithMetaDataForColleagues = new PresenceCategoryWithMetaData(instanceId, 200, newState); 
      PresenceCategoryWithMetaData stateWithMetaDataForExternal = new PresenceCategoryWithMetaData(instanceId, 100, newState); 
      PresenceCategoryWithMetaData stateWithMetaDataForAll = new PresenceCategoryWithMetaData(instanceId, 0, newState); 
      if (instanceId >= Int64.MaxValue) 
      { 
       instanceId = 1; 
      } 

      stateWithMetaDataForPersonal.ExpiryPolicy = expirypolicy; 
      stateWithMetaDataForWorkgroup.ExpiryPolicy = expirypolicy; 
      stateWithMetaDataForColleagues.ExpiryPolicy = expirypolicy; 
      stateWithMetaDataForExternal.ExpiryPolicy = expirypolicy; 
      stateWithMetaDataForAll.ExpiryPolicy = expirypolicy; 

      stateWithMetaDataForPersonal.Expires = timeout; 
      stateWithMetaDataForWorkgroup.Expires = timeout; 
      stateWithMetaDataForColleagues.Expires = timeout; 
      stateWithMetaDataForExternal.Expires = timeout; 
      stateWithMetaDataForAll.Expires = timeout; 

      user.categories = 
       new List<PresenceCategoryWithMetaData>() 
         { 
          stateWithMetaDataForPersonal, 
          stateWithMetaDataForWorkgroup, 
          stateWithMetaDataForColleagues, 
          stateWithMetaDataForExternal, 
          stateWithMetaDataForAll 
         }; 

類別是地毯式轟炸的存在狀態,我只是知道我做錯了。這不可能是這個......混亂。

請耐心等待,我是C#,.NET和UCMA的新手,直到一個月前從未碰過它。

回答

0

這對我來說似乎是正確的行爲。 Lync將聚合用戶登錄的所有端點的狀態,以提供單一狀態。例如,如果用戶在他的個人電腦上登錄Lync並設置爲「離開」,並且在他的移動客戶端上顯示「可用」,則所有用戶都將看到聚合的「可用」狀態 - 因爲他可以到達其中一個端點。但是,他的Lync客戶端仍然會「離開」。

所以我覺得同樣的事情發生在你身上。您的UCMA應用程序只是您發佈的另一個端點。您可能正在發佈「可用」狀態,但這是來自UMCA應用程序中端點的狀態,因此它不會影響他登錄的任何其他端點,例如, Lync客戶端。但是,所有其他用戶將看到聚合狀態。

這比我用代碼證明的任何東西都更有教育意義。我有一個通過SDK的偵察員,但我看不到任何方式來「覆蓋」另一個端點的存在(實際上,這樣做強烈感覺像是錯誤的行爲)。

+0

事實證明,添加ContainerId 2實際上似乎是這樣做的。 – 2012-04-20 22:23:02

+0

這是有道理的,我猜 - 你只需要確保容器ID確實映射回你想要的端點 - 例如如果用戶在移動設備和PC上登錄,是否要更改兩者,或者只是定位到PC,然後您需要了解要更新哪個容器。另外,請記住,如果您這樣做,並將Lync中的用戶狀態設置爲忙,沒有什麼可以阻止他們改變它回覆覆蓋你的變化 – 2012-04-20 22:28:19

+0

我知道。我試圖訂閱在線更新,當它發佈了一個接收事件,導致了一個新的帖子時,我有幾次發現了這一點......即時日誌填充:)有一個我關心的問題是狀態更新,其中xml消息本身返回一個狀態,但aggregatesState對象是-1和「無」 – 2012-04-20 22:44:58

相關問題