每月档案: 2 月 2008

简单的解释: “值并不属于在预期的范围。”

更新: 匿名的海报留下伟大的评论关于内部名称. 一定要阅读它.

使用事件接收器和其他代码引用的对象模型通过 SharePoint 列表项时, 我常常想生成此错误在运行时的错误:

加载时出错,并在 xyzzy 中运行事件接收器 Conchango.xyzzyEventReceiver, 版本 = 1.0.0.0, 文化 = 中性, 公钥 = 0dc50a750396c3ac. 附加信息是下面. : 值不在预期的范围内.

这是一个相当通用的错误,可能造成许多不同的方式. 不过, 一个简单的解释是,我错误地引用字段. 如果字段的名称是"到期日", 我必须在事件接收器中引用此类:

属性。ListItem["到期日"]

当我出现拼写错误或使用错误的大小写,引用该字段时, SharePoint 生成上述提到的运行时错误. 例如, 这是错误的:

属性。ListItem["到期日"]

</结束>

订阅我的博客.

Technorati 标签:

最终用户快速提示: 排序视图中的文档库, 列表, 等.

我们可以, 应该和做在 SharePoint 列表中创建很多的意见 (文档库, 自定义列表, 等). SharePoint 总是列出可用的视图按字母顺序排列. 我们不能改变这使用框的功能. 如果它可以通过自定义 (它可以不肯定), 它是远到技术为典型的最终用户.

如果你想要控制哪些 SharePoint 中的顺序列出了可用的视图, 只需将预置数字或字母的视图名称, 如在:

1 – 由材料类型
2 – 所有的文档
3 – 截止日期

-或-

A – 由材料类型
B – 所有的文档
C – 截止日期

我还创建了视图的目的是严格饲料 KPI. 我一直在关注此命名约定:

Z_KPI_[说明]

这导致我"KPI" 视图,以显示在列表的底部.

</结束>

订阅我的博客.

Technorati 标签: ,

周日搞笑: “当我是一个小男孩”

作为一个家长, 我在某个地方发现沿该线"当我是一个小男孩" 把戏.

我的儿子, 大概四或五次, 在玩一个气球和喜欢玩气球的最小男孩, 他突然它. 他是非常生气. 世界已经走到尽头. 我对他说, "当我还是小男孩, 一个气球,它弹出并最终, 我得到了一个新的气球。" 它似乎能帮助他应付他的损失,并导致一个有趣的谈论它是什么样子时,我是一个小男孩.

那工作以及我并安慰技术使用它多次在未来一段时间. 我做一次陷入困境时他怪物牧场主 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 服务返回两列信息: 文档 ID 和标题. 这里的经营宗旨是提供"此文档基于" 功能. 用户选择"大师" 文档和当他们保存, 事件接收器将从引用主复制元数据字段.

默认情况下, BDC 机械臂看起来像这样,当我搜索文档的 ID ="38":

clip_image002

这是很有帮助, 但还不够好. 人们不是按 Id, 他们认为标题和/或其他元数据. 选择器允许您搜索其他列 (例如:. 标题) 但不会显示实际的找到它的标题列表, 只是他们 DocId 的如下所示:

clip_image002[1]

(拍摄的画面不是如此之大的因为我没拿返回任何有效的结果的搜索, 但是你可以看到,如果它发现了几个结果, 它只会显示 DocId 的, 没有标题).

我搜索的高、 低这个问题的答案和失败. 我的同事, 高龄 乔纳森 · 布拉德肖, 曾面对及解决这一问题. 当我伸手向他求助, 他指出,我朝着正确的方向.

配置选择器以显示多个列通过"ShowInPicker" 在 ADF 中的属性:

<属性 名称="ShowInPicker" 类型="System.Boolean">true</属性>

详细:

  <!-- 标题 -->
  <设计图 TypeName="System.String" 名称="标题" >
    <LocalizedDisplayNames>
      <LocalizedDisplayName LCID="1033">标题</LocalizedDisplayName>
    </LocalizedDisplayNames>
    <属性>
      <属性 名称="DisplayByDefault" 类型="System.Boolean">true</属性>
      <属性 名称="ShowInPicker" 类型="System.Boolean">true</属性>
    </属性>
  </设计图>

将此属性设置引入了一个小问题. 只要你设置它一次, 你需要为每个您想要显示的列设置. 以我为例, 默认情况下显示 DocId BDC 选取器. 不过, 我有一次添加"ShowInPicker" 标题, DocId 不再显示. 我的解决办法是通过显式将 ShowInPicker 属性设置为 Doc ID.

下面是结果:

图像

(我会解释,样子很奇特的"168 – CamlSchema.xsd" 在以后的博客文章建设. 在短, 它是一个字符串,它允许稍有更好的用户体验).

答案是肯定的, 写了这篇博客, 我只是做了"ShowInPicker 搜索" 发现无数点击数, 包括这一: http://msdn2.microsoft.com/en-us/library/ms583986.aspx. 它说明了该属性以及一些其他好的 BDC 东西的意义.

</结束>

订阅我的博客!

Technorati 标签:

快速 & 容易: 创建一个文件夹,并将分配一个内容类型 (或, 有你的 Kpi,它们也吃)

为了变通 KPI 问题 我写了关于这里, 我做了一些测试,发现该 KPI 工作对 meta 数据的文件夹相同的方式,他们工作对文件或列表项目. 我证明了通过创建新的内容类型基于文件夹内容类型,然后添加几个字段. 我创建了一些指标和证明自己 Kpi 按预期方式工作. 这是一个好消息. 它并不完美, 因为向下钻取你从 KPI 对文件夹不是你想要什么. 这不是在我的例子太多缺点因为 1) 最终用户不知道任何更好和 2) 向下钻取转到文件夹. 他们单击文件夹名称和他们处于项目. 它是一个两次点击, 这不是世界末日.

这很好地流的是我正在做的工作. 我创建了一个文件夹获取上传的每个文档. 这是通过事件接收器. 结果, 它是一块蛋糕要保持 父文件夹 元数据同步与 KPI 驱动元数据从文件本身因为水管已到位. This allows me to have my KPI’s and eat them too 🙂

我修改事件接收器添加该文件夹,然后将这个新文件夹中的内容类型设置为我自定义 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, 文化 = 中性, 公钥 = blahbalhbalh. 附加信息是下面. : 未设置到对象的实例的对象引用.

我不知道在哪里我曾经引进了这个 bug,因为我做了太多的事情,在我的代码,部署,测试周期之一.

我试着 此解决方案 想我 pdb 抱着希望,SharePoint 12 配置单元会显示堆栈跟踪, 但运气不好. 我不知道如果有可能,如果有人做了, 请让我知道 🙂

我知道这是可能的 将您自己日志消息写入 12 配置单元. 坦白地说, 我想要的东西稍少一些可怕的和更快地实现.

我想到我至少能让一些基本的跟踪信息的捕捉和再次引发像这样的泛型异常:

  请尝试 {
    UpdateEditionDate(属性);
  }
  赶上 (异常 e)
  {
    抛出 新增功能 异常("调度员, UpdateEditionDate(): 异常: [" + e.ToString() + "].");
  }

这显示在 12 这上面配置单元:

加载时出错,并在 xyzzy 中运行事件接收器 Conchango.xyzzyEventReceiver, 版本 = 1.0.0.0, 文化 = 中性, 公钥 = 特立. 附加信息是下面. : 调度程序, UpdateEditionDate(): 异常: [System.NullReferenceException: 未设置到对象的实例的对象引用. 在 Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties 属性) 在 Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties 属性, 字符串 eventDescription)].

这给了我追踪这一具体问题所需的所有细节,我希望使用它很多前进.

</结束>

订阅我的博客!