setup-datamodel
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSet Up Dataverse Data Model
配置Dataverse数据模型
Guide the user through creating Dataverse tables, columns, and relationships for their Power Pages site. Follow a systematic approach: verify prerequisites, obtain a data model (via AI analysis or user-provided diagram), review and approve, then create all schema objects via OData API.
引导用户为其Power Pages站点创建Dataverse表、列及关系。遵循系统化流程:验证先决条件、获取数据模型(通过AI分析或用户提供的图表)、审核并获批,随后通过OData API创建所有架构对象。
Core Principles
核心原则
- Never create without approval: Always present the full data model proposal and get explicit user confirmation before making any Dataverse changes.
- Use TaskCreate/TaskUpdate: Track all progress throughout all phases — create the todo list upfront with all phases before starting any work.
- Resilient execution: Refresh tokens proactively, check for existing tables before creating, and report failures without automated rollback.
Initial request: $ARGUMENTS
- 未经批准绝不创建:在对Dataverse进行任何更改之前,务必先完整呈现数据模型提案,并获得用户的明确确认。
- 使用TaskCreate/TaskUpdate:在所有阶段全程跟踪进度——在开始任何工作之前,预先创建包含所有阶段的待办事项列表。
- 弹性执行:主动刷新令牌,在创建前检查现有表,报告失败但不自动回滚。
初始请求:$ARGUMENTS
Phase 1: Verify Prerequisites
阶段1:验证先决条件
Goal: Confirm PAC CLI authentication, acquire an Azure CLI token, and verify API access
Actions:
- Create todo list with all 8 phases (see Progress Tracking table)
- Follow the prerequisite steps in to verify PAC CLI auth, acquire an Azure CLI token, and confirm API access. Store the environment URL as
${CLAUDE_PLUGIN_ROOT}/references/dataverse-prerequisites.md.$envUrl
Output: Verified PAC CLI auth, valid Azure CLI token, confirmed API access, stored
$envUrl目标:确认PAC CLI身份验证、获取Azure CLI令牌,并验证API访问权限
操作:
- 创建包含全部8个阶段的待办事项列表(参见进度跟踪表格)
- 按照中的先决条件步骤,验证PAC CLI身份验证、获取Azure CLI令牌,并确认API访问权限。将环境URL存储为
${CLAUDE_PLUGIN_ROOT}/references/dataverse-prerequisites.md。$envUrl
输出:已验证的PAC CLI身份验证、有效的Azure CLI令牌、已确认的API访问权限,已存储
$envUrlPhase 2: Choose Data Model Source
阶段2:选择数据模型来源
Goal: Determine whether the user will upload an existing ER diagram or let AI analyze the site
Actions:
-
Ask the user how they want to define the data model using thetool:
AskUserQuestionQuestion: "How would you like to define the data model for your site?"Option Description Upload an existing ER diagram Provide an image (PNG/JPG) or Mermaid diagram of your existing data model Let the Data Model Architect figure it out The Data Model Architect will analyze your site's source code and propose a data model automatically -
Route to the appropriate path:
目标:确定用户是要上传现有ER图,还是让AI分析站点
操作:
-
使用工具询问用户希望如何定义数据模型:
AskUserQuestion问题:"您希望如何为站点定义数据模型?"选项 描述 上传现有ER图 提供您现有数据模型的图片(PNG/JPG)或Mermaid图 让数据模型架构师自动生成 数据模型架构师将分析站点的源代码,并自动提出数据模型提案 -
根据选择进入对应流程:
Path A: Upload Existing ER Diagram
流程A:上传现有ER图
If the user chooses to upload an existing diagram:
-
Ask the user to provide their ER diagram. Supported formats:
- Image file (PNG, JPG) — Use the tool to view the image and extract tables, columns, relationships, and cardinalities from it
Read - Mermaid syntax — The user can paste Mermaid ER diagram text directly in chat
- Text description — A structured list of tables, columns, and relationships
- Image file (PNG, JPG) — Use the
-
Parse the diagram into the same structured format used by the data-model-architect agent:
- Publisher prefix (ask the user, or retrieve from the environment via )
pac env who - Table definitions: ,
logicalName,displayName(new/modified/reused),status,columnsrelationships - Column definitions: ,
logicalName,displayName,typerequired - Relationship definitions: type (1:N or M:N), referenced/referencing tables
- Publisher prefix (ask the user, or retrieve from the environment via
-
Query existing Dataverse tables (same as Phase 3 would) to mark each table as,
new, ormodified.reused -
Generate a Mermaid ER diagram from the parsed data (if the user provided an image or text) for visual confirmation.
-
Proceed directly to Phase 4: Review Proposal with the parsed data model.
如果用户选择上传现有图表:
-
请用户提供其ER图。支持的格式:
- 图片文件(PNG、JPG)——使用工具查看图片,并从中提取表、列、关系及基数
Read - Mermaid语法——用户可直接在聊天中粘贴Mermaid ER图文本
- 文本描述——结构化的表、列及关系列表
- 图片文件(PNG、JPG)——使用
-
将图表解析为与data-model-architect代理相同的结构化格式:
- 发布者前缀(询问用户,或通过从环境中获取)
pac env who - 表定义:、
logicalName、displayName(新建/修改/复用)、status、columnsrelationships - 列定义:、
logicalName、displayName、typerequired - 关系定义:类型(1:N或M:N)、被引用/引用表
- 发布者前缀(询问用户,或通过
-
查询现有Dataverse表(与阶段3的操作相同),将每个表标记为、
new或modified。reused -
从解析后的数据生成Mermaid ER图(如果用户提供的是图片或文本),以便可视化确认。
-
直接进入阶段4:审核提案,使用解析后的数据模型。
Path B: Let the Data Model Architect Figure It Out
流程B:让数据模型架构师自动生成
If the user chooses to let the Data Model Architect figure it out, proceed to Phase 3: Invoke Data Model Architect (the existing automated flow).
Output: Data model source chosen and, for Path A, parsed data model ready for review
如果用户选择让数据模型架构师自动生成,则进入阶段3:调用数据模型架构师(现有自动化流程)。
输出:已选择数据模型来源,对于流程A,解析后的数据模型已准备好进行审核
Phase 3: Invoke Data Model Architect
阶段3:调用数据模型架构师
Goal: Spawn the data-model-architect agent to autonomously analyze the site and propose a data model
Actions:
-
Use thetool to spawn the
Taskagent. This agent autonomously:data-model-architect- Analyzes the site's source code to infer data requirements
- Queries existing Dataverse tables via OData GET requests
- Identifies reuse opportunities (reuse, extend, or create new)
- Proposes a complete data model with an ER diagram
-
Spawn the agent:
Task tool: subagent_type: general-purpose prompt: | You are the data-model-architect agent. Follow the instructions in the agent definition file at: ${CLAUDE_PLUGIN_ROOT}/agents/data-model-architect.md Analyze the current project and Dataverse environment, then propose a complete data model. Return: 1. Publisher prefix 2. Table definitions (logicalName, displayName, status, columns, relationships) 3. Mermaid ER diagram -
Wait for the agent to return its structured proposal before proceeding.
Output: Structured data model proposal from the agent (publisher prefix, table definitions, ER diagram)
目标:启动data-model-architect代理,使其自主分析站点并提出数据模型
操作:
-
使用工具启动
Task代理。该代理将自主执行以下操作:data-model-architect- 分析站点源代码以推断数据需求
- 通过OData GET请求查询现有Dataverse表
- 识别复用机会(复用、扩展或新建)
- 提出包含ER图的完整数据模型
-
启动代理:
Task tool: subagent_type: general-purpose prompt: | You are the data-model-architect agent. Follow the instructions in the agent definition file at: ${CLAUDE_PLUGIN_ROOT}/agents/data-model-architect.md Analyze the current project and Dataverse environment, then propose a complete data model. Return: 1. Publisher prefix 2. Table definitions (logicalName, displayName, status, columns, relationships) 3. Mermaid ER diagram -
等待代理返回结构化提案后再继续。
输出:代理返回的结构化数据模型提案(发布者前缀、表定义、ER图)
Phase 4: Review Proposal
阶段4:审核提案
Goal: Present the data model proposal to the user and get explicit approval before creating anything
Actions:
目标:向用户呈现数据模型提案,并在创建任何内容前获得明确批准
操作:
4.1 Present Proposal
4.1 呈现提案
Present the data model proposal directly to the user as a formatted message, including:
- Publisher prefix
- All proposed tables with columns (logical names + display names)
- Relationship descriptions
- Mermaid ER diagram
- Which tables are new vs. modified vs. reused
将数据模型提案以格式化消息直接呈现给用户,包括:
- 发布者前缀
- 所有提案表及其列(逻辑名称 + 显示名称)
- 关系描述
- Mermaid ER图
- 哪些表是新建、修改或复用的
4.2 Get User Approval
4.2 获取用户批准
Use to get approval:
AskUserQuestion| Question | Header | Options |
|---|---|---|
| Does this data model look correct? | Data Model Proposal | Approve and create tables (Recommended), Request changes, Cancel |
- If "Approve and create tables (Recommended)": Proceed to Phase 5
- If "Request changes": Ask what they want changed, modify the proposal, and re-present for approval
- If "Cancel": Stop the skill
Only proceed to creation after explicit user approval.
Output: User-approved data model proposal
使用工具获取批准:
AskUserQuestion| 问题 | 标题 | 选项 |
|---|---|---|
| 此数据模型是否符合要求? | 数据模型提案 | 批准并创建表(推荐), 请求修改, 取消 |
- 如果选择“批准并创建表(推荐)”:进入阶段5
- 如果选择“请求修改”:询问用户需要修改的内容,修改提案后重新呈现以获得批准
- 如果选择“取消”:停止本技能
只有获得用户明确批准后,才能进入创建环节。
输出:用户已批准的数据模型提案
Phase 5: Pre-Creation Checks
阶段5:创建前检查
Goal: Refresh the token, verify what already exists in Dataverse, and build the creation plan to avoid duplicates
Actions:
目标:刷新令牌、验证Dataverse中已存在的内容,并制定创建计划以避免重复
操作:
5.1 Refresh Token
5.1 刷新令牌
Re-acquire the auth token (tokens expire after ~60 minutes):
node "${CLAUDE_PLUGIN_ROOT}/scripts/verify-dataverse-access.js" <envUrl>重新获取身份验证令牌(令牌约60分钟后过期):
node "${CLAUDE_PLUGIN_ROOT}/scripts/verify-dataverse-access.js" <envUrl>5.2 Query Existing Tables
5.2 查询现有表
For each table in the approved proposal marked as , check whether it already exists:
newnode "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> GET "api/data/v9.2/EntityDefinitions(LogicalName='<table_logical_name>')"- If 404: Table does not exist, proceed to create it
- If 200: Table already exists — skip creation, warn the user
For tables marked as , verify the table exists (it should) and check which columns are missing.
modified对于已批准提案中标记为的每个表,检查其是否已存在:
newnode "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> GET "api/data/v9.2/EntityDefinitions(LogicalName='<table_logical_name>')"- 如果返回404:表不存在,继续创建
- 如果返回200:表已存在——跳过创建,并向用户发出警告
对于标记为的表,验证表是否存在(理应存在)并检查缺少哪些列。
modified5.3 Build Creation Plan
5.3 制定创建计划
From the pre-creation checks, build a list of:
- Tables to create (new tables that don't exist yet)
- Columns to add (new columns on existing/modified tables)
- Relationships to create
- Tables/columns to skip (already exist)
Inform the user of any skipped items.
Output: Finalized creation plan with tables, columns, and relationships to create or skip
根据创建前检查结果,制定以下列表:
- 待创建的表(尚未存在的新表)
- 待添加的列(现有/修改表中的新列)
- 待创建的关系
- 待跳过的表/列(已存在)
告知用户任何被跳过的项。
输出:最终创建计划,包含待创建或跳过的表、列及关系
Phase 6: Create Tables & Columns
阶段6:创建表及列
Goal: Create each approved table and its columns using the Dataverse OData Web API
Actions:
Refer to for full JSON body templates.
references/odata-api-patterns.md目标:使用Dataverse OData Web API创建所有已批准的表及其列
操作:
完整的JSON主体模板请参考。
references/odata-api-patterns.md6.1 Create Tables
6.1 创建表
For each new table, POST to the EntityDefinitions endpoint:
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/EntityDefinitions" --body '<JSON body from references/odata-api-patterns.md>'Use the deep-insert pattern to create the table and its columns in a single POST request. See for the complete JSON structure.
references/odata-api-patterns.md对于每个新表,向EntityDefinitions端点发送POST请求:
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/EntityDefinitions" --body '<JSON body from references/odata-api-patterns.md>'使用深度插入模式,在单个POST请求中创建表及其列。完整的JSON结构请参考。
references/odata-api-patterns.md6.2 Add Columns to Existing Tables
6.2 向现有表添加列
For tables marked as , add new columns one at a time:
modifiednode "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/EntityDefinitions(LogicalName='<table>')/Attributes" --body '<column JSON from references/odata-api-patterns.md>'对于标记为的表,逐个添加新列:
modifiednode "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/EntityDefinitions(LogicalName='<table>')/Attributes" --body '<column JSON from references/odata-api-patterns.md>'6.3 Track Progress
6.3 跟踪进度
Track each creation attempt and its result (success/failure/skipped). Do NOT attempt automated rollback on failure — report failures and continue with remaining items.
跟踪每次创建尝试及其结果(成功/失败/跳过)。失败时请勿尝试自动回滚——报告失败并继续处理剩余项。
6.4 Refresh Token if Needed
6.4 按需刷新令牌
If creating many tables, the script handles 401 token refresh automatically. No manual refresh is needed between batches.
dataverse-request.jsOutput: All approved tables and columns created (or failures reported)
如果创建大量表,脚本会自动处理401令牌刷新。批次之间无需手动刷新。
dataverse-request.js输出:所有已批准的表和列已创建(或已报告失败)
Phase 7: Create Relationships
阶段7:创建关系
Goal: Create all relationships between the newly created and existing tables
Actions:
目标:在新创建的表与现有表之间创建所有关系
操作:
7.1 One-to-Many Relationships
7.1 一对多关系
Create lookup columns that establish 1:N relationships:
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/RelationshipDefinitions" --body '<relationship JSON from references/odata-api-patterns.md>'创建用于建立1:N关系的查找列:
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/RelationshipDefinitions" --body '<relationship JSON from references/odata-api-patterns.md>'7.2 Many-to-Many Relationships
7.2 多对多关系
Create M:N relationships (intersect tables are created automatically):
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/RelationshipDefinitions" --body '<M:N relationship JSON from references/odata-api-patterns.md>'创建M:N关系(交叉表将自动创建):
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/RelationshipDefinitions" --body '<M:N relationship JSON from references/odata-api-patterns.md>'7.3 Track Relationship Creation
7.3 跟踪关系创建
Track each relationship creation attempt. Report failures without rolling back.
Output: All approved relationships created (or failures reported)
跟踪每次关系创建尝试。失败时仅报告,不回滚。
输出:所有已批准的关系已创建(或已报告失败)
Phase 8: Publish & Verify
阶段8:发布与验证
Goal: Publish all customizations, verify tables exist, write the manifest, and present a summary
Actions:
目标:发布所有自定义项、验证表是否存在、写入清单,并呈现总结
操作:
8.1 Publish Customizations
8.1 发布自定义项
Publish all customizations so the new tables and columns become available:
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/PublishXml" --body '{"ParameterXml":"<importexportxml><entities><entity>cr123_project</entity><entity>cr123_task</entity></entities></importexportxml>"}'See for the full PublishXml pattern.
references/odata-api-patterns.md发布所有自定义项,使新表和列可用:
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST "api/data/v9.2/PublishXml" --body '{"ParameterXml":"<importexportxml><entities><entity>cr123_project</entity><entity>cr123_task</entity></entities></importexportxml>"}'完整的PublishXml模式请参考。
references/odata-api-patterns.md8.2 Verify Tables Exist
8.2 验证表是否存在
For each created table, run a verification query:
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> GET "api/data/v9.2/EntityDefinitions(LogicalName='<table>')?$select=LogicalName,DisplayName"对于每个已创建的表,运行验证查询:
node "${CLAUDE_PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> GET "api/data/v9.2/EntityDefinitions(LogicalName='<table>')?$select=LogicalName,DisplayName"8.3 Write Manifest
8.3 写入清单
After successful verification, write to the project root. This file records which tables and columns were verified to exist, and is used by the validation hook.
.datamodel-manifest.jsonjson
{
"environmentUrl": "https://org12345.crm.dynamics.com",
"tables": [
{
"logicalName": "cr123_project",
"displayName": "Project",
"status": "new",
"columns": [
{ "logicalName": "cr123_name", "type": "String" },
{ "logicalName": "cr123_description", "type": "Memo" }
]
}
]
}Use the tool to create this file at . Only include tables and columns that were confirmed to exist in Step 8.2. See for the full schema specification.
Write<PROJECT_ROOT>/.datamodel-manifest.json${CLAUDE_PLUGIN_ROOT}/references/datamodel-manifest-schema.md验证成功后,将写入项目根目录。此文件记录了经验证存在的表和列,供验证钩子使用。
.datamodel-manifest.jsonjson
{
"environmentUrl": "https://org12345.crm.dynamics.com",
"tables": [
{
"logicalName": "cr123_project",
"displayName": "Project",
"status": "new",
"columns": [
{ "logicalName": "cr123_name", "type": "String" },
{ "logicalName": "cr123_description", "type": "Memo" }
]
}
]
}使用工具在路径下创建此文件。仅包含步骤8.2中确认存在的表和列。完整的架构规范请参考。
Write<PROJECT_ROOT>/.datamodel-manifest.json${CLAUDE_PLUGIN_ROOT}/references/datamodel-manifest-schema.md8.4 Record Skill Usage
8.4 记录技能使用情况
Reference:${CLAUDE_PLUGIN_ROOT}/references/skill-tracking-reference.md
Follow the skill tracking instructions in the reference to record this skill's usage. Use .
--skillName "SetupDatamodel"参考:${CLAUDE_PLUGIN_ROOT}/references/skill-tracking-reference.md
按照参考文档中的技能跟踪说明,记录本技能的使用情况。使用。
--skillName "SetupDatamodel"8.5 Present Summary
8.5 呈现总结
Present a summary to the user:
| Table | Status | Columns | Relationships |
|---|---|---|---|
| Created | 5 columns | 2 relationships |
| Reused | 1 column added | — |
| Created | 4 columns | 1 relationship |
Include:
- Total tables created/modified/reused/failed
- Total columns created/skipped/failed
- Total relationships created/failed
- Any errors encountered with details
- Location of the manifest file ()
.datamodel-manifest.json
向用户呈现总结:
| 表 | 状态 | 列 | 关系 |
|---|---|---|---|
| 已创建 | 5列 | 2个关系 |
| 已复用 | 添加1列 | — |
| 已创建 | 4列 | 1个关系 |
总结内容包括:
- 已创建/修改/复用/失败的表总数
- 已创建/跳过/失败的列总数
- 已创建/失败的关系总数
- 遇到的任何错误及详细信息
- 清单文件的位置()
.datamodel-manifest.json
8.6 Suggest Next Steps
8.6 建议下一步操作
After the summary, suggest:
- Review created tables in the Power Pages maker portal
- Populate tables with sample data for testing:
/add-sample-data - Integrate tables with your site's frontend via Web API:
/integrate-webapi - If the site is not yet built:
/create-site - If the site is ready to deploy:
/deploy-site
Output: Published customizations, verified tables, manifest written, summary presented
总结后,建议用户:
- 在Power Pages制作者门户中查看已创建的表
- 填充示例数据进行测试:
/add-sample-data - 通过Web API将表与站点前端集成:
/integrate-webapi - 如果站点尚未构建:
/create-site - 如果站点已准备好部署:
/deploy-site
输出:已发布自定义项、已验证表、已写入清单、已呈现总结
Important Notes
重要说明
Throughout All Phases
所有阶段通用
- Use TaskCreate/TaskUpdate to track progress at every phase
- Ask for user confirmation at key decision points (see list below)
- Token refresh is automatic — the script handles 401 token refresh and 429/5xx retry internally
dataverse-request.js - Report failures without rollback — track each creation attempt and continue with remaining items on failure
- 使用TaskCreate/TaskUpdate跟踪每个阶段的进度
- 在关键决策点等待用户确认(见下方列表)
- 令牌刷新自动处理——脚本会内部处理401令牌刷新及429/5xx重试
dataverse-request.js - 失败时仅报告不回滚——跟踪每次创建尝试,失败时继续处理剩余项
Key Decision Points (Wait for User)
关键决策点(需等待用户操作)
- After Phase 2: Data model source chosen (upload vs. AI)
- After Phase 4: Approve data model proposal before any creation
- After Phase 5: Acknowledge any skipped items before proceeding
- After Phase 8: Review summary and choose next steps
- 阶段2之后:已选择数据模型来源(上传vs AI生成)
- 阶段4之后:在创建前批准数据模型提案
- 阶段5之后:确认任何被跳过的项后再继续
- 阶段8之后:查看总结并选择下一步操作
Progress Tracking
进度跟踪
Before starting Phase 1, create a task list with all phases using :
TaskCreate| Task subject | activeForm | Description |
|---|---|---|
| Verify prerequisites | Verifying prerequisites | Confirm PAC CLI auth, acquire Azure CLI token, verify API access |
| Choose data model source | Choosing data model source | Ask user to upload ER diagram or let AI analyze the site |
| Invoke data model architect | Invoking data model architect | Spawn agent to analyze site and propose data model |
| Review and approve proposal | Reviewing proposal | Present data model proposal to user, get explicit approval |
| Pre-creation checks | Running pre-creation checks | Refresh token, query existing tables, build creation plan |
| Create tables and columns | Creating tables and columns | POST to OData API to create tables and columns |
| Create relationships | Creating relationships | POST to OData API to create 1:N and M:N relationships |
| Publish and verify | Publishing and verifying | Publish customizations, verify tables, write manifest, present summary |
Mark each task when starting it and when done via . This gives the user visibility into progress and keeps the workflow deterministic.
in_progresscompletedTaskUpdateBegin with Phase 1: Verify Prerequisites
在开始阶段1之前,使用创建包含所有阶段的任务列表:
TaskCreate| 任务主题 | activeForm | 描述 |
|---|---|---|
| 验证先决条件 | Verifying prerequisites | 确认PAC CLI身份验证、获取Azure CLI令牌、验证API访问权限 |
| 选择数据模型来源 | Choosing data model source | 询问用户上传ER图还是让AI分析站点 |
| 调用数据模型架构师 | Invoking data model architect | 启动代理以分析站点并提出数据模型 |
| 审核并批准提案 | Reviewing proposal | 向用户呈现数据模型提案,获得明确批准 |
| 运行创建前检查 | Running pre-creation checks | 刷新令牌、查询现有表、制定创建计划 |
| 创建表及列 | Creating tables and columns | 通过OData API POST请求创建表及列 |
| 创建关系 | Creating relationships | 通过OData API POST请求创建1:N和M:N关系 |
| 发布与验证 | Publishing and verifying | 发布自定义项、验证表、写入清单、呈现总结 |
开始任务时将其标记为,完成后标记为(通过)。这使用户能够查看进度,并确保工作流的确定性。
in_progresscompletedTaskUpdate从阶段1:验证先决条件开始