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

InfoPath フォームを分析するAnalyze and if possible fix 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 your form you can simply fix the form and redeploy it or you need to move away from InfoPath and use an alternative approach to realize the needed functionality.

アクションを実行する前に、フォームのビジネス ニーズを評価することが重要です。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. 後述するように、このツールでは、ソリューションで使用されているアセンブリが不要かどうかもわかります。Additionally the tool will also tell you if the used assembly in the solution is "useless" as described later on 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 then please continue to the next chapter, if not you need to think about the data created using this form.

通常、データは InfoPath XML ファイルとして作成されます。このファイルは、SharePoint リスト内に存在します。Typically the data was created as InfoPath XML files which 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 ファイル) をダウンロードして調査するDownloading the InfoPath form (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 know the form library you can take a look at the WSP package name as if follows this convention: "InfoPath Form_InfoPath Form_LibName_id_id".

フォーム ライブラリが見つかったら、そのライブラリの Forms フォルダーから template.xsn ファイルをダウンロードする必要があります。So once you have the 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 content type do have their XSN file stored in a form library which was connected to the content type as form deployment time. 前のセクションと同様に、WSP パッケージ名からライブラリ名がわかります。Like 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 found library, so you can simply download it from the form library.

InfoPath フォームを修正するMigrate 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 deployed form (so not the one you've downloaded in previous steps) you can simply have a peek 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 which you've downloaded in the previous step you can rename your XSN file to a cab file (e.g. template.cab), extract the assembly and use .Net reflection tools (like the open source ILSpyILSpy is the 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 the form works as expected

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

注意

InfoPath XSN ファイルとソース コードにアクセスできない場合は、不要なコードを含むサンドボックス ソリューションを非アクティブにしさえすればフォームを修正できます。If you don't have access to the InfoPath XSN file and source code anymore you can still fix these forms by simply deactivating the sandbox solutions that have "useless" code only. サンドボックス ソリューションのレポート出力で 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 moving away from InfoPath which can be done in various ways:

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

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

    Azure PowerApps と Microsoft Flow

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

InfoPath フォームを置き換えるために SharePoint アドインを使用することにした場合は、いくつかのオプションがあります。When you opt to use regular SharePoint Add-In's to replace your InfoPath forms you do 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 formReference InfoPath form which uses the most common InfoPath coding patterns and then we've migrated that form to 3 SharePoint Add-In flavors.

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

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

InfoPath フォームを新しいソリューションに移行したら、InfoPath XML のデータを正規の SharePoint リスト データまたは選択したデータ層に移行することも必要になります。Once you've moved over your InfoPath form 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 ファイルであるため、読み取りと変換が非常に簡単です。Since InfoPath files are XML files it's fairly easy to read and transform those.

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

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

コード ベースの操作が無効になると、すぐにコードがサンドボックスで実行できなくなります。As soon as code based operations are disabled it means that no code can run anymore 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've migrated your InfoPath form to a new solution then you've most likely already converted your data and as such you're good

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

関連項目See also