A 액티비티에서 B 액티비티로 데이터 전달하기(Windows WF)

안녕하세요!

오늘은 Windows Workflow Foundation (WF)에서 “어떻게 액티비티 간에 데이터를 전달할 수 있을까?”라는 궁금증에 대한 답을 찾아보려고 합니다.



1. 시작하기 전에: Windows Workflow Foundation (WF) 란?

Windows Workflow Foundation은 일련의 활동(Activities)을 조합하여 복잡한 업무 흐름을 모델링하는 .NET 프레임워크의 일부입니다.

각 액티비티는 작은 단위의 실행 로직을 캡슐화합니다.

이러한 액티비티들은 서로 데이터를 주고받을 필요가 있는데, 그 방법에는 주로 두 가지가 있습니다: ArgumentsVariables.



2. 본론: 데이터 전달의 두 가지 방법

첫째, Arguments 사용하기


둘째, Variables 사용하기



3. 코드로 보는 예시: Activity A와 Activity B 데이터 공유하기

3.1 워크플로우에서 변수 정의하기

Variable<string> sharedData = new Variable<string>("sharedData");


3.2 Activity A에서 변수 값을 설정하기

public sealed class ActivityA : CodeActivity
{
    public OutArgument<string> OutputData { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        string result = "데이터를 보냅니다, Activity A에서!";
        context.SetValue(OutputData, result);
    }
}


3.3 Activity B에서 변수 값을 사용하기

public sealed class ActivityB : CodeActivity
{
    public InArgument<string> InputData { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        string dataFromA = context.GetValue(InputData);
        Console.WriteLine("받은 데이터: " + dataFromA);
    }
}


3.4 워크플로우에서 액티비티 사용하기

var workflow = new Sequence()
{
    Variables = { sharedData },
    Activities = 
    {
        new ActivityA()
        {
            OutputData = sharedData
        },
        new ActivityB()
        {
            InputData = sharedData
        }
    }
};



4. 마무리: 주요 개념 한눈에 보기

Activity (액티비티)

액티비티는 작은 단위의 실행 로직을 캡슐화한 것입니다. 워크플로우에서 수행될 하나의 작업이나 단계를 나타냅니다.


Argument (인수)

액티비티는 데이터를 주고받을 때 인수를 사용합니다. InArgument는 데이터를 입력으로 받고, OutArgument는 데이터를 출력으로 내보냅니다. InOutArgument는 데이터를 입력으로 받아서 수정 후 출력합니다.


Sequence (시퀀스)

시퀀스는 여러 액티비티를 순차적으로 실행할 수 있게 해주는 컨테이너입니다. 액티비티들이 순서대로 실행됩니다.


Workflow (워크플로우)

워크플로우는 액티비티, 변수, 인수 등을 포함하여 하나의 논리적인 업무 흐름을 정의합니다. 워크플로우는 복잡한 업무 로직을 모델링하고 관리하는 도구입니다.


Variables (변수)

워크플로우 내에서 정의된 변수는 해당 스코프 내의 모든 액티비티에서 공유되어 사용될 수 있습니다. 이를 통해 액티비티 간에 데이터를 주고받을 수 있습니다.


이상으로, Windows Workflow Foundation에서 중요한 개념들에 대해 간략히 살펴봤습니다.

이러한 개념들을 잘 활용하면, 복잡한 업무 흐름도 쉽게 구현하고 관리할 수 있을 것입니다.

다음에 또 만나요! 👋






정규표현식으로 시간 절약하기
당신의 하루에 몇 시간을 더하세요
WPF MVVM 패턴, 그리고 Binding
WPF(Windows Presentation Foundation) 시리즈
AWS SAA 준비 - (4) 비용에 최적화된 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (3) 안전한 아키텍처
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (2) 성능이 뛰어난 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
AWS SAA 준비 - (1) 복원력을 갖춘 아키텍처 설계
(정리) Exam Readiness - AWS Solutions Architect Associate
15분 안에 ToC를 구현해보자!
Vanilla JS로 Table of Contents 구현하기
모듈
모던 자바스크립트 Deep Dive | 48장 | 모듈
에러 처리
모던 자바스크립트 Deep Dive | 47장 | 에러 처리
제너레이터와 async/await
모던 자바스크립트 Deep Dive | 46장 | 제너레이터와 async/await
프로미스
모던 자바스크립트 Deep Dive | 45장 | 프로미스
REST API
모던 자바스크립트 Deep Dive | 44장 | REST API
Ajax
모던 자바스크립트 Deep Dive | 43장 | Ajax
비동기 프로그래밍
모던 자바스크립트 Deep Dive | 42장 | 비동기 프로그래밍
타이머
모던 자바스크립트 Deep Dive | 41장 | 타이머
Set과 Map
모던 자바스크립트 Deep Dive | 37장 | Set과 Map
디스트럭처링
모던 자바스크립트 Deep Dive | 36장 | 디스트럭처링
브라우저의 렌더링 과정
모던 자바스크립트 Deep Dive | 38장 | 브라우저의 렌더링 과정
스프레드 문법
모던 자바스크립트 Deep Dive | 35장 | 스프레드 문법
이터러블
모던 자바스크립트 Deep Dive | 34장 | 이터러블
7번째 데이터 타입 Symbol
모던 자바스크립트 Deep Dive | 33장 | 7번째 데이터 타입 Symbol
String
모던 자바스크립트 Deep Dive | 32장 | String
RegExp
모던 자바스크립트 Deep Dive | 31장 | RegExp
Date
모던 자바스크립트 Deep Dive | 30장 | Date
Math
모던 자바스크립트 Deep Dive | 29장 | Math
DOM
모던 자바스크립트 Deep Dive | 39장 | DOM
Number
모던 자바스크립트 Deep Dive | 28장 | Number
배열
모던 자바스크립트 Deep Dive | 27장 | 배열
이벤트
모던 자바스크립트 Deep Dive | 40장 | 이벤트
ES6 함수의 추가 기능
모던 자바스크립트 Deep Dive | 26장 | ES6 함수의 추가 기능
클래스
모던 자바스크립트 Deep Dive | 25장 | 클래스
this
모던 자바스크립트 Deep Dive | 22장 | this
빌트인 객체
모던 자바스크립트 Deep Dive | 21장 | 빌트인 객체
strict mode
모던 자바스크립트 Deep Dive | 20장 | strict mode
클로저
모던 자바스크립트 Deep Dive | 24장 | 클로저
프로토타입
모던 자바스크립트 Deep Dive | 19장 | 프로토타입
함수와 일급 객체
모던 자바스크립트 Deep Dive | 18장 | 함수와 일급 객체
실행 컨텍스트
모던 자바스크립트 Deep Dive | 23장 | 실행 컨텍스트
생성자 함수에 의한 객체 생성
모던 자바스크립트 Deep Dive | 17장 | 생성자 함수에 의한 객체 생성
프로퍼티 어트리뷰트
모던 자바스크립트 Deep Dive | 16장 | 프로퍼티 어트리뷰트
let, const 키워드와 블록 레벨 스코프
모던 자바스크립트 Deep Dive | 15장 | let, const 키워드와 블록 레벨 스코프
전역 변수의 문제점
모던 자바스크립트 Deep Dive | 14장 | 전역 변수의 문제점
스코프
모던 자바스크립트 Deep Dive | 13장 | 스코프
함수
모던 자바스크립트 Deep Dive | 12장 | 함수
원시 값과 객체의 비교
모던 자바스크립트 Deep Dive | 11장 | 원시 값과 객체의 비교
객체 리터럴
모던 자바스크립트 Deep Dive | 10장 | 객체 리터럴
타입 변환과 단축 평가
모던 자바스크립트 Deep Dive | 9장 | 타입 변환과 단축 평가
제어문
모던 자바스크립트 Deep Dive | 8장 | 제어문
연산자
모던 자바스크립트 Deep Dive | 7장 | 연산자
데이터 타입
모던 자바스크립트 Deep Dive | 6장 | 데이터 타입
표현식과 문
모던 자바스크립트 Deep Dive | 5장 | 표현식과 문
변수
모던 자바스크립트 Deep Dive | 4장 | 변수
Iteration와 Generator
코드스피츠 77 ES6+ 3화 참조
WHATWG 탄생 배경
WHATWG, W3C, HTML의 관련에 대한 역사
프론트엔드(FE) 면접 질문 정리
FE관련 면접 질문 및 답변 정리한 내용입니다.
쿠버네티스(kubernetes, k8s) 용어 정리
쿠버네티스(kubernetes, k8s) 용어 정리
젠킨스(Jenkins) 정리
젠킨스(Jenkins) 정리
Docker 용어 정리
Docker 용어 정리
Git 용어 정리
Git 용어 정리
반응형 웹 디자인(Responsive Web Design)
CSS responsive 에 대하여
JS this에 대하여
this에 대해 알아보자
SQL*PLUS에 대하여
SQL*PLUS 정의 및 사용방법
Oracle에서 SQL Plan 확인하기
Oracle에서 SQL Plan을 확인해보자