private void btnTranslate_Click(object sender, System.EventArgs e)
{
// This is just an example program to demnstrate how to translate an EDI 856 file
// in C# using the Framework EDI component
ediDocument oEdiDoc = null;
ediSchemas oSchemas = null;
ediDataSegment oSegment = null;
string sSegmentID;
string sLoopSection;
int nArea;
string sValue;
string sHlEntity = "";
string sNm1Entity = "";
string sQlfr = "";
Cursor = Cursors.WaitCursor;
string sPath = AppDomain.CurrentDomain.BaseDirectory;
string sEdiFile = "856_4010.X12";
string sSefFile = "856_X12-4010.SEF";
//CREATES EDIDOC OBJECT
ediDocument.Set(ref oEdiDoc, new ediDocument());
//THIS MAKES CERTAIN THAT FREDI ONLY USES THE SEF FILE PROVIDED, AND THAT IT DOES
//NOT USE ITS BUILT-IN STANDARD REFERENCE TABLE TO TRANSLATE THE EDI FILE.
ediSchemas.Set(ref oSchemas,(ediSchemas) oEdiDoc.GetSchemas()); //oSchemas = (ediSchemas) oEdiDoc.GetSchemas();
oSchemas.EnableStandardReference = false;
//THIS OPTIONS STOPS FREDI FROM KEEPING ALL THE SEGMENTS IN MEMORY. IMPROVES PERFORMANCE
oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardOnly;
//LOADS THE SEF FILE
oEdiDoc.ImportSchema(sPath + sSefFile, 0);
//LOADS THE EDI FILE
oEdiDoc.LoadEdi(sPath + sEdiFile);
//GETS THE FIRST DATA SEGMENT
ediDataSegment.Set(ref oSegment, (ediDataSegment) oEdiDoc.FirstDataSegment); //oSegment = (ediDataSegment) oEdiDoc.FirstDataSegment
//LOOP THAT WILL TRAVERSE THRU EDI FILE FROM TOP TO BOTTOM
while ( oSegment != null )
{
//DATA SEGMENTS ARE IDENTIFIED BY THEIR ID, THE LOOP SECTION AND AREA
//(OR TABLE) NUMBER THAT THEY ARE IN.
sSegmentID = oSegment.ID;
sLoopSection = oSegment.LoopSection;
nArea = oSegment.Area;
if (nArea == 0)
{
if (sLoopSection == "")
{
if (sSegmentID == "ISA")
{
sValue = oSegment.get_DataElementValue(1,0); //Authorization Information Qualifier
sValue = oSegment.get_DataElementValue(2,0); //Authorization Information
sValue = oSegment.get_DataElementValue(3,0); //Security Information Qualifier
sValue = oSegment.get_DataElementValue(4,0); //Security Information
sValue = oSegment.get_DataElementValue(5,0); //Interchange ID Qualifier
sValue = oSegment.get_DataElementValue(6,0); //Interchange Sender ID
sValue = oSegment.get_DataElementValue(7,0); //Interchange ID Qualifier
sValue = oSegment.get_DataElementValue(8,0); //Interchange Receiver ID
sValue = oSegment.get_DataElementValue(9,0); //Interchange Date
sValue = oSegment.get_DataElementValue(10,0); //Interchange Time
sValue = oSegment.get_DataElementValue(11,0); //Interchange Control Standards Identifier
sValue = oSegment.get_DataElementValue(12,0); //Interchange Control Version Number
listBox1.Items.Add(oSegment.get_DataElement(13).Description + " = " + oSegment.get_DataElementValue(13,0)); //Interchange Control Number
sValue = oSegment.get_DataElementValue(14,0); //Acknowledgment Requested
sValue = oSegment.get_DataElementValue(15,0); //Usage Indicator
sValue = oSegment.get_DataElementValue(16,0); //Component Element Separator
}
else if (sSegmentID == "GS")
{
sValue = oSegment.get_DataElementValue(1,0); //Functional Identifier Code
sValue = oSegment.get_DataElementValue(2,0); //Application Sender's Code
sValue = oSegment.get_DataElementValue(3,0); //Application Receiver's Code
sValue = oSegment.get_DataElementValue(4,0); //Date
sValue = oSegment.get_DataElementValue(5,0); //Time
listBox1.Items.Add(oSegment.get_DataElement(6).Description + " = " + oSegment.get_DataElementValue(6,0)); //Group Control Number
sValue = oSegment.get_DataElementValue(7,0); //Responsible Agency Code
sValue = oSegment.get_DataElementValue(8,0); //Version / Release / Industry Identifier Code
} //sSegmentID
} //sLoopSection
}
else if (nArea == 1)
{
if (sLoopSection == "")
{
if (sSegmentID == "ST")
{
sValue = oSegment.get_DataElementValue(1,0); //Transaction Set Identifier Code
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " = " + oSegment.get_DataElementValue(2,0));; //Transaction Set Control Number
}
else if (sSegmentID == "BSN")
{
sValue = oSegment.get_DataElementValue(1,0); //Transaction Set Purpose Code
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " = " + oSegment.get_DataElementValue(2,0));; //Shipment Identification
sValue = oSegment.get_DataElementValue(3,0); //Date
sValue = oSegment.get_DataElementValue(4,0); //Time
sValue = oSegment.get_DataElementValue(5,0); //Hierarchical Structure Code
} //sSegmentID
} //sLoopSection
}
else if (nArea == 2)
{
if (sLoopSection == "HL")
{
if (sSegmentID == "HL")
{
sHlEntity = oSegment.get_DataElementValue(3,0); //In most cases the loop qualifier is the first element of the first segment in the loop, but not necessarily
}
if (sHlEntity == "S") //SHIPMENT
{
if (sSegmentID == "HL")
{
sValue = oSegment.get_DataElementValue(1,0); //Hierarchical ID Number
sValue = oSegment.get_DataElementValue(2,0); //Hierarchical Parent ID Number
sValue = oSegment.get_DataElementValue(3,0); //Hierarchical Level Code
sValue = oSegment.get_DataElementValue(4,0); //Hierarchical Child Code
}
else if (sSegmentID == "TD1")
{
listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,0)); //Packaging Code
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " = " + oSegment.get_DataElementValue(2,0)); //Lading Quantity
sValue = oSegment.get_DataElementValue(3,0); //Commodity Code Qualifier
sValue = oSegment.get_DataElementValue(4,0); //Commodity Code
sValue = oSegment.get_DataElementValue(5,0); //Lading Description
sValue = oSegment.get_DataElementValue(6,0); //Weight Qualifier
sValue = oSegment.get_DataElementValue(7,0); //Weight
sValue = oSegment.get_DataElementValue(8,0); //Unit or Basis for Measurement Code
}
else if (sSegmentID == "TD5")
{
sValue = oSegment.get_DataElementValue(1,0); //Routing Sequence Code
sValue = oSegment.get_DataElementValue(2,0); //Identification Code Qualifier
sValue = oSegment.get_DataElementValue(3,0); //Identification Code
sValue = oSegment.get_DataElementValue(4,0); //Transportation Method/Type Code
sValue = oSegment.get_DataElementValue(5,0); //Routing
}
else if (sSegmentID == "TD3")
{
sValue = oSegment.get_DataElementValue(1,0); //Equipment Description Code
sValue = oSegment.get_DataElementValue(2,0); //Equipment Initial
sValue = oSegment.get_DataElementValue(3,0); //Equipment Number
}
else if (sSegmentID == "REF")
{
sValue = oSegment.get_DataElementValue(1,0); //Reference Identification Qualifier
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " = " + oSegment.get_DataElementValue(2,0)); //Reference Identification
}
else if (sSegmentID == "DTM")
{
sQlfr = oSegment.get_DataElementValue(1,0); //Date/Time Qualifier
if (sQlfr == "011") //shipped date
{
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " = " + oSegment.get_DataElementValue(2,0)); //Date
}
else if (sQlfr == "017") //estimated delivery date
{
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " = " + oSegment.get_DataElementValue(2,0)); //Date
}
} //Segment ID
}
else if (sLoopSection == "HL;N1")
{
if (sSegmentID == "N1")
{
sNm1Entity = oSegment.get_DataElementValue(1,0);
}
if (sNm1Entity == "BT") //BILL-TO
{
if (sSegmentID == "N1")
{
sValue = oSegment.get_DataElementValue(1,0); //Entity Identifier Code
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " Bill-To = " + oSegment.get_DataElementValue(2,0)); //Name
sValue = oSegment.get_DataElementValue(3,0); //Identification Code Qualifier
sValue = oSegment.get_DataElementValue(4,0); //Identification Code
}
else if (sSegmentID == "N3")
{
sValue = oSegment.get_DataElementValue(1,0); //Address Information
}
else if (sSegmentID == "N4")
{
sValue = oSegment.get_DataElementValue(1,0); //City Name
sValue = oSegment.get_DataElementValue(2,0); //State or Province Code
sValue = oSegment.get_DataElementValue(3,0); //Postal Code
} //sSegmentID
}
else if (sNm1Entity == "ST") //SHIP-TO
{
if (sSegmentID == "N1")
{
sValue = oSegment.get_DataElementValue(1,0); //Entity Identifier Code
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " Ship-To = " + oSegment.get_DataElementValue(2,0)); //Name
sValue = oSegment.get_DataElementValue(3,0); //Identification Code Qualifier
sValue = oSegment.get_DataElementValue(4,0); //Identification Code
}
else if (sSegmentID == "N3")
{
sValue = oSegment.get_DataElementValue(1,0); //Address Information
}
else if (sSegmentID == "N4")
{
sValue = oSegment.get_DataElementValue(1,0); //City Name
sValue = oSegment.get_DataElementValue(2,0); //State or Province Code
sValue = oSegment.get_DataElementValue(3,0); //Postal Code
} //sSegmentID
} //sNm1Entity
}//shipment
else if (sHlEntity == "O") //ORDER
{
if (sSegmentID == "HL")
{
sValue = oSegment.get_DataElementValue(1,0); //Hierarchical ID Number
sValue = oSegment.get_DataElementValue(2,0); //Hierarchical Parent ID Number
sValue = oSegment.get_DataElementValue(3,0); //Hierarchical Level Code
sValue = oSegment.get_DataElementValue(4,0); //Hierarchical Child Code
}
else if (sSegmentID == "PRF")
{
listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,0));
sValue = oSegment.get_DataElementValue(2,0);
sValue = oSegment.get_DataElementValue(3,0);
sValue = oSegment.get_DataElementValue(4,0);
}
else if (sSegmentID == "REF")
{
sValue = oSegment.get_DataElementValue(1,0); //Reference Identification Qualifier
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " = " + oSegment.get_DataElementValue(2,0)); //Reference Identification
}
else if (sSegmentID == "FOB")
{
sValue = oSegment.get_DataElementValue(1,0);
sValue = oSegment.get_DataElementValue(2,0);
}
}//order
else if (sHlEntity == "I") //ITEMS
{
if (sSegmentID == "HL")
{
sValue = oSegment.get_DataElementValue(1,0); //Hierarchical ID Number
sValue = oSegment.get_DataElementValue(2,0); //Hierarchical Parent ID Number
sValue = oSegment.get_DataElementValue(3,0); //Hierarchical Level Code
sValue = oSegment.get_DataElementValue(4,0); //Hierarchical Child Code
}
else if (sSegmentID == "LIN")
{
listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,0));
sValue = oSegment.get_DataElementValue(2,0);
listBox1.Items.Add(oSegment.get_DataElement(3).Description + " = " + oSegment.get_DataElementValue(3,0));
}
else if (sSegmentID == "SN1")
{
sValue = oSegment.get_DataElementValue(1,0);
listBox1.Items.Add(oSegment.get_DataElement(2).Description + " = " + oSegment.get_DataElementValue(2,0));
sValue = oSegment.get_DataElementValue(3,0);
sValue = oSegment.get_DataElementValue(4,0);
listBox1.Items.Add(oSegment.get_DataElement(5).Description + " = " + oSegment.get_DataElementValue(5,0));
sValue = oSegment.get_DataElementValue(6,0);
sValue = oSegment.get_DataElementValue(7,0);
sValue = oSegment.get_DataElementValue(8,0);
}
else if (sSegmentID == "PRF")
{
sValue = oSegment.get_DataElementValue(1,0);
sValue = oSegment.get_DataElementValue(2,0);
sValue = oSegment.get_DataElementValue(3,0);
sValue = oSegment.get_DataElementValue(4,0);
}
else if (sSegmentID == "PID")
{
sValue = oSegment.get_DataElementValue(1,0);
sValue = oSegment.get_DataElementValue(2,0);
sValue = oSegment.get_DataElementValue(3,0);
sValue = oSegment.get_DataElementValue(4,0);
listBox1.Items.Add(oSegment.get_DataElement(5).Description + " = " + oSegment.get_DataElementValue(5,0));
} //sSegmentID
} //items
} //sLoopSection
}
else if (nArea == 3)
{
if (sLoopSection == "")
{
if (sSegmentID == "CTT")
{
sValue = oSegment.get_DataElementValue(1,0); //Number of Line Items
} //sSegmentID
} //sLoopSection
} //nArea
//GETS THE NEXT DATA SEGMENT
ediDataSegment.Set(ref oSegment, (ediDataSegment) oSegment.Next()); //oSegment = (ediDataSegment) oSegment.Next();
} //while
Cursor = Cursors.Default;
MessageBox.Show("Done");
}