分类存档: InfoPath 2007 // 表单服务器

快速撞击: 直接从 SPListItem 在 SharePoint 中读取 InfoPath XML

我过工作的一个项目需要从 InfoPath 表单中提取附件. 有一些好的资源来解析 InfoPath 表单 (这是只是 XML 文件, 所以,其实很简单).

虽然我建设项目, 我开始下载 InfoPath 表单并将它保存到我的本地硬盘上. 我的 c# 代码直接从该实例读取. 不过, InfoPath 表单真正生活在 SharePoint 表单库内. 我做了一点善良的半搜索来找出如何直接从图书馆读,几乎放弃了, 在这种情况下我会将窗体保存到本地临时目录和读它从那里. 不过, 没有必要去完这些程序,你可以阅读它直接从库. 这小小的代码片段展示了如何:

/// 类定义的东西在这里, 包括:
私人 SPFile mySharePointFile; /* SPList 的一部分 */
// 这里是更多的代码和内部类的方法,我们有:
像下面一样 textReader;
textReader = 新增功能 像下面一样(mySharePointFile.OpenBinaryStream());

textReader.WhitespaceHandling = WhitespaceHandling.无;

textReader.Read();

// 如果节点值

同时 (textReader.Read())
{

......,等等等等......

他们的关键位以上是我们可以读在 InfoPath 直接通过 OpenBinaryStream() 上 SPFile 作为 XmlTextReader 的构造函数的参数的方法调用. 它的伟大工程.

</结束>

订阅我的博客.

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

Technorati 标签:

以编程方式从 InfoPath 表单中提取的附件 (包括它们的名称!)

我有一个客户端,利用 InfoPath 和工作流费用的入门级解决方案. 在审批过程中的一个点, 我需要生成具有所有这些好的 InfoPath 数据,以及自己的附件的电子邮件, (叹息) 有人可以采取该数据,并手动更新它密钥到 Oracle 数据库的应用程序.

它不是很难到达或解析 InfoPath 表单. 我不知道如何处理附件, 然而. 后一两个小时的撬拨左右互联网 (永恒!) 我发现这篇文章: http://support.microsoft.com/kb/892730

它提供一些方便的代码,以从窗体中的一个节点中提取附件. (您仍然需要查找节点和所有的, 但这是只是 XML 分析).

我知道附件是 base64 编码的本来只提取的路径下的 base64 数据, 解码它并将它保存. 不过, 很快意识到我不知道如何获取文件名称本身,直到发现了上述文章.

我确实认为,比较早, 但是由其人格分裂推迟. 一方面, 这篇文章 * 说 * 真好,InfoPath 2007. 然而, 代码和说明都 Visual Studio 2003 InfoPath 的参考 2003.

底线, 文章提供的代码工作对我来说 (到目前为止). 我可以得到我的 InfoPath 表单, 我可以将它的分析, 我可以查找和解码附件和我知道它的名字. 你还能找到更多问一个人的生活?

</结束>

订阅我的博客.

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

Technorati 标签: ,,

如果你担心你的 SharePoint 环境可能会稍微不健康, 让我来的帮您解决此问题 健康检查.

管理审核组与 InfoPath FBA 环境中

我有我需要实现基于窗体身份验证中使用 InfoPath 支出审批流程 (FBA) 使用窗体服务环境 (基于 web 的 InfoPath).

有两个批准组和过程的工作方式:

  • 用户填写开支报告和提交审批.
  • 这将触发给第一个级别的审批者组的电子邮件.
  • 第一级批准人审查和批准或拒绝该报告.
  • 如果第一个级别的人批准它, 系统通知第二级别审批者.

InfoPath 侧的事情, 我有不同部分隐藏/显示基于用户是否之一的这些审核组的成员.

在用户名 FBA 环境() 函数始终返回空白, 可悲的是. 我已经建立了一个自定义列表被称为"审核组".

不要添加列表中的任何其他列.

打开表单时, 它有一个像这样的规则:

image

"设置域值"在这里:

image

这基本上说: 批准组自定义列表查询和筛选器,通过寻找任何查询行何处标题的值 ="北欧".

如果返回任何值, 然后当前用户是该组的成员. 我知道它包含该值,因为该字符串的长度大于零.

通过确保审核组列表中的各个项关闭循环. 在运行时, 如果当前用户没有适当的安全访问到该项目然后查询不会返回它, 字符串长度将为零,现在你知道当前用户不是该组的一部分. 根据需要在窗体中,您可以使用这一事实.

这是超级简单的撰写. 我赶时间或我会提供更多细节.

我不知道我在 FBA 的环境中,它是多么重要. 这可能会在非 FBA 环境中工作,但我可以想象情况下,这会很有用.

</结束>

订阅我的博客.

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

Technorati 标签: ,

InfoPath // 一种解释为"未处理异常时呈现窗体 System.Xml.XmlException 的: 解析名称时意外的文件结尾发生. “

我今天工作了 InfPath 的窗体上,遇到了一位老朋友, "未处理的异常时呈现窗体 System.Xml.XmlException: 解析名称时意外的文件结尾已发生"。

这发生在我身上很久以前,我不知道到底是我没有去解决它. 老实说, 我想我已经被转换到一个新的项目从来没有看到这一解决 (我更换了对付那头疼). 还记得吗这是魔鬼的问题. 我花了几个不成功的天处理它. 从那时起, 我见过这过去一年至少一次在 MSDN 论坛上来,从来没有真正为它看答案.

我打了它今天和幸运的是这次 , 有刚才的变化到窗体. 我退缩了这种变化和这个问题消失了. 原来它是可以创建从模板生成在围墙的形式服务器端解析错误的方式使用 InfoPath 设计器.

以我为例, 问题是由这些步骤引起的。:

  1. 向数据源添加新的元素,作为一个文本字段.
  2. 放到窗体上.
  3. 到下拉列表中更改它的显示.
  4. 告诉下拉列表中,拉出它的价值从 SharePoint 自定义列表.

我不知道是否这些步骤会导致一个问题或也许, 某种程度上列表中的数据本身是一个问题. 我要去试验一下,看看是否我可以把钉闹市区他参数,对此,任何更多的细节.

</结束>

订阅我的博客.

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

Technorati 标签:

嵌入里面 InfoPath 表单开发人员备注

我仍然生活在 InfoPath 表单世界和我需要对窗体进行那些"小"的变化之一,, 不幸的是, 打破了我两个星期前通过与它的命名约定. 我心想, "人要看看这东西一年从现在,说, ' 保罗在想什么? 由朱庇特, 他的命名约定是没有意义!”

我意识到我能为此创造一个窗体上的视图,然后, 再来一次, 意识到,我可以一直一直这样的事情. 我添加到 InfoPath 表单这样的"开发人员备注"视图:

image

这样,用户不能访问该视图配置了该窗体,因此, 它只是与 InfoPath 客户端在设计视图中可见. 现在我感觉到有点接种反对一些未来的未知开发人员看着我的窗体和关于我的坏想法. 恍惚之间!

</结束>

订阅我的博客.

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

Technorati 标签:

管理 InfoPath 视图

我似乎通过 InfoPath 阶段去哪里, 带着蓝色, 我制作一大堆表格. 我的手指学习如何使用该工具好,然后经过九个月的干旱得再从头学习.

我现在正 InfoPath 相和我创造了很多意见与 InfoPath 表单. 你可能注意到的是 InfoPath 的一件事 2007 客户端显示视图按字母顺序排列. 这是一个真正的滋扰几次. 这些天我最好的技术是将视图名称号码开头,他们总是在我想要的顺序显示, 如这里所示:

image

我希望我已经一直在做这.

</结束>

订阅我的博客.

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

Technorati 标签:

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

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

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

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

image

image

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

image

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

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

</结束>

订阅我的博客.

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

Technorati 标签:

快速和简单: 使 InfoPath 表单只读 (在 MOSS 中的 InfoPath 表单服务)

有这样一种常见的业务情况:

  • 用户填写 InfoPath 表单.
  • 提交表单.
  • 长时间运行的工作流过程揭开序幕.
  • 在工作流运行时, 我们不希望任何人都可以更改窗体的内容.

此示例中 office.microsoft.com 描述如何创建单独的视图"" 并将标记为只读的整体观. 这是一个可行的方法,但缺点是你有效地创建两个整个版本的同一个窗体,必须现在保持他们同步手动. 如果将字段添加到可编辑视图, 然后必须将其添加到不可编辑视图以及. 随着时间的推移, 与不同的开发人员, 可以有一些分歧.

在某些情况下,此替代方法可能更好地工作:

  • 名为"IsEditable"的窗体中添加一个新字段.
  • 它的默认值设置为 true.
  • 促进它发布到 MOSS 时.
  • 工作流中, IsEditble 的值设置为 false.
  • 返回到该窗体.
  • 添加一个规则,"后打开窗体的", 禁用您保存按钮时 IsEditable 是假.

这种方法的缺点是,所有的字段仍会在屏幕上编辑. 用户可以得到一个错误的印象,他们其实可以更改内容. 你可以减轻,置于窗体禁用一些文本, 有可能在大跨页的顶部的红色字母.

在一个项目中, 我创建了"工作流状态" 视图. 随着工作流, 它会更新已晋升从窗体的特定状态字段. 当用户打开该窗体, "打开窗体" 规则自动切换到视图和用户有很好的小小的摘要状态.

</结束>

订阅我的博客.

切换视图视图基于 InfoPath Form 中的用户 ID

我们已开发 InfoPath 窗体具有多个视图,以支持新的租用 / 入职流程. 当公司雇佣的一个新的人, IT 部门和其他团体需要采取行动 (设置工资单, 启用适当的应用程序的访问, 找到一张桌子, 等). 我们使用窗体,但表单的不同视图为每个这些职能.

在这个公司, 大多数人在业务过程中所涉及的是精通 IT 的, 所以,当他们访问的窗体, 其默认视图是一种"菜单" 查看与直接给他们的特殊功能的按钮. 不过, 我们需要简单化的新员工直接经理. 这个人不应该看到任何 IT 相关的东西. 事实上, 她应该看到的只是一个视图窗体的不会连选项以查看其他视图.

在我们的例子, 直接经理的帐户直接绑在礼貌的形式 联系人选择器 (而我总是想叫"人员选取器" 因为某些原因).

步骤如下::

1. 在设计模式中, 转到工具-> 表单选项-> 打开和保存.

2. 选择"规则".

3. 创建一个新的规则,其操作是"切换到查看" 其条件利用用户名和() 功能.

用户名() 返回"简单" 没有域用户名. 如果我用"domainpagalvin"的凭据登录到 SharePoint, 用户名() 返回"pagalvin".

联系人选择器提供一个联系人信息的三位. "AccountID" 部分是对于这种情况下最有用. 唯一让这甚至有点挑战的是,联系人选择器 (在我的环境无论如何) 返回的域和用户 ID, 如在"domainpagalvin". 这阻止我们做直接的平等条件自 AccountID (""domainpagalvin) 永远不会平等的用户名() (""pagalvin).

我们可以绕过此使用"包含" 操作员: AccountID 包含用户名().

我们可以采取它进一步和 pre 挂起一个硬编码的域用户名前面() 让我们平等检查和消除误报的风险上的函数包含运算符.

我们将不得不真的像自动切换为其他基于 AD 安全组成员身份的用户视图. 例如, 当"它分析的成员" 组访问窗体, 自动切换到 IT 分析视图. 我们没有时间来实现它, 但我首先想到的是创建一个 web 服务,会有像"IsMemberOfActiveDirectorySecurityGroup"的一种方法, 将它传递用户名() 并返回返回 true 或 false. 有没有人有任何其他吗, 更多聪明的主意? 有任何 SharePoint 的函数,我们可以利用从 InfoPath 来做这个决定?

</结束>

Technorati 标签: