每月檔案: 2 月 2008

簡單的解釋: “值並不屬於在預期的範圍。”

更新: 匿名的海報留下偉大的評論關於內部名稱. 一定要閱讀它.

使用事件接收器和其他代碼引用的物件模型通過 SharePoint 清單項時, 我常常犯錯誤,生成此執行階段錯誤:

載入時出錯,在 xyzzy 運行事件接收器 Conchango.xyzzyEventReceiver, 版本 = 1.0.0.0, 文化 = 中性, Publickeytoken) = 0dc50a750396c3ac. 附加資訊是下面. : 值不在預期的範圍內.

這是一個相當通用的錯誤,可能造成許多不同的方式. 不過, 一個簡單的解釋是,我錯誤地引用欄位. 如果欄位的名稱是"到期日", 我必須在事件接收器中引用它像這樣:

屬性。ListItem["截止日期"]

當我拼錯或引用該欄位時,使用錯誤的大小寫, SharePoint 生成上述提到的執行階段錯誤. 舉個例子, 這是不對的:

屬性。ListItem["截止日期"]

</結束>

訂閱我的博客.

Technorati 標籤:

最終使用者快速提示: 排序視圖中的文件庫, 清單, 等.

我們可以, 應和做在 SharePoint 清單中創建多個視圖 (文件庫, 自訂清單, 等). SharePoint 總是列出可用的視圖按字母順序排列. 我們不能改變這使用框的功能. 如果它可以通過自訂 (我不確定它可以), 這是遠為技術為典型的最終使用者.

如果您想要控制中的 SharePoint 的順序列出了可用的視圖, 只是開頭的數位或字母的視圖名稱, 如在:

1 – 按物料類型
2 – 所有文檔
3 – 截止日期

-或-

A – 按物料類型
B – 所有文檔
C – 截止日期

我還創建了視圖的目的是嚴格飼料 KPI. 我一直在關注此命名約定:

Z_KPI_[說明]

這導致我"KPI" 視圖,以顯示在清單的底部.

</結束>

訂閱我的博客.

周日滑稽: “當我還是一個小男孩”

作為一個家長, 我在某個地方發現沿該線"當我是個小男孩" 把戲.

我的兒子, 大概四、 五次, 在玩一個氣球和喜歡玩氣球的最小男孩, 他突然它. 他是非常生氣. 世界已經走到盡頭. 我對他說, "當我還是小男孩, 一個氣球,它彈出並最終, 我得到了一個新的氣球。" 它似乎能説明他應付他的損失,並導致一個有趣的談論它是什麼樣子時,我是一個小男孩.

那工作以及我並安慰技術使用它多次在未來一段時間. 我做一次陷入困境時他怪物牧場主 3 生物死了. 我談我的狗, 王子, 在一次車禍中喪生. 這一次, 他的反應是, "現在我覺得壞的兩件事!" 我一直避免使用"當我還是一個小男孩" 在那之後的安慰技術.

在死狗事件發生前, 然而, 我也已經開始使用這項技術要說服他去做家務. "當我是個小男孩, 我不得不走出去,讓報紙", "清潔我的房間", "讓媽媽她杯咖啡", 等.

這也是相當成功的一段時間, 但他開始越來越多地反抗暴政的我的童年. 一個事件, 特別是, 標誌著結束. 我告訴他要把從路邊的垃圾罐帶回車庫. 他認為,我的回應, "當我是個小男孩, 我不得不把垃圾帶回車庫。" 他的回答, "哦是的! 好吧,當你是個小男孩, 那是愚蠢的!".

</結束>

訂閱我的博客.

Technorati 標籤:

不能擔保視圖和列的清單和文件庫

更新 (02/29/08): 這個新的 codeplex 專案似乎提供保護單個列的方法: http://www.codeplex.com/SPListDisplaySetting. 如果您有任何與它合作的經驗, 請留下評論.

論壇海報頻頻問這樣的問題: "我有一個管理器視圖和工作人員的清單的視圖. 如何,工作人員不能使用它安全的管理器視圖?"

他們還經常問的一個相關的問題: "我想要保護的特定中繼資料的列,以便只有經理可以編輯該列,雖然其他人可能不甚至看到它。"

這些答案適用于這兩個 WSS 3.0 和苔蘚:

  • SharePoint 不提供出框支援爭取意見.
  • SharePoint 不安全列提供出框支援.

有幾種技術一可以按照滿足這些類的安全要求. 這裡是我能想到的:

  • 使用預置的專案級安全. 意見總是榮譽專案級安全配置. 事件接收器和/或工作流可以自動執行安全任務.
  • 使用的個人檢視為"特權" 視圖. 這些都是容易設置. 不過, 由於其"個人" 性質, 這些需要為每個使用者配置. 使用標準安全配置,以防止別人從創建個人檢視.
  • 使用資料檢視 web 部件並實現某種 AJAXy 安全修整解決辦法.
  • 滾你自己清單顯示功能,並納入安全修整列級.
  • 修改資料輸入表單和 JavaScript 將與一起使用的安全模型來實現列級安全修整.
  • 使用 InfoPath 表單輸入資料. 實現通過 web 服務調用到 SharePoint 和有條件地隱藏欄位所需的列級安全修整.
  • 卷自己的 ASP.NET 資料條目函數實現列級安全修整.

這些選項均沒那麼好, 但有至少一條路徑,如果您需要遵循, 即使很難.

請注意: 如果你去這些路徑的任何, 別忘了"行動-> 打開 Windows 資源管理器". 你要確保你使用該功能以確保它不會作為一個"後門工作測試" 和擊敗你的安全計畫.

如果您有其他的想法或確保列或視圖的經驗, 請 電子郵件通知我 或留下評論,我就會更新此作為適當的帖子.

</結束>

訂閱我的博客.

Technorati 標籤:

快速提示: BDC ADF 的版本號是你的朋友

如果您正在手動編碼 ADF 的檔,並做了大量的測試/代碼/導入週期, 使用版本號來使你的生活更輕鬆.

我不願承認這一點, 但直到這一周, 我總是被刪去的 ADF 和重新導入它. 這會打破我業務資料列,並讓我將它們重新連接. 所有不必要.

檔這下"很明顯你一旦看見".

示例:

<LobSystem
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://BDCMetadata.xsd schemas.microsoft.com/office/2006/03/BusinessDataCatalog" 類型="Web 服務" 版本="1.2.0.0" 名稱="xyzzyDocumentReview" xmlns="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog">

更改的版本並重新導入和現有的業務資料列使用更新後的版本會自動與不需要的額外配置.

</結束>

訂閱我的博客.

Technorati 標籤:

解決方案: BDC 選取器顯示結果只有一的列

在我去上企圖在提供 使用 BDC 的更多有用的查閱列, 我碰了壁與 BDC 選取器. 如果你還沒有看到它, BDC 機械臂是類似于一個人選取器,不同之處在于它與"業務資料"類型的列一起工作.

您通過的業務資料列,如圖所示的打開的書圖示上按一下訪問選擇器:

圖像

上面的圖片顯示業務資料列,稱為"主文件 Id". 該列被連接, 通過 BDC, 向 web 服務. Web 服務返回兩列資訊: 文件識別碼 和標題. 這裡的經營宗旨是提供"此文檔基於" 功能. 使用者選擇"大師" 文檔和當他們保存, 事件接收器從引用大師複製元資料欄位.

預設情況下, BDC 選取器看起來像這樣,當我搜索文檔的 ID ="38":

clip_image002

這就是很有説明, 但還不夠好. 人們不是按 Id, 他們認為標題和/或其他中繼資料. 選擇器允許您搜索其他列 (例如:. 標題) 但不會顯示的標題它發現的實際清單, 只是他們 DocId 的如下所示:

clip_image002[1]

(螢幕擷取畫面不是那麼大,因為我沒有挑選返回任何有效的結果搜索, 但你可以看到,如果它發現了一些結果, 它只會顯示 DocId 的, 沒有標題).

我搜索的高、 低這個問題的答案和失敗. 我的同事, 尊者 Jonathan 布拉德肖, 曾面對及解決這一問題. 當我伸手向他求助, 他指出我正確的方向.

配置選擇器以顯示多個列,通過"ShowInPicker" 在 ADF 中的屬性:

<屬性 名稱="ShowInPicker" 類型="System.Boolean">真正的</屬性>

在更多的細節:

  <!-- 標題 -->
  <視覺化表示形式 TypeName="System.String" 名稱="標題" >
    <LocalizedDisplayNames>
      <LocalizedDisplayName LCID="1033">標題</LocalizedDisplayName>
    </LocalizedDisplayNames>
    <屬性>
      <屬性 名稱="DisplayByDefault" 類型="System.Boolean">真正的</屬性>
      <屬性 名稱="ShowInPicker" 類型="System.Boolean">真正的</屬性>
    </屬性>
  </視覺化表示形式>

將此屬性設置引入了一個小問題. 只要你設置它一次, 你需要為每個您想要顯示的列設置. 以我為例, 預設情況下顯示 DocId BDC 選取器. 不過, 一次我添加了"ShowInPicker" 標題, DocId 不再顯示. 我通過顯式設置Doc ID的ShowInPicker屬性來解決此問題.

下面是結果:

圖像

(我會解釋的樣子很奇特的"168 – CamlSchema.xsd" 未來博客文章中的構建. 在短, 它是一個字串,它允許略有更好的使用者體驗).

答案是肯定的, 寫完這篇博客, 我只是做一個搜索的"ShowInPicker" 發現許多命中, 包括這一個: http://msdn2.microsoft.com/en-us/library/ms583986.aspx. 它解釋了該屬性的含義以及其他一些好的BDC內容.

</結束>

訂閱我的博客!

Technorati 標籤:

快速 & 容易: 創建一個資料夾,並將分配的內容類型 (或, 有你的 Kpi 和吃它們太)

為了變通 KPI 問題 我寫了關於這裡, 我做了一些測試,發現該 KPI 工作對 meta 資料的資料夾相同的方式,他們工作對檔或清單專案. 我證明了通過創建新的內容類型基於資料夾內容類型,然後添加幾個欄位. 我創建了一些指標和證明自己 Kpi 按預期方式工作. 這是一個好消息. 它並不完美, 因為向下切入你從 KPI 對資料夾不是你想要什麼. 這不是在我的例子太多缺點因為 1) 最終使用者不知道任何更好和 2) 向下切入轉到資料夾. 他們按一下資料夾名稱和他們處於專案. 它是一個兩次點擊, 這不是世界末日.

這很好地流的是我正在做的工作. 我創建了一個資料夾獲取上傳的每個文檔. 這是通過事件接收器. 作為一個結果, 它是一塊蛋糕要保持 父資料夾 元資料同步與 KPI 驅動中繼資料從檔本身因為水管已到位. 這讓我可以擁有我的 KPI,也可以吃它們 🙂

我修改事件接收器添加該資料夾,然後將這個新資料夾中的內容類型設置為我自訂 KPI 友好內容類型. 這段代碼是成功的關鍵:

 SPFolderCollection srcFolders = targetWeb.GetFolder("檔").子資料夾;
  SPFolder addedFolder = srcFolders.Add(屬性。ListItem.ID.ToString());
  SPContentTypeId kpiCT = 新增功能 SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["內容類型 ID"] kpiCT =;
  addedFolder.Item.Update();

若要查找實際的內容類型 ID, 我訪問通過網站設置該內容類型和複製/粘貼它從如圖所示的 URL:

圖像

</結束>

訂閱我的博客!

Technorati 標籤: ,

快速而方便地: 事件接收器中獲取 SPListItem 的 SPFolder

我不願承認這一點, 但這一所有困擾了我一天. 我的事件接收器需要更新其父資料夾的欄位. 這一點點演示如何做它:

私人 無效 UpdateParentFolder(SPItemEventProperties 屬性)
{

SPFolder thisItemFolder = 屬性。ListItem.File.ParentFolder;
thisItemFolder.Item["ZZ 審批狀態"] = "好消息, 每個人都!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

在此情況下, 我正在與文件庫和屬性都來自 ItemAdded 事件.

訣竅是你不能直接從專案本身得到的該專案的 SPFolder (e 小節. 屬性。ListItem.Folder 為空). 相反, 轉到清單項關聯的檔,並獲取該檔的資料夾.

</結束>

訂閱我的博客!

Technorati 標籤:

然而另一個事件接收器調試技巧

我確信我不是第一次的人來了. 不過, 我沒注意到有人開始密切關注社區去年 7 月發佈這樣的小把戲. 所以, 我還以為會張貼本快速、 方便的調試技巧.

我正在開始產生此錯誤的事件接收器 12 配置單元:

載入時出錯,在 xyzzy 運行事件接收器 Conchango.xyzzyEventReceiver, 版本 = 1.0.0.0, 文化 = 中性, Publickeytoken) = blahbalhbalh. 附加資訊是下面. : 未設置到物件的實例的物件引用.

我不知道在哪裡我曾經引進了這個 bug,因為我做了太多的事情,在我的代碼,部署,測試週期之一.

我試過 此解決方案 進去我 pdb 的希望那 SharePoint 12 蜂巢將會顯示堆疊追蹤, 但沒有運氣. 我不知道如果有可能,如果有人做了, 請讓我知道 🙂

這是可能的 寫給自己的日誌消息 12 配置單元. 坦白地說, 我想要的東西有點不那麼可怕和更快地執行.

我突然想到我至少能一些基本的跟蹤資訊的捕捉並再次引發這樣的泛型異常:

  請嘗試 {
    UpdateEditionDate(屬性);
  }
  捕獲 (異常 e)
  {
    拋出 新增功能 異常("調度員, UpdateEditionDate(): 異常: [" + e.ToString() + "].");
  }

這在出現了 12 蜂巢難耐:

載入時出錯,在 xyzzy 運行事件接收器 Conchango.xyzzyEventReceiver, 版本 = 1.0.0.0, 文化 = 中性, Publickeytoken) = 哈裡斯. 附加資訊是下面. : 調度程式, UpdateEditionDate(): 異常: [NullReferenceException 系統。: 未設置到物件的實例的物件引用. 在 Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties 屬性) 在 Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties 屬性, 字串 eventDescription)].

這給了我所有的細節,我需要追蹤那個特定的問題,我希望使用它很多事要向前.

</結束>

訂閱我的博客!