

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 页面和自动化参数
<a name="paramters"></a>

参数是 AWS App Studio 中的一项强大功能，用于在应用程序中的不同组件、页面和自动化之间传递动态值。使用参数，您可以打造灵活且具有情境感知能力的体验，从而提高应用程序的响应速度和个性化程度。本文涵盖两种类型的参数：页面参数和自动化参数。

**Topics**
+ [页面参数](parameters-page.md)
+ [自动化参数](parameters-automation.md)

# 页面参数
<a name="parameters-page"></a>

页面参数是一种在页面之间发送信息的方式，通常用于在 App Studio 应用程序中从一个页面导航到另一个页面以维护上下文或传递数据。页面参数通常由名称和值组成。

## 页面参数用例
<a name="parameters-pages-use-cases"></a>

页面参数用于在 App Studio 应用程序中的不同页面和组件之间传递数据。它们对以下用例特别有用：

1. **搜索和筛选**：当用户在您的应用程序的主页上搜索时，可以将搜索词作为参数传递给结果页面，从而使其仅显示相关的筛选项目。例如，如果用户搜索*noise-cancelling headphones*，则*noise-cancelling headphones*可以将带有值的参数传递到产品列表页面。

1. **查看商品详情**：如果用户点击商品（例如产品），则该商品的唯一标识符可以作为参数传递到详情页面。这允许详细信息页面显示有关特定项目的所有信息。例如，当用户点击耳机产品时，该产品的唯一 ID 将作为参数传递到产品详情页面。

1. **在页面导航中传递用户上下文**：当用户在页面之间导航时，参数可以传递重要的上下文，例如用户的位置、首选产品类别、购物车内容和其他设置。例如，当用户在您的应用程序上浏览不同的产品类别时，他们的位置和首选类别会作为参数保留，从而提供个性化和一致的体验。

1. **深度链接**：使用页面参数将指向应用程序内特定页面的链接共享或添加书签。

1. **数据操作**：您可以创建接受参数值的数据操作，以便根据传递的参数筛选和查询数据源。例如，在产品列表页面上，您可以创建一个接受`category`参数以获取相关产品的数据操作。

## 页面参数安全注意事项
<a name="parameters-pages-security"></a>

虽然页面参数提供了一种在页面之间传递数据的强大方法，但您必须谨慎使用它们，因为如果使用不当，它们可能会暴露敏感信息。以下是需要记住的重要安全注意事项：

1. **避免在中暴露敏感数据 URLs**

   1. **风险**： URLs（包括数据操作参数）通常出现在服务器日志、浏览器历史记录和其他地方。因此，必须避免在页面参数值中暴露敏感数据，例如用户凭证、个人身份信息 (PII) 或任何其他机密数据。

   1. **缓解措施**：考虑使用可以安全映射到敏感数据的标识符。例如，您可以传递一个可用于获取用户名或电子邮件地址的随机唯一标识符，而不是将用户的姓名或电子邮件地址作为参数传递。

# 自动化参数
<a name="parameters-automation"></a>

自动化参数是 App Studio 中的一项强大功能，可用于通过传递来自各种来源（例如用户界面、其他自动化或数据操作）的动态值来创建灵活且可重复使用的自动化。它们充当占位符，在自动化运行时会被实际值替换，从而允许您每次使用具有不同输入的相同自动化。

在自动化中，参数具有唯一的名称，您可以使用 params 变量和参数名称来引用参数的值，例如，`{{params.customerId}}`。

本文深入了解自动化参数，包括其基本概念、用法和最佳实践。

## 自动化参数的优点
<a name="parameters-automation-benefits"></a>

自动化参数具有多种优点，包括以下列表：

1. 可@@ **重用性**：通过使用参数，您可以创建可重复使用的自动化，这些自动化可以使用不同的输入值进行自定义，从而允许您在不同的输入中重复使用相同的自动化逻辑。

1. **灵活性**：无需将值硬编码到自动化中，而是可以定义参数并在需要时提供不同的值，从而使自动化更具动态性和适应性。

1. **关注点分离**：参数有助于将自动化逻辑与使用的特定值分开，从而促进代码的组织和可维护性。

1. **验证**：每个参数都有一种数据类型，例如字符串、数字或布尔值，将在运行时进行验证。这样可以确保数据类型不正确的请求被拒绝，而无需自定义验证代码。

1. **可选参数和必填参数**：您可以将自动化参数指定为可选参数或必填参数。运行自动化时必须提供必需的参数，而可选参数可以具有默认值或省略。这种灵活性使您可以创建更多功能的自动化，这些自动化可以根据提供的参数处理不同的场景。

## 场景和用例
<a name="parameters-automation-scenarios"></a>

### 场景：检索商品详情
<a name="parameters-automation-scenario-product-details"></a>



想象一下，您有一个自动化系统，可以根据产品 ID 从数据库中检索产品详细信息。此自动化可能有一个名为的参数`productId`。

该`productId`参数充当占位符，您可以在运行自动化时使用实际的产品 ID 值填充该占位符。您可以定义`productId`参数并在每次运行自动化时传入不同的产品 ID 值，而不必将特定的产品 ID 硬编码到自动化中。

您可以从组件的数据源调用此自动化，使用双大括号语法将所选产品的 ID 作为`productId`参数传递：`{{ui.productsTable.selectedRow.id}}`。这样，当用户从表 (`ui.productsTable`) 中选择产品时，自动化将通过传递所选行的 ID 作为`productId`参数来检索所选产品的详细信息。

或者，您可以从另一个自动化中调用此自动化，该自动化会循环浏览产品列表，并通过传递产品的 ID 作为`productId`参数来检索每个产品的详细信息。在这种情况下，`productId`参数值将在循环的每次迭代中通过`{{product.id}}`表达式动态提供。

通过使用`productId`参数和双大括号语法，可以使这种自动化更加灵活和可重复使用。无需为每个产品创建单独的自动化，只需提供来自不同来源（例如用户界面组件或其他自动化）的相应产品 ID 作为参数值即可检索任何产品的详细信息。

### 场景：使用备用值处理可选参数
<a name="parameters-automation-scenario-optional-parameters"></a>

让我们考虑一个场景，其中你有一个 “任务” 实体，其中包含必填的 “所有者” 列，但你希望该字段在自动化中成为可选字段，如果未选择所有者，则提供备用值。

1. 使用名为的参数创建自动化`Owner`，该参数映射到`Owner``Task`实体的字段。

1. 由于该`Owner`字段在实体中是必填字段，因此该`Owner`参数将与所需的设置同步。

1. 要在自动化中将该`Owner`参数设为可选，请关闭该参数的`required`设置。

1. 在你的自动化逻辑中，你可以使用类似的表达式`{{params.Owner || currentUser.userId}}`。此表达式检查是否提供了该`Owner`参数。如果未提供，它将回退到当前用户的 ID 作为所有者。

1. 这样，如果用户没有在表单或组件中选择所有者，则自动化会自动将当前用户指定为任务的所有者。

通过切换`Owner`参数的`required`设置并使用后备表达式，您可以将其与实体字段要求分离，使其在自动化中成为可选的，并在未提供参数时提供默认值。

## 定义自动化参数类型
<a name="parameters-automation-create"></a>

通过使用参数类型来指定数据类型和设置要求，您可以控制自动化的输入。这有助于确保您的自动化在预期输入下可靠运行。

### 同步实体中的类型
<a name="parameters-automation-synchronize-entity"></a>

动态同步实体字段定义中的参数类型和要求可以简化与实体数据交互的自动化构建，从而确保参数始终反映最新的实体字段类型和要求。

以下过程详细说明了同步实体参数类型的一般步骤：

1. 使用键入字段（例如布尔值、数字等）创建实体，并根据需要标记字段。

1. 创建新的自动化。

1. 向自动化添加参数，然后在选择 “**类型**” 时，选择要与之同步的实体字段。数据类型和必填设置将自动从映射的实体字段同步

1. 如果需要，您可以通过为每个参数切换 “必需” 设置来覆盖该 on/off 设置。这意味着所需的状态将不会与实体字段保持同步，但除此之外，它将保持同步。

### 手动定义类型
<a name="parameters-automation-custom-types"></a>

您也可以手动定义参数类型，而无需从实体进行同步

通过定义自定义参数类型，您可以创建接受特定输入类型并根据需要处理可选或必需参数的自动化，而不必依赖实体字段映射。

1. 使用键入字段（例如布尔值、数字等）创建实体，并根据需要标记字段。

1. 创建新的自动化。

1. 向自动化添加参数，然后在选择**类型**时，选择所需的类型。

## 配置要传递给自动化参数的动态值
<a name="parameters-automation-pass-values"></a>

为自动化定义参数后，可以在调用自动化时向其传递值。您可以通过两种方式传递参数值：

1. **组件触发器**：如果您通过组件触发器（例如单击按钮）调用自动化，则可以使用 JavaScript 表达式来传递组件上下文中的值。例如，如果您有一个名为的文本输入字段`emailInput`，则可以使用以下表达式将其值传递给电子邮件参数：`ui.emailInput.value`。

1. **其他自动化**：如果您要从其他自动化中调用自动化，则可以使用 JavaScript 表达式来传递自动化上下文中的值。例如，您可以传递另一个参数的值或上一个操作步骤的结果。

## 类型安全
<a name="parameters-automation-type-safety"></a>

通过使用特定数据类型（例如字符串、数字或布尔值）定义参数，可以确保传递到自动化的值属于预期类型。

**注意**  
在 App Studio 中，日期是 ISO 字符串日期，这些日期也将被验证。

这种类型安全性有助于防止类型不匹配，这可能会导致自动化逻辑中出现错误或意外行为。例如，如果您将参数定义为 a`Number`，则可以确信传递给该参数的任何值都将是一个数字，并且无需在自动化中执行额外的类型检查或转换。

## 验证
<a name="parameters-automation-validation"></a>

您可以向参数添加验证规则，确保传递到自动化的值符合特定标准。

虽然 App Studio 不提供内置的参数验证设置，但您可以通过在自动化中添加一个 JavaScript 操作来实现自定义验证，该操作在违反特定限制时会引发错误。

对于实体字段，支持验证规则的子集，例如 minimum/maximum 值。但是，在运行 R Create/Update/Delete ecord 操作时，这些操作不会在自动化级别进行验证，而只能在数据层进行验证。

## 自动化参数的最佳实践
<a name="parameters-automation-best-practices"></a>

为确保您的自动化参数经过精心设计、可维护且易于使用，请遵循以下最佳实践：

1. **使用描述性参数名称**：选择能清楚描述参数目的或上下文的参数名称。

1. **提供参数描述**：在定义参数时，请使用 “**描述**” 字段来解释其用途、限制和期望。这些描述将出现在引用参数时的 JSDoc 注释中，以及用户在调用自动化时需要为参数提供值的任何用户界面中。

1. **使用适当的数据类型**：根据预期的输入值仔细考虑每个参数的数据类型，例如：字符串、数字、布尔值、对象。

1. **验证参数值**：在继续执行进一步操作之前，在自动化中实施适当的验证检查，以确保参数值满足特定要求。

1. **使用后备值或默认值**：虽然 App Studio 目前不支持为参数设置默认值，但您可以在使用自动化逻辑中的参数时实现后备值或默认值。例如，如果未提供参数或`param1`参数值为假，则可以使用类似的表达式`{{ params.param1 || "default value" }}`来提供默认值。

1. **保持参数一致性**：如果您有多个自动化需要相似的参数，请尝试在这些自动化中保持参数名称和数据类型的一致性。

1. **文档参数的使用**：为自动化保留清晰的文档，包括每个参数的描述、其用途、预期值以及任何相关的示例或边缘情况。

1. **经常检查和重构**：定期检查您的自动化及其参数，根据需要重构或合并参数，以提高清晰度、可维护性和可重用性。

1. **限制参数数量：虽然参数**提供了灵活性，但参数过多会使自动化变得复杂且难以使用。通过将参数数量限制在必要的范围内，力求在灵活性和简单性之间取得平衡。

1. **考虑参数分组**：如果您发现自己定义了多个相关参数，请考虑将它们分组为单个*Object*参数。

1. **单独关注的问题**：避免将单个参数用于多种用途，或将不相关的值组合成单个参数。每个参数都应代表一个不同的关注点或一段数据。

1. **使用参数别名**：如果参数名称较长或复杂，请考虑在自动化逻辑中使用别名或速记版本，以提高可读性和可维护性。

通过遵循这些最佳实践，您可以确保自动化参数经过精心设计、可维护且易于使用，从而最终提高自动化的整体质量和效率。