原因不明の InfoPath フォーム破損
infopath で少々複雑な設計のフォームをデザインした居たところ、ハマりました。ボタンをクリックしたら、フィールドに値を挿入するように jscript で書いているのですが…これがど~しても上手く動いてくれません。
おかしい…そんな難しいことしてないのに。XPATH の記述ミスでないことは何度も確認しました。スクリプトにも間違いは無い筈です。なのに動かない。
散々悪戦苦闘した後、試しに、空白のフォームを新規作成して、全く同じスクリプトを書いてみたところ─
動いたよ!?
どうやら、何度もインフォパスのスキーマやコントロールを弄っていると、まれにフォームが破損して、正しく動作しなくなる場合があるようです。
VSTO みちしるべ ~道標 原因不明の InfoPath フォーム破損について
InfoPath のフォーム破損についてですが、稀にフォームの動きがおかしいときがあります。例えば以下のような症状がおきます。
・フォームが起動しない。
・不明なエラーが発生
・スクリプトで XML DOM で指定した XPATH を正しく認識しない。
原因としてはフォームの破損です。破損の原因としては、データソースから作成したようなテンプレートのデータソースを削除してフォームの再構築を複数回おこなった場合や同じテンプレートにコントロールの追加・削除を頻繁におこなった場合に XML のスキーマにごみが生じスキーマの不整合が発生するためです。コントロールの追加や削除などをおこなうと自動的にスキーマが生成されます。そのような作業を繰り返す内にフォームが破損することがあります。その際には非常に修復は難しく、再作成が必要になるケースが多いです。
> XPATH を正しく認識しない。
コレだよ…orz
ちなみに、これは偶然ですが、他のフォームライブラリで
> フォームが起動しない。
のエラーも発生していることを確認しました。
> 新しい空白のフォームを作成することができません。
> フォームを開くことができません。
> この問題を解決するには、システム管理者に問い合わせてください。
私←管理者(苦笑)
で、肝心の対処方法ですが、無いっぽいです。スキーマを全削除してから再インポートとか、色々試したのですが、全滅。結局、ゼロからフォームを再度設計しなおすことになりました─精神的にかなりダメージ(完成直前だった)
フォーム再作成の手順:
再作成の際のお手軽方法ですが、
1.破損しているフォームのデザインをまるごとコピーします。領域を選択して、新しい空白のフォームに貼り付けます。
これでコントロールや動作規則・条件付き書式を含むデザイン自体は再利用できます。
2.次に元のデータソースを確認してスキーマを作成していきます。
3.データソースとコントロールのフィールドを一つずつマッピングしていきます。
これ、出来なくないですか?フォームのデザインを丸ごとコピペしましたが、動作規則や条件付き書式は全部消えてしまいました。
infopath2003 でも 2007 でも試しましたが駄目でした。これが出来ればすっごい楽なのに…。もし、出来る方法がありましたら、是非とも教えてください(T_T)
教訓としては、・設計途中途中で、フォームのバックアップを差分でとっておくこと。
・完成して発行したフォームも、テンプレートを別に保存しておくこと。
Infopath を運用する上で、かなり重要なポイントだと思います。
login