* This is just an example program to demonstrate how to create a 
    * Functional Acknowledgment 997 in Foxpro with the Framework EDI component
    
   clear all
   
   sSefFile = "810_4010.SEF"
   sSef997File = "997_4010.SEF"
   sEdiFile = "810.X12"
   sAckfile = "997_" + sEdifile


    oEdiDoc = createobject("fredi.ediDocument")
    
    * To support large EDI files without much memory, and improve performance
    oEdiDoc.CursorType = 1  && Cursor Forward_Only
    
    * By default, FREDI uses the  universal coordinated time (UTC), however you can change it to local time
    oEdiDoc.Option(12) = 1      && OptDocument_UseLocalTime
        

    * Stops FREDI from using the internal standard reference
    oSchemas = oEdiDoc.GetSchemas
    oSchemas.EnableStandardReference = .F.
    
  
    * Load SEF for EDI document to be acknowledged
    oEdiDoc.LoadSchema(sSefFile, 0)
    
    * Load SEF for 997 EDI file
    oEdiDoc.LoadSchema(sSef997File, 0)
    
    oAck = oEdiDoc.GetAcknowledgment
    
    * Do not show segments AK2, AK3, AK5 if transaction set is accepted (AK501 = "A")
    oAck.Option(0) = 0    && OptAcknowledgment_ShowReportingLevel
    
    
    * Set starting point of EDI Ack control numbers
    oAck.Property(12) = 1010    && PropertyAck_StartInterchangeControlNum
    oAck.Property(13) = 10        && PropertyAck_StartGroupControlNum
    oAck.Property(14) = 1        && PropertyAck_StartTransactionSetControlNum
    
    * Property to include the TA1 segment in the acknowledgment
    oAck.EnableInterchangeAcknowledgment = .T.
    
    
    * Property that determines whether a 997 acknowledgment is created or not while loading the EDI file.
    oAck.EnableFunctionalAcknowledgment = .T.
    
    * Property to specify that the transaction set is accepted even with errors
    *    oAck.AcceptSetWithErrors = .T.

    * Property to specify that the group set is accepted even with errors
    *    oAck.AcceptGroupWithErrors = .T.
    
    * Load the EDI file
    oEdiDoc.LoadEdi(sEdiFile)
    
    
    * Instantiate oSegment by getting the first segment
    oSegment = oEdiDoc.FirstDataSegment
    
    * When the cursor type is set to ForwardOnly, make sure to iterate through all segments to allow FREDI to validate them.
    
    do while !isnull(oSegment)

          oSegment = oSegment.Next
 
    EndDo
    
    * Anything in the oAck object that was automtically generated can be changed before saving to file.
    * Changing the date and time in the ISA segment of the oAck
    
    * Changing the TA1 segment
    oSegment = oAck.GetFirstTA1DataSegment
    oSegment = oSegment.GetDataSegmentByPos("\ISA\TA1")
    oSegment.DataElementValue(4) = "R"

    * Another method of changing the date and time in the GS segment of the oAck
    oSegment = oAck.GetFirst997DataSegment
    oSegment = oSegment.GetDataSegmentByPos("\ISA\GS\GS")
    oSegment.DataElementValue(4) = "20010101"  && Change date
    oSegment.DataElementValue(5) = "110130"     && Change time
    
    * Get last transaction set control number used in auto-generated acknowledgment

    sLastTsControlNo = oAck.Property(26) && Get ending control number of the last Transaction Set/Message 
    
    
    * Writes the Acknowledgment to file
    oAck.Save(sAckfile)

    ? "Done"
    

    Click here to download a trial version of the Framework EDI