private void button1_Click(object sender, System.EventArgs e)
        {
            //This is just an example program to show how to generate an EDI X12 130 Student Educational Record (Transcript)
            //in C# with the Framework EDI component

            ediDocument oEdiDoc = null;
            ediSchema oSchema = null;
            ediSchemas oSchemas = null;
            ediInterchange oInterchange = null;
            ediGroup oGroup = null;
            ediTransactionSet oTransactionset = null;
            ediDataSegment oSegment = null;
            
            string sEdiFile = "130Outbound.x12";
            string sSefFile = "130_4010.SEF";
            string sPath = AppDomain.CurrentDomain.BaseDirectory;
 
            Cursor = Cursors.WaitCursor;

            //CREATES EDI DOCUMENT 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 GENERATE THE EDI FILE.
            ediSchemas.Set(ref oSchemas,(ediSchemas) oEdiDoc.GetSchemas());
            oSchemas.EnableStandardReference = false;
 
            //ENABLES FORWARD WRITE, AND INCREASES BUFFER I/O TO IMPROVE PERFORMANCE
            oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardWrite;
            oEdiDoc.set_Property(DocumentPropertyIDConstants.Property_DocumentBufferIO, 2000);
 
            //SET TERMINATORS
            oEdiDoc.SegmentTerminator = "~{13:10}";
            oEdiDoc.ElementTerminator = "*";
            oEdiDoc.CompositeTerminator = "!";
 
            //LOADS THE SEF FILE
            ediSchema.Set(ref oSchema, (ediSchema) oEdiDoc.LoadSchema(sPath + sSefFile, 0));
 
            //CREATES THE ISA SEGMENT
            ediInterchange.Set(ref oInterchange, (ediInterchange) oEdiDoc.CreateInterchange("X","004010"));
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oInterchange.GetDataSegmentHeader());
            oSegment.set_DataElementValue(1,0,"00");     //Authorization Information Qualifier
            oSegment.set_DataElementValue(2,0,"          ");     //Authorization Information
            oSegment.set_DataElementValue(3,0,"00");     //Security Information Qualifier
            oSegment.set_DataElementValue(4,0,"          ");     //Security Information
            oSegment.set_DataElementValue(5,0,"ZZ");     //Interchange ID Qualifier
            oSegment.set_DataElementValue(6,0,"SENDER ID      ");     //Interchange Sender ID
            oSegment.set_DataElementValue(7,0,"ZZ");     //Interchange ID Qualifier
            oSegment.set_DataElementValue(8,0,"RECEIVER ID    ");     //Interchange Receiver ID
            oSegment.set_DataElementValue(9,0,"061206");     //Interchange Date
            oSegment.set_DataElementValue(10,0,"0101");     //Interchange Time
            oSegment.set_DataElementValue(11,0,"U");     //Interchange Control Standards Identifier
            oSegment.set_DataElementValue(12,0,"00401");     //Interchange Control Version Number
            oSegment.set_DataElementValue(13,0,"000000001");     //Interchange Control Number
            oSegment.set_DataElementValue(14,0,"0");     //Acknowledgment Requested
            oSegment.set_DataElementValue(15,0,"T");     //Usage Indicator
            oSegment.set_DataElementValue(16,0,"!");     //Component Element Separator
 
            //CREATES THE GS SEGMENT
            ediGroup.Set(ref oGroup, (ediGroup) oInterchange.CreateGroup("004010"));
            ediDataSegment.Set( ref oSegment, (ediDataSegment) oGroup.GetDataSegmentHeader());
            oSegment.set_DataElementValue(1,0,"ED");     //Functional Identifier Code
            oSegment.set_DataElementValue(2,0,"APP SENDER");     //Application Sender's Code
            oSegment.set_DataElementValue(3,0,"APP RECEIVER");     //Application Receiver's Code
            oSegment.set_DataElementValue(4,0,"01010101");     //Date
            oSegment.set_DataElementValue(5,0,"01010101");     //Time
            oSegment.set_DataElementValue(6,0,"1");     //Group Control Number
            oSegment.set_DataElementValue(7,0,"X");     //Responsible Agency Code
            oSegment.set_DataElementValue(8,0,"004010");     //Version / Release / Industry Identifier Code
 
            //CREATES THE ST SEGMENT
            ediTransactionSet.Set(ref oTransactionset, (ediTransactionSet) oGroup.CreateTransactionSet("130"));
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.GetDataSegmentHeader());
            oSegment.set_DataElementValue(1,0,"130");     //Transaction Set Identifier Code
            oSegment.set_DataElementValue(2,0,"0001");     //Transaction Set Control Number
 
            //BGN - BEGINNING SEGMENT
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("BGN"));
            oSegment.set_DataElementValue(1,0,"00");     //Transaction Set Purpose Code
            oSegment.set_DataElementValue(2,0,"1234567");     //Reference Identification
            oSegment.set_DataElementValue(3,0,"20050503");     //Date
            oSegment.set_DataElementValue(4,0,"103020");     //Time
            oSegment.set_DataElementValue(5,0,"ET");     //Time Code
 
            //ERP - EDUCATIONAL RECORD PURPOSE
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("ERP"));
            oSegment.set_DataElementValue(1,0,"PS");     //Transaction Type Code
            oSegment.set_DataElementValue(2,0,"INF");     //Status Reason Code
 
            //REF - REFERENCE IDENTIFICATION
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("REF"));
            oSegment.set_DataElementValue(1,0,"SY");     //Reference Identification Qualifier
            oSegment.set_DataElementValue(2,0,"12345679");     //Reference Identification
 
            //N1 - NAME
            //create N1 segment in N1 loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("N1\\N1"));
            oSegment.set_DataElementValue(1,0,"AS");     //Postsecondary Education Sender Entity Identifier Code
            oSegment.set_DataElementValue(2,0,"UNIVERSITY SENDER");     //Name
 
            //N3 - ADDRESS INFORMATION
            //create N3 segment in N1 loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("N1\\N3"));
            oSegment.set_DataElementValue(1,0,"123 SENDER AVENUE");     //Address Information
 
            //N4 - GEOGRAPHIC LOCATION
            //create N4 segment in N1 loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("N1\\N4"));
            oSegment.set_DataElementValue(1,0,"LOS ANGELES");     //City Name
 
            //N1 - NAME
            //create N1 segment in the second instance of the N1 loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("N1(2)\\N1"));
            oSegment.set_DataElementValue(1,0,"AT");     //Postsecondary Education Receiver Entity Identifier Code
            oSegment.set_DataElementValue(2,0,"COLLEGE RECEIVER");     //Name
 
            //N3 - ADDRESS INFORMATION
            //create N3 segment in the second instance of the N1 loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("N1(2)\\N3"));
            oSegment.set_DataElementValue(1,0,"456 RECEIVER ST");     //Address Information
 
            //N4 - GEOGRAPHIC LOCATION
            //create N4 segment in the second instance of the N1 loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("N1(2)\\N4"));
            oSegment.set_DataElementValue(1,0,"NEW YORK");     //City Name
 
            //IN1 - INDIVIDUAL IDENTIFICATION
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("IN1\\IN1"));
            oSegment.set_DataElementValue(1,0,"1");     //Entity Type Qualifier
            oSegment.set_DataElementValue(2,0,"04");     //Name Type Code
 
            //IN2 - INDIVIDUAL NAME STRUCTURE COMPONENTS
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("IN1\\IN2"));
            oSegment.set_DataElementValue(1,0,"05");     //Name Component Qualifier
            oSegment.set_DataElementValue(2,0,"SMITH");     //Name
 
            //IN2 - INDIVIDUAL NAME STRUCTURE COMPONENTS
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("IN1\\IN2(2)"));
            oSegment.set_DataElementValue(1,0,"02");     //Name Component Qualifier
            oSegment.set_DataElementValue(2,0,"MARY");     //Name
 
            //IN2 - INDIVIDUAL NAME STRUCTURE COMPONENTS
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("IN1\\IN2(3)"));
            oSegment.set_DataElementValue(1,0,"15");     //Name Component Qualifier
            oSegment.set_DataElementValue(2,0,"J");     //Name
 
            //SST - STUDENT ACADEMIC STATUS
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("SST\\SST"));
            oSegment.set_DataElementValue(1,0,"B18");     //Status Reason Code
            oSegment.set_DataElementValue(2,0,"D8");     //Date Time Period Format Qualifier
            oSegment.set_DataElementValue(3,0,"19871215");     //Date Time Period
 
            //N1 - NAME
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("SST\\N1"));
            oSegment.set_DataElementValue(1,0,"HS");     //Entity Identifier Code
            oSegment.set_DataElementValue(2,0,"ST MARY'S HIGH SCHOOL");     //Name
 
            //N4 - GEOGRAPHIC LOCATION
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("SST\\N4"));
            oSegment.set_DataElementValue(1,0,"CARSON");     //City Name
            oSegment.set_DataElementValue(2,0,"CA");     //State or Province Code
 
            for (int nAtvLoop = 1; nAtvLoop <= 2; nAtvLoop++)    //number of activities
            {
                //ATV - STUDENT ACTIVITIES AND AWARDS
                ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("ATV\\ATV"));
                oSegment.set_DataElementValue(3,0,"ATHLETE OF THE YEAR 1985");     //Entity Title
 
                //DTP - DATE OR TIME OR PERIOD
                ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("ATV\\DTP"));
                oSegment.set_DataElementValue(1,0,"103");     //Date/Time Qualifier
                oSegment.set_DataElementValue(2,0,"D8");     //Date Time Period Format Qualifier
                oSegment.set_DataElementValue(3,0,"19871130");     //Date Time Period
            }
  
            for (int nTstLoop = 1; nTstLoop <=3; nTstLoop++)    //number of tests
            {
                //TST - TEST SCORE RECORD
                ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("TST\\TST"));
                oSegment.set_DataElementValue(1,0,"CPE");     //Educational Test or Requirement Code
                oSegment.set_DataElementValue(2,0,"CERTIFIED PRIMARY EDU");     //Name
                oSegment.set_DataElementValue(3,0,"D8");     //Date Time Period Format Qualifier
                oSegment.set_DataElementValue(4,0,"19791128");     //Date Time Period
                oSegment.set_DataElementValue(7,0,"07");     //Level of Individual, Test, or Course Code
 
                //SBT - SUBTEST
                ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("TST\\SBT\\SBT"));
                oSegment.set_DataElementValue(1,0,"TOTAL");     //Subtest Code
 
                //SRE - TEST SCORES
                ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("TST\\SBT\\SRE"));
                oSegment.set_DataElementValue(1,0,"3");     //Test Score Qualifier Code
                oSegment.set_DataElementValue(2,0,"ABA");     //Description
            }

            //LX - ASSIGNED NUMBER
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\LX"));
            oSegment.set_DataElementValue(1,0,"123456");     //Assigned Number
 
            //HS - HEALTH SCREENING
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\HS"));
            oSegment.set_DataElementValue(1,0,"IDIDID");     //Health Screening Type Code
            oSegment.set_DataElementValue(2,0,"CC");     //Date Time Period Format Qualifier
            oSegment.set_DataElementValue(3,0,"A1B2C3D4E5");     //Date Time Period
            oSegment.set_DataElementValue(4,0,"001");     //Status Reason Code
 
            //IMM - IMMUNIZATION STATUS CODE
            //create first instance of IMM segment in LX loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\IMM"));
            oSegment.set_DataElementValue(1,0,"FLU");     //Immunization Type Code
            oSegment.set_DataElementValue(2,0,"D8");     //Date Time Period Format Qualifier
            oSegment.set_DataElementValue(3,0,"19871128");     //Date Time Period
            oSegment.set_DataElementValue(4,0,"1");     //Immunization Status Code
 
            //IMM - IMMUNIZATION STATUS CODE
            //create second instance of IMM segment in LX loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\IMM(2)"));
            oSegment.set_DataElementValue(1,0,"TETANU");     //Immunization Type Code
            oSegment.set_DataElementValue(2,0,"D8");     //Date Time Period Format Qualifier
            oSegment.set_DataElementValue(3,0,"19700219");     //Date Time Period
            oSegment.set_DataElementValue(4,0,"1");     //Immunization Status Code
 
            //IMM - IMMUNIZATION STATUS CODE
            //create third instance of IMM segment in LX loop
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\IMM(3)"));
            oSegment.set_DataElementValue(1,0,"MUMPS");     //Immunization Type Code
            oSegment.set_DataElementValue(2,0,"D8");     //Date Time Period Format Qualifier
            oSegment.set_DataElementValue(3,0,"19750504");     //Date Time Period
            oSegment.set_DataElementValue(4,0,"1");     //Immunization Status Code
 
            for (int nSesLoop = 1; nSesLoop >= 2; nSesLoop++)    //number of sessions
            {
                //SES - ACADEMIC SESSION HEADER
                //create SES segment in SES loop nested in LX loop
                ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\SES\\SES"));
                oSegment.set_DataElementValue(1,0,"20010407");     //Date Time Period
                oSegment.set_DataElementValue(4,0,"4");     //Session Code
                oSegment.set_DataElementValue(5,0,"SPRING QUARTER 2001");     //Name
                oSegment.set_DataElementValue(6,0,"D8");     //Date Time Period Format Qualifier
                oSegment.set_DataElementValue(7,0,"20010407");     //Date Time Period
                oSegment.set_DataElementValue(8,0,"D8");     //Date Time Period Format Qualifier
                oSegment.set_DataElementValue(9,0,"20010630");     //Date Time Period
                oSegment.set_DataElementValue(10,0,"21");     //Level of Individual, Test, or Course Code
                oSegment.set_DataElementValue(14,0,"B35");     //Status Reason Code

                //SSE - ENTRY AND EXIT INFORMATION
                //create SSE segment in SES loop nested in LX loop
                ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\SES\\SSE"));
                oSegment.set_DataElementValue(14,0,"20051231");      //Date

                for (int nCrsLoop = 1; nCrsLoop >= 2; nCrsLoop++)    //number of courses in a session
                {
                    //CRS - COURSE RECORD
                    //create CRS segment in CRS loop nested in SES loop nested in LX loop
                    ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\SES\\CRS\\CRS"));
                    oSegment.set_DataElementValue(1,0,"R");     //Basis for Academic Credit Code
                    oSegment.set_DataElementValue(2,0,"U");     //Academic Credit Type Code
                    oSegment.set_DataElementValue(5,0,"GRD");     //Academic Grade Qualifier
                    oSegment.set_DataElementValue(6,0,"AB");     //Academic Grade
                    oSegment.set_DataElementValue(8,0,"U");     //Academic Grade or Course Level Code
                    oSegment.set_DataElementValue(12,0,"12");     //Quantity
                    oSegment.set_DataElementValue(14,0,"BEGIN MATH");     //Name
                    oSegment.set_DataElementValue(15,0,"MAT101");     //Reference Identification
                    oSegment.set_DataElementValue(16,0,"MATH");     //Name

                    //create NTE segment in CRS loop nested in SES loop nested in LX loop
                    ediDataSegment.Set(ref oSegment, (ediDataSegment) oTransactionset.CreateDataSegment("LX\\SES\\CRS\\NTE"));
                    oSegment.set_DataElementValue(2,0,"INSTRUCTOR      JOE");     //Basis for Academic Credit Code

                }
            }
 
            //TRAILING SEGMENTS ARE AUTOMATICALLY CREATED WHEN FREDI COMMITS (SAVES)
            //THE EDI DOCUMENT OBJECT INTO AN EDI FILE.
            oEdiDoc.Save(sPath + sEdiFile);

            Cursor = Cursors.Default;
 
            //DESTROYS OBJECTS
            oSegment.Dispose();
            oTransactionset.Dispose();
            oGroup.Dispose();
            oInterchange.Dispose();
            oSchema.Dispose();
            oSchemas.Dispose();
            oEdiDoc.Dispose();

            MessageBox.Show("Done. Output = " + sPath + sEdiFile);
        
        }
    

    Click here to download a trial version of the Framework EDI