Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click Dim oEdiDoc As ediDocument Dim oSchema As ediSchema Dim oSchemas As ediSchemas Dim oInterchange As ediInterchange Dim oMessage As ediTransactionSet Dim oSegment As ediDataSegment Dim sEdiFileName As String Dim sSefFileName As String Dim sSql As String = "" Dim sAppPath As String = 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 generate ' the EDI document oSchemas = oEdiDoc.GetSchemas oSchemas.EnableStandardReference = False ' The FORWARD-WRITE cursor increases the performance of processing the EDI ' document (see Technical Note 3 below). oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardWrite oEdiDoc.Property(DocumentPropertyIDConstants.Property_DocumentBufferIO) = 200 ' Terminators have to be specified. oEdiDoc.SegmentTerminator = "'{13:10}" oEdiDoc.ElementTerminator = "+" oEdiDoc.CompositeTerminator = ":" oEdiDoc.ReleaseIndicator = "?" 'Creates UNA segment oEdiDoc.Option(DocumentOptionIDConstants.OptDocument_ServiceSegment) = 1 sEdiFileName = "ORDERS_D01B_Output.edi" sSefFileName = "ORDERS_D01B_EAN010.EVAL0.SEF" ' Specify SEF file to load. oSchema = oEdiDoc.LoadSchema(sAppPath & sSefFileName, SchemaTypeIDConstants.Schema_Standard_Exchange_Format) oConnection = New SqlConnection(sConnection) oConnection.Open() sSql = "select * from [Interchange]" Dim oInterchangeAdapter As SqlDataAdapter = New SqlDataAdapter(sSql, oConnection) Dim oInterchangeDs As DataSet = New DataSet("dsInterchange") oInterchangeAdapter.Fill(oInterchangeDs, "dsInterchange") For Each oInterchangeRow As DataRow In oInterchangeDs.Tables("dsInterchange").Rows ' Creates the Interchange Control Header segment (UNB). ediInterchange.Set(oInterchange, oEdiDoc.CreateInterchange("UN", "D01B")) ediDataSegment.Set(oSegment, oInterchange.GetDataSegmentHeader) oSegment.DataElementValue(1, 1) = oInterchangeRow("UNB01_01_SyntaxIdentifier").ToString() ' Syntax identifier (0001) oSegment.DataElementValue(1, 2) = oInterchangeRow("UNB01_02_SyntaxVersionNumber").ToString() ' Syntax version number (0002) oSegment.DataElementValue(2, 1) = oInterchangeRow("UNB02_01_InterchangeSenderIdentification").ToString() ' Interchange sender identification (0004) oSegment.DataElementValue(2, 2) = oInterchangeRow("UNB02_02_PartnerIdentificationCodeQualifier").ToString() ' Partner identification code qualifier (0007) oSegment.DataElementValue(2, 3) = oInterchangeRow("UNB02_03_InterchangeSenderInternalIdentification").ToString() oSegment.DataElementValue(3, 1) = oInterchangeRow("UNB03_01_RecipientIdentification").ToString() ' Recipient identification (0010) oSegment.DataElementValue(3, 2) = oInterchangeRow("UNB03_02_PartnerIdentificationCodeQualifier").ToString() ' Partner identification code qualifier (0007) oSegment.DataElementValue(3, 3) = oInterchangeRow("UNB03_03_RoutingAddress").ToString() ' Routing address (0014) oSegment.DataElementValue(4, 1) = oInterchangeRow("UNB04_01_Date").ToString() ' Date (0017) oSegment.DataElementValue(4, 2) = oInterchangeRow("UNB04_02_Time").ToString() ' Time (0019) oSegment.DataElementValue(5) = oInterchangeRow("UNB05_InterchangeControlReference").ToString() ' Interchange control reference (0020) oSegment.DataElementValue(9) = oInterchangeRow("UNB09_AcknowledgementRequest").ToString() ' Acknowledgement request (0031) oSegment.DataElementValue(11) = oInterchangeRow("UNB11_TestIndicator").ToString() ' Test indicator (0035) sSql = "select * from [Orders_Header] where InterchangeKey = " & oInterchangeRow("InterchangeKey").ToString() Dim oHeaderAdapter As SqlDataAdapter = New SqlDataAdapter(sSql, oConnection) Dim oHeaderDs As DataSet = New DataSet("dsHeader") oHeaderAdapter.Fill(oHeaderDs, "dsHeader") For Each oHeaderRow As DataRow In oHeaderDs.Tables("dsHeader").Rows ' Creates the Message header segment (UNH). ediTransactionSet.Set(oMessage, oInterchange.CreateTransactionSet("ORDERS")) ediDataSegment.Set(oSegment, oMessage.GetDataSegmentHeader) oSegment.DataElementValue(1) = oHeaderRow("UNH01_MessageReferenceNumber").ToString() ' Message reference number (0062) oSegment.DataElementValue(2, 1) = oHeaderRow("UNH02_01_MessageTypeIdentifier").ToString() ' Message type identifier (0065) oSegment.DataElementValue(2, 2) = oHeaderRow("UNH02_02_MessageVersionNumber").ToString() ' Message version number (0052) oSegment.DataElementValue(2, 3) = oHeaderRow("UNH02_03_MessageReleaseNumber").ToString() ' Message release number (0054) oSegment.DataElementValue(2, 4) = oHeaderRow("UNH02_04_ControllingAgency").ToString() ' Controlling agency (0051) oSegment.DataElementValue(2, 5) = oHeaderRow("UNH02_05_AssociationAssignedCode").ToString() ' Association assigned code (0057) ' Beginning of message (BGM) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("BGM")) oSegment.DataElementValue(1, 1) = oHeaderRow("BGM01_01_DocumentMessageNameCoded").ToString() ' Document/message name, coded (1001) oSegment.DataElementValue(2, 1) = oHeaderRow("BGM02_01_DocumentMessageNumber").ToString() ' Document/message number (1004) oSegment.DataElementValue(3) = oHeaderRow("BGM03_MessageFunctionCoded").ToString() ' Message function, coded (1225) ' Date/time/period (DTM) - Delivery Requested If oHeaderRow("DTM01_02_DeliveryDateTime").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("DTM")) oSegment.DataElementValue(1, 1) = "2" ' Date/time/period qualifier (2005) oSegment.DataElementValue(1, 2) = oHeaderRow("DTM01_02_DeliveryDateTime").ToString() ' Date/time/period (2380) oSegment.DataElementValue(1, 3) = "102" ' Date/time/period format qualifier (2379) End If ' Date/time/period (DTM) - Document If oHeaderRow("DTM01_02_DocumentDateTime").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("DTM")) oSegment.DataElementValue(1, 1) = "137" ' Date/time/period qualifier (2005) oSegment.DataElementValue(1, 2) = oHeaderRow("DTM01_02_DocumentDateTime").ToString() ' Date/time/period (2380) oSegment.DataElementValue(1, 3) = "203" ' Date/time/period format qualifier (2379) End If ' Date/time/period (DTM) - Collection If oHeaderRow("DTM01_02_CollectionDateTime").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("DTM")) oSegment.DataElementValue(1, 1) = "235" ' Date/time/period qualifier (2005) oSegment.DataElementValue(1, 2) = oHeaderRow("DTM01_02_CollectionDateTime").ToString() ' Date/time/period (2380) oSegment.DataElementValue(1, 3) = "203" ' Date/time/period format qualifier (2379) End If ' Free text (FTX) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("FTX")) oSegment.DataElementValue(1) = oHeaderRow("FTX01_TextSubjectQualifier").ToString() ' Text subject qualifier (4451) oSegment.DataElementValue(2) = oHeaderRow("FTX02_TextFunctionCoded").ToString() ' Text function, coded (4453) oSegment.DataElementValue(4, 1) = oHeaderRow("FTX04_01_FreeText").ToString() ' Free text (4440) ' Reference (RFF) If oHeaderRow("RFF01_02_DeliveryScheduleNumber").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("RFF\RFF")) oSegment.DataElementValue(1, 1) = "AAN" ' Reference qualifier (1153) oSegment.DataElementValue(1, 2) = oHeaderRow("RFF01_02_DeliveryScheduleNumber").ToString() ' Reference number (1154) End If 'BUYER If oHeaderRow("NAD02_01_BuyerIdentification").ToString().Trim() <> "" Then ' Name and address (NAD) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\NAD")) oSegment.DataElementValue(1) = "BY" ' Party qualifier (3035) oSegment.DataElementValue(2, 1) = oHeaderRow("NAD02_01_BuyerIdentification").ToString() ' Party identification (3039) oSegment.DataElementValue(2, 3) = oHeaderRow("NAD02_03_BuyerAgencyCoded").ToString() ' Code list responsible agency, coded (3055) ' Place/location identification (LOC) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\LOC")) oSegment.DataElementValue(1) = "7" ' Place/location qualifier (3227) oSegment.DataElementValue(2, 1) = oHeaderRow("LOC02_01_BuyerLocationIdentification").ToString() ' Place/location identification (3225) oSegment.DataElementValue(2, 3) = "92" ' Code list responsible agency, coded (3055) ' Contact information (CTA) If oHeaderRow("CTA02_02_BuyerPurchasingContactName").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\CTA")) oSegment.DataElementValue(1) = "PD" ' Contact function, coded (3139) oSegment.DataElementValue(2, 1) = oHeaderRow("CTA02_01_BuyerPurchasingContactId").ToString() ' Department or employee identification (3413) oSegment.DataElementValue(2, 2) = oHeaderRow("CTA02_02_BuyerPurchasingContactName").ToString() ' Department or employee (3412) ' Communication contact (COM) - Email If oHeaderRow("COM01_01_BuyerEmail").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_BuyerEmail").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "EM" ' Communication channel qualifier (3155) End If ' Communication contact (COM) - Fax If oHeaderRow("COM01_01_BuyerFax").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_BuyerFax").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "FX" ' Communication channel qualifier (3155) End If ' Communication contact (COM) - Telephone If oHeaderRow("COM01_01_BuyerTelephone").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_BuyerTelephone").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "TE" ' Communication channel qualifier (3155) End If End If ' Contact information (CTA) End If 'BUYER 'SHIP TO If oHeaderRow("NAD02_01_ShipToIdentification").ToString().Trim() <> "" Then ' Name and address (NAD) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\NAD")) oSegment.DataElementValue(1) = "ST" ' Party qualifier (3035) oSegment.DataElementValue(2, 1) = oHeaderRow("NAD02_01_ShipToIdentification").ToString() ' Party identification (3039) oSegment.DataElementValue(2, 3) = oHeaderRow("NAD02_03_ShipToAgencyCoded").ToString() ' Code list responsible agency, coded (3055) ' Place/location identification (LOC) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\LOC")) oSegment.DataElementValue(1) = "7" ' Place/location qualifier (3227) oSegment.DataElementValue(2, 1) = oHeaderRow("LOC02_01_ShipToLocationIdentification").ToString() ' Place/location identification (3225) oSegment.DataElementValue(2, 3) = "92" ' Code list responsible agency, coded (3055) ' Contact information (CTA) If oHeaderRow("CTA02_02_ShipToPurchasingContactName").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\CTA")) oSegment.DataElementValue(1) = "PD" ' Contact function, coded (3139) oSegment.DataElementValue(2, 1) = oHeaderRow("CTA02_01_ShipToPurchasingContactId").ToString() ' Department or employee identification (3413) oSegment.DataElementValue(2, 2) = oHeaderRow("CTA02_02_ShipToPurchasingContactName").ToString() ' Department or employee (3412) ' Communication contact (COM) - Email If oHeaderRow("COM01_01_ShipToEmail").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_ShipToEmail").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "EM" ' Communication channel qualifier (3155) End If ' Communication contact (COM) - Fax If oHeaderRow("COM01_01_ShipToFax").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_ShipToFax").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "FX" ' Communication channel qualifier (3155) End If ' Communication contact (COM) - Telephone If oHeaderRow("COM01_01_ShipToTelephone").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_ShipToTelephone").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "TE" ' Communication channel qualifier (3155) End If End If ' Contact information (CTA) End If ' SHIP TO 'SUPPLIER If oHeaderRow("NAD02_01_SupplierIdentification").ToString().Trim() <> "" Then ' Name and address (NAD) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\NAD")) oSegment.DataElementValue(1) = "SU" ' Party qualifier (3035) oSegment.DataElementValue(2, 1) = oHeaderRow("NAD02_01_SupplierIdentification").ToString() ' Party identification (3039) oSegment.DataElementValue(2, 3) = oHeaderRow("NAD02_03_SupplierAgencyCoded").ToString() ' Code list responsible agency, coded (3055) ' Place/location identification (LOC) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\LOC")) oSegment.DataElementValue(1) = "7" ' Place/location qualifier (3227) oSegment.DataElementValue(2, 1) = oHeaderRow("LOC02_01_SupplierLocationIdentification").ToString() ' Place/location identification (3225) oSegment.DataElementValue(2, 3) = "92" ' Code list responsible agency, coded (3055) ' Contact information (CTA) If oHeaderRow("CTA02_02_SupplierPurchasingContactName").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\CTA")) oSegment.DataElementValue(1) = "PD" ' Contact function, coded (3139) oSegment.DataElementValue(2, 1) = oHeaderRow("CTA02_01_SupplierPurchasingContactId").ToString() ' Department or employee identification (3413) oSegment.DataElementValue(2, 2) = oHeaderRow("CTA02_02_SupplierPurchasingContactName").ToString() ' Department or employee (3412) ' Communication contact (COM) - Email If oHeaderRow("COM01_01_SupplierEmail").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_SupplierEmail").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "EM" ' Communication channel qualifier (3155) End If ' Communication contact (COM) - Fax If oHeaderRow("COM01_01_SupplierFax").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_SupplierFax").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "FX" ' Communication channel qualifier (3155) End If ' Communication contact (COM) - Telephone If oHeaderRow("COM01_01_SupplierTelephone").ToString().Trim() <> "" Then ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("NAD\CTA\COM")) oSegment.DataElementValue(1, 1) = oHeaderRow("COM01_01_SupplierTelephone").ToString() ' Communication number (3148) oSegment.DataElementValue(1, 2) = "TE" ' Communication channel qualifier (3155) End If End If ' Contact information (CTA) End If 'SUPPLIER sSql = "select * from [Orders_Detail] where HeaderKey = " & oHeaderRow("HeaderKey").ToString() Dim oDetailAdapter As SqlDataAdapter = New SqlDataAdapter(sSql, oConnection) Dim oDetailDs As DataSet = New DataSet("dsDetail") oDetailAdapter.Fill(oDetailDs, "dsDetail") For Each oDetailRow As DataRow In oDetailDs.Tables("dsDetail").Rows ' Line item (LIN) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("LIN\LIN")) oSegment.DataElementValue(1) = oDetailRow("LIN01_LineItemNumber").ToString() ' Line item number (1082) oSegment.DataElementValue(2) = "1" ' Action request/notification, coded (1229) oSegment.DataElementValue(3, 1) = oDetailRow("LIN03_01_EAN_GlobalTradeItemNumber").ToString() ' Item number (7140) oSegment.DataElementValue(3, 2) = "SRV" ' Item number type, coded (7143) ' Additional product id (PIA) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("LIN\PIA")) oSegment.DataElementValue(1) = oDetailRow("PIA01_ProductIdFunctionQualifier").ToString() ' Product id. function qualifier (4347) oSegment.DataElementValue(2, 1) = oDetailRow("PIA02_01_ItemNumber").ToString() ' Item number (7140) oSegment.DataElementValue(2, 2) = oDetailRow("PIA02_02_ItemNumberTypeCoded").ToString() ' Item number type, coded (7143) oSegment.DataElementValue(3, 1) = oDetailRow("PIA03_01_ItemNumber").ToString() ' Item number (7140) oSegment.DataElementValue(3, 2) = oDetailRow("PIA03_02_ItemNumberTypeCoded").ToString() ' Item number type, coded (7143) ' Item description (IMD) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("LIN\IMD")) oSegment.DataElementValue(1) = "F" ' Item description type, coded (7077) oSegment.DataElementValue(3, 4) = oDetailRow("IMD03_04_ItemDescription").ToString() ' Item description (7008) ' Measurements (MEA) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("LIN\MEA")) oSegment.DataElementValue(1) = "PD" ' Measurement purpose qualifier (6311) oSegment.DataElementValue(2, 1) = oDetailRow("MEA02_01_PropertyMeasuredCoded").ToString() ' Property measured, coded (6313) oSegment.DataElementValue(3, 1) = "NAR" ' Measure unit qualifier (6411) oSegment.DataElementValue(3, 2) = oDetailRow("MEA03_02_MeasurementValue").ToString() ' Measurement value (6314) ' Quantity (QTY) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("LIN\QTY")) oSegment.DataElementValue(1, 1) = oDetailRow("QTY01_01_QuantityQualifier").ToString() ' Quantity qualifier (6063) oSegment.DataElementValue(1, 2) = oDetailRow("QTY01_02_QuantityInKilograms").ToString() ' Quantity (6060) oSegment.DataElementValue(1, 3) = "KGM" ' Measure unit qualifier (6411) ' Date/time/period (DTM) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("LIN\DTM")) oSegment.DataElementValue(1, 1) = "364" ' Date/time/period qualifier (2005) oSegment.DataElementValue(1, 2) = oDetailRow("DTM01_02_MinimumShelfLife").ToString() ' Date/time/period (2380) oSegment.DataElementValue(1, 3) = oDetailRow("DTM01_03_DateTimePeriodFormatQualifier").ToString() ' Date/time/period format qualifier (2379) ' Price details (PRI) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("LIN\PRI\PRI")) oSegment.DataElementValue(1, 1) = "1E" ' Price qualifier (5125) oSegment.DataElementValue(1, 2) = oDetailRow("PRI01_02_NetPrice").ToString() ' Price (5118) Next ' For Each oDetailRow ' Section control (UNS) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("UNS")) oSegment.DataElementValue(1) = "S" ' Section identification (0081) ' Monetary amount (MOA) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("MOA")) oSegment.DataElementValue(1, 1) = "86" ' Monetary amount type qualifier (5025) oSegment.DataElementValue(1, 2) = oHeaderRow("MOA01_02_TotalMonetaryAmount").ToString() ' Monetary amount (5004) ' Control total (CNT) ediDataSegment.Set(oSegment, oMessage.CreateDataSegment("CNT")) oSegment.DataElementValue(1, 1) = oHeaderRow("CNT01_01_ControlQualifier").ToString() ' Control qualifier (6069) oSegment.DataElementValue(1, 2) = oHeaderRow("CNT01_02_ControlValue").ToString() ' Control value (6066) Next ' For Each oHeaderRow Next ' For Each oInterchangeRow ' Trailing segments are automatically created when Framework EDI commits ' (saves) the instance of "oEdiDoc" object into an EDI file. oEdiDoc.Save(sAppPath & sEdiFileName) MessageBox.Show(oEdiDoc.GetEdiString(), sEdiFileName) End Sub