ediDocument oEdiDoc;
ediSchemas oSchemas = null;
ediDataSegment oSegment = null;
string sSegmentID = "";
string sValue = "";
string sLoopDesc = "";
string sEdiFileName = "";
string sSefFileName = "";
int nArea = 0;
string sPath = AppDomain.CurrentDomain.BaseDirectory;
// Create the top-level application object "ediDocument".
oEdiDoc = new ediDocument();
// This makes certain that Framework EDI only uses the SEF file provided,
// and that it does not use its built-in Standard Reference table to translate
// the EDI document
ediSchemas.Set(ref oSchemas, oEdiDoc.GetSchemas());
oSchemas.EnableStandardReference = false;
// The FORWARD-ONLY cursor increases the performance of processing the EDI
// document (see Technical Note 3 below).
oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardOnly;
sEdiFileName = "999_837_5010X222A1.X12";
sSefFileName = "999_005010X231A1.EVAL0.SEF";
// Specify SEF file to load.
oEdiDoc.LoadSchema(sPath + sSefFileName, SchemaTypeIDConstants.Schema_Standard_Exchange_Format);
// Specify EDI document to read.
oEdiDoc.LoadEdi(sPath + sEdiFileName);
// Gets the first data segment in the EDI document.
ediDataSegment.Set(ref oSegment, oEdiDoc.FirstDataSegment);
// Loop that will traverse through the EDI document from top to bottom. This
// is required for FORWARD-ONLY cursor.
while (oSegment != null)
{
// Data segments are uniquely identified by their segment Identifier (ID).
// The loop section and the area (or table) properties of the data segment
// are read for each iteration of the loop.
sSegmentID = oSegment.ID;
sLoopDesc = oSegment.LoopSection;
nArea = oSegment.Area;
if (nArea == 0)
{
// Data segments that are not designated an area (i.e. area = 0)
// are control segments that are part of the Interchange or
// Functional Group envelopes, and are not part of the Transaction Set.
if (sSegmentID == "TA1")
{
sValue = oSegment.get_DataElementValue(1, 0); // Interchange Control Number
listBox1.Items.Add("Received Interchange Control Number: " + sValue);
sValue = oSegment.get_DataElementValue(2, 0); // Interchange Date
sValue = oSegment.get_DataElementValue(3, 0); // Interchange Time
sValue = oSegment.get_DataElementValue(4, 0); // Interchange Acknowledgment Code
listBox1.Items.Add("Interchange Acknowledgment Code: " + sValue);
sValue = oSegment.get_DataElementValue(5, 0); // Interchange Note Code
}
else if (sSegmentID == "ISA")
{
sValue = oSegment.get_DataElementValue(1, 0); // Authorization Information Qualifier (I01)
sValue = oSegment.get_DataElementValue(2, 0); // Authorization Information (I02)
sValue = oSegment.get_DataElementValue(3, 0); // Security Information Qualifier (I03)
sValue = oSegment.get_DataElementValue(4, 0); // Security Information (I04)
sValue = oSegment.get_DataElementValue(5, 0); // Interchange ID Qualifier (I05)
sValue = oSegment.get_DataElementValue(6, 0); // Interchange Sender ID (I06)
sValue = oSegment.get_DataElementValue(7, 0); // Interchange ID Qualifier (I05)
sValue = oSegment.get_DataElementValue(8, 0); // Interchange Receiver ID (I07)
sValue = oSegment.get_DataElementValue(9, 0); // Interchange Date (I08)
sValue = oSegment.get_DataElementValue(10, 0); // Interchange Time (I09)
sValue = oSegment.get_DataElementValue(11, 0); // Repetition Separator (I65)
sValue = oSegment.get_DataElementValue(12, 0); // Interchange Control Version Number (I11)
listBox1.Items.Add("999 Interchange Control Version Number: " + sValue);
sValue = oSegment.get_DataElementValue(13, 0); // Interchange Control Number (I12)
sValue = oSegment.get_DataElementValue(14, 0); // Acknowledgment Requested (I13)
sValue = oSegment.get_DataElementValue(15, 0); // Usage Indicator (I14)
sValue = oSegment.get_DataElementValue(16, 0); // Component Element Separator (I15)
}
else if (sSegmentID == "IEA")
{
sValue = oSegment.get_DataElementValue(1, 0); // Number of Included Functional Groups (I16)
sValue = oSegment.get_DataElementValue(2, 0); // Interchange Control Number (I12)
}
else if (sSegmentID == "GS")
{
sValue = oSegment.get_DataElementValue(1, 0); // Functional Identifier Code (479)
sValue = oSegment.get_DataElementValue(2, 0); // Application Sender's Code (142)
sValue = oSegment.get_DataElementValue(3, 0); // Application Receiver's Code (124)
sValue = oSegment.get_DataElementValue(4, 0); // Date (373)
sValue = oSegment.get_DataElementValue(5, 0); // Time (337)
sValue = oSegment.get_DataElementValue(6, 0); // Group Control Number (28)
listBox1.Items.Add("999 Group Control Number: " + sValue);
sValue = oSegment.get_DataElementValue(7, 0); // Responsible Agency Code (455)
sValue = oSegment.get_DataElementValue(8, 0); // Version / Release / Industry Identifier Code (480)
}
else if (sSegmentID == "GE")
{
sValue = oSegment.get_DataElementValue(1, 0); // Number of Transaction Sets Included (97)
sValue = oSegment.get_DataElementValue(2, 0); // Group Control Number (28)
} // sSegmentID == "GE"
}
else if (nArea == 1)
{
// Data segments in area 1 are processed here.
if (sLoopDesc == "")
{
if (sSegmentID == "ST") // Transaction Set Header
{
sValue = oSegment.get_DataElementValue(1, 0); // Transaction Set Identifier Code (143)
sValue = oSegment.get_DataElementValue(2, 0); // Transaction Set Control Number (329)
listBox1.Items.Add("999 Transaction Set Control Number: " + sValue);
sValue = oSegment.get_DataElementValue(3, 0); // Implementation Convention Reference (1705)
}
else if (sSegmentID == "AK1") // Functional Group Response Header
{
sValue = oSegment.get_DataElementValue(1, 0); // Functional Identifier Code (479)
sValue = oSegment.get_DataElementValue(2, 0); // Group Control Number (28)
listBox1.Items.Add("Received Group Control Number: " + sValue);
sValue = oSegment.get_DataElementValue(3, 0); // Version / Release / Industry Identifier Code (480)
}
else if (sSegmentID == "AK9") // Functional Group Response Trailer
{
sValue = oSegment.get_DataElementValue(1, 0); // Functional Group Acknowledge Code (715)
listBox1.Items.Add("Functional Group Acknowledge Code: " + sValue);
sValue = oSegment.get_DataElementValue(2, 0); // Number of Transaction Sets Included (97)
sValue = oSegment.get_DataElementValue(3, 0); // Number of Received Transaction Sets (123)
sValue = oSegment.get_DataElementValue(4, 0); // Number of Accepted Transaction Sets (2)
sValue = oSegment.get_DataElementValue(5, 0); // Functional Group Syntax Error Code (716)
sValue = oSegment.get_DataElementValue(6, 0); // Functional Group Syntax Error Code (716)
sValue = oSegment.get_DataElementValue(7, 0); // Functional Group Syntax Error Code (716)
sValue = oSegment.get_DataElementValue(8, 0); // Functional Group Syntax Error Code (716)
sValue = oSegment.get_DataElementValue(9, 0); // Functional Group Syntax Error Code (716)
}
else if (sSegmentID == "SE") // Transaction Set Trailer
{
sValue = oSegment.get_DataElementValue(1, 0); // Number of Included Segments (96)
sValue = oSegment.get_DataElementValue(2, 0); // Transaction Set Control Number (329)
} // sSegmentID == "SE"
}
else if (sLoopDesc == "AK2")
{
if (sSegmentID == "AK2") // Transaction Set Response Header
{
sValue = oSegment.get_DataElementValue(1, 0); // Transaction Set Identifier Code (143)
sValue = oSegment.get_DataElementValue(2, 0); // Transaction Set Control Number (329)
listBox1.Items.Add("Received Transaction Set Control Number: " + sValue);
sValue = oSegment.get_DataElementValue(3, 0); // Implementation Convention Reference (1705)
}
else if (sSegmentID == "IK5") // Implementation Transaction Set Response Trailer
{
sValue = oSegment.get_DataElementValue(1, 0); // Transaction Set Acknowledgment Code (717)
listBox1.Items.Add("Transaction Set Acknowledgment Code: " + sValue);
sValue = oSegment.get_DataElementValue(2, 0); // mplementation Transaction Set Syntax Error Code (618)
sValue = oSegment.get_DataElementValue(3, 0); // mplementation Transaction Set Syntax Error Code (618)
sValue = oSegment.get_DataElementValue(4, 0); // mplementation Transaction Set Syntax Error Code (618)
sValue = oSegment.get_DataElementValue(5, 0); // mplementation Transaction Set Syntax Error Code (618)
sValue = oSegment.get_DataElementValue(6, 0); // mplementation Transaction Set Syntax Error Code (618)
} // sSegmentID == "IK5"
}
else if (sLoopDesc == "AK2;IK3")
{
if (sSegmentID == "IK3") // Implementation Data Segment Note
{
sValue = oSegment.get_DataElementValue(1, 0); // Segment ID Code (721)
sValue = oSegment.get_DataElementValue(2, 0); // Segment Position in Transaction Set (719)
sValue = oSegment.get_DataElementValue(3, 0); // Loop Identifier Code (447)
sValue = oSegment.get_DataElementValue(4, 0); // Track (620)
}
else if (sSegmentID == "CTX") // Context
{
sValue = oSegment.get_DataElementValue(1, 1); // Context Name (9999)
sValue = oSegment.get_DataElementValue(1, 2); // Context Reference (9998)
sValue = oSegment.get_DataElementValue(2, 0); // Segment ID Code (721)
sValue = oSegment.get_DataElementValue(3, 0); // Segment Position in Transaction Set (719)
sValue = oSegment.get_DataElementValue(4, 0); // Loop Identifier Code (447)
sValue = oSegment.get_DataElementValue(5, 1); // Element Position in Segment (722)
sValue = oSegment.get_DataElementValue(5, 2); // Component Data Element Position in Composite (1528)
sValue = oSegment.get_DataElementValue(5, 3); // Repeating Data Element Position (1686)
sValue = oSegment.get_DataElementValue(6, 1); // Data Element Reference Number (725)
sValue = oSegment.get_DataElementValue(6, 2); // Data Element Reference Number (725)
} // sSegmentID == "CTX"
}
else if (sLoopDesc == "AK2;IK3;IK4")
{
if (sSegmentID == "IK4") // Implementation Data Element Note
{
sValue = oSegment.get_DataElementValue(1, 1); // Element Position in Segment (722)
sValue = oSegment.get_DataElementValue(1, 2); // Component Data Element Position in Composite (1528)
sValue = oSegment.get_DataElementValue(1, 3); // Repeating Data Element Position (1686)
sValue = oSegment.get_DataElementValue(2, 0); // Data Element Reference Number (725)
sValue = oSegment.get_DataElementValue(3, 0); // Spot (621)
sValue = oSegment.get_DataElementValue(4, 0); // Copy of Bad Data Element (724)
}
else if (sSegmentID == "CTX") // Context
{
sValue = oSegment.get_DataElementValue(1, 1); // Context Name (9999)
sValue = oSegment.get_DataElementValue(1, 2); // Context Reference (9998)
sValue = oSegment.get_DataElementValue(2, 0); // Segment ID Code (721)
sValue = oSegment.get_DataElementValue(3, 0); // Segment Position in Transaction Set (719)
sValue = oSegment.get_DataElementValue(4, 0); // Loop Identifier Code (447)
sValue = oSegment.get_DataElementValue(5, 1); // Element Position in Segment (722)
sValue = oSegment.get_DataElementValue(5, 2); // Component Data Element Position in Composite (1528)
sValue = oSegment.get_DataElementValue(5, 3); // Repeating Data Element Position (1686)
sValue = oSegment.get_DataElementValue(6, 1); // Data Element Reference Number (725)
sValue = oSegment.get_DataElementValue(6, 2); // Data Element Reference Number (725)
} // sSegmentID == "CTX"
} // sLoopDesc == "AK2;IK3;IK4"
} // nArea == 1
// Get the next data segment in the document.
ediDataSegment.Set(ref oSegment, oSegment.Next());
} // oSegment != null
MessageBox.Show("Done");
oSchemas.Dispose();
oEdiDoc.Dispose();
}