Infopath FormControl зависает на control.open - PullRequest
1 голос
/ 15 февраля 2011

Я использую простое консольное приложение для преобразования форм infopath в файлы PDF.Вот краткое изложение того, как я собираюсь об этом.

Сводка: Консольное приложение создает форму Windows.Когда форма загружена (модально), я добавляю элемент управления infopath (Microsoft.Office.InfoPath.FormControl) в это окно.В этот момент я вызываю infoPathControl.Open (myInfoPathFileStream).Все это делается в замкнутом круге.

Проблема: Случайно приложение будет выдавать исключения (катастрофический сбой, повреждение кучи и т. Д.), И даже лучше, оно иногда будет зависать без выдачи ошибки.Ведение журнала и отладка привели меня к мысли, что оно зависает в вызове infoPathControl.Open (myInfoPathFileStream).Очевидно, что для автоматизированного процесса это недопустимо.

Попытки (но неуспешные) решения

  • Я попытался обернуть каждую созданную форму в свой собственный (STA) поток и использовать thread.join.Это не сработало из-за проблем с COM.
  • Я попытался обернуть каждую итерацию цикла в свою собственную область приложения.Это сработало до некоторой степени, но из-за того, что домены приложений по-прежнему синхронизированы, это не решит проблему зависания без ошибок.Кроме того, как ни странно, мне кажется, что я не всегда могу отловить исключения, генерируемые COM-объектом.
  • Наконец, я попытался поместить таймер в поток формы, чтобы выдать исключение, если время таймера истекло.До сих пор я не смог доказать в любом случае, работает ли это или нет.

Любые идеи будут высоко оценены, поскольку я уже потратил на это много времени.

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 декабря 2014

В конце концов, решение состояло в том, чтобы запустить процесс преобразования infopath в своем собственном исполняемом файле с настройкой кодов возврата для успеха, сбоя и определенных типов ошибок. Затем он вызывался вторым исполняемым файлом с таймаутом. Если преобразование не выполнится в течение определенного периода времени, оно будет прервано вызывающим исполняемым файлом. В конечном итоге это не решает проблемы в библиотеках автоматизации infopath, но выполняет ту работу, которая нам была необходима для выполнения в обязательном порядке.

1 голос
/ 01 марта 2012

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

http://social.technet.microsoft.com/Forums/da-DK/sharepoint2010customization/thread/528c3459-074f-43f7-a7a1-d4a169b27c93

Дайте мне знать, если это поможет вам - как инженер-программистЯ знаю, что это идет против всего, что есть внутри вас, но вы противостоите очень большой и сильной стене с этой.

...