Oprette dine egne handlinger
Udgivet: januar 2017
Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
Du kan udvide funktionaliteten af Microsoft Dynamics 365 ved at oprette brugerdefinerede meddelelser, der er kendt som handlinger. Disse handlinger har tilknyttede anmodning/svar-klasser, og der genereres en Web API-handling. Handlinger bruges typisk til at føje nye domænespecifikke funktioner til organisationens webtjeneste eller kombinere flere meddelelsesanmodninger om organisationens webtjeneste i en enkelt anmodning. I et supportcallcenter kan du f.eks. kombinere meddelelserne Create, Assign og Setstate i en enkelt ny Escalate-meddelelse.
En handlings forretningslogik implementeres ved hjælp af en arbejdsproces. Når du opretter en handling, registreres automatisk den tilknyttede arbejdsproces i realtid for at udføre fase 30 (kerneoperation) i kørselsrækkefølgen. Find flere oplysninger om arbejdsprocesser i realtid under Dynamics 365-proceskategorier.
Mens handlinger understøttes i begge Microsoft Dynamics 365 (online og i det lokale miljø), understøttes oprettelse af en handling i kode (ved hjælp af XAML) kun i det lokale miljø og i IFD-installationer. Online-kunder skal oprette handlinger interaktivt i webprogrammet.
Dette emne indeholder
Om definitioner af handling
Påkrævede tilladelser
Oprette en handling ved hjælp af kode
Pakke en handling til distribution
Opret typer af tidligt bundet til en handling
Udføre en handling ved hjælp af Web-API'en
Udføre en handling ved hjælp af organisationstjenesten
Udfør en handling ved hjælp af en proces
Hold øje med handlinger, der kører i lang tid
Om definitioner af handling
En handling defineres ved hjælp af en Workflow-objektpost, der ligner en arbejdsproces i realtid. Du kan finde nogle hovedpunkter af, hvad en handling er, og hvordan den fungerer, på følgende liste:
Kan være knyttet til et enkelt objekt eller være globale (ikke knyttet til et bestemt objekt).
Udføres i kerneoperationens fase 30 i kørselsrækkefølgen af hændelsen.
Understøtter aktiveringen af plug-ins, der er registreret i stadierne for hændelse før og hændelse efter i kørselsrækkefølgen af hændelsen.
Kan kun have plug-ins registreret i stadier for hændelse før eller hændelse efter, hvis handlingens status er aktiveret.
Er tilgængelig via organization.svc- og organization.svc-webslutpunkterne, men ikke organizationdata.svc (OData)-slutpunktet.
Kan udføres ved hjælp af en JavaScript-webressource.Flere oplysninger:Udføre en handling ved hjælp af en JavaScript-webressource
Kører altid i sikkerhedskonteksten for den kaldende bruger.
Posten kan ikke slettes, mens plug-in-trin er registreret på handlingen.
Kan eventuelt gennem en konfigurationsindstilling deltage i den aktuelle transaktion i databasen.
Understøtter ikke et område, hvor udførelsen er begrænset til en bruger, afdeling eller organisation. Handlinger udføres altid i organisationens område.
Understøtter input- og outputargumenter.
Understøtter overvågning af dataændringer.
Understøttes ikke med offlineklienter.
Kan aktiveres ved et metodekald til webtjenesten.
Kan aktiveres direkte fra en arbejdsproces.
Påkrævede tilladelser
Sikkerhedsrettigheder med navnet Aktivér processer i realtid (prvActivateSynchronousWorkflow) kræves for at aktivere en handlings arbejdsproces i realtid, så den kan udføres. Dette er ud over eventuelle rettigheder, der er nødvendige for at oprette en arbejdsproces. Du kan finde flere oplysninger om disse rettigheder i brugergrænsefladetilknytningen for rettigheden under fanen Tilpasning.
Oprette en handling ved hjælp af kode
Normalt ville en handling blive implementeret af en systemtilpasser ved hjælp af den interaktive workflow designer i webprogrammet. Udviklere kan dog implementere handlinger ved hjælp af SDK-kald og installere til en lokal eller IFD-server, hvis det ønskes.
Arbejdsproces-objektattributter, der bruges til en handling, er beskrevet i følgende tabel. Eksempelkode til en arbejdsproces i realtid finder du i emnet Oprette en arbejdsproces i realtid i kode.
Attribut for arbejdsproces |
Beskrivelse |
---|---|
Category |
Indstillet til WorkflowCategory.CustomOperation. |
SyncWorkflowLogOnError |
Når true logges fejl til ProcessSession-poster. I modsætning til asynkrone arbejdsprocesser logges udførelse af arbejdsproces ikke til System Job-poster. |
Mode |
Bruges ikke. |
IsTransacted |
Indstillet til true, hvis handlingen skal deltage i databasetransaktionen. Ellers false. Standard er true. |
UniqueName |
Et entydigt navn for handlingen. Navnet er sammensat af et publisher-præfiks + "_" + entydigt navn. |
Xaml |
Indstillet til den XAML-kode, der definerer handlingens arbejdsproces i realtid. Det er ikke muligt at henvise til en anden eksisterende arbejdsproces i realtid. |
Tilføj input- og outputargumenter
Handlinger understøtter input- og outputargumenter, der kan føjes til arbejdsprocessen ved hjælp af en DynamicActivityProperty-type. Når du tilføjer disse argumenter til en handlingsarbejdsproces, bliver de til egenskaber i den meddelelsesanmodning og de svarklasser, der er knyttet til denne handling. Følgende eksempel viser f.eks. C# og XAML-koden for to input-parametre og et outputargument.
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>
Navnene på egenskaberne skal være i overensstemmelse med argumentnavne, da generering af kode definerer disse navne som egenskaber for anmodning eller et svar.
I følgende tabel vises understøttede argumenttyper til input- og outputargumenter.
.NET type |
Argumenttype |
---|---|
System.Int32 |
Integer |
System.String |
String |
EntityReference |
|
Entity |
|
EntityCollection |
|
System.DateTime |
DateTime |
System.Double |
Float |
System.Decimal |
Decimal |
Money |
|
System.Boolean |
Boolean |
Picklist |
Understøttede argumentattributter vises i tabellen nedenfor.
Argumentattribut |
Beskrivelse |
---|---|
Angiver, om argumentet er påkrævet. |
|
Angiver, om argumentets retning er en input eller output. |
|
Angiver en beskrivelse af argumentet. |
|
Bruges, hvis du vil sende i et objekt. |
|
Denne attribut er automatisk genereret eller tilføjet. Den peger på det primære objekt, som arbejdsprocessen er kørt for. Denne attribut er valgfri for globale handlinger. |
Pakke en handling til distribution
For at distribuere din handling, så den kan importeres til en Microsoft Dynamics 365-organisation, skal du tilføje din handling til en Dynamics 365-løsning. Dette gøres nemt ved hjælp af webprogrammet ved at gå til Indstillinger> Tilpasninger > Løsninger. Du kan også skrive kode for at oprette en løsning. Du kan få flere oplysninger om løsninger på siden Pakke- og distributionsudvidelser ved hjælp af løsninger.
Opret typer af tidligt bundet til en handling
Ved hjælp af værktøjet CrmSvcUtil, der er angivet i SDK-pakken, kan du generere anmodnings- og svarklasser for handlingen, der skal medtages i programkoden. Men før du genererer disse klasser, skal du aktivere handlingen.
Hent SDK-pakken til Microsoft Dynamics CRM.
Følgende eksempel viser formatet for at køre værktøjet fra kommandolinjen til en lokal installation af Dynamics 365. Du kan angive parameterværdierne for installationen.
CrmSvcUtil.exe /url:http://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions
Følgende eksempel viser formatet for at køre værktøjet fra kommandolinjen med Microsoft Dynamics 365 (online). Du kan angive de parameterværdier, der er relevante for dit firma og din server.
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
Bemærk brugen af parameteren /generateActions.Flere oplysninger:Opret klasser for tidligt bundne objekter med værktøjet til oprettelse af kode (CrmSvcUtil.exe).
Du kan bruge tidligt bundne eller sent bundne typer med de genererede anmodnings- og svarklasser for handlingen.
Udføre en handling ved hjælp af Web-API'en
En ny handling oprettes i Web-API'en, når den oprettes. Hvis handlingen oprettes i forbindelse med et objekt, er den bundet til det pågældende objekt. Ellers er den en ubundet handling.Flere oplysninger:Brug Web API-handlinger.
Udføre en handling ved hjælp af organisationstjenesten
Hvis du vil udføre en handling ved hjælp af webtjenesten i organisationen ved hjælp af administreret kode, skal du følge disse trin.
Du kan medtage tidligt bundne filtyper, som du har oprettet ved hjælp af værktøjet CrmSvcUtil i dit programs projekt.
Opret handlingens anmodning i programkoden, og udfyld de påkrævede egenskaber.
Hvis du aktiverer Execute, overføres din anmodning som et argument.
Kontrollér, at handlingen er aktiveret, før du kører programkoden. Ellers får du en kørselsfejl.
Udføre en handling ved hjælp af en JavaScript-webressource
En handling kan udføres ved hjælp af Web-API'en ligesom en systemhandling.Flere oplysninger:Brug Web API-handlinger.
Eksempelbiblioteket Sdk.Soap.js demonstrerer, hvordan meddelelser kan bruges sammen med JavaScript -ressourcer og organisationstjenesten(organization.svc/web). Brug medfølgende eksempel Sdk.Soap.js handlingsmeddelelsesgenerator til at generere JavaScript-biblioteker, der kan bruges sammen med Sdk.Soap.js på samme måde, som du kan bruge biblioteker til systemmeddelelser i dette eksempel. De filer, der genereres ved hjælp af Sdk.Soap.js-handlingsmeddelelsesgeneratoren, er separate JavaScript-biblioteker for hver handling. Hvert bibliotek indeholder en anmodnings- og svarklasse, der svarer til de klasser, der er genereret af CrmSvcUtil.
Udfør en handling ved hjælp af en proces
Du kan udføre en handling fra arbejdsprocesser, dialogbokse eller andre handlinger til behandling. Aktiverede brugerdefinerede handlinger er tilgængelig for processer ved at vælge Udfør handling-elementet i rullelisten Tilføj trin i formularen til webprogramprocessen. Når trinnet er føjet til processen, kan du vælge den nye brugerdefinerede handling (eller andre handlinger) i listen Handling, der er angivet i trinnet. Vælg Angiv egenskaber i trinnet for at angive alle inputparametre, der kræver den brugerdefinerede handling.
Bemærk
Hvis en brugerdefineret handling har ikke-understøttede parametertyper, for eksempel Valgliste, Objekt eller Objektsamling, findes den brugerdefinerede handling ikke i listen Handling.
Muligheden for at udføre en handling fra en proces blev introduceret med Opdatering 1 til Microsoft Dynamics CRM Online 2015.
Den eksisterende Depth-platform kontrollerer, at der ikke opstår en uendelig løkke. Du kan finde flere oplysninger om dybdebegrænsninger under MaxDepth.
Hold øje med handlinger, der kører i lang tid
Hvis et trin i handlingens arbejdsproces i realtid er en brugerdefineret arbejdsprocesaktivitet, udføres den brugerdefinerede arbejdsprocesaktivitet inden i den isolerede sandkasse i kørselsmiljøet og er underlagt to minutters timeout-grænsen, hvilket er lig med, hvordan sandkasse plug-ins administreres. Der er dog ingen begrænsninger på mængden af den samlede tid, som selve handlingen kan tage. Hvis en handling deltager i en transaktion, hvor tilbageførslen er aktiveret, gælder desuden SQL Server-timeouts.
Tip
En bedste praksis-anbefaling er, at lange kørende processer skal udføres uden for Microsoft Dynamics 365 ved hjælp af asynkrone .NET eller baggrundsprocesser.
Se også
Oprette arbejdsprocesser i realtid
Bruge dialoger i Dynamics 365 til guidede processer
Pipeline for hændelseskørsel
Automatisere forretningsprocesser ved hjælp af Dynamics 365-proces
TechNet: Tilpasse systemet
Microsoft Dynamics 365
© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret