每月档案: 6 月 2009

InfoPath 表单服务, 基于表单的身份验证 (FBA) 和唯一的文件名称

我已经对某些 InfoPath 表单本周在 MOSS FBA 环境中工作和教训, 当我去部署到生产环境中使用 FBA 形式区的用户名() 功能不起作用. 我用它来生成唯一的文件名.

井, 该函数在 FBA 环境中不工作 (至少, 未出的框中). 和, 后的思考, 在我的计划的方式中使用的用户名不会保证了唯一的文件名在任何情况下.

我的解决方案是使用了现在() 函数和触发窗体的加载规则. 我需要将文件名称分配数据元素,当它是空白:

image

image

这种方法的优点是只有一次集文件名称. (我没有表现出来的屏幕截图, 但一个条件放要只火时"myFilename"是空白的规则). 我用来在数据源级别设置的文件的名称. 通常, 我会做的东西 (坏) 喜欢这个:

image

这带来的问题是,如果用户 A 在周一打开窗体,并将用户 B 更改周二, 到头来你会用两种不同形式因为两个不同的用户将其保存为不同的用户名称.

所以, FBA 可以很一般,InfoPath 特别烦人, 它让我重新思考小,但真的很重要的技术细节和的方法,否则我不会做!

</结束>

订阅我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

Technorati 标签:

确保 SharePoint 列表/文档库视图似乎 (排序的) JQuery 的可能

这是另一个帖子中的我 系列 有关如何使用 jQuery 使用 SharePoint.
如果您想要了解更多关于 jQuery, 我强烈推荐: jQuery 在行动 由熊 Bibeault 和耶胡达 · 卡茨.

我想到的第一件事之一, 一次,我开始玩 jQuery, 是是否我们可以用它来确保 SharePoint 视图. 答案是"不" (或至少, 我并不认为它有可能). 不过, 很有可能要让人看见的特定视图的困难.

我的沙箱环境时这项工作的开始. 我写了关于此处的环境: 快速、 方便: 创建您自己的 jQuery 沙箱的 SharePoint.

以"安全"视图, 请按照这些步骤:

  1. 创建的视图如果想要确保. 我那样做了,称之为"担保视图".

    这是它的外观时它不"安全":

    image

  2. 将内容编辑器 web 部件添加到视图的页面使用沙盒文章中介绍的技巧 (e 小节. 添加"浏览量 = 共享&ToolPaneView = 2"的 url).
  3. 找出您的 SharePoint _spUserId 由以下这些疯狂的步骤, 信不信:
    1. 登录到您的 SharePoint 环境.
    2. 在 web 浏览器的地址字段, 类型: "javascript:警报(_spUserId").
    3. 记录结果 (它是"13"在我的例子).

      image

  4. 将下面的 javascript 代码添加到您在代码视图中的 CEWP:

    <脚本类型 ="文本/javascript"
        src ="../../jQuery Library/jquery-1.3.2.min.js">
    </脚本>
    
    <脚本类型 ="文本/javascript">
      $(功能() {
    
        警报(_spUserId);
    
        var theSecuredView = $(iframe[FilterLink * = 担保的  view]');
    
        如果 ((theSecuredView.length > 0) && (_spUserId = = 13))
          $(iframe[FilterLink * = 担保的  view]').父().父().父().html("<背景色 tr = 红色><运输署>没有你的看法!</运输署></tr>");
      });
    
    </脚本>
    

我已经包括了该警报(_spUserId) 线在那里展示如何,这不是真的"确保安全"的视图, 但只使它更难见. 更多的时刻.

基本上, jQuery 寻找那些具有一个包含"安全 view"在其值的属性页面上的 iFrame. 一旦找到了,它, 我们检查当前用户是否是"13". 如果它是, 我们走到 DOM <TR> 标记 (其中通过查看源和跟踪它弄) 然后将该 TR 标签替换为我的邮件. 真的不知道这是多么健壮 (我很怀疑, 事实上), 但它在我的沙盒工作. 如果找到了更好的方式, 我会对它的博客. 这是结果:

image

单击确定按钮和数据替换为大红色消息:

image

您可以看出, 种方式让我实现这个"安全"解决方案是允许 web 部件来呈现自己. 它完成后, 我用我"没有查看您覆盖其内容!"消息.

尽管它不是真的"担保"视图, 它是可能有用,并与一些聪明的工作, 它最终可能安全更正式的意义上. 根本的问题是,客户端获取的所有数据,然后, 它获取的数据后才, 它擦干,再. 如果客户端获取数据, 聪明的用户可以看到她想要看到并阻止 jQuery 在所有运行.

有其他缺点. 这种"安全"的方法基于 _spUserId. 我们想要真正安全的基础完整的 SharePoint 安全模型, 或者说,至少按用户名称. 那变得越来越难, 但我看到一些好的东西写在这个问题上, 所以我希望有好的回答这一问题.

应修剪视图本身的列表, 如果可能的话. 我还没有尝试去弄明白. 是它可能, 但真的并不能解决根本的安全问题,因为有人可能还只是键入的 URL 的他们想要的视图 (如果他们知道它). 不过, 切边有道理. 这是一个良好的可用性功能,它有助于混淆的东西. 如果最终用户并不知道查看事件的存在, 他们可能不会尝试使用它. 有时, 这就是不够好.

幸运的是, 我会有更多要写上这一问题随着时间的推移.

</结束>

订阅我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

快速、 方便: 更好的使用 jQuery 的隐藏 SharePoint Form 上的文本字段

这是另一个帖子中的我 系列 有关如何使用 jQuery 使用 SharePoint.
如果您想要了解更多关于 jQuery, 我强烈推荐: jQuery 在行动 由熊 Bibeault 和耶胡达 · 卡茨.

以前, 我写了关于如何使用 jQuery 来查找和隐藏窗体的文本字段. 我不在乎的具体办法 (我链接父母 — — 这是根本不做这些天, 至少在家庭的质量).

当我第一次开始去想它, 我知道我需要找到 <TR> 我可以调用隐藏() 方法. 我找到正确的早期努力 <TR> 是这样的事:

$(' tr:已(输入[标题 = 隐藏我!])');

问题是它会找到每个 <TR> 我有任何父关系对隐藏的标记! 字段, 即使把我藏! 是深的多层嵌套 <TR>的. 原来,在我的沙盒表单, 该表达式查找 9 不同 TR 的那些隐藏我! 作为一个孩子在其 DOM 树的某个地方. 我意识到,能回到上一棵树从输入字段本身走, 这就是我是如何结束了滥用父母, 但它没坐好与我.

给这样的一些思想和我读到最后的事情之一是合情合理: 我能用不() 要修剪出方法 <TR>我不想在我包装一套. 我被引到这:

$(' tr:已(输入[标题 = 隐藏我!])').不(' tr:已(tr)').隐藏();

查找所有的第一位 <TR> 我已隐藏的标记! 他们自己层次结构中任何位置的字段. 它然后带出任何 <TR> 这也有一个孩子 <TR>. 这使我们与单 <TR> ,:

1) 没有 <TR> 子记录

2) 没有输入的字段作为孩子.

然后,我们可以应用隐藏() 设置到结果的方法和我们讲完.

我仍然对此有点紧张, 但不是链接的父母一样紧张.

我不知道这不是是一种最佳做法. 可能更适当的方式确定的只是 <TR> 我们关心的 SharePoint 表单中. 如果你知道, 请张贴评论.

</结束>

订阅我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

快速、 方便: 使用 jQuery 隐藏 SharePoint Form 上的文本字段

这是另一个帖子中的我 系列 有关如何使用 jQuery 使用 SharePoint.
如果您想要了解更多关于 jQuery, 我强烈推荐: jQuery 在行动 由熊 Bibeault 和耶胡达 · 卡茨.

更新 (已经!): 我没有想到找到更好的方法 <TR> 我想要隐藏的标记和 在这里写了关于它. 你可能仍然觉得这篇文章有趣反正所以我 leavnig 起来.

我想要隐藏的文本字段, "隐藏我!"如图所示:

image

下面的 jQuery 我的手法:

<脚本类型 ="文本/javascript">

  $(功能() {


    $(' 输入[标题 = 隐藏我!]').父().父().父().隐藏();

  });

</脚本>

该代码说, "查找我的所有输入字段的标题 = 隐藏我!. 然后, 获取其父,然后下一步父和 * 下一步 * 父 (吁!) 和调用隐藏() 关于那件事的方法, 不管它碰巧是.

我想出该父结构通过查看 HTML 的表单的 SharePoint 创建如图所示:

<TR>
    <TD nowrap="true" 底边对齐= 强"" 宽度="190px" ="ms-formlabel">
        <H3 ="ms-standardheader">
            <nobr>隐藏我!</nobr>
        </H3>
    </TD>

    <TD 底边对齐= 强"" ="ms formbody" 宽度="400px">
        <!-- FieldName ="隐藏我!"
                 FieldInternalName ="Hide_x0020_Me_x0021_"
                 FieldType ="SPFieldText"
        -->
        <大跨度 迪尔="无">
            <输入
                名称="ctl00$ m 元 g_bdb23c2c_fde7_495f_8676_69714a308d8e 元 ctl00 元 ctl04 元 ctl02 元 ctl00 元 ctl00 元 ctl04 元 ctl00$ ctl00$ TextField"
                类型="文本"
                maxlength="255"
                id="ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField"
                标题="隐藏我!"
                ="ms 长" />
                <br>
        </大跨度>


    </TD>
</TR>

这张照片显示相同, 但标有父母:

image

第一个父 (1) 是 span 标记. 跨度的父 (2) 是 TD 标签,然后最后我们吃到真希望隐藏的父 (3) 这是 TR 标签本身.

这是一个相当可怕的方法,我认为因为它非常依赖于这种形式非常特定的结构. 当 SharePoint 2010 出来, 这整个的结构可以改变,打破这种方法. 我真的想做是一个 jQuery 选择器,是沿着线的工艺"找到我所有 TR 的 (和唯一 TR 标签) 有某处及其子元素输入的字段的标题 = 隐藏我!”. 我从底部开始,向上移动. 假设我把这弄, 我会发布更新"快速而方便地 ' 发布.

</结束>

订阅我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

del.icio.us 标记: ,

快速、 方便: 创建您自己的 jQuery 沙箱的 SharePoint

这是另一个帖子中的我 系列 有关如何使用 jQuery 使用 SharePoint.
如果您想要了解更多关于 jQuery, 我强烈推荐: jQuery 在行动 由熊 Bibeault 和耶胡达 · 卡茨.

在 SharePoint 中的 jQuery 入门是非常的简单 (对我来说). (我了关于"最佳做法"的方法来部署这些东西到生产的严重问题, 但这是另一天). 我刚开始玩这种技术,并为此目的, 我创建了一个沙箱环境使用. 如果你想要了解的 jQuery 入门, 您可能会发现这种方法很有用.

1. 创建一个空白网站

在您的网站中某处创建一个空白网站并调用它聪明"jQuery 沙箱"一样的东西.

2. 下载 jQuery

您可以从这里下载 jQuery javascript 库: http://docs.jquery.com/Downloading_jQuery

将到保存到您的桌面.

我一直在使用的"容易"版本.

3. 创建 SharePoint 文档库

沙盒站点中, 创建文档库.

4. 上载到 SharePoint 的 jQuery 库

访问您刚刚创建的文档库和上传的 jQuery 库.

5. 创建自定义 SharePoint 列表

因为我想要标准 SharePoint 形式再乱动,我已经开始自定义列表. 您还可以创建页面库中的网页或 web 部件页和可能很多其他的地方.

将一些列添加到自定义列表,所以,你有什么要运行 jQuery 反对. 我最初的目标是 ︰:

  1. 隐藏字段.
  2. 将一个值分配给字段.

考虑到该目标, 我添加了两个文本字段. 随着时间的推移, 我会玩的链接, 图像, 查找, 等.

6. 修改 NewForm.aspx Web 部件页并添加内容编辑器 Web 部件

这是有点黑 magic-ish , 它是一个新的概念,对我. 我第一次听说这从 保罗 · 翼, SharePoint jQuery 巨星, 在他的 CodePlex 项目站点: http://spff.codeplex.com/.

请按照以下步骤将 CEWP 添加到同一页面的任何自定义列表显示 NewForm.aspx:

  1. 访问自定义列表中,单击新建.
  2. 将下列附加到 URL: 浏览量 = 共享&ToolPaneView = 2

这将改变从这事你无聊香草数据输入窗体:

image

对此:

image

向页面添加内容编辑器 web 部件.

7. 写你的第一个 jQuery 代码

开放,CEWP 在代码视图中,添加以下内容:

image

这是实际的代码,如果您想要复制/粘贴:

<脚本类型 ="文本/javascript"
    src ="../../jQuery Library/jquery-1.3.2.min.js">
</脚本>

<脚本类型 ="文本/javascript">
  $(功能() {

    $('' #resultsID).html(' 有 ' + $('' a).大小() + ' tags 标签在此页上起 '。);

  });
</脚本>

结果:
<div id ='' resultsID></div>
/结果

请注意,第一次 <脚本> 标记引用实际的 jQuery 库. 大概是, 随着时间的推移改变这些东西, 所以你会想要确保你) 使用正确的名称和 b) 它指向正确的 SharePoint 文档库.

沐浴在荣耀

如果你能正确, 你会看到一个类似于以下内容的结果:

image

总结

这不是唯一的方法要开始, 但它是快速, 容易与您现有的 SharePoint 环境隔绝.

</结束>

订阅我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

del.icio.us 标记: ,

快速、 方便: SharePoint 窗体上使用 jQuery 的设置文本字段的值

我开始玩, jQuery 昨天. 我一直想这样做很长时间, 自从 保罗 · 翼 开始写作 他的一系列 有关为最终用户在古老的 jQuery www.endusersharepoint.com web 站点. 当我使用它, 我希望能添加一系列的"快速和容易"职位像这样. 这篇文章描述了如何将一个已知的文本字段值设置为你想要的一切.

在此方案中, 我创建了自定义列表的"新"窗体外观如图所示:

image

这是默认的标题栏的自定义列表的新窗体和两个列表列 (没有为站点列; 我认为不应该有什么不同).

目标是要将任意值分配给字段, ""DefaultMeFieldNoSpaces (你可以告诉我有点"没有空格"事情与懦夫, 但我不要在本文末尾香料).

这位 jQuery 为我工作:

<脚本类型 ="文本/javascript">

  $(功能() {

    $(' 输入[标题 = DefaultMeFieldNoSpaces]').attr(
        {价值: ' 你是在曲折的迷宫般的通道, 人人都一样。});

  });

</脚本>

据我所知这位 jQuery 说, "我找任何输入标记的标题 = DefaultMeFieldNoSpaces. 然后, 将所有设置它们的值为一句名言从旧计算机游戏。"

由于只会有一个字段标题与窗体上等于"DefaultMeFieldNoSpaces"我们很放心地将一个值分配给该字段和没有其他.

什么有关字段名称中有空格? 它是几乎相同:

<脚本类型 ="文本/javascript">

  $(功能() {
     $(' 输入[标题 = 将字段分配与空间]').attr(
        {价值: ' 你是在曲折的迷宫般的通道, 人人都一样。});

  });

</脚本>

我认为这是一个相当安全的方法, 意思我们应该能够找到我们想要的字段和字段只我们想要. 如果你看看 HTML SharePoint 给我们, 它也有点乱:

<输入
名称="ctl00$ m 元 g_bdb23c2c_fde7_495f_8676_69714a308d8e 元 ctl00 元 ctl04 元 ctl02 元 ctl00 元 ctl00 元 ctl04 元 ctl00$ ctl00$ TextField"
类型="文本"
maxlength="255"
id="ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField"
标题="DefaultMeFieldNoSpaces"
="ms 长"
/>

可识别并希望唯一的属性,以帮助我们确定我们要向其分配我们任意值的特定列突出的"标题".

这是一个基本的概念. 以任意的方式,这样的字段设置不会赢得任何奖项. 不过, 如果我们想要做一些更有趣的窗体级别东西 (我们所有人总是想做, 答案是肯定的, 我们在完成洗碗后的权利), 像更改的值"字段 b"自动基于价值的"字段", 我们 (我) 需要学习这些东西.

我认为我们最好的机会,以获取真实有用的价值是通过标题, 至少对于文本字段. 可能有一个更好, 更可靠的方法. 如果我找到它, 我将更新这个帖子. 如果你知道一个更好的方式, 请留下评论。</结束>

</结束>

订阅我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin