サンドボックス ソリューションで InfoPath フォームを修正するFix InfoPath forms in sandbox solutions

分離コードを含む InfoPath フォームを使用している場合、そのフォームは分離コードを実行するためにコードベースのサンドボックス ソリューションに依存します。When you're using InfoPath forms with code-behind, the forms depend on code-based sandbox solutions for executing the code-behind. この記事は、サンドボックス ソリューションに依存しないように InfoPath フォームを修正または変換するのに役立ちます。This article helps you to either fix or transform your InfoPath forms so they are no longer dependent on sandbox solutions.

注意

コードベースのサンドボックス ソリューションは、2014 年以降、非推奨となっています。また、SharePoint Online では、この機能を完全に削除するためのプロセスが始まっています。Code-based sandbox solutions were deprecated in 2014, and SharePoint Online has started the process to completely remove this capability. コードベースのサンドボックス ソリューションは、SharePoint 2013 および SharePoint 2016 でも非推奨になっています。Code-based sandbox solutions are also deprecated in SharePoint 2013 and in SharePoint 2016.

InfoPath フォームを分析するAnalyze your InfoPath forms

このセクションでは、InfoPath フォームを分析して修正するために使用可能なモデルについて説明します。In this section, we describe a model that you can use to analyze and fix your InfoPath forms. フォームによっては、修正して再展開できるものもありますが、InfoPath から移行して代替手段で必要な機能を確保しなければならないものもあります。Depending on the form, you can either fix the form and redeploy it, or you may need to move away from InfoPath and use an alternative approach to get the functionality you need.

アクションを実行する前に、フォームのビジネス ニーズを評価することが重要です。Before taking any action, it's important that you assess the business need for your form. ビジネスに有用でなくなったフォームをよく見かけますが、そのような場合は、単にフォームを削除する方が簡単です。We often see many forms that are no longer business-relevant, and in those cases it's easier to simply drop the form.

InfoPath フォームで分離コードが使用されているかどうかを確認するDetermine if your InfoPath forms use code-behind

これを確認するには、SharePoint サンドボックス ソリューション スキャナー ツールを使用することをお勧めします。To determine this, we recommend that you use the SharePoint SandBox Solution scanner tool. このツールのレポートで、サンドボックス ソリューションが InfoPath ファイルから抽出されたかどうかがわかります。The report from this tool indicates if the sandbox solution comes from an InfoPath file. 後述するように、このツールでは、ソリューションで使用されているアセンブリが不要かどうかもわかります。The tool also tells you if the used assembly in the solution is useless, as described later in this article.

フォームがまだ有用かどうかを確認するDetermine if your forms are still relevant

修正/変換作業にとりかかる前に、フォームがまだビジネスに不可欠かどうかを確認することが重要です。Before you dive into the remediation/transformation work, it's important that you determine whether the form is still critical for your business. 不可欠な場合は、次のセクションに進んでください。そうでない場合は、このフォームを使用することで作成されるデータを検討する必要があります。If so, continue to the next section; if not, you need to think about the data created by using this form.

通常、データは InfoPath XML ファイルとして作成されます。このファイルは、SharePoint リスト内に存在します。Typically the data was created as InfoPath XML files that live in a SharePoint list. フォームを削除すると、データを表示できなくなります。If you remove the form, you will no longer be able to visualize the data. フォームとデータが有用でなければ、問題はありません。Sometimes that's okay because the form and data are not relevant anymore. ただし、データにアクセスしたい場合は、InfoPath XML ファイルから読み込んだデータを SharePoint リスト項目データに変換することができます。However, if you want to be able to access the data, you can convert the data coming from the InfoPath XML files into SharePoint list items data. これを行うには、「PnP-Transformation EmpRegConsole コンソール アプリケーション」を参照してください。To do this, see the PnP-Transformation EmpRegConsole console application.

InfoPath フォーム (XSN ファイル) をダウンロードして調査するDownload the InfoPath forms (XSN file) for inspection

作業が必要な InfoPath フォームがあることを確認した場合は、このようなフォームをダウンロードする必要があります。If you have confirmed that you have InfoPath forms that require work, you must download these forms. 分離コードを使用した InfoPath フォームは、フォーム ライブラリまたはサイト コンテンツ タイプのどちらかとして展開されます。InfoPath forms with code-behind are deployed as either Form Library or Site Content Type.

フォーム ライブラリForm Library

この場合、XSN ファイルは、InfoPath フォームの展開先にしたフォーム ライブラリの Forms フォルダーにあります。In this case, the XSN file is inside the Forms folder of the form library to which the InfoPath form was deployed. フォーム ライブラリを探すには、InfoPath Form_LibName_id の規則に従って WSP パッケージ名を調査します。To find the form library, look at the WSP package name that follows this convention: InfoPath Form_LibName_id.

フォーム ライブラリが見つかったら、そのライブラリの Forms フォルダーから template.xsn ファイルをダウンロードする必要があります。After you know the form library, you need to download the template.xsn file from the Forms folder of the library. そのために、ライブラリの URL + "Forms/template.xsn" という URL (https://contoso.sharepoint.com/sites/infopath1/IHaveCodeBehind/Forms/template.xsn など) を作成し、ブラウザーを使用してそのファイルをダウンロードします。You can do so by constructing a URL like this, library URL + /Forms/template.xsn (for example: https://contoso.sharepoint.com/sites/infopath1/IHaveCodeBehind/Forms/template.xsn), and using the browser to download the file.

サイト コンテンツ タイプSite Content Type

サイト コンテンツ タイプとして展開された InfoPath フォームには、その展開時にコンテンツ タイプに結び付けられたフォーム ライブラリに保存された XSN ファイルが割り当てられます。InfoPath forms deployed as Site Content Type have their XSN file stored in a form library that was connected to the content type at form deployment time. 前のセクションと同様に、WSP パッケージ名からライブラリ名がわかります。As in the previous section, you can obtain the library name from the WSP package name. 前回とは異なり、フォームが実際にはファイルとしてライブラリに保存されています。そのため、フォームをフォーム ライブラリからダウンロードするだけで済みます。What's different this time is that the form is actually stored as a file in the library, so you can simply download it from the form library.

InfoPath フォームを修正するFix your InfoPath forms

前のセクションでは、分離コードを使用した InfoPath フォームを示しましたが、これらのフォームに本当に有用な分離コードが含まれているのでしょうか。The previous sections showed you the InfoPath forms with code-behind, but do these forms actually contain useful code-behind? フォーム作成者が InfoPath の [開発者] リボンで誤って [コード エディター] ボタンを選択したフォームが数多く存在します。There are many forms for which the form author accidentally chose the Code Editor button on the InfoPath Developer ribbon.

InfoPath の分離コード

これを行った場合は、何もしない分離コードが存在することになります。If you've done this, you may have code-behind that doesn't do anything. それを削除することにより、分離コードを使用した InfoPath フォームを、分離コードを使用せず、サンド ボックス ソリューションに依存しない InfoPath フォームに変換できます。By removing it, you can convert your InfoPath form with code-behind to an InfoPath form with no code-behind and no dependency on sandbox solutions.

フォームの分離コードが不要かどうかを確認するDetermine if your forms' code-behind is useless

SharePoint サンド ボックス ソリューション スキャナーを使用すれば、InfoPath フォームに不要なコードが含まれているかどうかがわかります。The SharePoint Sandbox Solution scanner tells you if your InfoPath form has useless code. しかし、不要なコードしか修正できないため、どうすれば不要な分離コードと必要な分離コードを区別できるかを知る必要があります。However, you might wonder how you can distinguish between useless and necessary code-behind because you can only fix useless code. オリジナルのフォーム (前回の手順でダウンロードしたフォームではない) が残っている場合は、コードを調査するだけでわかります。If you still have the original form (not the one you downloaded in previous steps), you can simply look at the code.

既定の空のコードを以下に示します。同様のコードがある場合は、そのコードを削除することでフォームを修正できます。Following is the default empty code, and if your code is similar, the form can be fixed by dropping the code.

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 アセンブリ ブラウザーやデコンパイラなど) を使用してコードを調査します。In case you only have the XSN file that you downloaded in the previous step, you can rename your XSN file as a cab file (for example, template.cab), extract the assembly, and use .NET reflection tools (such as the ILSpy open-source .NET assembly browser and decompiler) to inspect the code.

一般に、ILSpy では、不要な分離コードが次の図のように表示されます。A typical view of useless code-behind looks like the following figure in ILSpy.

ILSpy に表示された不要な分離コード

分離コードを削除することで InfoPath フォームを修正するDrop code-behind from InfoPath forms to fix them

分離コードが不要なことを確認したら、次の操作を実行して分離コードを削除できます。If you have confirmed that your code-behind is useless, you can drop it by doing the following:

  1. [InfoPath Designer] でフォームを開きます ([デザイン] を右クリックします)。Open the form in InfoPath Designer (right-click Design).

  2. [ファイル] > [情報] > [フォーム オプション] に移動します。Go to File > Info > Form Options.

  3. [プログラミング] カテゴリを選択してから、[コードの削除] を選択します。Choose the Programming category, and then choose Remove Code.

  4. もう一度、[ファイル] > [情報] > [クイック発行] でフォームを発行します。Publish the form again at File > Info > Quick Publish.

  5. [サイト設定] > [ソリューション] で、リンクされたサンドボックス ソリューションを非アクティブにします。Deactivate the linked sandbox solution at Site Settings > Solutions.

  6. フォームが想定どおりに動作することを確認します。Confirm that the form works as expected.

  7. サンドボックス ソリューションを削除します。Delete the sandbox solution.

注意

InfoPath XSN ファイルとソース コードにアクセスできない場合は、不要なコードを含むサンドボックス ソリューションを非アクティブにしさえすればフォームを修正できます。If you no longer have access to the InfoPath XSN file and source code, you can still fix these forms by deactivating the sandbox solutions that have useless code. サンドボックス ソリューションのレポート出力で IsEmptyInfoPathAssembly = true と記載されているフォームに対してのみ、この方法を行ってください。Only do this for the ones mentioned in the sandbox solution report output with IsEmptyInfoPathAssembly = true.

InfoPath フォームを移行するMigrate your InfoPath forms

前のセクションのガイダンスが InfoPath フォームに適用できない場合は、そのフォームがまだビジネスに有用であり、削除できない分離コードが含まれていることを意味します。If the guidance in the previous sections was not applicable to your InfoPath forms, it means that your forms are still business-relevant and contain code-behind that you cannot drop. その場合の一般的な解決策は、InfoPath からの移行になります。これは、次の方法で実現できます。If that's the case, the typical solution is to move away from InfoPath, which can be done in the following ways:

  • SharePoint データの読み取り/書き込みにリモート API を利用する SharePoint アドインを作成します。Build a SharePoint Add-in that leverages remote APIs to read/write SharePoint data.

  • Azure PowerApps または Microsoft Flow を使用してアプリを作成します。Create an app by using Azure PowerApps or Microsoft Flow.

    Azure PowerApps と Microsoft Flow

InfoPath フォームを置き換える SharePoint アドインを作成するBuild SharePoint Add-Ins to replace your InfoPath forms

InfoPath フォームを置き換えるために SharePoint アドインを使用することにした場合は、いくつかのオプションがあります。When you choose to use SharePoint Add-Ins to replace your InfoPath forms, you have several options. 3 つのオプションを以下に示します。ただし、これらのバリエーションを使用することができます。Following are three options; however, you can use variations of these.

一般的な InfoPath コーディング パターンCommon InfoPath coding patterns

InfoPath フォームの変換を適切に支援できるように、一般的な 11 通りの InfoPath コーディング パターンを一覧で示し、これらのパターンを 3 つの SharePoint アドイン オプションを使用して実装する方法について説明します。To better help you with converting your InfoPath form, following is a list of 11 common InfoPath coding patterns and how you can implement these patterns by using the three SharePoint Add-in options.

そのために、まず、最も一般的な InfoPath コーディング パターンを使用した参照用の InfoPath フォームを開発してから、そのフォームを 3 種類の SharePoint アドインに移行しました。To do so, we've first developed a reference InfoPath form that uses the most common InfoPath coding patterns, and then we've migrated that form to three SharePoint Add-in flavors.

次の各リンクは、これらの一般的なパターンを示しています。The following links show these common patterns:

InfoPath データを移行するMigrate your InfoPath data

InfoPath フォームを新しいソリューションに移行したら、InfoPath XML のデータを正規の SharePoint リスト データまたは選択したデータ層に移行することも必要になります。After you move your InfoPath forms to a new solution, you might also want to migrate your data from InfoPath XML to regular SharePoint list data or to the data layer of your choice. InfoPath ファイルは XML ファイルであるため、読み取りと変換が非常に簡単です。Because InfoPath files are XML files, it's fairly easy to read and transform them.

これを行うには、PnP-Transformation EmpRegConsole コンソール アプリケーションを使用します。To do this, use the PnP-Transformation EmpRegConsole console application.

既存のフォームを開くOpen existing forms

コード ベースの操作が無効になると、すぐにコードがサンドボックスで実行できなくなります。As soon as code-based operations are disabled, code can no longer run in the sandbox. そのため、コードを実行するフォームがある場合は、既存のフォームを開くと機能しなくなります。Therefore, if you have forms that execute code, opening the existing forms no longer works.

次の手順は、これを処理するのに役立ちます。The following steps can help you handle this:

  • InfoPath フォームを新しいソリューションに移行した場合は、データが既に変換されているはずなので、問題はありません。If you migrated your InfoPath form to a new solution, you most likely already converted your data and if so, you're good.

  • フォームをそのまま保持することにした (ビジネスに有用ではなくなったなどの理由で) ものの、既存のフォームを開きたい場合は、次の手順のいずれかを実行できます。If you chose to keep the form as is (for example, because it's not business-relevant anymore), but you still want to open the existing forms, you can do one of the following:

関連項目See also