diff --git a/source/index.html.md b/source/index.html.md
index ce4679528e7..1e9689a7152 100644
--- a/source/index.html.md
+++ b/source/index.html.md
@@ -73,7 +73,7 @@ Using both is normal. A webhook for the immediate reaction, a connector for the
## Microsoft Power Automate [Beta]
-DataScope publishes a custom connector for Microsoft Power Automate, so you can trigger flows from form answers, generated PDFs, task assignments, tickets and signature events, delivered as dynamic content instead of raw webhook JSON.
+DataScope publishes a custom connector for Microsoft Power Automate, so you can trigger flows from form answers, generated PDFs, task assignments, tickets and signature events, delivered as dynamic content instead of raw webhook JSON, and act back on DataScope with actions like assigning a task or creating a ticket.
We have had ongoing trouble keeping the connector published in the official Power Automate connector gallery in sync with the latest version. Until that is resolved, the fastest way to connect is to build the custom connector yourself from the definition file below.
diff --git a/source/power_automate/apiDefinition.swagger.json b/source/power_automate/apiDefinition.swagger.json
index 9b172cfed08..4f87a06e07d 100644
--- a/source/power_automate/apiDefinition.swagger.json
+++ b/source/power_automate/apiDefinition.swagger.json
@@ -166,6 +166,104 @@
"x-ms-visibility": "internal"
}
},
+ "/list_states": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "List form statuses",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "type"
+ },
+ "key": {
+ "type": "string",
+ "description": "key"
+ },
+ "identifier": {
+ "type": "string",
+ "description": "identifier"
+ }
+ }
+ }
+ }
+ }
+ },
+ "summary": "Get list of form statuses",
+ "description": "Retrieves the list of form statuses available in the account.",
+ "operationId": "Form-state-list",
+ "parameters": [],
+ "x-ms-visibility": "internal"
+ }
+ },
+ "/list_users": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "List users",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "type"
+ },
+ "user_key": {
+ "type": "integer",
+ "description": "user_key"
+ },
+ "identifier": {
+ "type": "string",
+ "description": "identifier"
+ }
+ }
+ }
+ }
+ }
+ },
+ "summary": "Get list of users",
+ "description": "Retrieves the list of users available in the account.",
+ "operationId": "User-list",
+ "parameters": [],
+ "x-ms-visibility": "internal"
+ }
+ },
+ "/findings/types": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "List ticket types",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "id"
+ },
+ "name": {
+ "type": "string",
+ "description": "name"
+ }
+ }
+ }
+ }
+ }
+ },
+ "summary": "Get list of ticket types",
+ "description": "Retrieves the list of ticket types available in the account.",
+ "operationId": "Finding-type-list",
+ "parameters": [],
+ "x-ms-visibility": "internal"
+ }
+ },
"/hooks/power_automate/finding_created": {
"x-ms-notification-content": {
"description": "Details of the created ticket.",
@@ -2046,6 +2144,506 @@
]
}
},
+ "/assign_task": {
+ "post": {
+ "summary": "Assign Task (Tasks)",
+ "description": "Assigns a task on a form to a user. If a task with the same code already exists, it is updated instead of creating a new one.",
+ "operationId": "AssignTaskV2",
+ "consumes": [
+ "application/x-www-form-urlencoded"
+ ],
+ "parameters": [
+ {
+ "name": "form_id",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Identifier of the form the task will be assigned on.",
+ "x-ms-summary": "Form",
+ "x-ms-dynamic-values": {
+ "operationId": "Form-list",
+ "value-path": "key",
+ "value-title": "label"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Email or identifier of the user the task is assigned to. If it does not match an existing user, the task may fall back to another user of the account, so use a valid, existing identifier.",
+ "x-ms-summary": "User",
+ "x-ms-dynamic-values": {
+ "operationId": "User-list",
+ "value-path": "identifier",
+ "value-title": "identifier"
+ }
+ },
+ {
+ "name": "code",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Code that identifies the task assignment. If a task with this code already exists, it is updated instead of created. If omitted, a new code is generated automatically.",
+ "x-ms-summary": "Task Code"
+ },
+ {
+ "name": "task_instruction",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Instructions shown to the user for this task.",
+ "x-ms-summary": "Instructions"
+ },
+ {
+ "name": "date",
+ "in": "query",
+ "type": "string",
+ "format": "date-time",
+ "required": false,
+ "description": "Date and time the task is scheduled for. Defaults to the current date and time when omitted or invalid.",
+ "x-ms-summary": "Scheduled Date"
+ },
+ {
+ "name": "gap",
+ "in": "query",
+ "type": "integer",
+ "required": false,
+ "description": "Time window, in hours, around the scheduled date during which the task can be completed. Defaults to 4.",
+ "x-ms-summary": "Time Window (Hours)"
+ },
+ {
+ "name": "mandatory",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "enum": [
+ "for_everyone",
+ "for_one",
+ "for_nobody"
+ ],
+ "description": "Who the task is mandatory for. for_everyone requires every assigned user to complete it, for_nobody makes it optional for everyone, and for_one currently behaves like assigning the task to a single named user, with no additional group-completion behavior. Defaults to for_everyone.",
+ "x-ms-summary": "Mandatory"
+ },
+ {
+ "name": "late_response_allowed",
+ "in": "query",
+ "type": "boolean",
+ "required": false,
+ "description": "Indicates whether the task can still be completed after its scheduled window.",
+ "x-ms-summary": "Allow Late Response"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Task assigned successfully, or an error reported in the response body.",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "result": {
+ "type": "string",
+ "description": "Outcome of the request, for example ok or an error message."
+ },
+ "task": {
+ "type": "object",
+ "description": "The created or updated task assignment. Its exact set of fields is not fully documented here."
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The task could not be assigned."
+ }
+ }
+ }
+ },
+ "/change_state": {
+ "post": {
+ "summary": "Change Form Status (Forms)",
+ "description": "Changes the status of an existing form answer.",
+ "operationId": "ChangeFormStatus",
+ "consumes": [
+ "application/x-www-form-urlencoded"
+ ],
+ "parameters": [
+ {
+ "name": "form_name",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Name of the form the answer belongs to.",
+ "x-ms-summary": "Form",
+ "x-ms-dynamic-values": {
+ "operationId": "Form-list",
+ "value-path": "label",
+ "value-title": "label"
+ }
+ },
+ {
+ "name": "form_code",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Code of the form answer to update.",
+ "x-ms-summary": "Form Code"
+ },
+ {
+ "name": "form_state_id",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Identifier of the status to set on the form answer.",
+ "x-ms-summary": "Form Status",
+ "x-ms-dynamic-values": {
+ "operationId": "Form-state-list",
+ "value-path": "key",
+ "value-title": "identifier"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Form answer status updated successfully.",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "description": "Outcome of the request, for example ok."
+ },
+ "form_answer": {
+ "type": "object",
+ "description": "The updated form answer. Its exact set of fields is not fully documented here."
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The status could not be changed, for example because the form, form answer, or status was not found."
+ }
+ }
+ }
+ },
+ "/change_form": {
+ "post": {
+ "summary": "Modify Form Answer (Forms)",
+ "description": "Creates or updates a single question's answer on an existing form answer. The new answer is always stored as free text, regardless of the original question type.",
+ "operationId": "ModifyFormAnswer",
+ "consumes": [
+ "application/x-www-form-urlencoded"
+ ],
+ "parameters": [
+ {
+ "name": "form_name",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Name or identifier of the form the answer belongs to.",
+ "x-ms-summary": "Form"
+ },
+ {
+ "name": "form_code",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Code of the form answer to update. The alias code is also accepted.",
+ "x-ms-summary": "Form Code"
+ },
+ {
+ "name": "question_name",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Name of the question to create or update.",
+ "x-ms-summary": "Question Name"
+ },
+ {
+ "name": "question_value",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "New value to set for the question.",
+ "x-ms-summary": "Question Value"
+ },
+ {
+ "name": "subform_index",
+ "in": "query",
+ "type": "integer",
+ "required": false,
+ "description": "Row number of a subform table to update, starting at 1. When omitted, the answer at the root of the form is updated. Behavior for values other than a positive row number is not fully documented here.",
+ "x-ms-summary": "Subform Row"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Form answer updated, or an error reported in the response body.",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "description": "Outcome of the request: ok or error."
+ },
+ "form_answer": {
+ "type": "object",
+ "description": "The updated form answer. Its exact set of fields is not fully documented here."
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The request could not be processed, for example because the form or token was missing."
+ }
+ }
+ }
+ },
+ "/create_pdf": {
+ "post": {
+ "summary": "Send Data / New Answer (Forms) [Beta]",
+ "description": "Generates a new form answer and its PDF from an existing form template. Any parameter besides form_id, emails, token, and action is treated as an answer to the matching question in the form, so this action supports as many additional fields as the selected form defines questions for. Not all question types are fully supported, which may result in unexpected behavior. This action does not trigger GSheet Sync, Automatic Signature, or other webhooks such as Power Automate triggers.",
+ "operationId": "SendData",
+ "consumes": [
+ "application/x-www-form-urlencoded"
+ ],
+ "parameters": [
+ {
+ "name": "form_id",
+ "in": "query",
+ "type": "string",
+ "required": true,
+ "description": "Identifier of the form template used to generate the new answer.",
+ "x-ms-summary": "Form",
+ "x-ms-dynamic-values": {
+ "operationId": "Form-list",
+ "value-path": "key",
+ "value-title": "label"
+ }
+ },
+ {
+ "name": "emails",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Email addresses that receive the generated PDF.",
+ "x-ms-summary": "Recipient Emails"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Form answer and PDF generated successfully. If no question values are provided besides form_id, emails, and token, the response behavior is not fully documented here.",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "ok": {
+ "type": "boolean",
+ "description": "Indicates whether the request succeeded."
+ },
+ "form_answer_id": {
+ "type": "integer",
+ "description": "Identifier of the generated form answer."
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The request could not be processed, for example because the account or form was not found."
+ }
+ }
+ }
+ },
+ "/findings/create": {
+ "post": {
+ "summary": "Create Ticket (Tickets)",
+ "description": "Creates a new ticket.",
+ "operationId": "CreateFinding",
+ "consumes": [
+ "application/x-www-form-urlencoded"
+ ],
+ "parameters": [
+ {
+ "name": "name",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Name of the ticket.",
+ "x-ms-summary": "Name"
+ },
+ {
+ "name": "description",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Description of the ticket.",
+ "x-ms-summary": "Description"
+ },
+ {
+ "name": "type",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Ticket type. When set, it can fill in defaults such as priority, expiration, location, and assignees, which may override other values sent in the same request.",
+ "x-ms-summary": "Ticket Type",
+ "x-ms-dynamic-values": {
+ "operationId": "Finding-type-list",
+ "value-path": "id",
+ "value-title": "name"
+ }
+ },
+ {
+ "name": "author_email",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Email of the user registered as the author of the ticket. If it does not match an existing user, the ticket is created under the account associated with the token.",
+ "x-ms-summary": "Author",
+ "x-ms-dynamic-values": {
+ "operationId": "User-list",
+ "value-path": "identifier",
+ "value-title": "identifier"
+ }
+ },
+ {
+ "name": "creation_date",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Date and time the ticket was created. Defaults to the current date and time when omitted.",
+ "x-ms-summary": "Creation Date"
+ },
+ {
+ "name": "expiration_date",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Date and time the ticket expires.",
+ "x-ms-summary": "Expiration Date"
+ },
+ {
+ "name": "status",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "enum": [
+ "open",
+ "in_progress",
+ "paused",
+ "closed"
+ ],
+ "description": "Status of the ticket.",
+ "x-ms-summary": "Status"
+ },
+ {
+ "name": "priority",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "enum": [
+ "low",
+ "medium",
+ "high",
+ "critical"
+ ],
+ "description": "Priority of the ticket.",
+ "x-ms-summary": "Priority"
+ },
+ {
+ "name": "location_id",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Identifier of the location linked to the ticket.",
+ "x-ms-summary": "Location ID"
+ },
+ {
+ "name": "location_name",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Name of the location linked to the ticket.",
+ "x-ms-summary": "Location Name"
+ },
+ {
+ "name": "location_type",
+ "in": "query",
+ "type": "string",
+ "required": false,
+ "description": "Type of the location linked to the ticket.",
+ "x-ms-summary": "Location Type"
+ },
+ {
+ "name": "assignees",
+ "in": "query",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "csv",
+ "required": false,
+ "description": "Users assigned to the ticket.",
+ "x-ms-summary": "Assignees",
+ "x-ms-dynamic-values": {
+ "operationId": "User-list",
+ "value-path": "user_key",
+ "value-title": "identifier"
+ }
+ },
+ {
+ "name": "invitees",
+ "in": "query",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "csv",
+ "required": false,
+ "description": "Users invited to the ticket.",
+ "x-ms-summary": "Invitees",
+ "x-ms-dynamic-values": {
+ "operationId": "User-list",
+ "value-path": "user_key",
+ "value-title": "identifier"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Ticket created successfully.",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "Identifier of the created ticket."
+ },
+ "finding": {
+ "type": "object",
+ "description": "The created ticket. Its exact set of fields could not be fully verified against the underlying storage."
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Ticket access is not available for this account, for example because the trial has not started or access has been closed."
+ },
+ "422": {
+ "description": "The ticket could not be created.",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "string",
+ "description": "Description of the reason the ticket could not be created."
+ },
+ "finding": {
+ "type": "object",
+ "description": "Empty object."
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/delete_hooks/{account_id}/{webhook_id}/{uuid}": {
"delete": {
"summary": "Delete webhook subscription",
diff --git a/source/power_automate/connector_guide_en.html.md b/source/power_automate/connector_guide_en.html.md
index 7ef2aee1554..29781b21cf6 100644
--- a/source/power_automate/connector_guide_en.html.md
+++ b/source/power_automate/connector_guide_en.html.md
@@ -8,7 +8,7 @@ title: Connect DataScope with Power Automate
This guide explains how to enable the DataScope integration in Power Automate
to automate your field operation: trigger flows when a form is completed,
-when a document is generated, when a task is assigned, or when an issue is
+when a document is generated, when a task is assigned, or when a ticket is
registered.
@@ -93,8 +93,8 @@ The connector provides the following triggers:
| New PDF | A PDF document is generated |
| Status changed | A form answer changes status |
| New assigned task | A task is assigned |
-| New issue | An issue is registered |
-| Issue status changed | An issue changes status |
+| New ticket | A ticket is registered |
+| Ticket status changed | A ticket changes status |
| Completed signature | A document signature is completed |
| Rejected signature | A signature request is rejected |
| Updated signature | The signatures on a document are updated |
@@ -102,12 +102,22 @@ The connector provides the following triggers:
Each trigger delivers the event data as dynamic content, ready to use in the
following steps of the flow without having to parse the JSON manually.
+The connector also provides the following actions, so a flow can act back on DataScope instead of only reacting to it:
+
+| Action | What it does |
+|---|---|
+| Assign Task | Assigns a task on a form to a user, optionally scheduling it |
+| Change Form Status | Changes the status of a form answer |
+| Modify Form Answer | Creates or updates an answer within a form response |
+| Send Data | Generates a new form answer and its PDF from an existing template |
+| Create Ticket | Creates a new ticket |
+
## Important considerations
- **One active connection per form.** Triggers associated with a form support
only one active connection at a time. If you need several flows on the
same form, chain them from a single trigger.
-- **Issue triggers operate at the account level.** They support only one
+- **Ticket triggers operate at the account level.** They support only one
active connection per account.
- **Available fields vary by configuration.** Some data, such as planning
fields or extended task fields, only appears when those features are
@@ -120,7 +130,7 @@ following steps of the flow without having to parse the JSON manually.
stop it, you also need to go to
app.mydatascope.com/integrations
and delete the connection there. Every other trigger (forms, PDFs, tasks,
- issues, signatures) does clean up automatically when the flow is turned
+ tickets, signatures) does clean up automatically when the flow is turned
off in Power Automate.
## If something doesn't work
diff --git a/source/power_automate/connector_guide_es.html.md b/source/power_automate/connector_guide_es.html.md
index 8f4cb741328..dd01491b95a 100644
--- a/source/power_automate/connector_guide_es.html.md
+++ b/source/power_automate/connector_guide_es.html.md
@@ -102,6 +102,16 @@ Cada disparador entrega los datos del evento como contenido dinámico, listos
para usar en los pasos siguientes del flujo sin necesidad de procesar el JSON
manualmente.
+El conector también entrega las siguientes actions, para que un flujo pueda actuar sobre DataScope y no solo reaccionar a sus eventos:
+
+| Action | Qué hace |
+|---|---|
+| Assign Task | Asigna una tarea de un formulario a un usuario, opcionalmente agendándola |
+| Change Form Status | Cambia el estado de una respuesta de formulario |
+| Modify Form Answer | Crea o modifica una respuesta dentro de un formulario |
+| Send Data | Genera una nueva respuesta de formulario y su PDF a partir de una plantilla existente |
+| Create Ticket | Crea un nuevo ticket |
+
## Consideraciones importantes
- **Una conexión activa por formulario.** Los disparadores asociados a un
diff --git a/source/power_automate/connector_guide_pt.html.md b/source/power_automate/connector_guide_pt.html.md
index 7489217537d..c1b37c89c2f 100644
--- a/source/power_automate/connector_guide_pt.html.md
+++ b/source/power_automate/connector_guide_pt.html.md
@@ -9,7 +9,7 @@ title: Conectar o DataScope com o Power Automate
Este guia explica como habilitar a integração do DataScope no Power Automate
para automatizar sua operação em campo: disparar fluxos quando um formulário
é preenchido, quando um documento é gerado, quando uma tarefa é atribuída ou
-quando uma não conformidade é registrada.
+quando um ticket é registrado.
Você pode encontrar o DataScope listado na galeria oficial de conectores do Power Automate (preview.flow.microsoft.com , documentado em learn.microsoft.com ). Essa versão está desatualizada, por isso este guia mostra como construir o custom connector você mesmo.
@@ -93,8 +93,8 @@ O conector oferece os seguintes disparadores:
| Novo PDF | Um documento PDF é gerado |
| Mudança de status | Uma resposta de formulário muda de status |
| Nova tarefa atribuída | Uma tarefa é atribuída |
-| Nova não conformidade | Uma não conformidade é registrada |
-| Mudança de status de não conformidade | Uma não conformidade muda de status |
+| Novo ticket | Um ticket é registrado |
+| Mudança de status de ticket | Um ticket muda de status |
| Assinatura concluída | A assinatura de um documento é concluída |
| Assinatura rejeitada | Uma solicitação de assinatura é rejeitada |
| Assinatura atualizada | As assinaturas de um documento são atualizadas |
@@ -103,13 +103,23 @@ Cada disparador entrega os dados do evento como conteúdo dinâmico, prontos
para usar nas próximas etapas do fluxo sem precisar processar o JSON
manualmente.
+O conector também oferece as seguintes actions, para que um fluxo possa agir sobre o DataScope, e não só reagir aos seus eventos:
+
+| Action | O que faz |
+|---|---|
+| Assign Task | Atribui uma tarefa de um formulário a um usuário, opcionalmente agendando-a |
+| Change Form Status | Muda o status de uma resposta de formulário |
+| Modify Form Answer | Cria ou modifica uma resposta dentro de um formulário |
+| Send Data | Gera uma nova resposta de formulário e seu PDF a partir de um modelo existente |
+| Create Ticket | Cria um novo ticket |
+
## Considerações importantes
- **Uma conexão ativa por formulário.** Os disparadores associados a um
formulário admitem apenas uma conexão ativa por vez. Se precisar de vários
fluxos sobre o mesmo formulário, encadeie-os a partir de um único
disparador.
-- **Os disparadores de não conformidades operam no nível da conta.** Admitem
+- **Os disparadores de tickets operam no nível da conta.** Admitem
apenas uma conexão ativa por conta.
- **Os campos disponíveis variam conforme sua configuração.** Alguns dados,
como os de planejamento ou os campos estendidos de tarefas, aparecem
@@ -122,7 +132,7 @@ manualmente.
interrompê-lo por completo, também é necessário acessar
app.mydatascope.com/integrations
e excluir a conexão correspondente ali. Os demais disparadores
- (formulários, PDFs, tarefas, não conformidades, assinaturas) se limpam
+ (formulários, PDFs, tarefas, tickets, assinaturas) se limpam
automaticamente ao desativar o flow no Power Automate.
## Se algo não funcionar