다음을 통해 공유


EDI 디스어셈블러 작동 방법

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

  • 단일 메시지에 있는 여러 교환을 별도 교환으로 분할합니다(수신 위치의 "DetectMID" 파이프라인 속성이 True로 설정되어 있는 경우). EDI 디스어셈블러는 이를 위해 교환 컨트롤 트레일러(IEA 또는 UNZ)를 발견한 후에도 교환 컨트롤 헤더(ISA, UNA 또는 UNB)를 검색합니다.

  • 봉투(Envelope)의 유효성을 검사합니다.

  • 교환을 역어셈블합니다.

  • HIPAA 교환에 대한 트리거 필드 처리.

  • 해당되는 경우 EDI 및 파트너 특정 속성의 유효성을 검사합니다. 여기에는 EDI 스키마 유효성 검사, X12 인코딩된 메시지에 대한 상호 필드 유효성 검사(구성된 경우), EDI 구조 유효성 검사 및 확장된 스키마 유효성 검사(비 EDI 데이터 유형이 있는 노드로 스키마가 사용자 지정된 경우)가 포함됩니다. 자세한 내용은 수신된 EDI 메시지의 유효성 검사를 참조하세요.

  • 규약 속성 대화 상자의 양방향 규약 탭의 유효성 검사 페이지(교환 설정 아래)에서 확인이 사용하도록 설정된 경우 교환, 그룹 및 트랜잭션 집합 컨트롤 번호가 중복되지 않는지 확인합니다. 이전에 받은 교환을 기준으로 교환 컨트롤 번호를 확인합니다. 교환에 있는 다른 그룹 제어 번호에 대한 그룹 제어 번호를 확인합니다. 해당 그룹의 다른 트랜잭션 집합 제어 번호에 대한 트랜잭션 집합 제어 번호를 확인합니다. 중복이 발견되면 상태 보고서는 중복된 레코드가 있다고 표시합니다.

  • 각 트랜잭션 집합에 대한 XML 문서를 생성합니다. 각 XML 파일에서 BTS.MessageType의 컨텍스트 속성을 승격하여 네임스페이스가 있는 스키마 이름으로 설정합니다.

  • 인바운드 일괄 처리 옵션 속성이 두 교환 유지 값 중 하나로 설정된 경우 전체 교환을 XML 변환합니다. 이 속성은 규약 속성 대화 상자의 양방향 규약 탭에 있는 교환 설정 아래의 로컬 호스트 설정 페이지에서 설정할 수 있습니다. 수신 파이프라인은 교환을 유지된 것으로 식별하도록 ReuseEnvelope 속성을 승격합니다.

  • 기술 및/또는 기능 승인을 생성합니다(구성된 경우). 여기에는 승인의 일괄 처리가 포함될 수 있습니다(구성된 경우). BTS의 컨텍스트 속성을 승격합니다. MessageType을 네임스페이스의 컨트롤 스키마 http://schemas.microsoft.com/EDI/{X12 or EDIFACT} 와 동일하게 설정합니다(예: 997 승인의 경우 X12_997_Root). 또한 EDI.DestinationPartyName 컨텍스트 속성을 승격하는데, 이렇게 하면 전송에 사용할 승인이 선택됩니다. 자세한 내용은 EDI 승인 보내기를 참조하세요.

  • 해당되는 경우 HIPAA 276/277(버전 5010에서만), 834, 835(버전 4010에서만) 및 837 문서 분할을 수행합니다.

  • 속성을 메시지 컨텍스트로 승격하거나 메시지 컨텍스트에 씁니다(다음 섹션 참조).

속성을 컨텍스트로 승격하거나 컨텍스트에 쓰기

EDI 디스어셈블러는 수신된 메시지를 처리할 때 다음 속성을 컨텍스트로 승격하거나 메시지 컨텍스트에 씁니다.

  • X12로 인코딩되지 않은 메시지의 경우 는 봉투에서 ISA06, ISA08, ISA15 속성을 승격합니다. GS01, GS02, GS03, GS08; ST03 및 ST01.

    참고

    들어오는 HIPAA 837 교환의 경우 BizTalk Server 클레임-Dental_837D, 클레임 Institutional_837I 및 클레임-Professional_837P 세 개의 HIPAA 837 스키마를 지원합니다. 이들 각각에 대한 ST01은 "837"입니다. 이 세 스키마는 버전 5010의 GS08 값이 다릅니다. 837I의 경우 "005010X223A1", 837D의 경우 "005010X224A1", 837P의 경우 "005010X2222". 스키마에는 버전 4010의 GS08 값이 다릅니다. 837I의 경우 "004010X096A1", 837D의 경우 "004010X097A1", 837P의 경우 "004010X098A1"입니다.

  • EDIFACT로 인코딩되지 않은 메시지의 경우 봉투에서 UNB2.1, UNB2.3, UNB3.1, UNB11의 속성을 승격합니다. UNG1, UNG2.1, UNG3.1; UNH2.1, UNH2.2, UNH2.3.

  • 일괄 처리된 교환을 분할하면 X12 인코딩된 메시지의 경우 ISA_Segment 및 GS_Segment를 컨텍스트에 쓰고, EDIFACT 인코딩된 메시지의 경우 UNA_Segment, UNB_Segment 및 UNG_Segment를 컨텍스트에 씁니다.

    참고

    위 세그먼트는 컨텍스트에 기록됩니다. 컨텍스트로 승격되지 않습니다. 하지만 Message Enrichment 샘플을 사용하면 이러한 세그먼트를 트랜잭션 집합에 추가할 수 있습니다. 샘플을 추가하는 코드를 가져와 사용자 지정 파이프라인 구성 요소에 추가할 수도 있습니다. 자세한 내용은 메시지 보강 샘플(BizTalk Server 샘플)을 참조하세요.

    참고

    ISA_Segment 승격 속성에는 정보 공개로 이어질 수 있는 보안/인증 정보(ISA02 권한 부여 정보 및 ISA04 보안 정보)가 포함되어 있습니다. 컨텍스트 속성의 마스크 보안/권한 부여/암호 정보 속성(양방향 규약 속성의 교환 설정에 대한 로컬 호스트 설정 페이지)을 사용하여 ISA02 및 ISA04 필드의 각 문자를 '#' 문자로 바꿀 수 있습니다. 이는 단방향 프로세스입니다. '#' 문자를 실제 문자로 변환할 수 없습니다.

  • X12 및 EDIFACT 인코딩된 메시지의 경우 ReuseEnvelope를 승격하여 일괄 처리된 교환의 분할 또는 유지 여부를 나타냅니다.

  • 일괄 처리된 교환을 유지하는 경우 다음 속성을 승격합니다.

    • InboundTransportatLocation

    • InboundTransportType

    • ISA05

    • ISA07

    • ISA06

    • ISA08

    • ISA15

    • LastInterchangeMessage = {True|False}

    • MessageType

    • ReceivePortID

    • ReceivePortName

    • ReuseEnvelope

봉투 구문 분석

EDI 수신 파이프라인에서는 헤더 컨트롤 스키마를 사용하여 수신된 EDI 메시지의 봉투(Envelope)를 구문 분석하고 EDI 문서 스키마를 사용하여 교환에 있는 트랜잭션 집합/메시지를 구문 분석합니다.

HTTP/HTTPS 전송을 통해 EDIINT/AS2로 인코딩된 메시지를 받은 경우 EDI 디스어셈블러는 컨텍스트 속성 BTS를 검사합니다. MessageDestination. AS2 처리에서 오류가 발생하고 메시지가 일시 중단됨을 나타내는 해당 속성이 SuspendQueue로 설정된 경우 EDI 디스어셈블러는 통과 파이프라인 구성 요소 역할을 하며 MessageBox에 대한 메시지를 일시 중단합니다.

EDIFACT 교환을 구문 분석하는 동안 EDI 수신 파이프라인은 이스케이프 문자에 사용되는 릴리스 표시기를 제거합니다. 릴리스 표시기는 EDI 유효성 검사에 포함되지 않습니다. EDI 수신 파이프라인은 길이 제한을 계산할 때 릴리스 표시기를 포함하지 않습니다.

문자 집합

X12 교환의 경우 파이프라인 구성 요소 속성은 EDI 디스어셈블러가 교환을 처리할 때 사용할 문자 집합을 결정합니다. 문자 집합에는 기본, 확장 또는 UTF8/유니코드가 있습니다. EDIFAC 교환에 대해서는 기본값이 UTF8이며, UNB1.1 필드에서 문자 집합이 결정됩니다.

동적 구분 기호 검색

BizTalk Server EDI 교환을 받으면 교환의 구분 기호를 나타내는 규약 속성이 없습니다. 대신 EDI 디스어셈블러가 런타임에 구분 기호를 검색합니다(X12 또는 EDIFACT에 대해).

X12 메시지의 경우 EDI 디스어셈블러는 교환 내에서 다음 문자를 사용합니다.

구분 기호 문자
Data Element Separator ISA의 4번째 문자
구성 요소 구분 기호 ISA16
세그먼트 구분 기호 ISA의 106번째 문자
Segment Terminator Suffix ISA 세그먼트와 GS 세그먼트 사이의 문자

값: 없음, CR, LF 또는 CRLF 참고: 구분 기호는 위의 값만 사용할 수 있습니다.
반복 구분 기호 또는 표준 식별자

(양방향 계약 탭의 봉투 페이지에 있는 "ISA11 사용량" 계약 속성에 따라 다름)
ISA11

EDIFACT 교환의 경우 EDI 디스어셈블러는 교환에서 구분 기호를 정의하는 UNA 세그먼트를 확인합니다. 교환에 UNA 세그먼트(선택 사항)가 없으면 디스어셈블러는 파이프라인 구성 요소 속성에 정의된 기본값을 사용합니다.

구분 기호 UNA의 문자
구성 요소 구분 기호 4번째
Data Element Separator 5번째
소수 표기법 6번째
릴리스 문자 7번째
반복 문자 8번째
세그먼트 구분 기호 9번째
세그먼트 구분 기호 접미사 UNA 세그먼트와 UNB 세그먼트 사이의 문자

값: 없음, CR, LF 또는 CRLF 참고: 구분 기호는 위의 값만 사용할 수 있습니다.

UNA 문자열은 선택 사항입니다. 이 문자열이 있으면 파일의 모든 구문 기호가 이 문자열로 정의됩니다. 이 문자열이 없으면 EDI 디스어셈블러는 EfactDelimiters 파이프라인 구성 요소 속성을 사용하여 구분 기호를 결정합니다. 자세한 내용은 EDI 파이프라인 속성 구성을 참조하세요.

오류 게시

EDI 디스어셈블러에 EDI 처리 오류가 발생하면 BizTalk Server 이벤트 뷰어 다음 두 가지 오류를 게시합니다(이러한 게시가 사용하도록 설정된 경우).

  • 메시지를 일시 중단하는 동안 원본 BizTalk Server 기록된 오류입니다. 이는 BizTalk Server 처리와 관련된 필수 오류입니다.

  • 원본 BizTalk Server EDI에 의해 기록된 트랜잭션 집합의 문제를 보고하는 오류입니다. 이 오류는 EDI에만 해당됩니다.

계약 속성 사용

EDI 디스어셈블러는 규약을 식별할 수 있는 경우 계약 속성을 사용합니다( 규약 확인, 스키마 검색 및 받은 EDI 메시지에 대한 권한 부여 참조). 일치하는 규약을 찾을 수 없고 대체 규약에서도 해당 값을 사용할 수 없는 경우 Visual Studio의 속성 창에 설정된 EDI 디스어셈블러 속성이 사용됩니다. 그러나 수신 포트 속성에 인증이 필요한 경우에는 이 대체가 발생하지 않습니다( 인증이 실패할 경우 메시지 삭제 또는 인증 실패 시 메시지 유지 를 선택한 경우). 이 경우에는 계약을 구성해야 합니다. 아니면 교환이 일시 중단됩니다.

EDI 디스어셈블러에서 계약 속성을 사용하는 경우에는 다음 계약 속성을 설정해야 합니다.

속성 계약 속성 페이지
반복 구분 기호 양방향 규약 탭의 봉투 페이지(교환 설정 아래)
EDI 데이터 유형 유효성 검사 수행 양방향 계약 탭의 트랜잭션 집합 설정 아래 유효성 검사 페이지(X12 및 EDIFACT 규약 모두에 대해)
확장 유효성 검사 양방향 계약 탭의 트랜잭션 집합 설정 아래 유효성 검사 페이지(X12 및 EDIFACT 규약 모두에 대해)
선행/후행 0 및 공백 허용 양방향 계약 탭의 트랜잭션 집합 설정 아래 유효성 검사 페이지(X12 및 EDIFACT 규약 모두에 대해)
후행 구분 기호가 허용될 경우 빈 XML 태그 만들기 양방향 계약 탭의 트랜잭션 집합 설정 아래의 로컬 호스트 설정 페이지(X12 및 EDIFACT 규약 모두에 대해)
인바운드 일괄 처리 옵션 양방향 계약 탭의 로컬 호스트 설정 페이지(교환 설정 아래)(X12 및 EDIFACT 규약 모두에 대해)
기본 EDIFACT 구분 기호 -
보안/인증/암호 정보 마스크 양방향 계약 탭의 로컬 호스트 설정 페이지(교환 설정 아래)(X12 및 EDIFACT 규약 모두에 대해)
10진수 형식 Nn을 밑수 10 숫자 값으로 변환 양방향 계약 탭의 트랜잭션 집합 설정 아래의 로컬 호스트 설정 페이지(X12 계약의 경우)
요청-응답 수신 포트에서 송신 파이프라인에 대한 ACK 라우팅 양방향 계약 탭의 교환 설정 아래의 로컬 호스트 설정 페이지(수신기 설정 섹션) (X12 및 EDIFACT 계약 모두에 대해)
X12 문자 집합 X12 교환 봉투 생성 참고: 이 설정은 규약 속성에 대해 입력된 값의 유효성을 검사하는 데만 사용됩니다. 런타임 처리에 사용되는 X12 문자 집합은 파이프라인 속성에서 선택됩니다. 자세한 내용은 EDI 문자 집합을 참조하세요.

HIPAA 트리거 필드 사용

EDI 세그먼트에는 세그먼트의 의미를 수정하는 한정자 값이 포함되는 경우가 있습니다. 예를 들어 N1 세그먼트에 "BT" 한정 요소를 포함하여 "청구지 이름"을 나타내거나 한정 요소 "ST"를 포함하여 "운송지 이름"을 나타낼 수 있습니다. 일반적으로 이러한 필드를 해석하는 방법을 결정하는 것은 비즈니스 논리에 남아 있으며 디스어셈블러는 N1 세그먼트의 모든 인스턴스를 동일한 XML 레코드 이름으로 확인합니다. 그러나 BizTalk Server 함께 제공되는 HIPAA 스키마에는 EDI 디스어셈블러가 적격 값의 존재 여부에 따라 고유한 XML 레코드를 만들 수 있는 주석이 포함되어 있습니다(HIPAA 스키마 트리거 필드 주석 참조).

EDI 디스어셈블러는 HIPAA 트랜잭션 집합을 받을 때 트리거 필드를 포함하는 세그먼트를 발견하면 트리거 정보를 사용하여 세그먼트 및 트리거 조합에 맞는 XML 레코드를 생성합니다.

다음 표는 N1 세그먼트가 N101 값을 기반으로 XML 레코드로 변환되는 방식을 보여 줍니다.

N1 세그먼트 결과 XML 데이터
N1*PR*Contoso*XV*0000000~ <ns0:TS835W1_1000A_Loop> <N1_PayerIdentification_TS835W1_1000A> <N101__EntityIdentifierCode>PR</N101__EntityIdentifierCode> <N102__PayerName>Contoso</N102__PayerName> <N103__IdentificationCodeQualifier>XV</N103__IdentificationCodeQualifier> <N104__PayerIdentifier>0000000</N104__PayerIdentifier> </N1_PayerIdentification_TS835W1_1000A>
N1*PE*Fabrikam*FI*9999999~ <TS835W1_1000B_Loop> <N1_PayeeIdentification_TS835W1_1000B> <N101__EntityIdentifierCode>PE</N101__EntityIdentifierCode> <N102__PayeeName>Fabrikam</N102__PayeeName> <N103__IdentificationCodeQualifier>FI</N103__IdentificationCodeQualifier> <N104__PayeeIdentificationCode>9999999</N104__PayeeIdentificationCode> </N1_PayeeIdentification_TS835W1_1000B>

참고 항목

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