다음을 통해 공유


EDI 어셈블러 작동 방식

BizTalk Server EDI 송신 파이프라인(Microsoft.BizTalk.DefaultPipelines.EDISendPipeline)에서 전송할 EDI로 인코딩된 교환의 대부분의 처리를 수행합니다. 이 파이프라인에는 다음 처리를 수행하는 EDI 어셈블러 파이프라인 구성 요소가 포함됩니다.

  • EDI 교환을 직렬화하며 XML로 인코딩된 메시지를 교환에서 EDI 트랜잭션 집합으로 변환합니다.

  • EDI 스키마 유효성 검사, (필요한 경우) X12로 인코딩된 메시지에 대한 상호 필드 유효성 검사, EDI 구조 유효성 검사 및 (EDI 이외의 데이터 유형을 가진 노드를 사용하여 스키마가 사용자 지정된 경우) 확장 스키마 유효성 검사를 수행합니다.

  • EDI 메시지에 봉투(Envelope)를 적용합니다.

  • EDI 메시지에 대한 응답으로 수신된 기술 및 기능 인증을 처리하고, 구성된 경우 인증의 일괄 처리를 취소합니다.

보내는 EDI 메시지에 봉투(Envelope) 적용

EDI 송신 파이프라인은 중간 XML 파일로부터 보내는 EDI 메시지를 작성할 때 수신 쪽 계약에 대해 설정된 EDI 속성을 기반으로 교환 및 그룹 헤더를 포함하는 봉투(Envelope)를 메시지에 적용합니다. 송신 파이프라인이 송신 포트로부터 수신 계약을 확인할 수 없었다면 폴백 계약을 사용하여 봉투(Envelope)를 적용합니다.

EdiOverride.OverrideEdiHeader context 속성이 true로 설정된 경우 EDI 송신 파이프라인은 EdiOverride 속성 컬렉션에 지정된 값을 사용하여 봉투를 생성합니다. 컬렉션에 값이 없는 경우 계약 속성의 해당 EDI 값이 사용됩니다. 값이 EdiOverride 컬렉션에도 없고 계약 속성에도 존재하지 않으면 폴백 EDI 계약의 속성이 사용됩니다.

중간 XML 파일에 예약 태그 또는 ReuseEnvelope 컨텍스트 속성이 있는 경우 메시지는 보존된 일괄 처리이며 봉투(Envelope) 응용 프로그램 논리가 적용되지 않습니다.

X12 봉투(Envelope) 값에 대한 소스

다음 표에는 EDI 송신 파이프라인이 X12 봉투(Envelope)의 각 부분에 필요한 정보를 가져오는 위치가 나와 있습니다.

헤더 원본
교환 컨트롤 헤더(ISA) - EdiOverride 컨텍스트 속성(가 true인 경우 EdiOverride.OverrideEdiHeader ).
- 규약이 정의되면 규약 속성 대화 상자의 단방향 규약 속성에 있는 교환 설정 섹션 아래의 다른 페이지의 ISA 세그먼트 정의입니다.
- 규약이 정의되지 않은 경우 EDIFACT 대체 설정 대화 상자의 교환 설정 섹션 아래에 있는 다른 페이지의 ISA 세그먼트 정의입니다.
기능 그룹 헤더(GS) - EdiOverride 컨텍스트 속성(이 true인 경우 EdiOverride.OverrideEdiHeader )
- 규약이 정의되면 규약 속성 대화 상자의 단방향 규약 속성에 있는 봉투 페이지(트랜잭션 집합 설정 섹션 아래)의 GS 세그먼트 정의
- 규약이 정의되지 않은 경우 X12 대체 설정 대화 상자의 봉투 페이지(트랜잭션 집합 설정 섹션 아래)의 GS 세그먼트 정의

계약이 정의된 경우 GS 데이터 요소의 값은 트랜잭션 집합 식별자(ST1), 버전 및 대상 네임스페이스의 조합을 기반으로 결정됩니다. 이러한 값은 규약 속성(규약이 정의된 경우) 또는 대체 규약 속성(규약이 정의되지 않은 경우)의 봉투 페이지( 트랜잭션 집합 설정 섹션 아래)의 표와 비교됩니다.

- 일치하는 행이 있는 경우 일치하는 행에 포함된 값이 GS 헤더에 사용됩니다.
- 일치하는 항목이 없지만 기본 행이 정의된 경우 GS01을 제외한 모든 GS 데이터 요소가 기본 행에서 채워집니다. GS01은 ST1의 값에 기반하여 동적으로 결정됩니다.
- 일치하는 행이 없고 기본 행이 없으면 메시지가 일시 중단됩니다. 참고: 그룹이 다른 그룹에서 고유하도록 하려면 이러한 값이 모두 다른 그룹의 값과 같을 수 있는 것은 아닙니다.

계약이 정의되지 않은 경우 GS 데이터 요소는 폴백 계약 속성으로부터 채워집니다.

EDIFACT 봉투(Envelope) 값에 대한 소스

다음 표에는 EDI 송신 파이프라인이 EDIFACT 봉투(Envelope)의 각 부분에 필요한 정보를 가져오는 위치가 나와 있습니다.

헤더 원본
서비스 문자열 도움말(UNA) - EdiOverride 컨텍스트 속성(가 true인 경우 EdiOverride.OverrideEdiHeader ).
- 규약이 정의되면 UNA 세그먼트 정의는 규약 속성 대화 상자의 단방향 규약 속성에 있는 Charset 및 Separators 페이지의 정의를 구분합니다.
- 규약이 정의되지 않은 경우 EDIFACT 대체 설정 대화 상자의 문자 집합 및 구분 기호 페이지에서 UNA 세그먼트 정의가 표시됩니다.
교환 컨트롤 헤더(UNB) - EdiOverride 컨텍스트 속성(가 true인 경우 EdiOverride.OverrideEdiHeader ).
- 규약이 정의된 경우 규약 속성 대화 상자의 단방향 규약 속성에 있는 교환 설정 섹션 아래의 서로 다른 페이지의 UNB 세그먼트 정의입니다.
- 규약이 정의되지 않은 경우 EDIFACT 대체 설정 대화 상자의 교환 설정 섹션에 있는 다른 페이지의 UNB 세그먼트 정의입니다.
기능 그룹 헤더(UNG) - EdiOverride 컨텍스트 속성(가 true인 경우 EdiOverride.OverrideEdiHeader ).
- 규약이 정의된 경우 규약 속성 대화 상자의 단방향 규약 속성에 있는 봉투 페이지(트랜잭션 집합 설정 섹션 아래)의 UNG 및 UNH 세그먼트 정의
- 규약이 정의되지 않은 경우 EDIFACT 대체 설정 대화 상자의 규약 속성 대화 상자의 단방향 규약 속성에 있는 봉투 페이지(트랜잭션 집합 설정 섹션 아래)의 UNG 및 UNH 세그먼트 정의

계약이 정의된 경우 UNG 데이터 요소의 값은 메시지 유형(UNH2.1), 메시지 릴리스 번호(UNH2.3), 할당 코드(UNH2.5), 버전 및 대상 네임스페이스의 조합을 기반으로 결정됩니다. 참고: 그룹이 다른 그룹에서 고유하도록 하려면 이러한 값이 모두 다른 그룹의 값과 같을 수 있는 것은 아닙니다.

트랜잭션 집합 헤더 및 트레일러 세그먼트 적용

보내는 EDI 교환으로 직렬화될 XML 트랜잭션 집합에는 트랜잭션 집합 헤더와 트레일러가 있어야 합니다. 그러나 트랜잭션 집합 헤더 또는 트레일러가 없는 경우 EDI 어셈블러가 메시지를 처리합니다. X12 및 EDIFACT 스키마에서 트랜잭션 집합 헤더 및 트레일러 세그먼트는 XML 트랜잭션 집합의 선택 사항입니다. 트랜잭션에 헤더나 트레일러가 없는 경우 EDISend 또는 AS2EDISend 송신 파이프라인의 EDI 어셈블러는 트랜잭션 집합 헤더와 트레일러 값을 추가합니다. 이러한 값은 매핑 또는 계산을 기반으로 하며, EDI 어셈블러는 교환 XML(보존된 일괄 처리), 일괄 처리 트랜잭션 집합 XML, 트랜잭션 집합 XML에 대해 이 작업을 수행합니다.

매핑으로 인해 유효성 오류가 발생할 경우 XML 트랜잭션 집합 또는 교환 XML은 올바르지 않은 길이나 데이터 유형, 또는 올바르지 않은 제어 에이전시 코드 등의 해당 오류와 함께 이벤트 뷰어에서 일시 중단됩니다.

X12 트랜잭션 집합 헤더 및 트레일러 세그먼트

헤더 및 트레일러 세그먼트가 없는 X12로 인코딩된 트랜잭션 집합의 경우 EDI 어셈블러가 ST 및 SE 세그먼트를 다음에 설정합니다.

헤더/바닥글 세그먼트
ST01(트랜잭션 집합 식별자 코드) 들어오는 XML 트랜잭션 집합으로부터 RootNode 이름의 마지막 3자에 매핑됩니다. 예를 들면, "X12_00401_855"에서 "855"입니다. TS 식별자 코드 837P, 837D 또는 837I를 가진 HIPAA 청구의 경우 "837"이 사용됩니다.
ST02(트랜잭션 집합 제어 번호) 규약 속성 대화 상자의 단방향 규약 탭의 로컬 호스트 설정 페이지(교환 설정 아래)에 있는 ST02(트랜잭션 집합 컨트롤 번호) 값에 매핑된 값 EdiOverride.ST02 (true인 경우EdiOveride.OverrideEdiHeader)입니다.

새 ID 적용 속성의 설정에 관계없이 새 컨트롤 번호 또는 증가된 컨트롤 번호가 적용됩니다.
ST03(버전 식별자) 들어오는 XML 트랜잭션 집합에서 ST03의 값에 매핑됩니다. 예를 들면, 5010 HIPAA 820 문서에 대해서는 “005010X218”입니다(급여 공제). ST03은 트랜잭션 집합의 유효성을 확인하는 데 사용된 스키마에 대해 유효성이 검사됩니다. 참고: ST03은 835를 제외한 모든 HIPAA 버전 5010 트랜잭션에 필수입니다.
SE01(포함 세그먼트 수) ST 및 SE 세그먼트를 비롯하여 트랜잭션 집합의 총 세그먼트 수로 설정합니다.
SE02(트랜잭션 집합 제어 번호) 트랜잭션 집합에서 ST02의 값으로 매핑됩니다.

트랜잭션 집합 헤더의 다른 데이터 요소(예: ST03)는 선택 사항이므로 생성되는 세그먼트에 값이 없습니다.

EDIFACT 트랜잭션 집합 헤더 및 트레일러 세그먼트

헤더 및 트레일러 세그먼트가 없는 EDIFACT로 인코딩된 트랜잭션 집합의 경우 EDI 어셈블러가 UNH 및 UNT 세그먼트를 다음에 설정합니다.

헤더/바닥글 세그먼트
UNH01(메시지 참조 제어 번호) 규약 속성 대화 상자의 EdiOverride.UNH1 단방향 규약 탭의 로컬 호스트 설정 페이지(교환 설정 아래)에 있는 값(true인 경우 EdiOverride.OverrideEdiHeader)이거나 UNH1(참조 번호) 값에 매핑됩니다. 새 ID 적용 속성의 설정에 관계없이 새 컨트롤 번호 또는 증가된 컨트롤 번호가 적용됩니다.
UNH2.1(메시지 유형) 들어오는 XML 트랜잭션 집합으로부터 RootNode 이름의 마지막 6자에 매핑됩니다. 예를 들면, "EFACT_D96A_INVOIC"에서 "INVOIC"입니다.
UNH2.2(메시지 버전 번호) 들어오는 XML 트랜잭션 집합으로부터 RootNode 이름의 7번째 문자에 매핑됩니다. 예를 들면, "EFACT_D96A_INVOIC"에서 "D"입니다.
UNH2.3(메시지 릴리스 번호) 들어오는 XML 트랜잭션 집합으로부터 RootNode 이름의 8~10번째 문자에 매핑됩니다. 예를 들면, "EFACT_D96A_INVOIC"에서 "96A"입니다.
UNH2.4(제어 에이전시 코드) 언제나 문자열 ‘UN’에 매핑됩니다.
UNT01(포함 세그먼트 수) UNH 및 UNT 세그먼트를 비롯하여 트랜잭션 집합의 총 세그먼트 수로 설정합니다.
UNT02(메시지 참조 제어 번호) 규약 속성 대화 상자의 단방향 규약 탭의 로컬 호스트 설정 페이지(교환 설정 아래)에서 UNH1(참조 번호) 값에 매핑됨

UNH 트랜잭션 집합 헤더의 다른 데이터 요소(예: UNH3부터 UNH6)는 선택 사항이므로 생성되는 세그먼트에 값이 없습니다. 이러한 필드가 필요하면 해당 필드를 들어오는 XML 트랜잭션 집합의 값으로 설정해야 합니다.

보내는 메시지의 봉투(Envelope)에 대한 추가 처리

EDI 송신 파이프라인은 보내는 메시지의 봉투(Envelope)에서 다음 처리를 수행합니다.

컨트롤 번호

EDI 송신 파이프라인은 교환 제어 번호, 그룹 제어 번호 및 트랜잭션 집합 제어(또는 참조) 번호를 각각의 보내는 교환의 봉투(Envelope) 세그먼트에 입력합니다. 다음 표에는 이러한 번호가 나와 있습니다.

제어 번호 X12 필드 EDIFACT 필드
교환 컨트롤 번호 ISA13 UNB5
그룹 컨트롤 번호 GS6 UNG5
트랜잭션 집합 제어 번호(X12)

트랜잭션 집합 참조 번호(EDIFACT)
ST2 UNH1

BizTalk Server 규약 속성 대화 상자의 단방향 규약 탭의 로컬 호스트 설정 페이지(교환 설정 아래)에 있는 ISA13(교환 컨트롤 번호) 속성에 입력한 값의 범위에 따라 전송된 다음 교환에 대한 교환 컨트롤 번호를 설정합니다. 최대값에 도달할 때까지 각 후속 교환에 대해 이 번호가 증가합니다.

EdiOverride 컨텍스트 속성을 사용하여 교환 제어 번호를 지정할 경우 지정된 값이 이 교환에 사용되며, 계약에 지정된 교환 제어 번호에는 영향을 주지 않습니다.

참고

EDIFACT 규약 속성의 Envelopes 페이지에서 UNG 세그먼트 적용 속성을 선택한 경우에만 EDIFACT의 그룹 컨트롤 번호가 증가합니다. 두 번째 필드(참조 번호)는 증가되지만 접두사 및 접미사 필드는 증가되지 않습니다. 트랜잭션 집합 컨트롤 번호는 새 ID 적용 속성을 선택한 경우에만 증가합니다.

참고

보존된 일괄 처리 교환에서 메시지 보완 샘플을 사용하여 사용자 지정 교환 제어 번호를 만들 수 있습니다. 자세한 내용은 메시지 보강 샘플(BizTalk Server 샘플)을 참조하세요.

계약이 정의되지 않은 경우 대체 계약의 동일한 페이지에서 번호를 가져옵니다. 송신 파이프라인은 마지막으로 사용된 제어 번호를 저장한 후 그다음 교환, 그룹 및 트랜잭션 집합에 대해 증가된 번호를 입력합니다.

참고

컨트롤 번호가 지정된 범위의 최대값에 도달하면 BizTalk Server 오류를 발생시키고 교환을 일시 중단합니다. X12 및 EDIFACT 메시지 모두에 대한 규약 속성 대화 상자의 로컬 호스트 설정 페이지에서 컨트롤 번호를 수동으로 다시 설정하거나 BizTalk Server 자동으로 하한으로 다시 설정하도록 구성할 수 있습니다.

참고

제어 번호는 BizTalk MessageBox 데이터베이스의 dbo.EdiSequenceNumbers 테이블에 저장됩니다. 필요한 경우 테이블에서 제어 번호를 제거하거나 제어 번호를 보관하여 이 데이터베이스 테이블을 관리해야 합니다.

EDIFACT에서 제어 번호는 영숫자 값으로 구성되며, 다음 형식이 지원됩니다.

  • 숫자(예: "1")

  • PrefixNumbersSuffix(예: "WA1A")

  • PrefixNumbers(예: "AA1")

  • NumbersSuffix(예: "1AA")

    이러한 형식에서 숫자 문자는 "0"에서 "9"까지 가능하고 접두사 및 접미사 문자는 숫자 외의 모든 문자가 될 수 있습니다. 숫자만 최대값에 도달할 때까지 증가됩니다.

세그먼트 수

교환에서 각 트랜잭션 집합의 경우 X12에 대한 SE01 데이터 요소 및 EDIFACT에 대한 UNT01 데이터 요소에 표시된 대로 EDI 송신 파이프라인이 트랜잭션 집합의 세그먼트 수를 확인합니다. 해당 데이터 요소의 값이 실제 수와 일치하지 않으면 송신 파이프라인이 실제 세그먼트 수를 반영하도록 수를 업데이트합니다. 잘못된 수 때문에 트랜잭션 집합이 거부되지 않습니다. 수의 업데이트는 이벤트 뷰어에서 경고로 로깅되며, 이는 보존된 일괄 처리의 수행에 적용되지는 않습니다.

EDI 교환 직렬화의 추가 단계

EDI 송신 파이프라인은 직렬화 중에 다음 단계도 수행합니다.

릴리스 표시기 직렬화

EDIFACT 메시지를 직렬화하는 동안 EDI 송신 파이프라인은 필요한 릴리스 표시기를 EDI 교환에 삽입합니다. 이때 송신 파이프라인으로 라우트되는 중간 XML은 이스케이프된 데이터를 포함하지 않는 것으로 간주됩니다. 예를 들어, 릴리스 표시기가 송신 파이프라인으로 라우트되는 XML 데이터에 있는 경우 송신 파이프라인은 이를 이스케이프하기 위해 기존 릴리스 표시기 전에 다른 릴리스 표시기를 추가합니다.

해당 릴리스 표시기는 EDI 유효성 검사에 포함되지 않습니다. EDI 송신 파이프라인은 길이 제한을 계산할 때 릴리스 표시기를 포함하지 않습니다.

암시적 소수 요구 사항을 충족하기 위해 후행 0 추가

EDI 어셈블러가 소수점 이하 자릿수가 부족한 수를 발견하면 소수점 뒤에 후행 0을 추가하여 암시적 소수 요구 사항을 충족합니다. 예를 들어, 숫자가 N2 형식을 가져야 하는 경우 "4.5"를 발견하면 EDI 어셈블러는 이 숫자를 "4.50"으로 변경합니다.

페이로드 데이터의 구분 기호 바꾸기

아웃바운드 메시지의 데이터에 데이터, 세그먼트 또는 구성 요소 구분 기호로 구성된 문자가 포함된 경우 EDI 송신 파이프라인은 이러한 문자를 바꿀 수 있습니다. 예를 들어, 메시지에 “test*data”라는 값이 포함되어 있고 데이터 요소 구분 기호가 ‘*’로 구성된 경우 수신 시스템에서 구문 분석 오류가 발생할 수 있습니다.

페이로드의 구분 기호 바꾸기를 속성으로 사용하도록 설정하고 대체 문자를 지정하여 이 문자를 바꾸도록 EDI 송신 파이프라인을 구성할 수 있습니다. 이 속성은 규약 속성 대화 상자의 단방향 규약 탭에 있는 문자 집합 및 구분 기호 페이지에 있습니다.

트리거 필드를 기반으로 HIPAA 레코드 변환

아웃바운드 문서가 HIPAA 트랜잭션 집합인 경우 EDI 어셈블러는 트리거 필드가 포함된 고유한 XML 레코드를 일치하는 제네릭 EDI 세그먼트로 변환 합니다(HIPAA 스키마 트리거 필드 주석 참조). 이 작업은 “_” 문자 뒤에 있는 XML 레코드 이름의 접미사를 삭제하여 수행됩니다.

예를 들어 N1_PayerIdentification_TS835W1_1000A 요소<와 <N1_PayeeIdentification_TS835W1_1000B>> 모두 N1 세그먼트가 됩니다.

참고 항목

BizTalk Server에서 EDI 메시지를 보내는 방법