Udostępnij przez


Tworzenie własnych akcji

Funkcjonalność Dynamics 365 Customer Engagement (on-premises) można rozszerzyć, tworząc niestandardowe wiadomości nazywane akcjami. Te działania będą miały skojarzone klasy żądań i odpowiedzi, a zostanie wygenerowana akcja webowego interfejsu API. Akcje są zwykle używane do dodawania nowych funkcji specyficznych dla domeny do usługi sieci Web organizacji lub do łączenia wielu żądań komunikatów usługi sieci Web organizacji w jedno żądanie. Na przykład w telefonicznym centrum pomocy technicznej można połączyć komunikaty Utwórz, Przypisz i Ustaw stan w jedną nową wiadomość Eskalacja.

Logika biznesowa akcji jest implementowana przy użyciu przepływu pracy. Podczas tworzenia akcji, skojarzony przepływ pracy w czasie rzeczywistym jest automatycznie rejestrowany do wykonania na etapie 30 potoku wykonywania (operacja podstawowa). Aby uzyskać więcej informacji na temat przepływów pracy w czasie rzeczywistym, zobacz Typy przepływów pracy.

Chociaż akcje są obsługiwane zarówno w Dynamics 365 for Customer Engagement, tworzenie akcji w kodzie (przy użyciu XAML) jest obsługiwane tylko przez wdrożenia lokalne i IFD. Klienci online muszą tworzyć akcje interaktywnie w aplikacji internetowej.

 

Informacje o definicjach akcji

Akcja jest definiowana przy użyciu rekordu jednostki Workflow, podobnie jak w przypadku przepływu pracy w czasie rzeczywistym. Niektóre kluczowe punkty dotyczące tego, czym jest akcja i jak działa, znajdują się na poniższej liście:

  • Może być skojarzona z pojedynczą jednostką lub być globalna (nieskojarzona z żadną konkretną jednostką).

  • Jest wykonywany na etapie bazowym 30 potoku wykonywania zdarzeń.

  • Obsługuje wywoływanie wtyczek zarejestrowanych na etapach przedoperacyjnych i pooperacyjnych potoku wykonania zdarzeń.

  • Wtyczki mogą być rejestrowane na etapie przed operacją lub po operacji tylko wtedy, gdy stan działania to Aktywowany.

  • Jest dostępny za pośrednictwem internetowego interfejsu API lub punktów dostępu organization.svc i organization.svc/web.

  • Może być wykonywany przy użyciu zasobu internetowego JavaScript. Więcej informacji: Wykonywanie akcji przy użyciu zasobu sieci Web JavaScript

  • Zawsze jest uruchamiany w kontekście zabezpieczeń użytkownika wywołującego.

  • Rekordu nie można usunąć, jeśli w działaniu są zarejestrowane kroki dodatku.

  • Opcjonalnie, za pomocą ustawienia konfiguracji, może uczestniczyć w bieżącej transakcji bazy danych.

  • Nie obsługuje zakresu, w którym wykonywanie jest ograniczone do użytkownika, jednostki biznesowej lub organizacji. Akcje są zawsze wykonywane w obrębie organizacji.

  • Obsługuje argumenty wejściowe i wyjściowe.

  • Obsługuje inspekcję zmian danych.

  • Nie jest obsługiwana w przypadku klientów w trybie offline.

  • Może być uruchomiony przez wywołanie metody usługi internetowej.

  • Może być wywoływany bezpośrednio z przepływu pracy.

Wymagane uprawnienia

Uprawnienie zabezpieczeń o nazwie Aktywuj procesy czasu rzeczywistego (prvActivateSynchronousWorkflow) jest wymagane do aktywowania przepływu pracy działania w czasie rzeczywistym, tak aby można było go wykonać. Jest to dodatek do wszelkich uprawnień potrzebnych do utworzenia przepływu pracy.

Tworzenie akcji przy użyciu kodu

Zazwyczaj akcja jest implementowana przez konfigurator przy użyciu interaktywnego projektanta przepływu pracy aplikacji internetowej. Jednak deweloperzy mogą implementować akcje przy użyciu wywołań SDK i w razie potrzeby wdrażać je na serwerze lokalnym lub na serwerze IFD.

Atrybuty encji przepływu pracy, które są używane dla akcji, są opisane w poniższej tabeli. Przykładowy kod przepływu pracy w czasie rzeczywistym można znaleźć w temacie Tworzenie przepływu pracy w czasie rzeczywistym w kodzie.

Atrybut przepływu pracy Opis
Category Ustaw wartość WorkflowCategory.CustomOperation.
SyncWorkflowLogOnError Gdy true błędy są rejestrowane w ProcessSession rekordach. W odróżnieniu od asynchronicznych przepływów pracy, wykonywanie przepływu pracy w czasie rzeczywistym nie jest rejestrowane w rekordach System Job.
Mode Nie używany.
IsTransacted Ustaw na true , jeśli akcja ma uczestniczyć w transakcji bazy danych, w przeciwnym razie false. Wartość domyślna to true.
UniqueName Unikatowa nazwa akcji. Nazwa składa się z prefiksu wydawcy + "_" + unikatowa nazwa.
Xaml Ustaw kod XAML, który definiuje przepływ pracy akcji w czasie rzeczywistym. Nie ma możliwości odwołania się do innego istniejącego przepływu pracy w czasie rzeczywistym.

Dodawanie argumentów wejściowych i wyjściowych

Akcje obsługują argumenty wejściowe i wyjściowe, które można dodać do przepływu pracy przy użyciu typu DynamicActivityProperty . Po dodaniu tych argumentów do przepływu pracy akcji stają się one właściwościami w klasach żądań i odpowiedzi komunikatów skojarzonych z tą akcją. Na przykład w poniższym przykładzie przedstawiono kod C# i XAML dla dwóch argumentów wejściowych i jednego wyjściowego.

DynamicActivityProperty inputProperty1 = new DynamicActivityProperty     { Name = "Subject", Type = typeof(InArgument<string>) };  
DynamicActivityProperty inputProperty2 = new DynamicActivityProperty     { Name = "EntityCollection", Type = typeof(InArgument<EntityCollection>) };  
DynamicActivityProperty outputProperty1 = new DynamicActivityProperty     { Name = "Output", Type = typeof(OutArgument<string>) };  
  
inputProperty1.Attributes.Add(new ArgumentRequiredAttribute(true));  
inputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The subject"));  
inputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));  
  
inputProperty2.Attributes.Add(new ArgumentRequiredAttribute(false));  
inputProperty2.Attributes.Add(new ArgumentDescriptionAttribute("The entity collection"));  
inputProperty2.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));  
  
outputProperty1.Attributes.Add(new ArgumentRequiredAttribute(false));  
outputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The output"));  
outputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Output));  
<x:Property Name="Subject"  
            Type="InArgument(x:String)">  
 <x:Property.Attributes>  
  <mxsw:ArgumentRequiredAttribute Value="True" />  
  <mxsw:ArgumentTargetAttribute Value="False" />  
  <mxsw:ArgumentDescriptionAttribute Value="The subject " />  
  <mxsw:ArgumentDirectionAttribute Value="Input" />  
  <mxsw:ArgumentEntityAttribute Value="" />  
 </x:Property.Attributes>  
</x:Property>  
<x:Property Name="EntityCollection"  
            Type="InArgument(mxs:EntityCollection)">  
 <x:Property.Attributes>  
  <mxsw:ArgumentRequiredAttribute Value="False" />  
  <mxsw:ArgumentTargetAttribute Value="False" />  
  <mxsw:ArgumentDescriptionAttribute Value="The entity collection" />  
  <mxsw:ArgumentDirectionAttribute Value="Input" />  
  <mxsw:ArgumentEntityAttribute Value="" />  
 </x:Property.Attributes>  
</x:Property>  
<x:Property Name="Output"  
            Type="OutArgument(x:String)">  
 <x:Property.Attributes>  
  <mxsw:ArgumentRequiredAttribute Value="False" />  
  <mxsw:ArgumentTargetAttribute Value="False" />  
  <mxsw:ArgumentDescriptionAttribute Value="The output" />  
  <mxsw:ArgumentDirectionAttribute Value="Output" />  
  <mxsw:ArgumentEntityAttribute Value="" />  
 </x:Property.Attributes>  
</x:Property>  

Nazwy używane dla właściwości powinny być spójne z nazwami argumentów, ponieważ generowanie kodu zdefiniuje te nazwy jako właściwości żądania lub odpowiedzi.

Obsługiwane typy argumentów dla argumentów wejściowych i wyjściowych przedstawiono w poniższej tabeli.

Typ .NET Typ argumentu
System.Int32 powiedział: Integer
System.String Sznurek
EntityReference EntityReference
Entity Jednostka
EntityCollection Kolekcja Entitetów
System.DateTime Data i Czas
System.Double Obrót
System.Decimal Liczba dziesiętna
Money Pieniądze
System.Boolean logiczny
OptionSetValue Picklist

Obsługiwane atrybuty argumentów są wymienione w poniższej tabeli.

Atrybut argumentu Opis
ArgumentRequiredAttribute Wskazuje, czy argument jest wymagany.
ArgumentDirectionAttribute Wskazuje, czy kierunek argumentu jest danymi wejściowymi, czy wyjściowymi.
ArgumentDescriptionAttribute Określa opis argumentu.
ArgumentEntityAttribute Używane, jeśli chcesz przekazać jednostkę.
ArgumentTargetAttribute Ten atrybut jest generowany lub dodawany automatycznie. Wskazuje encję podstawową, dla której jest uruchamiany przepływ pracy. Ten atrybut jest opcjonalny dla akcji globalnych.

Pakowanie akcji do dystrybucji

Aby rozpowszechnić akcję w taki sposób, aby można ją było zaimportować do organizacji Dynamics 365 Customer Engagement (on-premises), dodaj akcję do rozwiązania Customer Engagement. Można to łatwo zrobić za pomocą aplikacji internetowej, przechodząc doRozwiązań>>. Możesz również napisać kod, aby utworzyć rozwiązanie. Aby uzyskać więcej informacji na temat rozwiązań, zobacz Pakowanie i dystrybucja rozszerzeń.

Generowanie typów o wczesnym wiązaniu dla akcji

Za pomocą narzędzia CrmSvcUtil można generować klasy żądań i odpowiedzi, aby akcja została uwzględniona w kodzie aplikacji. Zanim jednak wygenerujesz te klasy, pamiętaj o aktywowaniu akcji.

Aby pobrać CrmSvcUtil.exe, zobacz Narzędzia programistyczne Dataverse.

Poniższy przykład przedstawia format uruchamiania narzędzia z wiersza polecenia dla lokalnej instalacji Customer Engagement. Podajesz wartości parametrów dla swojej instalacji.

CrmSvcUtil.exe /url:https://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions  

Poniższy przykład przedstawia format uruchamiania narzędzia z wiersza polecenia za pomocą Dynamics 365 for Customer Engagement. Podajesz wartości parametrów odpowiednie dla Twojego konta i serwera.

CrmSvcUtil.exe /url:https://<organizationUrlName>.api.crm.dynamics.com/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions  

Zwróć uwagę na użycie parametru /generateActions. Więcej informacji: Tworzenie wczesnych powiązanych klas jednostek za pomocą narzędzia do generowania kodu (CrmSvcUtil.exe).

Możesz użyć typów z wczesnym wiązaniem lub późnym wiązaniem wraz z wygenerowanymi klasami żądań i odpowiedzi na potrzeby operacji.

Wykonywanie akcji przy użyciu internetowego interfejsu API

Po jego utworzeniu w internetowym interfejsie API jest tworzona nowa akcja. Jeśli akcja jest tworzona w kontekście encji, jest powiązana z tą jednostką. W przeciwnym razie jest to akcja niepowiązana. Więcej informacji: Używanie interfejsu API sieci Web.

Wykonywanie akcji przy użyciu zasobu sieci Web JavaScript

Akcja może być wykonywana przy użyciu internetowego interfejsu API, tak jak każda inna akcja systemowa. Więcej informacji: Xrm.WebApi.online.execute

Wykonaj akcję za pomocą usługi organizacyjnej

Aby wykonać akcję przy użyciu usługi sieci Web organizacji przy użyciu kodu zarządzanego, wykonaj następujące kroki.

  1. Dołącz plik typów wcześnie powiązanych, który został wygenerowany przy użyciu narzędzia CrmSvcUtil w projekcie aplikacji.

  2. W kodzie aplikacji zainicjuj żądanie swojej akcji i uzupełnij wymagane właściwości.

  3. Wywołaj Execute, przekazując żądanie jako argument.

    Przed uruchomieniem kodu aplikacji upewnij się, że akcja jest aktywowana. W przeciwnym razie zostanie wyświetlony komunikat o błędzie w czasie wykonywania.

Wykonywanie akcji przy użyciu procesu

Akcję można wykonać z przepływów pracy, okien dialogowych lub innych akcji procesu. Aktywowane akcje niestandardowe są dostępne dla procesów po wybraniu elementu Wykonaj akcję z listy rozwijanej Dodaj krok w formularzu procesu aplikacji internetowej. Po dodaniu kroku do procesu możesz wybrać nową akcję niestandardową (lub dowolną akcję) z listy Akcja podanej w tym kroku. Wybierz Ustaw właściwości w kroku, aby określić wszystkie parametry wejściowe wymagane przez akcję niestandardową.

Uwaga / Notatka

Jeśli akcja niestandardowa ma nieobsługiwane typy parametrów, takie jak lista wyboru, encja lub kolekcja jednostek, akcja niestandardowa nie jest uwzględniona na liście Akcja.

Możliwość wykonywania akcji z poziomu procesu została wprowadzona w programie Dynamics CRM Online 2015, aktualizacja 1.

Istniejące Depth kontrole platformy zapewniają, że nie występuje nieskończona pętla. Aby uzyskać więcej informacji na temat limitów głębokości, zobacz .MaxDepth

Uważaj na długotrwałe akcje

Jeśli jeden z kroków w przepływie pracy w czasie rzeczywistym jest niestandardową czynnością przepływu pracy, to niestandardowa czynność przepływu pracy jest wykonywana w izolowanym środowisku wykonawczym piaskownicy i będzie podlegać dwuminutowemu limitowi czasu, podobnie jak zarządzanie wtyczkami w trybie piaskownicy. Nie ma jednak ograniczeń co do całkowitego czasu, jaki może zająć sama akcja. Ponadto, jeśli akcja uczestniczy w transakcji, w której jest włączone wycofywanie, zostaną zastosowane limity czasu programu SQL Server.

Wskazówka

Zalecanym najlepszym rozwiązaniem jest to, że długotrwałe operacje powinny być wykonywane poza Dynamics 365 Customer Engagement (on-premises) przy użyciu procesów asynchronicznych lub w tle platformy .NET.

Zobacz także

Tworzenie przepływów pracy w czasie rzeczywistym
Używanie okien dialogowych dla procesów nadzorowanych
Potok wykonywania zdarzeń
Pisanie przepływów pracy w celu automatyzacji procesów biznesowych
Dostosuj swój system