Создание формул Infopath 2010

Я новичок в инфопатологии. Не могли бы вы посоветовать мне, как реализовать этот сценарий?

1) Пользователь выберет созданный элемент, который является Date Feild.

2) В расписании пользователь Interval выберет 1 в первом раскрывающемся списке и Дни во втором раскрывающемся списке.

3) В интервале следующего расписания, который является датой, следует добавить 1 день.

например: на шаге 1 пользователь выбрал 08.06.2013. Первый выпадающий 1 и 2-й выпадающие дни Теперь дата должна отображаться как 06/08/2013. Точно так же месяцами ..... Прилагаю образец скриншота к тому же.

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


person santosh kondapalli    schedule 08.06.2013    source источник


Ответы (1)


Это непросто из коробки. Infopath имеет функцию добавления дней к дате. Запустите правило, которое срабатывает только тогда, когда в поле селектора установлено значение days. Пусть правило устанавливает значение целевой даты с

Правило 1:

addDays(StartDate, IncrementValue)

Это просто.

Годы также легко увеличить, извлекая год. Внутри дата хранится в формате ГГГГ-ММ-ДД, поэтому вы можете извлечь год с помощью substring-before (), используя тире в качестве разделителя. Увеличьте это число, затем используйте функцию concat (), чтобы объединить это значение нового года с остальной датой начала, то есть substring-after () с помощью тире. Создайте правило, которое срабатывает только в том случае, если в поле селектора указано значение "years", и установите целевую дату с помощью

Правило 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 ().

Если вам нужен точный метод приращения месяца, вам либо понадобится другой набор вспомогательных ячеек для оценки комбинации месяц / день и внесения корректировок, либо вам понадобится код, который делает приращение даты более изящным, но это не то, что я может помочь с.

Существуют сторонние инструменты, такие как qRules от Qdabra Software, которые обеспечивают дополнительную функциональность для форм InfoPath. qRules включает функции даты, которые могут делать то, что вы хотите, без написания кода.

person teylyn    schedule 09.06.2013
comment
Я постараюсь сообщить тебе - person santosh kondapalli; 09.06.2013