Кодты пайдаланып бұлттық ағындармен жұмыс істеу
Барлық ағындар Dataverse ішінде сақталады және оларды басқару үшін .NET немесе Web API үшін Dataverse SDK пайдалана аласыз.
Бұл мақала Шешімдер қойындысында қамтылған ағындарды басқаруды қамтиды Power Automate. Қазіргі уақытта Менің ағындарым астындағы ағындарды басқаруға кодпен қолдау көрсетілмейді.
Dataverse API-мен әрекеттесу
Dataverse .NET немесе Web API үшін Dataverse SDK көмегімен баламалы мүмкіндіктерді қамтамасыз етеді.
Қандай әдісті қолдануым керек?
Ең жақсы әдіс жоба технологиясына және сізде бар дағдыларға байланысты.
Жобаңыз .NET пайдаланса, SDK пайдалануды ұсынамыз. SDK терілген нысан үлгісін және аутентификация әдістерін қамтамасыз ету арқылы әзірлеу тәжірибеңізді жеңілдетеді.
Қосымша ақпарат: Ұйым қызметін пайдаланыңыз
Қалай қосылуға болады?
Қосылу жолы .NET немесе Web API үшін Dataverse SDK қолданып жатқаныңызға байланысты.
SDK көмегімен IOrganizationService данасына кіру үшін клиенттік қолданбаға қосылу керек.
IOrganizationService
— бұл Dataverse әрекеттесу үшін пайдалануға болатын әдістерді қамтамасыз ететін интерфейс.
Қосымша ақпарат:
Жұмыс барысы кестесі
Бұлттық ағындар Процесс (жұмыс процесі) кестесінде сақталады ол Web API интерфейсінде жұмыс ағыны EntityType ретінде ұсынылған
Келесі кесте жұмыс процесі кестесіндегі маңызды бағандарды сипаттайды:
Логикалық аты | Түр | Сипаттама |
---|---|---|
category |
Таңдау | Ағын категориясы. Мұнда әртүрлі санаттар берілген. 0 - Классикалық Dataverse жұмыс процестері.1 - Классикалық Dataverse диалогтар. 2 - Іскерлік ережелер. 3 - Классикалық Dataverse әрекеттер. 4 - Бизнес-процестердің ағымдары. 5 - Заманауи ағын (Автоматтандырылған, жедел немесе жоспарланған ағындар).6 - Жұмыс үстелі ағындары. |
clientdata |
String | Ағын анықтамасының жолды кодталған JSON және оның байланысыСілтемелер. |
createdby |
Қарау | Ағынды жасаған пайдаланушы. |
createdon |
Күн уақыты | Ағын жасалған күн. |
description |
String | Ағынның пайдаланушы берген сипаттамасы. |
ismanaged |
Bool | Ағынның Басқарылатын шешім арқылы орнатылғанын көрсетеді. |
modifiedby |
Қарау | Ағынды жаңартқан соңғы пайдаланушы. |
modifiedon |
Күн уақыты | Ағын соңғы рет жаңартылды. |
name |
String | Ағынға берген көрсетілетін атау. |
ownerid |
Қарау | Ағынға ие пайдаланушы немесе топ. |
statecode |
Таңдау | Ағынның күйі. Күй келесідей болуы мүмкін:0 - Жоба (өшірулі)1 - Қосылған (қосулы)2 - Тоқтатылды. |
type |
Таңдау | Ағынның орындалатын ағын немесе көбірек ағындарды жасау үшін пайдалануға болатын үлгі екенін көрсетеді. 1 - Анықтама,2 - Белсендіру3 - Үлгі. |
workflowid |
Guid | Барлық импорттағы бұлттық ағын үшін бірегей идентификатор. |
workflowidunique |
Guid | Ағынның осы орнатуына арналған бірегей идентификатор. |
Ескертпе
Web API көмегімен Іздеу мәндері бір мәнді шарлау сипаттары аралас жазбадан мәліметтер алу үшін кеңейтілуі мүмкін.
Іздеу бағандарында сұрауларда қолдануға болатын сәйкес GUID іздеу сипаттары бар. Іздеу сипаттарында келесі атау шарты бар: _<logical name>_value
. Web API ішіндегі жұмыс үрдісі нысаны үшін мына іздеу сипаттарына сілтеме жасай аласыз: _createdby_value
, _modifiedby_value
және _ownerid_value
.
Тізім ағындары
Бұлт ағындарының тізімін шығарып алу үшін жұмыс процесі кестесін сұрауға болады. Келесі сұрау қазіргі уақытта «қосулы» бірінші автоматтандырылған, лездік немесе жоспарланған ағынды қайтарады:
Бұл статикалық OutputFirstActiveFlow
әдіс IOrganizationService орындайтын аутентификацияланған клиентті қажет етеді. Ол IOrganizationService.RetrieveMultiple әдісін пайдаланады.
/// <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"]}");
}
Қосымша жазбаларды шығарып алу үшін TopCount шегін алып тастаңыз.
Шығыс
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
Қосымша ақпарат:
Бұлттық ағын жасау
Автоматтандырылған, лездік және жоспарланған ағындар үшін қажетті сипаттар: category
, name
, type
, primaryentity
және clientdata
. Ағындардың осы түрлері үшін none
үшін primaryentity
қолданыңыз.
Бұл статикалық әдіс IOrganizationService орындайтын аутентификацияланған клиентті қажет етеді. Ол IOrganizationService.Create әдісін пайдаланады.
/// <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);
}
Қосымша ақпарат: Ұйым қызметін пайдаланып кесте жолдарын жасаңыз
Осы жолмен жасалған барлық ағындардың statecode
а 0
(Жоба немесе "Өшірулі") күйіне орнатылады. Ағынды пайдалану үшін оны қосу керек.
Ең маңызды қасиет clientdata
болып табылады, онда ағын пайдаланатын connectionReferences
және ағынның анықтамасы бар. connectionReferences
бұл ағын пайдаланатын әрбір қосылымның салыстырулары.
{
"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"
}
бұлттық ағын жаңартыңыз
Ағынды жаңарту үшін өзгерткіңіз келетін сипаттарды ғана орнатыңыз.
Бұл статикалық әдіс IOrganizationService орындайтын аутентификацияланған клиентті қажет етеді. Ол ағын сипаттамасын жаңарту және иесін орнату үшін IOrganizationService.Update әдісін пайдаланады.
/// <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);
}
Қосымша ақпарат: Ұйым қызметі арқылы кесте жолдарын жаңарту және жою > Негізгі жаңарту
бұлттық ағын файлын жойыңыз
Келесі мысалдар бұлттық ағын көрсететін жұмыс процесі жазбасын жою жолын көрсетеді.
Статикалық DeleteCloudFlow
әдісі жұмыс процесі жазбасын жояды.
/// <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);
}
Қосымша ақпарат: SDK көмегімен жазбаны жою
бұлттық ағын ортақ пайдаланатын барлық пайдаланушыларды алыңыз
бұлттық ағын ортақ пайдаланылатын барлық пайдаланушылардың тізімін алу үшін RetrieveSharedPrincipalsAndAccess
хабарламасын пайдаланыңыз.
SDK көмегімен RetrieveSharedPrincipalsAndAccessRequest класын және Web API интерфейсімен RetrieveSharedPrincipalsAndAccess функциясын пайдаланыңыз.
Қосымша ақпарат: Жазбаға рұқсаты бар жетекшілерді алыңыз
бұлттық ағын файлын бөлісу немесе бөлісуді тоқтату
Кез келген басқа Dataverse жазба сияқты, GrantAccess
хабарлама арқылы бұлттық ағын бөлісіңіз. SDK көмегімен GrantAccessRequest класын және Web API интерфейсімен GrantAccess әрекетін пайдаланыңыз. Қосымша ақпарат: GrantAccess мысалы
Жазбаны ортақ пайдаланған кезде берілген рұқсат құқықтарын өзгерткіңіз келсе, ModifyAccess
хабарламасын пайдаланыңыз. SDK көмегімен ModifyAccessRequest класын және Web API интерфейсімен ModifyAccess әрекетін пайдаланыңыз. Қосымша ақпарат: ModifyAccess мысалы
Жазбаны бөлісуден бас тарту үшін RevokeAccess
хабарламасын пайдаланыңыз. SDK көмегімен RevokeAccessRequest класын және Web API интерфейсімен RevokeAccess әрекетін пайдаланыңыз. Қосымша ақпарат: Кіру рұқсатын жою
Экспорттық ағындар
Ағын шешімнің бөлігі болса, оны ExportSolution
хабарламасы арқылы ағыны бар шешімді экспорттау арқылы экспорттауға болады.
Төмендегі статикалық ExportSolution
мысал әдісі ExportSolutionRequest көрсетілген басқарылмайтын шешімнің ZIP файлын қамтитын byte[]
шығарып алу үшін пайдаланады. Бірегей атау.
/// <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;
}
Импорт ағындары
Шешім ZIP файлы болғанда, оны ImportSolution
хабарламасы арқылы импорттай аласыз.
Ағындарды импорттау кезінде келесі параметрлерді орнату керек:
Сипат атауы | Сипаттама |
---|---|
OverwriteUnmanagedCustomizations |
Егер Dataverse ішінде осы ағындардың бар даналары болса, оларды импорттау үшін бұл жалаушаны true деп орнату қажет. Әйтпесе, олар қайта жазылмайды. |
PublishWorkflows |
Импорттау кезінде классикалық Dataverse жұмыс үрдістері іске қосылатынын көрсетеді. Бұл параметр ағындардың басқа түрлеріне қолданылмайды. |
CustomizationFile |
Шешімі бар негізгі 64-кодталған zip файлы. |
Статикалық ImportSolution
үлгі әдісі 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);
}
Қатысты ақпарат
Ұйым қызметін пайдаланатын нысан класының операциялары
Web API арқылы әрекеттерді орындаңыз
Бөлу және тағайындау
Кодтағы рұқсатты тексеру
Dataverse SDK көмегімен шешімдермен жұмыс жасаңыз