/* sccsid[] = "@(#) $Id: //bas/46D/src/proj/idoc/idocrdme.txt#3 $ SAP" */

// SAP C++ IDoc Class Library.
// Copyright (C) 1997 SAP America, Inc.
// Copyright (C) 1998 SAP Labs, Inc.
// Copyright (C) 1999 SAP Labs, Inc.
// All rights reserved.

------------------------------------------------------------------------

                        IDoc Class Library

                      Software Development Kit

                           Version 4.6B

------------------------------------------------------------------------
The current version of the RFC Class Library supports Windows NT, Windows 95
only. It works in conjunction with RFC Libraray and C++ RFC Class Library.

For help information on the RFC Library, please refer to the Windows Help
document, saprfc.hlp, from the RFC Libraray SDK.  And for help information
on the C++ RFC Class Library, please refer to the Windows Help document,
rfcclass.hlp, also from the RFC Libraray SDK.

For programming help on the IDoc Class Library, please refer to the
Windows Help document, idocclass.hlp, contained in this SDK.

The following are the main topics of this file:

1. Contents of the IDoc Class Library SDK
2. How to compile and link a RFC program using the RFC Class Library
3. Features added in this release, and upgrade to integrate with R/3 4.0A
4. Features added for release 4.0B
5. Features added in 4.5A release
6. Notes on version 4.6B release

-----------------------------------------------------------------------------

1. Contents of the IDoc Class Library SDK

...\idoclib\

	lib\
	    idoclass.lib  The IDoc Class Library in static library form.
			  Release version.

	include\
	    idocglob.h  Header file for global definitions
	    idoclink.h  Header file for the CIDocLink class
	    idocidoc.h  Header file for the CIDoc class
	    idocittr.h  Header file for the CIDocIterator class
	    idocmeta.h  Header file for the CIDocMetaData class
	    idocdseg.h  Header file for the CIDocDataSegment class
	    idocdata.h  Header file for the CIDocData class
	    idoctidm.h  Header file for the CIDocTID class

	src\
	    idocglob.cpp  Implementation file for global functions
	    idoclink.cpp  Implementation file for the CIDocLink class
	    idocidoc.cpp  Implementation file for the CIDoc class
	    idocittr.cpp  Implementation file for the CIDocIterator class
	    idocmeta.cpp  Implementation file for the CIDocMetaData class
	    idocdseg.cpp  Implementation file for the CIDocDataSegment class
	    idocdata.cpp  Implementation file for the CIDocData class
	    idoctidm.cpp  Implementation file for the CIDocTID class

	samples\
            idoccpmt.cpp  reads and prints out IDoc metadata
            idocinbd.cpp  Simple sample inbound processing program
            idocinpt.cpp  Creates IDoc from file generated by idocplnt.cpp
            idocmtin.cpp  Sends multiple IDoc inbound to R/3
            idocplnt.cpp  Receives and processes outbound IDocs
            idocplt2.cpp  Like idocplnt, but uses different CIDocLink constructor
            idocrdfd.cpp  Reads failed IDocs from file and resends them

        bin\
            idoccpmt.exe
	    idocinbd.exe
     	    idocinpt.exe
            idocmtin.exe
            idocplnt.exe
            idocplt2.exe
            idocrdfd.exe

	help\
	    idocrdme.txt  This file
	    idocclass.hlp  Windows Help file for the Class Library.


2. Contents of the IDoc Class Library SDK

A. To use this version, all applications must be built with Microsoft 
   Visual C++ 5.0.

B. To build this static library, all .h include files from the
   C++ RFC Class Library must be accessible by the compiler.

C. IDoc Class Library uses the Standard C++ Template Library of the
   Visual C++ 5.0, and the stream classes to be found in include files
   <ios>, <fstream>, <iostream>, and <strstream> are incompatible with
   the non-Standard Template Library stream classes in <ios.h>, <fstream.h>,
   <iostream.h> and <strstrea.h>, application programs that links
   to IDoc Class Library must also use the Standard Template Library.

D. You must have 'saprfc.ini' file residing in a directory where it can
   be found by RFC Library, and appropriate entries must be made for the
   RFC destination to which the IDocs are to be sent.  Read 'saprfc.hlp'
   in the RFC SDK for more information.


3. Features added in this release, and upgrade to integrate with R/3 4.0A

A. Access to fields in IDoc Control segment.  CIDoc::GetControlField() and
   CIDoc::SetControlField() grant read and write access to the control
   segment of the IDoc encapsulated in a CIDoc object.

B. Outbound processing offers 2 RFC functions: the original
   INBOUND_IDOC_PROCESS and the new (4.0A) IDOC_INBOUND_ASYNCHRONOUS.  Within
   the R/3 4.0A system, one can use transacton SALE to define the port so
   to select either one of those 2 functions as the one for processing
   outbound IDocs.

C. Inbound transfer of IDocs.  When creating a CIDocLink object, the last
   argument for the constructor can be used to specify what RFC function
   to call to transfer IDocs inbound to R/3.  INBOUND_METHOD_3 is used
   to call INBOUND_IDOC_PROCESS and INBOUND_METHOD_4 is used to call
   IDOC_INBOUND_ASYNCHRONOUS.  Unlike the 3.1H release of IDoc Class
   Library, the function CIDocLink::SendIDocsToR3() no longer takes
   argument.  However, relevant fields like SNDPRN, SNDPRT and MESTYP
   in the control segment must be set using SetControlField() before
   the function CIDocLink::SendIDocsToR3() is called, to ensure arrival
   of the IDocs at proper destinations.

D. Enhanced trace capability.  When application program calls
   IDocClassTrace.SetTrace(true), relevant information would be output
   to the trace file.  The trace file has the format 'idoc#####_#####.trc',
   where # is in the range [0..9].

E. Automatic determination of release version of R/3 to which the application
   is connected.  For outbound processing applications, log-on information
   must be provided in the CRfcConnection object whose reference is passed
   to CIDocLink constructor.  This log-on information is used to determine
   the release version of the R/3 system to which the applicaton is connected
   and is waiting to accept IDocs outbound from that R/3 system.
   Needless to say, an inbound application must furnish log-on information
   in order to log on to the R/3 system into which inbound IDocs would be
   sent.
   Please consult the sample programs plants.cpp and inbound.cpp for
   examples.

F. When using IDoc Class Library with R/3 3.0 releases (3.0D, 3.0E, 3.0F),
   one must obtain the metadata from the R/3 transaction SE38, report
   RSEIDOC5.  The help file IDocClass.hlp describes this procedure.  However,
   one must note that the report RSEIDOC5 must be generated in English
   language in order for the IDoc Class Library to translate from the report 
   RSEIDOC5 (.mtd files) to .ido files successfully.


4. Features added for release 4.0B

A. CIDocMetaDataTree class enables the application program to obtain a
   copy of the metadata for any of the IDoc types that are present in
   the CIDocLink object.  The application program can examine the metadata
   for a given segment using this class.

B. Improved handling of inbound call failure by saving the failed IDocs in
   file.  Member functions are offered by CIDocLink class to restore
   failed IDocs for transmission.

C. Full access to the control segment of all IDocs.

D. Note that there is an error in the compiled HTML help file 'idoclass.chm'
   where the class CIDocFieldIterator was described.  This class,
   CIDocFieldIterator, is not delivered with 4.0B, but with 4.0C IDoc Class
   Library.

5. Features added in 4.5A release

A. Added new class CIDocFieldIterator.  This class enables the application
   program to iterate through the fields in an IDoc segment and query their
   name, type, offset, length and value.  Please see sample program idocfitr.cpp.

B. Added new class CIDocMetaData.  This class enables the application program
   to query all segments' metadata in a given IDoc type, including their child
   segments, segment name and type, repetitions allowed, and field metadata.
   Please see sample program idoccpmt.cpp.

C. Added new class CIDocOutboundFunc.  This class allows the application program 
   to derive its own class that overrides the virtual function
   CIDocOutboundFund::Process() for implementing the application program's
   own outbound processing functionality.  Please see sample program idocplt2.cpp.

D. Added new class CIDocOutboundApp.  This class allows the application program
   to derive its own class to implement its own outbound application.

E. Added new constructor to CIDocLink.  This constructor allows the application
   program to set its own CIDocOutboundApp object to be used by the CIDocLink object.
   Please see idocplt2.cpp.

F. Improved mechanism to resend failed IDocs, implemented by
   CIDocLink::ResendFailedIDocs().  Please see sample program idocrdfd.cpp.

G. The application program can simulate inbound IDoc transfer failure by creating
   a file named 'simulate_faiure.txt'.  This tests the handling of inbound failures
   by the application program and the
   
6. Notes on 4.6B release

A. A bug is fixed so that IDoc Class Library now works with extended IDoc types
   in R/3 system versions less than 4.0A (3.1H, 3.1I).

B. Because of performance problems, the existing scheme of handling transaction IDs
   is discontinued.  Users have complained about the existing scheme of handling
   transaction IDs as "too tedious" because all transaction IDs are maintained
   in a file and file I/O became too slow when there is already a large number
   of transaction IDs in the file.
   Users who need to manage transaction IDs should derive a class from CIDocTID and
   another class from CIDocOutboundApp, and override the functions that are
   declared 'virtual' in these classes with user's own implementations.  User can
   also added new functions in the derived classes for his own purposes.

