Friday, September 05, 2008

Step 1: Deactivate the &* functions and operation


1. Transaction PE04


And select the &* entries

Other than &DECI, please follow the steps as follows. In this document I’ll show the steps for &CURR.

Select &CURR and Enter:

Press Change and acknowledge the information:

In the Country assignment, Scroll down and you will see the entry Non profit Organization Checked.

Uncheck the entries. It should look like


Save and Exit.


After repeating this step for all &* Entries, go to transaction SE38, and check the program HUNCALC0. This program should not have any syntax error. If it has any then the deactivation of one &* feature is not done correctly. Please repeat the steps.


Note: Do not deactivate &DECI


Step II: Regenerate all $TMP objects to make them Unicode compliant.


Transaction SE38 and execute report RPUMKG00 (Based on the note 573044)

That’s all.





Thursday, September 04, 2008

If the data transfer Workbench (SXDA) does not have the necessary structure.


To correct this we need to maintain entries in the following two tables: SXDA2 (SAPDXfer: Structure Info for Data Transfer Object) and SXDA3 (SAPDXfer: Field Info for Data Transfer Object). Once you have the entries here these tables, the data transfer programs will start recognizing and parsing the input structures accordingly.


Let’s see the step by step procedure for maintaining the infotype 1080 in the SAP HR module. The corresponding structure is E1P1080. For this purpose, the Key for data transfer object is 0777. How did we find that out? By debugging the upload program and I will check if there is any better way to do this.


Since these structures are not available, all we have to do this is to add this structure in the SXDA2 table and the key fields in the SXDA3 table.


For SXDA2 table, let’s see the available components in the 0777 key. The way to see is transaction SM30 and maintain the list with key 0777.



The last position was 83 and the structure was E1P1063.

To add, press the ‘New Entries’


And Add the new info type like the following:

And press the Active button.

And confirm the following message.


In the same way do the changes to the SXDA3 table, which is going to have the key elements. Use transaction SM30 and maintain SXDA3.

Confirm the following message:

Position on the key 0777 and the item 83 (Which was the one we identified as the last item existed in SXDA2 before our addition. We added item 84)

Create ‘New Entries’ as below:

Remember to check the Active box. Save the entries confirming the following:

Save the changes in a transport.

Repeat the same for the following key fields:

That’s all. The whole process can be repeated for any new structure that needs to be used in the data transfer workbench.




Friday, August 15, 2008

Implicit enhancement points - Changing standard SAP code using the implict enhamcement code points

Implicit enhancement points are basically points within ABAP code where an enhancement point is implied, and in which case can be created. Examples of implicit enhancement points are at the beginning and end of FORM’s, at the end of a program, include or function module etc. Below is a step by step demonstration of how to create and implicit enhancement point.

Step 1 - Activate the enhancement functionality
Within SE80 open up the program/include you want to enhance and click on the enhancement button (show below)



Step 2 - Enhancement functionality activated
The SE80 screen will now look something like below!




Step 3 - Show implict enhancement points
Goto menu 'edit->Enhamcement Operations->Show Implicit Enhancement Options' to display implicit enhancement points within the ABAP code



Step 4 - Enhancement points with the code
Once you have done this you will be able to see all the implicit enhancement points available within you code, these are denoted by the line of quotation marks and the black arrow at the start. In this example there are enhancement points at the start and end of each form and one at the very end of the include.




Step 5 - Create an implicit enhamcement point
Inorder to implement an implicit enhancement point simply right click on the required enhamcement point and select 'Enhancement Implementation->create'.


Step 6 - Enhamcement point type
Next click on the code button to create a code implementation



Step 7 - Name and description
Next give the enhancement point a name and description. Click the green tick




Step 8 - Change request
Assign change to a change request in the usual way



Step 9 - Enhancement point created
The enhamcement point will now have been created in the appropriate place. Denoted by the ENHANCEMENT...ENDENHANCEMENT tags



Step 10 - Enter code into enhancement
You can now enter your own code into the enhancement point!


Step 11 - Activate the enhancement point
Click the 'Activate Enhancements' button to activate it.


Step 12 - Turn enhancement mode off
Now click the 'Active <-> inactive' button to turn enhancement mode off and return to standard SE80

Wednesday, August 06, 2008

vacation

Day 1
* Julius Sturgis Pretzel Bakery

Julius Sturgis Pretzel Bakery Description

What's better than being handed a big, squishy wad of dough and being taught how to twist it into a pretzel? That's what happens at the start of the Julius Sturgis Pretzel Bakery tour. The tour explores the large space where Sturgis started the first pretzel bakery in the U.S. back in the late 1700s. The guides are animated and enthusiastic, and at only 20 minutes or so the tour's short enough to hold the interest of most kids. Children will get some giggles out of the see-saw-like device used to knead pretzel dough.

Toddlers & Pre-K: The pretzel dough is just like that other kind of dough that gets in your carpet. Ward off tantrums by warning kids that they don't get to keep it.
Just the Facts

Hours: Bakery Tours Mon.-Sat. 9:30a.m.-4:30 p.m. Closed Sunday Bakery Store Mon.-Sat. 9 a.m.-5 p.m. Closed Sunday

Fees: Under $10

Planned Time: Less than 1 hour

* Abe's Buggy Rides
Abe's Buggy Rides Description

Abe's is a combination buggy ride provider, petting zoo, and miniature snack bar. Catering primarily to families, you can choose to ride in authentic Amish buggies of varying sizes for 20 to 75 minutes. Any ride longer than 20 minutes will take you under a covered bridge and past Amish farms and houses. Have your driver sign your feedback card upon your return and you'll get a homemade cookie or whoopee pie.

Toddlers & Pre-K: Animals, a buggy ride, and a big pond with koi fish. Need we say more?

Just the Facts
Hours: Mon.-Sat., 9 a.m.-6 p.m.
Fees: $10 - $20
Planned Time: 1 to 2 hours

* Hands-On House Children Museum

Hands-On House Children's Museum Description

"Don't touch that" are words you will not hear at the Hands-On House Children's Museum. While it's obviously big on hands-on, interactive elements, the museum also has a distinct Lancaster County flavor, with fun exhibits about machinery and farming. While the museum is on the small side, its interactive focus keeps kids happy and engaged.


Toddlers & Pre-K: Perfect place to let little ones run around safely.

Just the Facts
Hours: Vary by season.
Fees: Under $10
Planned Time: 1 to 2 hours

Day 2
* Dutch Wonderland Family Amusement Park


Dutch Wonderland Family Amusement Park Description

The excitement starts when you walk through the big castle façade into Dutch Wonderland. With about 30 rides, this meandering, shady park isn't overwhelmingly large, but there's plenty of fun for kids up to age 12. Mini-theaters throughout the park provide short, entertaining shows and skits that will excite kids and give parents a chance to sit for a bit. Kids will love the royal treatment -- you might even see the Dutch Wonderland Princess or Duke, who regularly appear at events and sometimes even wander the park doing meet-and-greets with children

Toddlers & Pre-K: A selection of gentle attractions ensure that little ones can get equal time on the rides.

Just the Facts
Hours: Park is closed January through April. Hours vary by month. For specifics, visit http://www.dutchwonderland.com/hours/index.html.
Fees: $20 - $30
Planned Time: Full day

* Plain and Fancy Restaurant and Farm
Plain and Fancy Restaurant and Farm Description

When you're given the choice between ordering the Amish Farm Feast or off the menu, go for the feast. You'll be seated at a table with people you don't know, but that makes it more fun to pass around the heaping platters of fried chicken, ham, turkey, buttered noodles, green beans, and so much more that will come your way. Save room for dessert -- your kids will love the apple and shoo-fly pies topped with ice cream and whipped cream.

Day 3
* Strasburg Rail Road

Strasburg Rail Road Description

It's almost impossible not to get excited when you hear the steam train's booming horn as it closes in on the station. Larger than life, the coal-fueled steam engine is lovingly restored. Children will delight in riding the rails to Paradise (Pennsylvania, that is) while listening to the conductor note points of interest, such as the Amish farms and the Red Caboose Motel (which features real train cars as sleeping rooms). At the end of the route, your kids will love shouting and cheering for the engineers who will hook up an engine to the "back" of the train and take it on its 20-minute ride to the station.

Toddlers & Pre-K: Windows can be opened, and are just the right height to climb up to (and through!). Remind little ones to keep their hands in the car.

Just the Facts
Hours: Changes frequently. Best to check the online calendar at www.strasburgrailroad.com.
Fees: $10 - $20
Recommended Time: 1 to 2 hours

* Cherry-Crest Adventure Farm

Cherry-Crest Adventure Farm Description

Get a good night's sleep before you visit Cherry-Crest Adventure Farm and its five-acre corn maze, the Amazing Maize Maze. With more than 2.5 miles of trails, the best-case scenario is that it's going to take you an hour to get through, although some have taken five hours. That's OK -- there's a snack shack and bathrooms inside the maze, plus a few places to sit and rest.

In addition to the maze, there are dozens more attractions on the farm, including a petting zoo, the Barnyard Jump bouncy "pillow," obstacle courses, hayrides, pumpkin tosses, the Lil' Farmers Playground, and a singing chicken show. The fudge shop and Home Cookin' Cafe keep everyone fueled for maximum play time. Or, bring a picnic and enjoy it under the tents in the Barnyard area.

Toddlers & Pre-K: There is a tiny version of the maze set up with hay bales. Forego the big maze and enjoy the other activities on the farm, including a stuffed animal workshop.

School-Age Kids: Run, run, run! When they get tired, you can always take the emergency exit out of the maze. Still, you may be surprised at the motivation of making it all the way through.
Just the Facts

Hours: Vary by month and day. Check the website at https://www.cherrycrestfarm.com/schedule.asp
Fees: $10 - $20
Recommended Time: 2 to 4 hours

* Amish Farm and House
Amish Farm and House Description

Yes, it's right off the highway behind Target, but don't pass by this delightful and authentic stop in Pennsylvania Dutch Country. Complete with a covered bridge and deeded by William Penn, the farm is almost exactly like it was in 1805, the year it was built. A one-room school house on the property gives a glimpse of how many Amish children are schooled to this day. Kids will love the super-cool 1805 Conestoga wagon, animals -- including horses, pigs, cows and goats -- and lots of space to run around.
Toddlers & Pre-K: There are goats to pet and a playground to be conquered. Life is good on the Amish Farm.

Just the Facts
Hours: Vary by season.
Fees: Under $10
Recommended Time: 2 to 4 hours

Tuesday, May 13, 2008

Working with Workflow container macros

Working with Workflow container macros:

Macros for accessing objects

Accessing objects in the business object repository is currently supported by a set of macros. These macros are described in more detail in the following.

All macros are comprised in the Include . This Include is contained in the Include , therefore making these macros automatically available in all object type implementations. Client programs which work with objects should use .

If the macros are used in ABAP Objects classes, use the includes and . contains the actual macro definitions; include it in the macro section of the class. Some attributes addressed from are defined in . must be included in the type section of the class.

Container

Containers are used for dynamic transfer of parameters and result values. The following macros are available for processing them:

Macro

Description

swc_container Declare a container

swc_create_container Create a new container

swc_release_container Release a container

swc_clear_container Clear a container

swc_create_element Create element in container

swc_set_element Insert element in container

swc_set_table Insert multiline element in container

swc_get_element Read element from container

swc_get_table Read multiline element from container

swc_delete_element Delete element from container

A detailed documentation of the container macros is provided in the SAP Library under: (Basis -> Business Management -> SAP Business Workflow Navigation -> Business Object Builder -> Programming in Implementation Program).

Object references

Declaration

DATA: TYPE SWC_OBJECT

Variables which contain object references are defined with the type SWC_OBJECT. A special case within the object implementation is the system variable SELF, which contains a reference to itself.

Create

SWC_CREATE_OBJECT

Object references are created using the macro SWC_CREATE_OBJECT. The first parameter received by the macro is the variable in which the reference is returned, the second parameter the type of object which is to be created, and the third parameter the key of the object.

Delete

SWC_FREE_OBJECT

The macro SWC_FREE_OBJECT can be used to release existing object references. The macro receives the reference to be released as input.

Read type and key

SWC_GET_OBJECT_TYPE

The macro SWC_GET_OBJECT_TYPE can be used to read the object type belonging to the object reference. The first parameter received by the macro is the object reference, the second parameter the return parameter containing the respective object type after the call. The field SWOTOBJID-OBJTYPE can be used as the data type reference for the object type.

SWC_GET_OBJECT_KEY

The macro SWC_GET_OBJECT_KEY can be used to read the key of an object. The macro is passed the reference of the object whose key is to be read as the first parameter and returns the key in the second parameter as the result. The field SWOTOBJID-OBJKEY can be used as the data type reference for the object type.

Method access

SWC_CALL_METHOD

The macro SWC_CALL_METHOD can be used to call methods of objects. The first parameter contains the object reference, the second the name of the method. The container holding all input values is passed in the third parameter. If the call is successful, the result (container element _RESULT) and the export parameters of the method call are stored in the container. If the invoked method raises an exception, the number of the exception is contained in the system variable SY-SUBRC and other values in the variables SY-MSGV1, ..., SY-MSGV4.

Attribute access

Read

SWC_GET_[TABLE_]PROPERTY

The macros SWC_GET_PROPERTY or SWC_GET_TABLE_PROPERTY can be used to access the attributes of an object. Both macros receive the object reference in the first parameter and the name of the attribute which is to be accessed in the second parameter. Both macros return the value of the attribute in the third parameter as the result. SWC_GET_PROPERTY returns single attribute values, SWC_GET_TABLE_PROPERTY returns multiline attribute values as internal tables.

Refresh

SWC_REFRESH_OBJECT

Attributes which are references to database fields are only read from the database for the first access. To refresh attribute values, the macro SWC_REFRESH_OBJECT can be called, causing the database to be read again the next time the attribute is accessed. The macro contains the object reference as an input parameter.

Trigger events

SWC_RAISE_EVENT

The macro SWC_RAISE_EVENT can be used to trigger events of object types. The reference to the object is passed to the macro as input in the first parameter, the name of the event in the second, and the container with the parameters for the event in the third parameter.

Special features within object type implementations

In addition to the macros listed above, contains macros which can be used within object type implementations.

Object reference to self

An own instance within the object type reference can be referenced with the variable SELF. This reference can be used to request attribute values of the current instance with SWC_GET_[TABLE_]PROPERTY.

Set object key

SWC_SET_OBJECTKEY

The macro SWC_SET_OBJECTKEY can be used to set the key of the object within method implementations. This is practical for methods such as create or find which link an object reference to a persistent object - which may be newly created.

Raise exceptions

EXIT_RETURN Publish Post

Within object type implementations, methods can raise exceptions which are defined in the method interface. To do this, the macro EXIT_RETURN is called which is passed the number of the exception and four result values as input. The result values can also be SPACE if they are empty.

Example

The following example is an extract from the example program RSWOCLNT. It uses the object types SCHEDULE, DOMINANT und APPOINTMENT from the SAP appointment calendar (transaction SSC1).

The program first lists the dominants (attribute DominantOfToday) and the appointments of the day (attribute AppointmentsOfToday), and then the appointments of the last and the next 5 days (method AppointmentsGet). Before the program is executed, appointments should be created in the calendar (SSC1).

REPORT RSWOCLNT.

***** use of container macros
INCLUDE .

***** object reference declaration
DATA: SCHEDULE TYPE SWC_OBJECT.

***** object reference creation
SWC_CREATE_OBJECT SCHEDULE 'SCHEDULE' SY-UNAME.
IF SY-SUBRC NE 0.
.....
ENDIF.

***** access to attribute
DATA: DOMINANT TYPE SWC_OBJECT.
SWC_GET_PROPERTY SCHEDULE 'DominantOfToday' DOMINANT.
IF SY-SUBRC NE 0.
.....
ENDIF.

***** access to mulitline attribute
DATA: APPOINTMENTS TYPE SWC_OBJECT OCCURS 0.
DATA: APP TYPE SWC_OBJECT.
SWC_GET_TABLE_PROPERTY SCHEDULE 'AppointmentsOfToday' APPOINTMENTS.
IF SY-SUBRC = 0.
LOOP AT APPOINTMENTS INTO APP.
.....
ENDLOOP.
ENDIF.

***** method invocation
DATEFROM = SY-DATUM - 5.
DATETO = SY-DATUM + 5.
* create container
SWC_CONTAINER CONTAINER.
* fill container
SWC_SET_ELEMENT CONTAINER 'DateFrom' DATEFROM.
SWC_SET_ELEMENT CONTAINER 'DateTo' DATETO.
* call method
SWC_CALL_METHOD SCHEDULE 'AppointmentsGet' CONTAINER.
IF SY-SUBRC = 0.
REFRESH APPOINTMENTS.
* read method result
SWC_GET_TABLE CONTAINER '_RESULT' APPOINTMENTS.
LOOP AT APPOINTMENTS INTO APP.
.....
ENDLOOP.
ENDIF.

Tuesday, March 25, 2008

Common workflow issue

No Administrator Found for the task

This is a common error faced by many people during execution of the work items. In such cases, do the following:

  1. Execute SWU_OBUF to reset the buffers. If the problem still persists, go to step 2.
  2. SO01--> settings --> workflow settings-->refresh organization environment

Sunday, February 10, 2008

ABAP Review Check List

This is a work in process. Please feel free to ask questions, make suggestions & correct misinformation!
Siva Kumar at sthiagarajan@unicef.org

Mandatory Checks

I. Documentation

  1. Program documentation
  2. Function Module documentation
  3. Include documentation
  4. In source documentation
  5. Beginning block of source code documentation

II. Naming Conventions

Variable Names

  1. Selection options = s_
  2. Internal tables (global) = t_
  3. Internal tables (local) = lt_
  4. Constants = c_
  5. Ranges = r_
  6. Form parameter = p_ (Used in the actual form not the Perform statement.)
  7. Screen Parameters = a_ or p_

    Program & Function Group Names

  8. UNICEF SAP development guidelines Appendix B (You need to log in to Unicef's intranet to get this document)
  9. ABAP programs (reports), function groups and module pools all use a 2 character application name abbreviation. The list of current UNICEF applications will be maintained in Appendix B.

III. Attributes

  1. Authorization Group in attributes - Programs that can be executed by all UNICEF users must be configured using the Authorization Group 'ZOPN2ALL' for Application '*'.
  2. Development Class needs to be application specific. This standard is a work in process.

IV. Return Codes

  1. Test return codes (sy-subrc) for success and failure after any I/O and calls to function modules (database selects, internal table reads, call transactions, I/O to UNIX or workstation files, etc)

V. Transaction Code assigned to executable programs

Every type "executable program" must have an assigned transaction code which is used to execute the program.

VI. Authorization Checks for HR custom programs

Methods to accomplish authorization checks for HR are illustrated below:

1. Use function module "HR_READ_INFOTYPE" instead of direct SELECT
statements when reading a specific infotype.

2. Use logical database PNP to leverage SAP authorizations (caveat:
performance can be slow)

3. SELECT statements should only be used when the SAP documented data
interfaces which incorporate the SAP authorization checks (Logical
DataBases, function modules, and BAPI's) cannot provide the functionality
required. If it is necessary to use SELECT's, then you must perform your
own AUTHORITY-CHECK on the data selected.

4. Place a strict authorization group at the program (transaction)
level. If a wide variety of data for a large group of individuals is
needed in a single program, then this program must have a very strict
authorization on who can run it (definitely not on any menu path).

VII. Parameter, P_BOUNCED_EMAIL, should be passed to Z_SENDMAIL

In order of preference, please provide one of the following for P_BOUNCED_EMAIL :

  1. A mailing list of people from the business process side who can recognize and have the ability to resolve the issue of a bounced mail (e.g. CAO maintains a master email list of cost object approvers).
  2. A mailing list of people from an Admin Computing support or project team who can resolve the bounced mail.
  3. "sap-bounces.unicef@gmail.com". This mail will go to Siva Kumar, Amina Alavi and Victor Lee for resolution.

VIII. Separate Dialog Program Includes

  1. PBO
  2. PAI
  3. Global data
  4. Forms

IX. Standards

  1. Development
  2. Quality Assurance
  3. Change Request

Strongly Recommended Practices

I. Non Database Performance

  1. Dead Code (Program -> Check -> Extended Prog. Check) - unused subroutines appear as warnings under PERFORM/FORM interfaces. - unused variables appear as warnings under Field attributes. Transaction code is SLIN. This will also catch literals (section III below).
  2. When possible use MOVE instead of MOVE-CORRESPONDING (move bseg to *bseg or move t_prps[] to t_prps2[] if you want to copy entire table or t_prps to t_prps2 if you only want to copy header line.)
  3. Code executed more than once should be placed in a form routine.
  4. http://docs.google.com/View?docID=dhs6z73_45f5r2q9fd&revision=_latest when possible especially against non-buffered table (Data Dictionary -> Technical Info)
  5. SORT tables BY fields
  6. Avoid unnecessary moves to table header areas.
  7. Subroutine parameters should be typed for efficiency and to help prevent coding and runtime errors.

II. Database Performance

  1. Avoid ORDER BY unless there is index on the columns - sort internal table instead
  2. SELECT SINGLE when possible
  3. SELECT fields FROM database table INTO TABLE t_tab (an internal table) - Lengthy discussion.
  4. Views (inner join) are a fast way to access information from multiple tables. Be aware that the result set only includes rows that appear in both tables.
  5. Use subqueries when possible.
  6. "Sample Code" (outer join) are very fast but keep in the mind the special features and 3 pitfalls of using it.
    (a) Duplicates are removed from the answer set as if you had specified "SELECT DISTINCT"... So unless you intend for duplicates to be deleted include the unique key of the detail line items in your select statement. In the data dictionary (SE11) the fields belonging to the unique key are marked with an "X" in the key column.
    (b) If the "one" table (the table that appears in the clause FOR ALL ENTRIES IN) is empty, all rows in the "many" table (the table that appears in the SELECT INTO clause ) are selected. Therefore make sure you check that the "one" table has rows before issuing a select with the "FOR ALL ENTRIES IN..." clause.
    (c) If the 'one' table (the table that appears in the clause FOR ALL ENTRIES IN) is very large there is performance degradation Steven Buttiglieri created sample code to illustrate this.
  7. Where clause should be in order of index See example.
    This is important when there are multiple indexes for a table and you want to make sure a specific index is used. This will change when we convert from a "rules based" Oracle optimizer to a "cost based" Oracle optimizer. You should be aware of a bug in Oracle, lovingly referred to as the "3rd Column Blues". Click here for more information on indexes.
  8. Where clause should contain key fields in an appropriate db index or buffered tables. As long as we are using the Oracle Cost Based Optimizer, be aware fo the "Third Column Blues", an Oracle bug.
  9. Avoid nested SELECTs (SELECT...ENDSELECT within another SELECT...ENDSELECT). Load data in internal tables instead. See item 3 above.
  10. Use SQL statistical functions when possible (max, sum, ...)
  11. Delete all rows from a table. A where clause is mandatory. Specifying the client is the most efficient way.
  12. Put Check statements into where clause - caveat: Make sure that the index is still being used after you add the additional selection criteria. If the select statement goes from using an index to doing a db scan (reading each row in the database without going through an index) get it out of the where clause and go back to using "Check"!

III. Literals

  1. Codes ('MD') should use contants (c_medical)
  2. Longer text should use text elements. Sample code is a good example because it uses the text element in conjunction with the hard coded text. This documents the text element and provides for the possibility of multi-language support.

IV. Miscellaneous

  1. Use CASE statement instead of IF...ELSEIF when possible (It is only possible in equality tests)
  2. Nested If - encounter most likely to fail first (specific to general)
  3. And - encounter most likely to fail first (specific to general)
  4. OR's - encounter most likely to succeed first (general to specific)
  5. Variables should use Like when possible
  6. Subroutine usage - don't place decision to execute in the subroutine
  7. If not ( t_prps[] is initial ) (instead of describe table t_prps lines sy-tfill, if sy-tfill > 0...)
  8. New document types confirmed with the configuration team via UNICEF-ABAP mail list prior to coding a report to access the data.
  9. Dates need to be properly formatted using the user's default settings. For the explanation of the BDC example check out the developer's standards.

Function Module documentation

ZFUNCDOC

REPORT ZFUNCDOC.
************************************************************************
* INSTRUCTIONS FOR COPYING DOCUMENTATION TEMPLATE *
************************************************************************
*1) SELECT THE ENTIRE TEMPLATE BY PLACING THE CURSOR IN THE FIRST
* COLUMN double clicking three times on the Select button.
*
*2) SELECT COPY.
*
*3) GO TO THE FUNCTION YOU ARE DOCUMENTING. SELECT DOCUMENTATION AND
* CHANGE. PRESS BUTTON 'FUNCTION MOD. DOC F9'.The documentation window
* appears, showing the SAP default documentation
*
*4) DELETE THE DEFAULT TEXT. PASTE THE TEMPLATE INTO THE WINDOW USING
* PASTE. The template and text formatting tags appear.
*
***************** TIPS FOR ENTERING INFORMATION ************************
*
* IF YOU WANT TO AVOID ACCIDENTALLY DELETING FORMATTING TAGS, START EACH
* LINE of your documentation on a new line.
*
* At the end of each line you type, press return; otherwise, your text
* will spill into the first column, which is used only for paragraph
* formatting.
*
************************************************************************
* END OF INSTRUCTIONS *
************************************************************************

Include documentation

ZDOCUINM

************************************************************************
** INSTRUCTIONS FOR COPYING DOCUMENTATION TEMPLATE **
************************************************************************
* Updated on 05/27/2007. *
************************************************************************
*1- Place cursor beneath the INCLUDE comment.
*2- Click on the Pattern soft button.
*3- Select the "Other pattern" radio button.
*4- Enter ZDOCUINM in the search box beneath this button.
*5- Follow instructions in the pattern copied to your program (below).
************************************************************************
************************************************************************
* Instructions: 1. When inserting this template in your source code,
* please replace only the angle brackets and the text
* between them.
* 2. If it is not applicable simply enter N/A.
* 3. If you need more space, use additional lines starting
* with an asterisk ONLY and kindly indent. Thanks!
* 4. Lastly, remove these instructions from your include
* documentation block. Thanks!
************************************************************************
*^ Written By : <Author>
*^ Date Written : <Date>
*^ Include Name : <Name of the include>
*^ Used in Programs: <Programs referencing this include>
*^ System Name : <System name/application area>
*^ Purpose : <Form routines, PAI/PBO modules, data declarations>
* <Kindly indent subsequent lines>
*^ Other Considerations: <anything else a developer might find helpful>
**--------------------------------------------------------------------**
*^ Maintenance History (latest on top)
*
*^ Date: <MM/DD/YY> Author: <USERID> Transport: <Transport #>
*^ Description of Change:
*
************************************************************************