2012-10-26 52 views
2

我在列表中有一個託管元數據列。用英語的數值:Brussel用法語:Bruxelles。managedmetadata字段中的AfterProperties和BeforeProperties根據語言返回不同的字符串

我需要在ItemUpdating事件中比較之前和之後的屬性。我知道之前不能使用,因爲它會在項目更新中返回null,所以我必須使用properties.ListItem。

如果用戶使用英語的UI,那麼下面的代碼工作正常,因爲術語是相同的。

但是,如果用戶選擇法語,那麼這將無法正常工作。因爲afterproperties將是布魯塞爾

private void ValidateAssignmentDate(SPItemEventProperties properties, SPListItem item) 
     { 
      string currentBudgetSection = properties.ListItem["BudgetSection"] == null ? string.Empty : properties.ListItem.GetTaxonomyFieldValue("BudgetSection").ValidatedString.ToString(); 
      string newBudgetSection = properties.AfterProperties["BudgetSection"].ToString(); 
      bool budgetSectionSame = newBudgetSection.Equals(currentBudgetSection); 

      if(!budgetSectionSame))  
      { 

//dosomething 

他擴展方法是:(我不能改變的擴展方法)

public static TaxonomyFieldValue GetTaxonomyFieldValue(this SPListItem item, string fieldName) 
     { 

      TaxonomyFieldValue returnValue = null; 
      try 
      { 
       TaxonomyField taxonomyField = GetTaxonomyField(item, fieldName); 
       if (taxonomyField != null && taxonomyField.Id != null) 
        returnValue = item[taxonomyField.Id] as TaxonomyFieldValue; 
      } 
      catch (Exception ex) 
      {     
       throw; 
      }    
      return returnValue; 
     } 

回答

1

我固定它這樣。 關於它的博客:http://levalencia.wordpress.com/

string currentBudgetSection = properties.ListItem["BudgetSection"] == null ? string.Empty : properties.ListItem.GetTaxonomyFieldValueByLanguage(item.Web.Site, "BudgetSection", Thread.CurrentThread.CurrentUICulture.LCID).ToString(); 
      string newBudgetSection=string.Empty ; 
      if (properties.AfterProperties["BudgetSection"] != null && !string.IsNullOrEmpty(properties.AfterProperties["BudgetSection"].ToString())) 
      { 
       int startIndex = properties.AfterProperties["BudgetSection"].ToString().IndexOf("#")+1; 
       int endIndex = properties.AfterProperties["BudgetSection"].ToString().IndexOf("|"); 
       int length = endIndex - startIndex; 
       newBudgetSection = properties.AfterProperties["BudgetSection"] == null ? string.Empty : properties.AfterProperties["BudgetSection"].ToString().Substring(startIndex, length); 
      } 


bool budgetSectionSame = newBudgetSection.Equals(currentBudgetSection); 
      if((!budgetSectionSame) 
//do something 
相關問題