0

我是信息路径的新手。您能否指导我如何实现这种情况。

1)用户将选择创建的项目,即日期字段。

2) 在计划间隔中,用户将在第一个下拉菜单中选择 1,在第二个下拉菜单中选择天数。

3) 在 Next Schedule Interval 中,即日期字段应添加 1 天。

例如:在第 1 步中,用户选择了 2013 年 6 月 8 日。First drop down 1 和 2nd drop down days 现在日期应该显示为 06/08/2013。Smilarly 几个月.....附上相同的示例屏幕截图。

https://lh5.googleusercontent.com/-F-h55ksETYA/UbN0NZ891XI/AAAAAAAAC14/Bxn84RpkqtE/w819-h460-no/1.jpg

4

1 回答 1

0

开箱即用并不容易。Infopath 具有将日期添加到日期的功能。运行仅在您的选择器字段等于值“天”时触发的规则。让规则设置目标日期的值

规则1:

addDays(StartDate, IncrementValue)

那很容易。

通过提取年份来增加年份也很容易。在内部,日期以 YYYY-MM-DD 格式存储,因此您可以使用 substring-before() 提取年份,使用破折号作为分隔符。增加该数字,然后使用 concat() 函数将该新年份值与开始日期的其余部分组合,即使用破折号的 substring-after()。创建一个仅在选择器字段具有值“年”时触发的规则,并将目标日期设置为

规则 2

concat(substring-before(StartDate, "-") + IncrementValue, "-", substring-after(StartDate, "-"))

真正复杂的地方是月份。使用提取月份的相同原理,将其递增并将其拼接回日期并不困难。月份需要有一个前导零,但对于有效的日期条目。这可以通过在月份加上 100 然后只抓取最后两位数来实现。只要新日期不跨越到明年,这种方法就会奏效。

规则 3

concat(substring-before(StartDate, "-"), "-", substring-after(substring-before(substring-after(StartDate, "-"), "-") + 100 + IncrementValue, "1"), "-", substring-after(substring-after(StartDate, "-"), "-"))

如果新日期在下一年,则此公式将导致错误。因此,您需要创建存储月份值的辅助字段,如果计算的月份大于 12,则增加年份并相应地调整月份值。

使用以下规则设置月份帮助字段:

substring-before(substring-after(StartDate, "-"), "-") + IncrementValue

然后使用此规则设置目标日期,如果月份助手大于 12,则会触发该规则:

concat(substring-before(StartDate, "-") + 1, "-", substring-after(MonthHelper - 12 + 100, "1"), "-", substring-after(substring-after(StartDate, "-"), "-"))

如果月份助手小于 13,则运行上面的规则 3

真正困难的问题是月份有不同的长度。如果使用此技术将一个月添加到 2013-01-31,则结果将是无效的日期字符串 2013-02-31。此外,闰年也需要考虑在内。

根据您想要实现的目标,您可能希望每个月增加 30 天,改用 addDays() 函数。

如果您需要精确的月增量技术,您将需要另一组辅助单元来评估月/日组合并进行调整,或者您需要更优雅地执行日期增量的代码,但这不是我想要的可以帮忙。

Qdabra Software 的 qRules 等第三方工具可为 InfoPath 表单提供附加功能。qRules 包括日期函数,无需您编写代码即可完成您想做的事情。

于 2013-06-09T04:50:44.217 回答