

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# util.transform の変換ヘルパー
<a name="transformation-helpers-in-utils-transform-js"></a>

`util.transform` には、Amazon DynamoDB フィルター処理などの、データソースに対する複雑なオペレーションの実行を容易にするヘルパーメソッドが含まれています。

## 変換ヘルパー utils リスト
<a name="transformation-helpers-in-utils-transform-js-list"></a>

**`util.transform.toDynamoDBFilterExpression(filterObject: DynamoDBFilterObject) : string`**  
Amazon DynamoDB で使用するために、入力文字列をフィルター式に変換します。`toDynamoDBFilterExpression` を使用して、[組み込みモジュール関数](https://docs.aws.amazon.com/appsync/latest/devguide/built-in-modules-js.html)と併用することをおすすめします。

**`util.transform.toElasticsearchQueryDSL(object: OpenSearchQueryObject) : string`**  
指定された入力を同等の OpenSearch Query DSL 式に変換し、JSON 文字列として返します。  
**入力例**  

```
util.transform.toElasticsearchQueryDSL({
    "upvotes":{
        "ne":15,
        "range":[
            10,
            20
        ]
    },
    "title":{
        "eq":"hihihi",
        "wildcard":"h*i"
    }
  })
```
**出力例:**  

```
{
    "bool":{
      "must":[
          {
            "bool":{
              "must":[
                  {
                    "bool":{
                      "must_not":{
                        "term":{
                          "upvotes":15
                        }
                      }
                    }
                  },
                  {
                    "range":{
                      "upvotes":{
                        "gte":10,
                        "lte":20
                      }
                    }
                  }
              ]
            }
          },
          {
            "bool":{
              "must":[
                  {
                    "term":{
                      "title":"hihihi"
                    }
                  },
                  {
                  "wildcard":{
                      "title":"h*i"
                    }
                  }
              ]
            }
          }
      ]
    }
}
```
デフォルトの演算子は AND であると仮定されます。

**`util.transform.toSubscriptionFilter(objFilter, ignoredFields?, rules?): SubscriptionFilter`**  
`Map` 入力オブジェクトを `SubscriptionFilter` 式オブジェクトに変換します。`util.transform.toSubscriptionFilter` メソッドは`extensions.setSubscriptionFilter()` 拡張子への入力として使用されます。詳細については、「[拡張子の使用](https://docs.aws.amazon.com/appsync/latest/devguide/extensions-js.html)」を参照してください。  
パラメータと return ステートメントは以下のとおりです。  
*パラメータ*  
+ `objFilter`: `SubscriptionFilterObject`

  `SubscriptionFilter`式オブジェクトに変換された `Map` 入力オブジェクト。
+ `ignoredFields`: `SubscriptionFilterExcludeKeysType` (オプション)

  最初のオブジェクトのフィールド名は無視されます。
+ `rules`: `SubscriptionFilterRuleObject` (オプション)

  `SubscriptionFilter` 式オブジェクトを作成する際に含める、厳格なルールが適用された `Map` 入力オブジェクト。これらの厳格なルールは `SubscriptionFilter` 式オブジェクトに含まれるため、少なくとも 1 つのルールが満たされてサブスクリプションフィルターを通過することになります。
*レスポンス*  
戻り値は `[SubscriptionFilter](https://docs.aws.amazon.com/appsync/latest/devguide/extensions-js.html)`。

**`util.transform.toSubscriptionFilter(Map, List)`**  
`Map` 入力オブジェクトを `SubscriptionFilter` 式オブジェクトに変換します。`util.transform.toSubscriptionFilter` メソッドは`extensions.setSubscriptionFilter()` 拡張子への入力として使用されます。詳細については、「[拡張子の使用](https://docs.aws.amazon.com/appsync/latest/devguide/extensions-js.html)」を参照してください。  
1 番目の引数は、`SubscriptionFilter` 式オブジェクトに変換される `Map` 入力オブジェクトです。2 番目の引数は、`SubscriptionFilter` 式オブジェクトを作成する際に 1 番目の `Map` 入力オブジェクトでは無視されるフィールド名の `List` です。

**`util.transform.toSubscriptionFilter(Map, List, Map)`**  
`Map` 入力オブジェクトを `SubscriptionFilter` 式オブジェクトに変換します。`util.transform.toSubscriptionFilter` メソッドは`extensions.setSubscriptionFilter()` 拡張子への入力として使用されます。詳細については、「[拡張子の使用](https://docs.aws.amazon.com/appsync/latest/devguide/extensions-js.html)」を参照してください。

**`util.transform.toDynamoDBConditionExpression(conditionObject)`**  
DynamoDB の条件式を作成します。

## サブスクリプションフィルター引数
<a name="subscription-filter-arguments-js"></a>

以下の表では、以下のユーティリティの引数の定義方法について説明しています。
+ `Util.transform.toSubscriptionFilter(objFilter, ignoredFields?, rules?): SubscriptionFilter`

------
#### [ Argument 1: Map ]

引数 1 は、以下のキー値を持つ `Map` オブジェクトです。
+ フィールド名
+ "and"
+ "or"

フィールド名をキーとする場合、これらのフィールドのエントリの条件は `"operator" : "value"` という形式になります。

次の例では、`Map` にエントリを追加する方法を示します。

```
"field_name" : {
                    "operator1" : value             
               }

## We can have multiple conditions for the same field_name: 

"field_name" : {
                    "operator1" : value             
                    "operator2" : value
                    .
                    .
                    .                  
               }
```

フィールドに 2 つ以上の条件が設定されている場合、これらの条件はすべて OR 演算を使用するものとみなされます。

入力 `Map` には「and」と「or」をキーとして使用することもできます。つまり、その中のすべてのエントリは、キーに応じて AND または OR ロジックを使用して結合する必要があります。キー値「and」と「or」には条件の配列が必要です。

```
"and" : [
            
            {
                "field_name1" : {
                    "operator1" : value             
                }
             },
             
             {
                "field_name2" : {
                    "operator1" : value             
                }
             },
             .
             .
        ].
```

「and」と「or」はネストできることに注意してください。つまり、「and/or」を別の「and/or」ブロック内にネストしてもかまいません。ただし、これは単純なフィールドでは機能しません。

```
"and" : [
            
            {
                "field_name1" : {
                    "operator" : value             
                }
             },
             
             {
                "or" : [
                            {
                                "field_name2" : {
                                    "operator" : value             
                                }
                            },
                            
                            {
                                "field_name3" : {
                                    "operator" : value             
                                }
                            }
              
                        ].
```

次の例は、`util.transform.toSubscriptionFilter(Map) : Map`を使用して*引数 1* を入力したものです。

**入力**

引数 1: マップ:

```
{
  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "gt": 2000
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

**出力**

結果は `Map` オブジェクトです。

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "lte",
          "value": 50
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Admin"
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "lte",
          "value": 50
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "gte",
          "value": 20
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Admin"
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "gte",
          "value": 20
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    }
  ]
}
```

------
#### [ Argument 2: List ]

引数 2 には、`SubscriptionFilter` 式オブジェクトを作成するときに入力 `Map` (引数 1) で考慮してはいけないフィールド名の `List` が含まれています。`List` は空になることもあります。

次の例は、`util.transform.toSubscriptionFilter(Map, List) : Map` を使用した引数 1 と引数 2 の入力を示しています。

**入力**

引数 1: マップ:

```
{
  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "gt": 20
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

引数 2: リスト:

```
["percentageUp", "author"]
```

**出力**

結果は `Map` オブジェクトです。

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    }
  ]
}
```

------
#### [ Argument 3: Map ]

引数 3 は、フィールド名をキー値とする `Map` オブジェクトです (「and」や「or」は使用できません)。フィールド名がキーの場合、これらのフィールドの条件は `"operator" : "value"` という形式のエントリになります。引数 1 とは異なり、引数 3 では同じキーに複数の条件を設定できません。さらに、引数 3 には「and」や「or」句がないため、ネストも必要ありません。

引数 3 は厳密な規則のリストを表し、これらの条件の**少なくとも 1 つ**が満たされてフィルタを通過するように `SubscriptionFilter` 式オブジェクトに追加されます。

```
{
  "fieldname1": {
    "operator": value
  },
  "fieldname2": {
    "operator": value
  }
}
.
.
.
```

次の例は、`util.transform.toSubscriptionFilter(Map, List, Map) : Map` を使用した*引数 1*、*引数 2*、*引数 3* の入力を示しています。

**入力**

引数 1: マップ:

```
{
  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "lt": 20
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

引数 2: リスト:

```
["percentageUp", "author"]
```

引数 3: マップ:

```
{
  "upvotes": {
    "gte": 250
  },
  "author": {
    "eq": "Person1"
  }
}
```

**出力**

結果は `Map` オブジェクトです。

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        },
        {
          "fieldName": "upvotes",
          "operator": "gte",
          "value": 250
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Person1"
        }
      ]
    }
  ]
}
```

------