사용자 고유의 작업 만들기
게시 날짜: 2017년 1월
적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
작업으로 알려진 사용자 지정 메시지를 만들어 Microsoft Dynamics 365의 기능을 확장할 수 있습니다. 이러한 작업은 요청/응답 클래스와 연결되며 웹 API 작업이 생성됩니다. 작업은 일반적으로 새 도메인 특유 기능을 조직 웹 서비스에 추가하거나 여러 조직 웹 서비스 메시지 요청을 하나의 요청에 결합하는 데 사용됩니다. 예를 들어 지원 콜센터에서 Create, Assign 및 Setstate 메시지를 새로운 단일 Escalate 메시지에 결합하려고 합니다.
작업의 비즈니스 논리는 워크플로를 사용하여 구현됩니다. 작업을 만들 때 연결된 실시간 워크플로는 실행 파이프라인의 스테이지 30(핵심 작업)에서 실행하도록 자동으로 등록됩니다. 실시간 워크플로에 대한 자세한 내용은 Dynamics 365 프로세스 범주를 참조하십시오.
작업은 Microsoft Dynamics 365(온라인 및 온-프레미스)에서 모두 지원되지만, 코드(XAML 사용)에서 작업 생성은 온-프레미스 및 IFD 배치에 의해서만 지원합니다. 온라인 고객은 웹 응용 프로그램에서 대화형으로 작업을 만들어야 합니다.
이 항목의 내용
작업 정의 정보
필요한 권한
코드를 사용하여 작업 만들기
배포할 작업 패키지
작업에 대한 초기 바인딩 유형 생성
웹 API를 사용하여 작업 실행
조직 서비스를 사용하여 작업 실행
프로세스를 사용하여 작업 실행
장시간 실행 작업 감시
작업 정의 정보
작업은 실시간 워크플로와 비슷한 Workflow 엔터티 레코드를 사용하여 정의됩니다. 작업에 대한 정의와 작동 방식에 대한 몇 가지 주요 사항은 다음 목록에 있습니다.
단일 엔터티에 연결되거나 전역(특정 엔터티에 연결되지 않음)일 수 있습니다.
이벤트 실행 파이프라인의 핵심 작업 스테이지 30에서 실행됩니다.
이벤트 실행 파이프라인의 사전 작업 및 사후 작업 스테이지에서 등록된 플러그 인의 호출을 지원합니다.
작업 상태가 활성화됨인 경우에만 사전 작업 또는 사후 작업 스테이지에서 등록된 플러그 인을 사용할 수 있습니다.
organization.svc 및 organization.svc/ 웹 끝점을 통해 사용할 수 있지만 organizationdata.svc(OData) 끝점은 사용할 수 없습니다.
JavaScript 웹 리소스를 사용하여 실행할 수 있습니다.추가 정보:JavaScript 웹 리소스를 사용하여 작업 실행
항상 호출하는 사용자의 보안 컨텍스트에서 실행됩니다.
작업에 등록된 플러그 인 단계가 있는 동안에는 레코드를 삭제할 수 없습니다.
구성 설정을 통해 필요에 따라 현재 데이터베이스 트랜잭션에 참여할 수 있습니다.
사용자, 사업부 또는 조직으로 실행이 제한되는 범위를 지원하지 않습니다. 작업은 항상 조직 범위에서 실행됩니다.
입력 및 출력 인수를 지원합니다.
데이터 변경 내용 감사를 지원합니다.
오프라인 클라이언트에서 지원되지 않습니다.
웹 서비스 메서드 호출로 호출할 수 있습니다.
워크플로에서 직접 호출할 수 있습니다.
필요한 권한
작업이 실행될 수 있도록 작업의 실시간 워크플로를 활성화하는 데 필요한 실시간 프로세스 활성화(prvActivateSynchronousWorkflow)라는 보안 권한이 필요합니다. 뿐만 아니라 워크플로를 만드는 데 필요한 모든 권한입니다. 이러한 권한에 대한 자세한 내용은 보안 역할의의 권한 UI 매핑을 참조하십시오.
코드를 사용하여 작업 만들기
일반적으로 작업은 웹 응용 프로그램의 대화형 워크플로 디자이너를 사용하여 사용자 지정자에 의해 구현됩니다. 하지만 개발자가 SDK 호출을 사용하여 구현하고 필요에 따라 온-프레미스 또는 IFD 서버에 배포할 수 있습니다.
작업에 사용되는 워크플로 엔터티 특성은 다음 표에 설명되어 있습니다. 실시간 워크플로의 샘플 코드는 코드에 실시간 워크플로 만들기 항목에서 찾을 수 있습니다.
워크플로 특성 |
설명 |
---|---|
Category |
WorkflowCategory.CustomOperation로 설정합니다. |
SyncWorkflowLogOnError |
true이면 오류가 ProcessSession 레코드에 기록됩니다. 비동기 워크플로와 달리 실시간 워크플로 실행은 System Job 레코드에 기록되지 않습니다. |
Mode |
사용되지 않습니다. |
IsTransacted |
작업이 데이터베이스 트랜잭션에 참여하면 true로 설정되고, 그렇지 않으 false로 설정됩니다. 기본값은 true입니다. |
UniqueName |
작업에 대한 고유 이름입니다. 이름은 게시자 접두사 + "_" + 고유 이름으로 구성됩니다. |
Xaml |
작업의 실시간 워크플로를 정의하는 XAML 코드로 설정합니다. 다른 기존 실시간 워크플로를 참조하는 방법은 없습니다. |
입력 및 출력 인수 추가
작업은 DynamicActivityProperty 유형을 사용하여 워크플로에 추가할 수 있는 입력 및 출력 인수를 지원합니다. 이러한 인수를 작업의 워크플로에 추가하면 해당 작업에 연결된 메시지 요청 및 응답 클래스의 속성이 됩니다. 예를 들어, 다음 예제에서는 입력 인수 두 개와 출력 인수가 1개인 C# 및 XAML 코드를 보여 줍니다.
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>
코드 생성이 이러한 이름을 요청 또는 응답 속성으로 정의하므로 속성에 사용되는 이름은 인수 이름과 일치해야 합니다.
입력 및 출력 인수에 대해 지원되는 인수 유형이 다음 표에 표시됩니다.
.NET Type |
인수 종류 |
---|---|
System.Int32 |
Integer |
System.String |
String |
EntityReference |
|
Entity |
|
EntityCollection |
|
System.DateTime |
DateTime |
System.Double |
Float |
System.Decimal |
Decimal |
Money |
|
System.Boolean |
Boolean |
Picklist |
다음 표에 지원되는 인수 특성이 나와 있습니다.
인수 특성 |
설명 |
---|---|
인수가 필요한지 여부를 나타냅니다. |
|
인수의 방향이 입력인지 아니면 출력인지 나타냅니다. |
|
인수에 대한 설명을 지정합니다. |
|
엔터티에 전달할 경우 사용됩니다. |
|
이 특성은 자동으로 생성되거나 추가됩니다. 워크플로가 실행되는 기본 엔터티를 가리킵니다. 이 특성은 전역 작업에는 선택 사항입니다. |
배포할 작업 패키지
Microsoft Dynamics 365 조직에 가져올 수 있도록 작업을 배포하려면 작업을 Dynamics 365 솔루션에 추가합니다.설정 > 사용자 지정 > 솔루션으로 이동하여 웹 응용 프로그램을 사용하면 쉽게 수행됩니다. 솔루션을 만드는 코드를 작성할 수도 있습니다. 솔루션에 대한 자세한 내용은 솔루션을 사용하여 확장 패키지 및 배포를 참조하십시오.
작업에 대한 초기 바인딩 유형 생성
SDK 패키지에 제공된 CrmSvcUtil 도구를 사용하면 응용 프로그램 코드에 포함할 작업에 대한 요청 및 응답 클래스를 생성할 수 있습니다. 그러나 이러한 클래스를 생성하기 전에 작업을 활성화해야 합니다.
Microsoft Dynamics CRM SDK 패키지를 다운로드합니다.
다음 샘플은 Dynamics 365 의 온-프레미스 설치에 대해 명령줄에서 도구를 실행하는 형식을 보여 줍니다. 설치를 위한 매개 변수 값을 제공합니다.
CrmSvcUtil.exe /url:http://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions
다음 샘플은 Microsoft Dynamics 365(온라인)을 사용하여 명령줄에서 도구를 실행하는 형식을 보여 줍니다. 계정 및 서버에 적합한 매개 변수 값을 제공합니다.
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
/generateActions 매개 변수를 사용합니다.추가 정보:코드 생성 도구(CrmSvcUtil.exe)를 사용하여 초기 바인딩 엔터티 클래스 만들기.
작업에 대해 생성된 요청 및 응답 클래스로 초기 바인딩 또는 후기 바인딩 유형을 사용할 수 있습니다.
웹 API를 사용하여 작업 실행
새 작업은 만들 때 웹 API에서 만들어집니다. 작업이 엔터티의 컨텍스트에서 만들어진 경우 해당 엔터티에 바인딩됩니다. 그렇지 않으면 바인딩되지 않은 작업입니다.추가 정보:웹 API 작업 사용.
조직 서비스를 사용하여 작업 실행
관리 코드를 사용하여 조직의 웹 서비스를 사용하여 작업을 실행하려면 다음 단계를 수행합니다.
응용 프로그램 프로젝트에서 CrmSvcUtil 도구를 사용하여 생성되는 초기 바인딩 유형의 파일을 포함합니다.
응용 프로그램 코드에서 작업의 요청을 인스턴스화하고 모든 필수 속성을 채웁니다.
요청을 인수로 전달하여 Execute를 호출합니다.
응용 프로그램 코드를 실행하기 전에 작업이 활성화되어 있는지 확인합니다. 그렇지 않으면 런타임 오류가 나타납니다.
JavaScript 웹 리소스를 사용하여 작업 실행
시스템 작업과 마찬가지로 웹 API를 사용하여 작업을 실행할 수 있습니다.추가 정보:웹 API 작업 사용.
Sdk.Soap.js 샘플 라이브러리는 메시지를 JavaScript 웹 리소스 및 조직 서비스(organization.svc/web)에서 사용할 수 있는 방법을 보여 줍니다. 안내서 Sdk.Soap.js Action Message Generator 샘플을 사용하여 샘플에 제공된 시스템 메시지의 라이브러리를 사용할 수 있는 것과 같은 방식으로 Sdk.Soap.js에 사용할 수 있는 JavaScript 라이브러리를 생성합니다.Sdk.Soap.js Action Message Generator를 사용하여 생성된 파일은 각 작업에 대해 별도의 JavaScript 라이브러리입니다. 각 라이브러리에는 CrmSvcUtil에서 생성된 클래스에 해당하는 요청 및 응답 클래스를 포함합니다.
프로세스를 사용하여 작업 실행
워크플로, 대화 상자 또는 기타 프로세스 작업에서 작업을 실행할 수 있습니다. 웹 응용 프로그램 프로세스 양식의 단계 추가 드롭다운에서 작업 수행 항목을 선택하여 활성화된 사용자 지정 작업을 프로세스에 사용할 수 있습니다. 프로세스에 단계를 추가한 후에 단계에서 제공되는 작업 목록에서 새로운 사용자 지정 항목(또는 작업)을 선택할 수 있습니다. 단계에서 속성 설정을 선택하여 사용자 지정 작업이 필요로 하는 입력 매개 변수를 지정합니다.
참고
사용자 지정 작업에 지원되지 않는 매개 변수 유형(예: 선택 목록, 엔터티 또는 엔터티 컬렉션)이 있는 경우 작업 목록에 사용자 지정 작업이 나열되지 않습니다.
프로세서에서 작업을 실행하는 기능은 Microsoft Dynamics CRM Online 2015 업데이트 1에서 도입되었습니다.
기존 Depth 플랫폼은 무한 루프가 발생하지 않는지 확인합니다. 깊이에 대한 자세한 내용은 MaxDepth를 참조하십시오.
장시간 실행 작업 감시
작업 실시간 워크플로의 단계 중 하나가 사용자 지정 워크플로 활동인 경우 사용자 지정 워크플로 활동은 격리된 샌드박스 런타임 환경 내에서 실행되고 샌드박스 플러그 인이 관리되는 방법과 비슷하게 2분 시간 제한이 적용됩니다. 하지만 작업 자체를 수행하는 데 소요되는 시간 제한은 없습니다. 또한 작업이 트랜잭션에 참여할 경우 롤백이 활성화되어 있으면 SQL Server 시간 제한이 적용됩니다.
팁
권장되는 최상의 방법은 장시간 실행 작업의 경우 .NET 비동기 백그라운드 프로세스를 사용하여 Microsoft Dynamics 365 외부에서 실행하는 것입니다.
참고 항목
실시간 워크플로 만들기
Dynamics 365에서 안내 프로세스에 대화 상자 사용
이벤트 실행 파이프라인
Dynamics 365 프로세스를 사용하여 비즈니스 프로세스를 자동화
TechNet: 시스템 사용자 지정
Microsoft Dynamics 365
© 2017 Microsoft. All rights reserved. 저작권 정보