2011-03-21 57 views
3

我想讓用戶可以在創建SharePoint列表中的項目時更改「創建者」值。它似乎是默認隱藏此值並自動填充當前用戶。我想在創建或修改一個項目時給用戶這個選項,並預先填充當前用戶,但也給用戶選擇改變這個字段。在Sharepoint 2007中更改「創建者」

任何人有任何建議或誰能點我在正確的方向?

非常感謝

回答

8

internal name「創」欄目爲作者。

寫一個ItemEventReceiver並覆蓋ItemUpdated方法:

//USER_NAME is user account name that you want to set. 

public override void ItemUpdated(SPItemEventProperties properties) { 
    SPSecurity.RunWithElevatedPrivileges(delegate 
    {  
     using (SPWeb web = properties.OpenWeb())  
     { 
      web.AllowUnsafeUpdates = true; 

      // Insert any other updates here 

      SPUser spUser = web.EnsureUser("USER_NAME"); 
      string strUserId = spUser.ID + ";#" + spUser.Name; 
      spListItem["Author"] = strUserId; 
      spListItem.Update(); 

      // if you do not want to change the Modified or Modified By fields, 
      // use spListItem.SystemUpdate() instead 

     } 
    }); 
} 

編輯:更新的代碼;刪除迭代更新。

+2

spList.Update和web.Update在這裏是多餘的,你不需要它們。也不知道爲什麼你在單個項目的事件下運行時更新所有項目,沒有多大意義。無論如何,在使用此類代碼之前,我會考慮三次,因爲它使存儲在SharePoint中的信息不太可靠,因爲您不知道誰實際創建了該項目。 – 2011-03-22 15:06:22

+0

是@Vladi Gubler這是多餘的和刪除。 – ukhardy 2011-03-22 19:27:09

+0

+1。 @Vladi Gubler也提高了可靠性。確實很棒。我修改了盲目更新。我個人的偏好也不是更新sharepoint內部coumns。我將選擇自定義列;然而,OP是這樣的。 – ukhardy 2011-03-22 19:45:07

-1

謝謝,傢伙,但我應該提到我沒有使用任何代碼。

我的解決辦法是重命名創建通過創建(未使用),創造了一個新創建領域和使用的一些自定義JavaScript來填充在頁面加載的領域。

+0

感謝你和downvote – 2011-03-28 15:53:02

+1

這是一個解決方法,而不是一個解決方案(你實際上並沒有更新由字段創建的)。 @ukhardy提供了一個解決方案,可以解答您的原始問題,並將其標記爲答案。 – theChrisKent 2011-04-04 20:44:39

+0

使用JavaScript更新字段僅適用於用戶使用Web瀏覽器創建項目的情況。在這種情況下,任何使用Web服務或對象模型的第三方應用程序都不會這樣做。 – 2012-09-24 14:34:33