サンドボックス ソリューションで InfoPath フォームを修正する
分離コードを含む InfoPath フォームを使用している場合、そのフォームは分離コードを実行するためにコードベースのサンドボックス ソリューションに依存します。 この記事は、サンドボックス ソリューションに依存しないように InfoPath フォームを修正または変換するのに役立ちます。
注:
コードベースのサンドボックス ソリューションは、2014 年以降、非推奨となっています。また、SharePoint Online では、この機能を完全に削除するためのプロセスが始まっています。 コードベースのサンドボックス ソリューションは、SharePoint 2013 および SharePoint 2016 でも非推奨になっています。
InfoPath フォームを分析する
このセクションでは、InfoPath フォームを分析して修正するために使用可能なモデルについて説明します。 フォームによっては、修正して再展開できるものもありますが、InfoPath から移行して代替手段で必要な機能を確保しなければならないものもあります。
アクションを実行する前に、フォームのビジネス ニーズを評価することが重要です。 ビジネスに有用でなくなったフォームをよく見かけますが、そのような場合は、単にフォームを削除する方が簡単です。
InfoPath フォームで分離コードが使用されているかどうかを確認する
これを確認するには、SharePoint サンドボックス ソリューション スキャナー ツールを使用することをお勧めします。 このツールのレポートで、サンドボックス ソリューションが InfoPath ファイルから抽出されたかどうかがわかります。 後述するように、このツールでは、ソリューションで使用されているアセンブリが不要かどうかもわかります。
フォームがまだ有用かどうかを確認する
修正/変換作業にとりかかる前に、フォームがまだビジネスに不可欠かどうかを確認することが重要です。 不可欠な場合は、次のセクションに進んでください。そうでない場合は、このフォームを使用することで作成されるデータを検討する必要があります。
通常、データは InfoPath XML ファイルとして作成されます。このファイルは、SharePoint リスト内に存在します。 フォームを削除すると、データを表示できなくなります。 フォームとデータが有用でなければ、問題はありません。 ただし、データにアクセスしたい場合は、InfoPath XML ファイルから読み込んだデータを SharePoint リスト項目データに変換することができます。 これを行うには、「PnP-Transformation EmpRegConsole コンソール アプリケーション」を参照してください。
InfoPath フォーム (XSN ファイル) をダウンロードして調査する
作業が必要な InfoPath フォームがあることを確認した場合は、このようなフォームをダウンロードする必要があります。 分離コードを使用した InfoPath フォームは、フォーム ライブラリまたはサイト コンテンツ タイプのどちらかとして展開されます。
フォーム ライブラリ
この場合、XSN ファイルは、InfoPath フォームの展開先にしたフォーム ライブラリの Forms フォルダーにあります。 フォーム ライブラリを探すには、InfoPath Form_LibName_id
の規則に従って WSP パッケージ名を調査します。
フォーム ライブラリが見つかったら、そのライブラリの Forms フォルダーから template.xsn ファイルをダウンロードする必要があります。 これを行うには、ライブラリ URL + /Forms/template.xsn (例: https://contoso.sharepoint.com/sites/infopath1/IHaveCodeBehind/Forms/template.xsn
) のような URL を作成し、ブラウザーを使用してファイルをダウンロードします。
サイト コンテンツ タイプ
サイト コンテンツ タイプとして展開された InfoPath フォームには、その展開時にコンテンツ タイプに結び付けられたフォーム ライブラリに保存された XSN ファイルが割り当てられます。 前のセクションと同様に、WSP パッケージ名からライブラリ名がわかります。 前回とは異なり、フォームが実際にはファイルとしてライブラリに保存されています。そのため、フォームをフォーム ライブラリからダウンロードするだけで済みます。
InfoPath フォームを修正する
前のセクションでは、分離コードを使用した InfoPath フォームを示しましたが、これらのフォームに本当に有用な分離コードが含まれているのでしょうか。 フォーム作成者が InfoPath の [開発者] リボンで誤って [コード エディター] ボタンを選択したフォームが数多く存在します。
これを行った場合は、何もしない分離コードが存在することになります。 それを削除することにより、分離コードを使用した InfoPath フォームを、分離コードを使用せず、サンド ボックス ソリューションに依存しない InfoPath フォームに変換できます。
フォームの分離コードが不要かどうかを確認する
SharePoint サンド ボックス ソリューション スキャナーを使用すれば、InfoPath フォームに不要なコードが含まれているかどうかがわかります。 しかし、不要なコードしか修正できないため、どうすれば不要な分離コードと必要な分離コードを区別できるかを知る必要があります。 オリジナルのフォーム (前回の手順でダウンロードしたフォームではない) が残っている場合は、コードを調査するだけでわかります。
既定の空のコードを以下に示します。同様のコードがある場合は、そのコードを削除することでフォームを修正できます。
using Microsoft.Office.InfoPath;
using System;
using System.Xml;
using System.Xml.XPath;
namespace Form1
{
public partial class FormCode
{
// Member variables are not supported in browser-enabled forms.
// Instead, write and read these values from the FormState
// dictionary using code such as the following:
//
// private object _memberVariable
// {
// get
// {
// return FormState["_memberVariable"];
// }
// set
// {
// FormState["_memberVariable"] = value;
// }
// }
// NOTE: The following procedure is required by Microsoft InfoPath.
// It can be modified using Microsoft InfoPath.
public void InternalStartup()
{
}
}
}
前回の手順でダウンロードした XSN ファイルのみがある場合は、XSN ファイルの名前を cab ファイル (template.cab など) に変更して、アセンブリを抽出し、.Net リフレクション ツール (ILSpy オープン ソース .NET アセンブリ ブラウザーやデコンパイラなど) を使用してコードを調査します。
一般に、ILSpy では、不要な分離コードが次の図のように表示されます。
分離コードを削除することで InfoPath フォームを修正する
分離コードが不要なことを確認したら、次の操作を実行して分離コードを削除できます。
[InfoPath Designer] でフォームを開きます ([デザイン] を右クリックします)。
[ファイル]>[情報]>[フォーム オプション] に移動します。
[プログラミング] カテゴリを選択してから、[コードの削除] を選択します。
もう一度、[ファイル]>[情報]>[クイック発行] でフォームを発行します。
[サイト設定]>[ソリューション] で、リンクされたサンドボックス ソリューションを非アクティブにします。
フォームが想定どおりに動作することを確認します。
サンドボックス ソリューションを削除します。
注:
InfoPath XSN ファイルとソース コードにアクセスできない場合は、不要なコードを含むサンドボックス ソリューションを非アクティブにしさえすればフォームを修正できます。 サンドボックス ソリューションのレポート出力で IsEmptyInfoPathAssembly = true と記載されているフォームに対してのみ、この方法を行ってください。
InfoPath フォームを移行する
前のセクションのガイダンスが InfoPath フォームに適用できない場合は、そのフォームがまだビジネスに有用であり、削除できない分離コードが含まれていることを意味します。 その場合の一般的な解決策は、InfoPath からの移行になります。これは、次の方法で実現できます。
SharePoint データの読み取り/書き込みにリモート API を利用する SharePoint アドインを作成します。
Azure PowerApps または Microsoft Flow を使用してアプリを作成します。
InfoPath フォームを置き換える SharePoint アドインを作成する
InfoPath フォームを置き換えるために SharePoint アドインを使用することにした場合は、いくつかのオプションがあります。 3 つのオプションを以下に示します。ただし、これらのバリエーションを使用することができます。
一般的な InfoPath コーディング パターン
InfoPath フォームの変換を適切に支援できるように、一般的な 11 通りの InfoPath コーディング パターンを一覧で示し、これらのパターンを 3 つの SharePoint アドイン オプションを使用して実装する方法について説明します。
そのために、まず、最も一般的な InfoPath コーディング パターンを使用した参照用の InfoPath フォームを開発してから、そのフォームを 3 種類の SharePoint アドインに移行しました。
次の各リンクは、これらの一般的なパターンを示しています。
- フォームの読み込み時にフィールドを生成する - ユーザー情報を設定する
- フォームの読み込み時にフィールドを生成する - リスト情報を読み取る
- フォームの読み込み時にフィールドを生成する - リスト データを読み取る
- コード経由でフォームを送信する
- フォームの送信後にビューを切り替える
- ユーザー データを取得する
- データ収集を読み取って複数のコントロールを設定する
- データの読み込みをカスケード表示する
- 添付ファイルをアップロードまたは削除する
- サイト グループに対してユーザーを追加または削除する
- フォームに既存のアイテムを読み込む
InfoPath データを移行する
InfoPath フォームを新しいソリューションに移行したら、InfoPath XML のデータを正規の SharePoint リスト データまたは選択したデータ層に移行することも必要になります。 InfoPath ファイルは XML ファイルであるため、読み取りと変換が非常に簡単です。
これを行うには、PnP-Transformation EmpRegConsole コンソール アプリケーションを使用します。
既存のフォームを開く
コード ベースの操作が無効になると、すぐにコードがサンドボックスで実行できなくなります。 そのため、コードを実行するフォームがある場合は、既存のフォームを開くと機能しなくなります。
次の手順は、これを処理するのに役立ちます。
InfoPath フォームを新しいソリューションに移行した場合は、データが既に変換されているはずなので、問題はありません。
フォームをそのまま保持することにした (ビジネスに有用ではなくなったなどの理由で) ものの、既存のフォームを開きたい場合は、次の手順のいずれかを実行できます。
フォームから分離コードを削除して、再発行します (「分離コードを削除することで InfoPath フォームを修正する」を参照してください)。
InfoPath クライアントを使用して、フォームを開きます。
フォーム データを SharePoint リストのプレーン データに移行します (「InfoPath データを移行する」を参照してください)。