Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Todos os fluxos almacénanse en Dataverse e podes usar o Dataverse SDK para .NET ou a API web para xestionalos.
Este artigo trata da xestión de fluxos incluídos na lapela Solucións Power Automate. Actualmente, a xestión de fluxos en Os meus fluxos non é compatible co código.
Interactuar coas API Dataverse
Dataverse ofrece capacidades equivalentes usando o SDK para .NET ou a API web. Dataverse
Que método debería usar?
O mellor método depende da tecnoloxía do proxecto e das habilidades que teñas.
Se o teu proxecto usa .NET, recomendámosche usar o SDK. O SDK simplifica a experiencia de desenvolvemento ao proporcionar un modelo de obxectos tipados e métodos para autenticarse.
Máis información: Usar o servizo Organización
Como conectar?
O xeito de conectar depende de se estás a usar o SDK para .NET ou a API web. Dataverse
Co SDK, cómpre conectarse a unha aplicación cliente para acceder a unha instancia de *IOrganizationService*. ...
IOrganizationService é unha interface que proporciona métodos que podes usar para interactuar con Dataverse.
Máis información:
Táboa de fluxo de traballo
Os fluxos na nube almacénanse na táboa Proceso (fluxo de traballo) que se representa na API web como o tipo de entidade do fluxo de traballo
A seguinte táboa describe as columnas importantes da táboa de fluxo de traballo:
| Nome lóxico | Tipo | Descripción |
|---|---|---|
category |
Opción | A categoría do fluxo. Aquí están as diferentes categorías. 0 - Fluxos de traballo clásicos. Dataverse 1 - Diálogos clásicos. Dataverse 2 - Normas empresariais. 3 - Accións clásicas. Dataverse 4 - Fluxos dos procesos empresariais. 5 - Modern Flow (fluxos automatizados, instantáneos ou programados).6 - Fluxos de escritorio. |
clientdata |
String | Un JSON codificado en cadea de caracteres da definición do fluxo e as súas connectionReferences. |
createdby |
Busca | O usuario que creou o fluxo. |
createdon |
DataHora | A data na que se creou o fluxo. |
description |
String | A descrición do fluxo proporcionada polo usuario. |
ismanaged |
Booleano | Indica se o fluxo se instalou a través dunha solución xestionada. |
modifiedby |
Busca | O último usuario que actualizou o fluxo. |
modifiedon |
DataHora | A última vez que se actualizou o fluxo. |
name |
String | O nome para mostrar que lle proporcionaches ao fluxo. |
ownerid |
Busca | O usuario ou equipo propietario do fluxo. |
statecode |
Opción | O estado do fluxo. O estado pode ser:0 - Borrador (Desactivado)1 - Activado (Ligado)2 - Suspendido. |
type |
Opción | Indica se o fluxo é un fluxo en execución ou un modelo que se pode usar para crear máis fluxos. 1 - Definición,2 - Activación3 - Modelo. |
workflowid |
GUID | O identificador único para un fluxo na nube en todas as importacións. |
workflowidunique |
GUID | O identificador único para esta instalación do fluxo. |
Nota
Coa API web, os valores de busca son propiedades de navegación de valor único que se pode ampliar para obter detalles do rexistro relacionado.
As columnas de busca tamén teñen o GUID correspondente propiedades de busca que se poden usar en consultas. As propiedades de busca teñen esta convención de nomes: _<logical name>_value. Para o tipo de entidade de fluxo de traballo na API web, podes facer referencia a estas propiedades de busca: _createdby_value, _modifiedby_value, e _ownerid_value.
Lista de fluxos
Para recuperar unha lista de fluxos na nube, podes consultar a táboa de fluxos de traballo. A seguinte consulta devolve o primeiro fluxo automatizado, instantáneo ou programado que está actualmente "activado":
Esta estática OutputFirstActiveFlow O método require un cliente autenticado que implemente o IOrganizationService. Emprega o IOrganizationService.RecuperarMúltiples método.
/// <summary>
/// Outputs the first active flow
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
public static void OutputFirstActiveFlow(IOrganizationService service)
{
var query = new QueryExpression("workflow")
{
ColumnSet = new ColumnSet("category",
"createdby",
"createdon",
"description",
"ismanaged",
"modifiedby",
"modifiedon",
"name",
"ownerid",
"statecode",
"type",
"workflowid",
"workflowidunique"),
Criteria = new FilterExpression(LogicalOperator.And)
{
Conditions = {
{ new ConditionExpression(
"category",
ConditionOperator.Equal,
5) }, // Cloud Flow
{ new ConditionExpression(
"statecode",
ConditionOperator.Equal,
1) } // Active
}
},
TopCount = 1 // Limit to one record
};
EntityCollection workflows = service.RetrieveMultiple(query);
Entity workflow = workflows.Entities.FirstOrDefault();
Console.WriteLine($"category: {workflow.FormattedValues["category"]}");
Console.WriteLine($"createdby: {workflow.FormattedValues["createdby"]}");
Console.WriteLine($"createdon: {workflow.FormattedValues["createdon"]}");
// Description may be null
Console.WriteLine($"description: {workflow.GetAttributeValue<string>("description")}");
Console.WriteLine($"ismanaged: {workflow.FormattedValues["ismanaged"]}");
Console.WriteLine($"modifiedby: {workflow.FormattedValues["modifiedby"]}");
Console.WriteLine($"modifiedon: {workflow.FormattedValues["modifiedon"]}");
Console.WriteLine($"name: {workflow["name"]}");
Console.WriteLine($"ownerid: {workflow.FormattedValues["ownerid"]}");
Console.WriteLine($"statecode: {workflow.FormattedValues["statecode"]}");
Console.WriteLine($"type: {workflow.FormattedValues["type"]}");
Console.WriteLine($"workflowid: {workflow["workflowid"]}");
Console.WriteLine($"workflowidunique: {workflow["workflowidunique"]}");
}
Para recuperar máis rexistros, elimine o TopCount límite.
Saída
category: Modern Flow
createdby: SYSTEM
createdon: 5/20/2020 9:37 PM
description:
ismanaged: Unmanaged
modifiedby: Kiana Anderson
modifiedon: 5/6/2023 3:37 AM
name: When an account is updated -> Create a new record
ownerid: Monica Thomson
statecode: Activated
type: Definition
workflowid: d9e875bf-1c9b-ea11-a811-000d3a122b89
workflowidunique: c17af45c-10a1-43ca-b816-d9cc352718cf
Máis información:
Crear un fluxo de nube
As propiedades requiridas para fluxos automatizados, instantáneos e programados son: category, name, type, primaryentity, e clientdata. Usar none para o/a primaryentity para este tipo de fluxos.
Este método estático require un cliente autenticado que implemente o IOrganizationService. Emprega o IOrganizationService.Crear método.
/// <summary>
/// Creates a cloud flow
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <returns>The workflowid</returns>
public static Guid CreateCloudFlow(IOrganizationService service)
{
var workflow = new Entity("workflow")
{
Attributes = {
{"category", new OptionSetValue(5) }, // Cloud flow
{"name", "Sample flow name"},
{"type", new OptionSetValue(1) }, //Definition
{"description", "This flow reads some data from Dataverse." },
{"primaryentity", "none" },
{"clientdata", "{\"properties\":{\"connectionReferences\":{\"shared_commondataserviceforapps\":{\"impersonation\":{},\"runtimeSource\":\"embedded\",\"connection\":{\"name\":\"shared-commondataser-114efb88-a991-40c7-b75f-2693-b1ca6a0c\",\"connectionReferenceLogicalName\":\"crdcb_sharedcommondataserviceforapps_109ea\"},\"api\":{\"name\":\"shared_commondataserviceforapps\"}}},\"definition\":{\"$schema\":\"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#\",\"contentVersion\":\"1.0.0.0\",\"parameters\":{\"$connections\":{\"defaultValue\":{},\"type\":\"Object\"},\"$authentication\":{\"defaultValue\":{},\"type\":\"SecureObject\"}},\"triggers\":{\"manual\":{\"metadata\":{\"operationMetadataId\":\"76f87a86-89b3-48b4-92a2-1b74539894a6\"},\"type\":\"Request\",\"kind\":\"Button\",\"inputs\":{\"schema\":{\"type\":\"object\",\"properties\":{},\"required\":[]}}}},\"actions\":{\"List_rows\":{\"runAfter\":{},\"metadata\":{\"operationMetadataId\":\"9725b30f-4a8e-4695-b6fd-9a4985808809\"},\"type\":\"OpenApiConnection\",\"inputs\":{\"host\":{\"apiId\":\"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps\",\"connectionName\":\"shared_commondataserviceforapps\",\"operationId\":\"ListRecords\"},\"parameters\":{\"entityName\":\"accounts\",\"$select\":\"name\",\"$top\":1},\"authentication\":\"@parameters('$authentication')\"}}}}},\"schemaVersion\":\"1.0.0.0\"}" }
}
};
return service.Create(workflow);
}
Máis información: Crear filas de táboa usando o Servizo de organización
Os statecode fluxos creados deste xeito están configurados en 0 (Borrador ou "Desactivado"). O fluxo debe estar activado antes de poder usalo.
A propiedade máis importante é a clientdata, que contén a connectionReferences que usa o fluxo e a definición do fluxo. As connectionReferences son as asignacións a cada conexión que usa o fluxo.
{
"properties": {
"connectionReferences": {
"shared_commondataserviceforapps": {
"runtimeSource": "embedded",
"connection": {},
"api": {
"name": "shared_commondataserviceforapps"
}
}
},
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"$connections": { "defaultValue": {}, "type": "Object" },
"$authentication": { "defaultValue": {}, "type": "SecureObject" }
},
"triggers": {
"manual": {
"metadata": {},
"type": "Request",
"kind": "Button",
"inputs": {
"schema": { "type": "object", "properties": {}, "required": [] }
}
}
},
"actions": {
"List_rows": {
"runAfter": {},
"metadata": {},
"type": "OpenApiConnection",
"inputs": {
"host": {
"apiId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps",
"connectionName": "shared_commondataserviceforapps",
"operationId": "ListRecords"
},
"parameters": {
"entityName": "accounts",
"$select": "name",
"$top": 1
},
"authentication": "@parameters('$authentication')"
}
}
}
}
},
"schemaVersion": "1.0.0.0"
}
Actualizar un fluxo na nube
Para actualizar un fluxo, defina só as propiedades que desexe cambiar.
Este método estático require un cliente autenticado que implemente o IOrganizationService. Emprega o método IOrganizationService.Update para actualizar a descrición dun fluxo e definir o propietario.
/// <summary>
/// Updates a cloud flow
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="workflowid">The ID of the flow to update.</param>
/// <param name="systemuserid">The id of the user to assign the flow to.</param>
public static void UpdateCloudFlow(IOrganizationService service, Guid workflowid, Guid systemuserid) {
var workflow = new Entity("workflow",workflowid)
{
Attributes = {
{"description", "This flow will ensure consistency across systems." },
{"ownerid", new EntityReference("systemuser",systemuserid)},
{"statecode", new OptionSetValue(1) } //Turn on the flow.
}
};
service.Update(workflow);
}
Máis información: Actualizar e eliminar filas da táboa mediante o servizo de organización > Actualización básica
Eliminar un fluxo na nube
Os seguintes exemplos mostran como eliminar o rexistro do fluxo de traballo que representa un fluxo na nube.
O método estático DeleteCloudFlow elimina un rexistro de fluxo de traballo.
/// <summary>
/// Deletes a workflow
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="workflowId">The id of the cloud flow to delete.</param>
public static void DeleteCloudFlow(IOrganizationService service, Guid workflowId) {
service.Delete(entityName:"workflow",id: workflowId);
}
Máis información: Eliminar un rexistro usando o SDK
Obter todos os usuarios cos que se comparte un fluxo na nube
Usa a mensaxe RetrieveSharedPrincipalsAndAccess para obter unha lista de todos os usuarios cos que se comparte un fluxo na nube.
Co SDK, usa a clase RetrieveSharedPrincipalsAndAccessRequest e coa API web usa a función RetrieveSharedPrincipalsAndAccess.
Máis información: Obter principais con acceso a un rexistro
Compartir ou deixar de compartir un fluxo na nube
Comparte un fluxo na nube como calquera outro rexistro usando a mensaxe. Dataverse GrantAccess Co SDK, usa a clase GrantAccessRequest e coa API web usa a acción GrantAccess. Máis información: Exemplo de GrantAccess
Se queres cambiar os dereitos de acceso que outorgas ao compartir un rexistro, usa a mensaxe ModifyAccess . Co SDK, usa a clase ModifyAccessRequest e coa API web usa a acción ModifyAccess. Máis información: Exemplo de ModifyAccess
Para deixar de compartir un rexistro, usa a mensaxe RevokeAccess . Co SDK, usa a clase RevokeAccessRequest e coa API web usa a acción RevokeAccess. Máis información: Revogación do acceso
Fluxos de exportación
Cando un fluxo forma parte dunha solución, podes exportalo exportando a solución que contén o fluxo usando a mensaxe ExportSolution .
O seguinte método de exemplo estático ExportSolution usa a ExportSolutionRequest para recuperar un byte[] que contén o ficheiro ZIP da solución non xestionada co UniqueName especificado.
/// <summary>
/// Exports an unmanaged solution
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="solutionUniqueName">The uniquename of the solution.</param>
/// <returns></returns>
public static byte[] ExportSolution(
IOrganizationService service,
string solutionUniqueName)
{
ExportSolutionRequest request = new() {
SolutionName = solutionUniqueName,
Managed = false
};
var response = (ExportSolutionResponse)service.Execute(request);
return response.ExportSolutionFile;
}
Fluxos de importación
Cando teñas un ficheiro ZIP de solución, podes importalo usando a mensaxe ImportSolution .
Ao importar fluxos, debes definir os seguintes parámetros:
| Nome da propiedade | Descripción |
|---|---|
OverwriteUnmanagedCustomizations |
Se xa existen instancias destes fluxos en Dataverse, é necesario definir esta marca en true para importalos. Se non, non se sobrescribirán. |
PublishWorkflows |
Indica se os fluxos de traballo clásicos están activados ao importar. Dataverse Esta configuración non se aplica a outros tipos de fluxos. |
CustomizationFile |
Un ficheiro zip codificado en base 64 que contén a solución. |
O método de mostra estático ImportSolution mostra como importar un ficheiro de solución usando a clase ImportSolutionRequest
/// <summary>
/// Imports a solution.
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="solutionFile">The byte[] data representing a solution file. </param>
public static void ImportSolution(
IOrganizationService service,
byte[] solutionFile) {
ImportSolutionRequest request = new() {
OverwriteUnmanagedCustomizations = true,
CustomizationFile = solutionFile
};
service.Execute(request);
}
Preguntas máis frecuentes
E que pasa coa API de api.flow.microsoft.com?
A API en api.flow.microsoft.com non é compatible. Os clientes deberían usar as Dataverse API web para Power Automate documentadas anteriormente neste artigo.
De xeito alternativo, os clientes poden usar os conectores de xestión: Power Automate Xestión ou Power Automate para administradores.
Os clientes poden usar as API non compatibles baixo a súa propia responsabilidade. api.flow.microsoft.com Estas API están suxeitas a cambios, polo que poderían producirse cambios importantes.
Información relacionada
Operacións da clase de entidade usando o servizo Organización
Realizar operacións usando a API web
Compartir e asignar
Verificación do acceso no código
Traballa con solucións empregando o Dataverse SDK