---
title: "ウォークスルー:フォームの提出を編集する送信アクションを作成する"
slug: "walkthrough--create-a-submit-action-that-redacts-form-submissions"
abstract: "ユーザーの個人情報のデータベース記録を匿名化する方法を学びましょう。"
---
# ウォークスルー:フォームの提出を編集する送信アクションを作成する

消去権(または忘れられる権利)は、ユーザーが個人データを削除したいという権利に関するものです。このトピックでは、Sitecoreフォームを使って提出フォームからユーザーの個人情報を削除する方法について説明します。

> !警告このトピックは、データプライバシーコンプライアンスをサポートするためにSitecoreフォームの実装をどのように設定するかを説明します。このトピックは網羅的なものではなく、いかなる法律や規制の内容、解釈、適用に関する法的助言として解釈または使用すべきではありません。

Sitecoreおよびそのパートナーがデータプライバシー義務を遵守しやすくするために、Sitecoreフォームはユーザーの個人情報のデータベース記録を匿名化するAPIを提供しています。これは、すべてのフィールド提出値を ~REDACTED~に隠し、連絡先IDを無効化し、連絡先がアップロードしたファイルを削除することでこれを実現します。

このウォークスルーでは、フォームの投稿を編集し、特定の連絡先がアップロードしたファイルを削除するカスタム送信アクションの作成方法を説明しています。このトピックで使用されたシナリオは、訪問者が個人情報の黒塗りを確定するためにチェックできる同意チェックボックスを表示する方法を説明しています。訪問者がそのボックスを選択して「 **送信**」をクリックすると、編集が行われます。すべての訪問者の投稿は黒塗りされ、訪問者がアップロードしたすべてのファイルは削除されます。

![Warning for deletion of personal data](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/FORMS_redact.png)

> !重要この場合、連絡先はSitecore Analyticsを通じて取得されます。したがって、編集はCMSのみモードで実行されません。Sitecoreフォームは依存性注入によって編集データプロバイダーを作成するため、設定ファイルを使ってその実装を上書きできます。

このウォークスルーで使用されているクライアントスクリプトは、フォームデザイナーが同意チェックボックスとしてチェックボックス要素を使えるようにしています。例えば:

![GDPR Redact Data](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/FORMS-GDPR-redact-data.png)

このウォークスルーでは、以下の方法を説明します:

-   [サブミッション・アクションクラスを作成する](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/walkthrough--create-a-submit-action-that-redacts-form-submissions.html#UUID-a4f3332e-cfae-1317-8c42-d220d36d84eb_section-idm4545042516198431569498435271 "Create a submit action class")
-   [SPEAKエディターコントロールを作成する](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/walkthrough--create-a-submit-action-that-redacts-form-submissions.html#UUID-a4f3332e-cfae-1317-8c42-d220d36d84eb_section-idm4479625702486431650732645936 "Create the SPEAK editor control")
-   [エディター用のパラメータを含むフォルダを追加してください](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/walkthrough--create-a-submit-action-that-redacts-form-submissions.html#UUID-a4f3332e-cfae-1317-8c42-d220d36d84eb_section-idm4573163340129631650747995221 "Add a folder that contains parameters for the editor")
-   [編集者用のクライアントスクリプトを作成します](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/walkthrough--create-a-submit-action-that-redacts-form-submissions.html#UUID-a4f3332e-cfae-1317-8c42-d220d36d84eb_section-idm4480052143929631569540511718 "Create the client script for the editor")
-   [アクションアイテムを提出する](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/walkthrough--create-a-submit-action-that-redacts-form-submissions.html#UUID-a4f3332e-cfae-1317-8c42-d220d36d84eb_section-idm4646117388305631650767653446 "Create the submit action item")

## サブミッション・アクションクラスを作成する

カスタム送信アクションを作成する際は、SubmitActionBase<TParametersData> クラスから継承するクラスを作成しなければなりません。

サブミットアクションクラスを作成するには:

1.  SubmitActionBase<TParametersData>から継承するRedactDataクラスを作成します。
    
2.  RedactDataパラメータを指定します。
    
3.  Executeメソッドを上書きし、ブール値検証パラメータを提供します。例えば:
    
    using System;
    using System.Linq;
    using Microsoft.Extensions.DependencyInjection;
    using Sitecore.Analytics;
    using Sitecore.DependencyInjection;
    using Sitecore.ExperienceForms.Data;
    using Sitecore.ExperienceForms.Models;
    using Sitecore.ExperienceForms.Mvc.Models.Fields;
    using Sitecore.ExperienceForms.Processing;
    using Sitecore.ExperienceForms.Processing.Actions;
    
    namespace Sitecore.ExperienceForms.Gdpr.Samples.SubmitActions
    {
     public class RedactData : SubmitActionBase<RedactDataSubmitActionData>
     {
     private readonly IRedactDataProvider \_redactDataProvider = ServiceLocator.ServiceProvider.GetService<IRedactDataProvider>();
     private readonly ITracker \_tracker = Tracker.Current;
    
     public RedactData(ISubmitActionData submitActionData) : base(submitActionData)
     {
     }
    
     protected override bool Execute(RedactDataSubmitActionData data, FormSubmitContext formSubmitContext)
     {
     var consentCheckBox = formSubmitContext.Fields.FirstOrDefault(f => Guid.Parse(f.ItemId) == data.ConsentCheckboxFieldId);
    
     if (consentCheckBox is CheckBoxViewModel checkboxVm)
     {
     if (checkboxVm.Value)
     {
     var contactId = \_tracker?.Contact?.ContactId;
     if (contactId != null)
     {
     \_redactDataProvider.RedactContactSubmissions(contactId.Value);
     }
     }
     }
     else
     {
     return false;
     }
    
     return true;
     }
     }
    }
    
    using System;
    
    namespace Sitecore.ExperienceForms.Gdpr.Samples.SubmitActions
    {
     public class RedactDataSubmitActionData
     {
     public Guid ConsentCheckboxFieldId { get; set; }
     }
    }
    
4.  サブミッションアクションクラスをビルドしてデプロイします。
    

## SPEAKエディターコントロールを作成する

次のステップは、フォームフィールドを連絡先情報フィールドにマッピングできるUIを作成することです。Sitecoreフォームの場合、送信アクションエディタはコアデータベースにあります: /sitecore/client/Applications/FormsBuilder/Components/Layouts/Actions

> !注この例では、Sitecore Rocks Visual Studioプラグインが必要です。このプラグインはVisual Studio 2019以前のバージョンと互換性があります。

コントロールを作成するには:

1.  /sitecore/client/Applications/FormsBuilder/Components/Layouts/Actionsへナビゲート。
    
2.  **右クリックでアクション**を選び、**追加**をクリックしてから**新しいアイテム**をクリックします。
    
3.  /sitecore/client/Speak/Templates/Pages/Speak-BasePageテンプレートをクリックし、「**新しいアイテム名を入力し**て」欄に*RedactData*を入力し、「**OK」**をクリックします。
    
4.  作成した*RedactData*アイテムを右クリックして「 **タスク**」をクリックし、「 **デザインレイアウト**」をクリックしてください。
    
5.  **レイアウト**ダイアログボックスで、/sitecore/client/Speak/Layouts/Layoutsに移動して*Speak-FlexLayout*のレイアウトをクリックし、「**OK」**をクリックします。
    
6.  左上で **「レンダリングを追加** 」をクリックし、「 **レンダリングを選択する** 」ダイアログボックスで「 **すべて** 」をクリックして*PageCode*を検索してください。
    
    ![Select Renderings dialog box](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/SXA-redact-add-rendering.png)
    
7.  PageCodeをクリックして**OK**をクリックします。
    
8.  PageCodeレンダリングプロパティで、PageCodeScriptFileNameプロパティをページコードスクリプトを含むJavaScriptパスに設定します:/sitecore/shell/client/Applications/FormsBuilder/Layouts/Actions/RedactData.js。
    
9.  SpeakCoreVersionプロパティを*Speak 2-x*に設定してください。
    
10.  Search Text Viewレンダリングを選択し、「 **追加** 」をクリックして追加: HeaderTitle、HeaderSubtitle。
     
11.  2つのアイテムについては、**プロパティ** セクションで以下のIDプロパティを設定します。
     
     -   IsVisible – *False*
     -   PlaceholderKey – *ページ・ボディ*
12.  以下のレンダリングを追加してください:
     
     -   MainBorder タイプ *Border*。
     -   CheckboxesDropList 型 *DropList*の。 PlaceholderKey プロパティを *MainBorder.Content*に設定します。
     -   FormClientApi 型 *FormClientApi*の。 PlaceholderKey プロパティを *MainBorder.Content*に設定します。
     
     現在のレンダリングは次のようになります:
     
     ![Renderings and Placeholders list](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/SXA-redact-rendering.png)
     

## エディター用のパラメータを含むフォルダを追加してください

次に、エディターのパラメータを含むフォルダを追加する必要があります。

PageSettingsフォルダを追加するには:

1.  /sitecore/client/Applications/FormsBuilder/Components/Layouts/Actionsに移動し、先ほど作成した*RedactData*アイテムを右クリックし、「**追加**」をクリックし、「**新しいアイテム**」をクリックします。
    
2.  Search *PageSettings*テンプレートを選択し、名前*PageSettings*を入力して**OK**をクリックします。
    
3.  作成した*PageSettings*アイテムを右クリックして「 **追加**、**新しいアイテム**」をクリックします。
    
4.  Searchして*Text Parameters*テンプレートを選択し、「 **追加** 」を2回クリックし、以前作成したレイアウトのIDと同じ名前でアイテム名を付けます。
    
    -   HeaderTitle – ダブルクリックして **テキスト欄** に入力: *GDPR Redact Data*。
    -   HeaderSubtitle – ダブルクリックして **テキスト欄** で入力: *提出されたデータを編集するには、同意チェックボックスを選択してください。*
5.  PageSettingsアイテムを右クリックして「**追加**、**新しいアイテム**」をクリックします。Search*DropList Parameters*テンプレートをクリックし、「**追加**」をクリックし、アイテム名を*CheckboxesDropList*。
    
6.  CheckboxesDropList項目をダブルクリックして、以下のフィールド値を設定します:
    
    チェックボックスDropListパラメータ
    
    ValueFieldName
    
    ディスプレイフィールドネーム
    
    チェックボックスドロップリスト
    
    itemId
    
    名称
    
7.  PageSettingsアイテムを右クリックして「**追加**、**新しい項目**」をクリックします。Search →*→*FormClientApi*→*→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
    
8.  FormClientApiアイテムをダブルクリックし、「**フォーマット**フィールド値」テーブルでitemIdとitemIdの間にバインディングを追加し、nameとnameの間に別のバインディングを追加します。**IncludedFieldTypeIds**フィールドで、左側のリストボックスでField Types/Basic/Checkboxを見つけてクリックし、**\>**をクリックして右のリストボックスにコピーします。
    
    ![Format field and options](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/SXA-redact-binding.png)
    
9.  /sitecore/client/Applications/FormsBuilder/Components/Layouts/Actionsに移動し、先ほど作成したPageSettingsアイテムを右クリックします。
    
10.  新しい項目を追加してください。 *Stylesheet*のタイプPage-Stylesheet-File:
     
     ![Add New Item dialog box](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/SXA-redact-stylesheet.png)
     
11.  新しいスタイルシート項目をクリックし、**Stylesheet**の値を以下に設定します: /sitecore/shell/client/Applications/FormsBuilder/Layouts/Actions/Actions.css。
     

## 編集者用のクライアントスクリプトを作成します

次に、編集者用のクライアントスクリプトを作成しなければなりません。

スクリプトを作成するには:

1.  基本のSubmit Actions編集スクリプトを使用してください。Submit actions編集スクリプトは常に以下の基本を持っています:
    
    (function (speak) {
     var parentApp = window.parent.Sitecore.Speak.app.findApplication('EditActionSubAppRenderer');
    
     speak.pageCode("underscore",
     function (\_) {
     return {
     initialized: function () {
     this.on({
     "loaded": this.loadDone
     },
     this);
    
     if (parentApp) {
     parentApp.loadDone(this, this.HeaderTitle.Text, this.HeaderSubtitle.Text);
     parentApp.setSelectability(this, true);
     }
     },
    
     loadDone: function (parameters) {
     this.Parameters = parameters || {};
     },
    
     getData: function () {
     return this.Parameters;
     }
     };
     });
    })(Sitecore.Speak);
    
2.  EditActionSubAppRendererコンポーネントを使いましょう。エディターは、EditActionSubAppRendererコンポーネントによってSpeakダイアログのフレーム内に読み込まれます。
    
    ダイアログヘッダーのタイトルとサブタイトルを親に渡し、送信ボタンが有効になるタイミングを設定します。
    
    スクリプトの仕組みは以下の通りです。
    
    -   initialized – はフィールドからデータを配列に収集します。
    -   loadDone – フォームコントロールを反復し、その動的データをフィールド配列に設定します。現在の送信アクションのパラメータプロパティ値がフィールドリストに含まれていない場合(例えばフィールドが削除されたりフォームがコピーされた場合)、配列内の選択リスト項目に含まれていないID値が含まれます。その後、SPEAKフォームをパラメータオブジェクトにバインドします。
    -   getData – 送信ボタンをクリックするとgetData関数が呼び出されます。新しいパラメータオブジェクトを収集するためにフォームデータを反復処理します。空の選択(フィールドマッピング)は省略されます。
    
    最終的なスクリプトは次のようになります:
    
    (function (speak) {
     var parentApp = window.parent.Sitecore.Speak.app.findApplication('EditActionSubAppRenderer');
     speak.pageCode("underscore",
     function (\_) {
     return {
     initialized: function () {
    
     this.on({
     "loaded": this.loadDone
     }, this);
    
     this.Fields = this.FormClientApi.getFields();
     this.CheckboxesDropList.Items = this.Fields;
    
     if (parentApp) {
     parentApp.loadDone(this, this.HeaderTitle.Text, this.HeaderSubtitle.Text);
     parentApp.setSelectability(this, true);
     }
     },
     loadDone: function (parameters) {
     this.Parameters = parameters || {};
     this.CheckboxesDropList.SelectedValue = this.Parameters.consentCheckboxFieldId;
     },
     getData: function () {
     this.Parameters.consentCheckboxFieldId = this.CheckboxesDropList.SelectedValue;
     return this.Parameters;
     }
     };
     });
    })(Sitecore.Speak);

## アクションアイテムを提出する

アクションアイテムを提出するには:

1.  */sitecore/system/Settings/Forms/Submit Actions*へナビゲート。
    
2.  右クリックで **「アクションを送信**」をクリックし、「 **挿入**」をクリックし、「 **テンプレートから挿入**」をクリックします。
    
3.  /System/Forms/Submit Actionテンプレートの**アイテム名**欄で、名前*Redact Data*を入力して**挿入**をクリックします。
    
4.  作成したアイテムに移動し、**設定** セクションの**Model Type**フィールドで値をクラスタイプ名に設定します。
    
5.  **エラーメッセージ**欄には、例えば「*データの編集に失敗!」*といったエラーメッセージを入力してください。
    
6.  **エディター**フィールドで、今作成したエディターを選択してください。例えば*RedactData*。
    
7.  **「外観**」セクションで、フォーム要素ペインで表示したいアイコンを選択します。
    
    フォーム要素のペインで「 **Add a submit action**」をクリックすると、「 **Redact Data** 」アクションをクリックできます。
    
    ![Add the Redact Data action](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/SXA-redact-submit_action.png)