別の日、別の奇妙な InfoPath 問題...
そのため、次のチュートリアルに従って C# でカスタム ActiveX コントロールを構築しています - mhttp://blogs.msdn.com/b/infopath/archive/2006/12/18/creating-complex-infopath-controls-in-c- Sharp.aspx およびhttp://blogs.msdn.com/b/infopath/archive/2005/04/15/creating-an-infopath-custom-control-using-c-and-net.aspx。一般的に物事は簡単で、単純な値、xml などを返すことができる作業コントロールがあります。
ただし、msdn の投稿で主張されていることの 1 つは、ビューが更新されると、InfoPath はコントロールを繰り返し破棄して再インスタンス化するため、コントロールに状態を保存できないということです。驚いたことに、InfoPath 2010 では、状態 (フィールド、プロパティ、.NET コントロール) をコントロールに完全に格納し、フォームが送信されたときにそれを xml に保存できることに驚きました。奇妙なことに、コントロール コンストラクターに MessageBox.Show() を配置すると、コントロールが繰り返し再インスタンス化されていることを示しますが、ユーザーがアクセスできるのは 1 つのバージョンだけです。コントロールの余分なコピーがインスタンス化されている理由がわからず、コントロールが複雑になると深刻なパフォーマンスの問題が発生する可能性があるため、これには多少問題があります
そこで、InfoPath 2007 で試してみたところ、データが変更されるたびに、ActiveX コントロールが実際に破棄され、再インスタンス化されている (すべての状態が破棄されている) ことがわかりました。これは基本的に、すべての状態をどこかに (おそらくフォーム xml) に保存して、更新時にコントロールを再設定する必要があることを意味します。
これは明らかに InfoPath 2007/2010 の大きな違いですが、この現象に関するドキュメントやその他の言及は見つかりません。上記の記事はかなり古いため、2007 年の動作を正しく参照しています。誰かがこれに光を当てることができれば、私は非常に感謝しています!