Перебор полей InfoPath по типу

#c# #infopath2010

#c# #infopath2010

Вопрос:

Есть ли возможность перебирать поля infopath по типу?

Например, выполните итерацию по всем полям даты или по всем целочисленным полям и т.д. Я пытаюсь написать класс, который выполняет проверку поля в коде за формой, поскольку проверка поля OOTB не работает при отправке формы из кода. Я хотел бы написать универсальный класс, который можно использовать для любой формы infopath. Спасибо.

Ответ №1:

Вы не можете сделать это только с помощью XML-формы InfoPath.
Вы должны зависеть от myschema.xsd (вы можете получить этот файл, переименовав свой файл xsn в cab и распаковав его или выбрав «Экспортировать исходные файлы» в меню публикации). Теперь, когда у вас есть файл xsd и учитывая, что имена полей уникальны в форме InfoPath, вы можете сделать следующее:
1- Получить имя файла из формы InfoPath
2- Проверить тип данных этого поля в файле myschema.xsd
3- Выполнить проверку.

Короче говоря, файл myschema.xsd хранит типы данных
<xsd:element name="CurrentAccount" nillable="true" type="xsd:boolean"/>
Но форма InfoPath просто хранит значение, которое может быть преобразовано в несколько типов данных (я просто рассматриваю его как строку).
<my:CurrentAccount>false</my:CurrentAccount>

Комментарии:

1. Спасибо, это то, что я искал.

Ответ №2:

Большая возможность связана с Linq. Например. у вас есть список объектов, в которые вы помещаете разные вещи, но вы выполняете итерацию только по строкам:

 var fields = new List<object>();
fields.Add(42);
fields.Add("one");
fields.Add(84);
fields.Add("two");
foreach (string s in fields.OfType<string>())
{
    Debug.Print(s);
}
 

Вы попадете в окно вывода:

 one
two
 

Комментарии:

1. Спасибо, но проблема в том, что пользователь может ввести любой текст в поле даты и с помощью приведенного выше кода, который будет отображаться как строка типа, где мне нужно, чтобы он отображался как тип DateTime, и уведомлять пользователя о необходимости исправления, если не в допустимом формате даты.

2. @TamarindoSean: Вы знаете типы полей? Ваша цель — проверить ввод полей infopath?

3. Вот и все, мне было трудно определить тип полей в коде, единственная ссылка, которую вы получаете на поля, — это объект XPathNavigator . Я пытаюсь внедрить пользовательское решение для проверки для InfoPath 2010.