You are on page 1of 18

SAP PI - Challenges

QA for PI - One stop for all


Question 1:
How to solve the following error coming in Message Monitoring?
HTTP_RESP_STATUS_CODE_NOT_OK
Answer 1:
Go to transaction SICF /default_host/sap/xi/engine double click on service
Now check whether you have entered correct information for the following fields.
Client, user id, password, and language information
Question 2:
How to solve the Status "HOLDING" in RWB?
Answer 2:
Go to RWB --> Adapter Engine --> show additional criteria --> Enter the QUEUE NAME in
field "Conversation_ID" (for this you have to first know the queue name from details of the
messages having status "Holding".) --> Expand "Configure table columns" --> choose
"Conversation ID" and "Sequential Number" --> display. --> Sort the list by ascending order of
"sequential number" --> cancel the message whose sequential number is latest and go on
canceling in ascending order.
Question 3:
How to solve the following error coming in Message Monitoring?
RuntimeException in Message-Mapping transformatio~
Answer 3:
a. The error is in Message Mapping. Go to the Test tab and test the message mapping with the
incoming payload file.
b. Check the source structure with the input file that you are sending to XI. Both structures
should be exactly same. I mean all nodes and the node structures.
c. Refresh the cache (both Delta cache and full cache) in SXI_CACHE transaction in PI.
Question 4:
How to solve the following error coming in Message Monitoring?
Obligatory node xxx missing in the IDOC structure xxx
Answer 4:
The error is in Message Mapping. Check the node xxx and make sure all its attributes are
mapped properly. For Ex: SEGMENT="1" and BEGIN="1"

Question 5:
The message has been sent from sender to PI or from PI to receiver but nothing is coming in
Message Monitoring. Where is the input file?
Answer 5:
The file got stucked in the PI queue. Check the following.
a. qRFC Monitoring: transaction SM58 Click Deregistration Click Registration
b. qRFC monitor (Outbound queue) Check the queue and monitor the problem
c. qRFC monitor (Inbound queue) Check the queue and monitor the problem
Question 6:
How to solve the following error coming in Message Monitoring?
No receiver could be determined
Answer 6:
Problem is in Receiver Determination. Check it. If everything is fine then just edit and change
something then remove that change and again reactivate the receiver determination.
Question 7:
How to solve the following error coming in Message Monitoring?
Party and service not defined
Answer 7:
The problem is that the file is not able to get any party or service configured for itself.
Check the structure of input file and confirm that the same structure is assigned to Sender
Interface.
Question 8:
How to solve the following error coming in Message Monitoring?
Error while refreshing the XI runtime cache
Answer 8:
The problem is in Cache refresh.
Go to SXI_CACHE, then from Menu - XI Runtime Cache - choose Start Delta Cache Refresh
(F6) and then choose Start Complete Cache Refresh (shift + F6)
Question 9:
a. How to change the namespace ns1 to if in the output file
b. How to change the encoding format in output XML file
Answer 9:
Use the adapter module AF_Modules/XMLAnonymizerBean in your receiving CC. Put its
module key as "0" and the module key for CallSapAdapter as "1". The module parameters will
be (1) anonymizer.acceptNamespaces = namespace1 if (2) anonymizer.quote = " (3)
anonymizer.encoding = ISO-8859-1.
Refer OSS Note 880173.

Question 10:
How to add extra namespaces or namespace instances
Answer 10:
Use the XSLT mapping after the message mapping in your interface mapping.
Sample XSLT code is below.

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://www.portal.fucapi.in">

Question 11:
a. I::000 --> This error comes while uploading the IDOC metadata in XI in transaction IDX2
b. XI is not getting authorized by R/3 System
c. name or password is incorrect. (repeat log on)" error comes while testing the authorization of
the RFC destination to SAP R/3 system from SAP PI system (SM59)
Answer 11:
In SAP PI system Go to transaction SM59 check the user id and password in the

"security/logon" tab and make ensure it is the RFC service user id and its correct password is
entered.
Also make sure that this user id has following roles.
a. SAP_XI_APPL_SERV_USER
b. SAP_XI_IS_SERV_USER
c. SAP_ALL
Question 12:
After transporting PI objects, the objects are not getting updated / created in the target system.
Answer 12:
Go to transaction SE01 --> Transports --> Global Information --> Transports --> check the error
displayed there.
Also confirm that the business systems are ready for source and target system before
transportation.
Question 13:
After some changes or modification in SLD.the changes are not reflecting in IR or ID
Answer 13:
Go to IR --> Menu --> Environment --> Clear SLD Data Cache
Go to ID --> Menu --> Environment --> Clear SLD Data Cache
Question 14:
If RWB is not opening and showing some stack problem or authorization problem
Answer 14:
Go to transaction SU01 --> user = XIRWBUSER -->Unlock
Question 15:
While transporting or updating the objects in SLD, if the following error comes..
CIM_ERR_ALREADY_EXISTS
Answer 15:
Go to SLD -> Administration -> Content Maintenance -> Select the following Subset -> All
classes, Class -> BCSystem. then delete SAP_BCSystem. Then retry.
Question 16:
How to solve the following error coming in Message Monitoring?
a. NO_RECEIVER_CASE_ASYNC
b. No receiver could be determined
Answer 16:
In the Receiver determination, check if the sender service and interface are same as in the
SXMB_MONI --> Receiver Identification --> SOAP Header --> Main --> Sender Service and
Interface.

Question 17:
How to solve the following error?
Error Category = XI_J2EE_MESSAGING_SYSTEM and error code =
HTTP_TRANSMISSION_ERROR
Answer 17:
1. The file size is big (probably more then 10 MB so reduce the file size or extend the file size
constraint in XI and extend the time out limit for the adapters in XI.) Its always better to have
the file size in between 1 MB to 5 MB. If size less then 1MB or more then 5MB then
performance decrease.
2. JCo call is the call between java stack and ABAP stack. So restart the whole XI system (both
JAVA and ABAP stack) and process the file again.
Question 18:
How to solve the following error?
Message interface is not defined in process (Integration Process)
Answer 18:
Go to SXI_CACHE,--> then select the IP --> display active version --> choose the latest version
of workflow task --> do "repeat activation" --> do "deployment" --> "testing" --> "execute". The
problem is due to the reason that the IP has already been transported to production and then get
modified in development so when we transport it again then the newer version of workflow task
(WS12340002) is not activated over the older version (WS12340001).
Question 19:
How to maximize the HEAP SIZE?
Answer 19:
First Close the Repository Framework Application.
Then from the main Exchange Infrastructure page (browser) instead opening Integration
Repository link save the repository.jnlp to local directory say desktop.
Now open this file with any text editor. You fill see some XML tags. Identify this tag

You can change the max heap size according to your requirement. But this max heap size
depends on certain factors such as Operating System as well on the hardware (32 bit or 64 bit)
and also on the physical RAM you have from where you run IR. You can give up to 2 GB if it is
windows OS. You can check SUN's official site for max heap sizes for different Operation
Systems & hardwares.
e.g., for max-heap-size = 1 GB change the above tag value as follows.

Save the JNLP file and open this file either by double clicking or by explicitly with Java Web
Start application. In general the directory structure for Java Web start application is
"Drive>:\Program Files\Java\j2re1.4.2_XX\javaws\javaws.exe". But by default all JNLP files
will be associated with Java Web Start when Java Web Start is installed.
Another way to change Heap size memory is as follows:
Run configtool.exe. (/usr/sap/SID/instanceName/j2ee/configtool)
Under cluster-data ... under instance_IDXXX ... Click on server_IDXXX
On Java Settings section, change Max Heap Size memory to 2048.
Save the changes and close Configtool.
Reboot your system.
Question 20:
How to cancel Integration Process (BPM) and stop the process instance from waiting for new
messages?
Answer 20:
Delete the old workflows using transaction SWWL.
Question 21:
How to stop and start BPE?
Answer 21:
Go to Transaction code SWF_XI_ADM_BPE.
Question 22:
How to access Java documents and Source Text for the sample Adapter Module in SAP PI?
Answer 22:
You can find the sample adapter module in the path
C:\usr\sap\J2E\JC00\j2ee\cluster\server0\apps\sap.com\com.sap.aii.af.sample.ra\connector\conn
ectors\sample_ra.rar.
Question 23:
Can we convert multiple sender values to one receiver value by using "Value mapping group"?
Answer 23:
Yes, you can convert multiple sender values to one receiver value by using "Value mapping
group".
Once you are in the "Edit Value mapping Agencies"
a. Put "Sender1" under "Value of " and "Receiver1 under "Value of ".

b. Right click on "Sender1" and select "Value mapping in all agencies".


This will open a new window "Value mapping Group"; therein you can provide multiple sender
values (Sender1, Sender2....).
Question 24:
How to transport Alert Categories?
Answer 24:
Go to ALRTCATDEF (In DEV) --> Transport (In TOOLBAR) --> Current Alert Category -->
Create a Customizing Request and note down your request number
Go to SE09 (In DEV) --> Check customizing request and Modifiable --> Choose Display Button
--> Go to your Request number --> and release the sub node and then release the request.
Go to STMS (In QA) --> Import --> Import your request
With the above method, alerts rules are not transported, you have to create them manually.
Question 25:
How to transport Alert Rules?
Answer 25:
Create a workbench transport request manually with transaction SE09. Delete the corresponding
unclassified task of that request. Double click on the transport request and click on button 'edit <> change'. For Program ID enter R3TR, for Object Type enter TABU and for Object Name enter
SXMSALERTRULES.
Now click on the button with the key symbol (located under 'Function'). Click on 'Insert row' and
enter * for table key. Save the request, release it and import it in the target system.
Refer SAP Note 1110295
Question 26:
How to solve the following error coming in Message Monitoring?
Interface mapping Object ID ***** Software Component ****** does not exist in runtime cache
Answer 26:
Refresh SXI_Cache and CPACache.
a. To refresh SXI_CACHE, go to transaction SXI_CACHE and click start complete cache
refresh
b. To refresh CPACache, enter the following URL
http://:/CPACache/refresh?mode=full
Question 27:
How to solve the following error coming in Message Monitoring?
Answer 27:
In the Receiver determination, check if the sender service and interface are same as in the

SXMB_MONI --> Receiver Identification --> SOAP Header --> Main --> Sender Service and
Interface.
Question 28:
How to solve the following error coming in CC Monitoring?
Error occurred while connecting to FTP server: Peer certificate rejected by ChainVerifier
Answer 28:
Use Fully Qualified Domain Name (FQDN of the FTPS server) (for Ex. Abc.sap.com) instead of
IP address (11.22.33.44)

Root cause of problem is the IP to DNS name resolving problem.


Means we are using IP in FTP CC but DNS name (Common name (CN) or Host Name) should
be used in FTP CC.
The SSL handshake needs to confirm that the FTPS client is using the FTPS servers DNS name
to access the FTP service since only the DNS name of the FTPS server is stored in the certificate
signed by the trusted CA (e.g. VeriSign). That does make sense since its the way the
Certification Authorities works.
Briefly, Use Fully Qualified Domain Name (FQDN of the FTPS server) (for Ex. Abc.sap.com)
instead of IP address (11.22.33.44)
Question 29:
How to test the alert?
Answer 29:
You can test the alert by executing the report RSALERTTEST.
To check the log, execute the report SXMSALERT_LOGREADER.
Question 30:
How to use OneAsMany function in Message Mapping?
Answer 30:
Let us take an example where the use of contexts can be emphasized.
In the source message shown above OrderNumber appears only once while OrderItem can occur
multiple times within the OrderHeader node. Suppose we want to map OrderNumber multiple
times in the target message, such that it is available under the target node corresponding to every
sales order item. To do this, we can use the node function called useOneAsMany as described
below:

a. The first input parameter expects the list of values that we want to propagate to the target
message.
b. The second input parameter expects the number of iterations or how many times we want to
replicate the value given in the first parameter.
c. The third input parameter is the list of context changes. Depending on this parameter the
source values will be propagated to the target after every context change.
Note: For this function to work as expected, the first two parameters must contain the same
number of contexts while the last two parameters must contain the same number of values.
Question 31:
How to solve the following error coming in CC Monitoring in RWB?
Mandatory parameter 'xml.keyfieldName': no value found
Answer 31:
In the FCC configuration in Communication channel, you have to provide the following
information.
RecordSet Structure = R1,*,R2,*
Keyfield Name = Key
(Field Key must exist in the Recordset Structures R1 and R2.)
Or
RecordSet Structure = R1,*,R2,*
R1.fieldNames = F1,F2
R1.keyFieldName = F1
R1.keyFieldValue = V1
R1.fieldSeparator = ;
R1.endSeparator = 'nl'

Question 32:
How to solve the following error coming in Message Monitoring?
Unable to interpret IDoc interface ia_SAP_ABC2SAP_MI
Answer 32:
Check whether the ED (IDOC occurrences have been changed by creating an ED) is used
properly in IR and ID.
a. In Message Mapping, use ED
b. In Interface Mapping, use original IDOC
c. In Interface Determination, use original IDOC

Question 33:
If IDOC has been changed in R/3 then what should be done with respect to PI?
Answer 33:
Go to transaction IDX2 --> Delete the old IDOC structure and Load the new IDOC structure
Question 34:
How to solve the following routing error?
NO_RECEIVER_CASE_BE or NO_RECEIVER_CASE_ASYNC
Answer 34:
This means no receiver could be found. Check your Receiver Determination. Activate and update
cache. Asynchronous messages can be manually restarted.
Question 35:
How to solve the following routing error?
TOO_MANY_RECEIVERS_CASE_BE
Answer 35:
More than one receiver found. Check your ID configuration to ensure that there is exactly one
receiver for the synchronous message. Multiple receivers for synchronous interfaces are not
permitted.
Question 36:
How to solve the following mapping error?
JCO_COMMUNICATION_FAILURE
Answer 36:
Check whether RFC destination AI_RUNTIME_JCOSERVER is correctly configured
Question 37:
How to solve the following mapping error?
NO_MAPPINGPROGRAM_FOUND
Answer 37:
Ensure that mapping program exists and is activated. If it exists then update the cache.
Question 38:
How to solve the following mapping error?
EXCEPTION_DURING_EXECUTE
Answer 38:
This error occurs due to erroneous XML formatting. Check your mapping program and ensure
that you supply valid input data.
Question 39:

How to process the messages stuck in queues?


Answer 39:
Check the queues using transactions SMQ1 (outbound)/SMQ2 (inbound). Resolve the displayed
errors. You can cancel the messages from SXMB_MONI. Execute LUW if necessary and avoid
deleting entries manually.
Question 40:
How to solve the following conversion error in message monitoring?
Unable to convert the sender service XXXX to an ALE logical system
Answer 40:
This error occurs in case of scenarios with IDOC adapters. Whenever you use business systems,
make sure that the corresponding logical system name is maintained in the SLD.
Open your business system in the Integration Directory. Switch to Change mode. Access the
menu path Service Adapter Specific Identifiers. Click the button that says Compare with
System Landscape Directory and chose Apply. Save and activate your change list.
In case of business services, you can manually type a logical system name in the Adapter
Specific Identifiers if required. This name should match the corresponding logical system name
defined in the partner SAP systems partner profiles.
Question 41:
How to monitor BPM?
Answer 41:
Use the transaction code SXMB_MONI_BPE.
Question 42:
What are the steps that need to be carried out to enable a SAP R/3 System to send IDOC to SAP
Exchange Infrastructure?
Answer 42:
1. First - Maintain the Sender R/3 System:
SM59 : Create a RFC destination to XI
WE21 : Create a TRFC Port ->Specify the RFC Destination Created
BD54 : Create a Logical System for the Idoc Receiver
WE20 : Create Partner Profile ->Maintain Outbound and the Inbound Parameters
2. Second - Log on to XI System:
SM59 : RFC Destination for Sender System
IDX1 : Create the port to get Idoc Metadata from Sender System ( The Port Name must match
the port name in the idoc header - Usually in format SAP. eg. SAPID1 [Optional Step. Not
mandatory]
IDX2 : Maintain the Idoc Metadata. This is needed only by XI, and not by other SAP systems.

IDX2 is needed because XI needs to construct IDoc-XML from the IDoc. No other SAP system
needs to do that.
3. To Enable Acknowledgement:
SXMB_ADM ->Integration Engine Configuration ->Specific Configuration ->Add New entry ->
Select parameters as:
Category: RUNTIME
Parameters: ACK_SYSTEM_FAILURE
Current Value: 1
4. GO TO SLD:
Create Technical System: Choose WEB AS ABAP if the system is R/3 -> Define SAP SID,
Installation Number and Database Host Name a Maintain message Server Details according to
Sender System -> Maintain Client Details of Sender System ->Select a Installed Product for
Sender System
Create Business System: Choose WEB AS ABAP if the system is R/3 -> Choose the Technical
System and the client Created Before -> Choose the Installed Product -> Set:
Business System Role: Application System
Related Integration Server: Integration Server
5. IDOC Tunneling in XI
To prevent performance consuming XMLization and de-XMLization IDOCs are tunneled
through SAP XI IDOC adapter meaning no XMLiziation is executed before the IDOC is passed
onto the pipeline. Note the message is converted to UTF-8 codepage.
6. Start transaction SXMB_ADM on SAP XI.
Select option Configuration->Integration Engine Configuration and add two parameters
EXTERNAL_MAPPER in the category IDOC.
Configure the parameter according to the conditions below:
If Message Code and Message Function are specified in the partner profile:
..ReceiverPort...
If only the Message Code is specified in the partner profile:
..ReceiverPort..
If only Message Function is specified in the partner profile:
..ReceiverPort...
7. Integration Builder Integration Directory:
Add Business System: Adapter Specific Identifiers -> 'Logical System' identical to the 'Logical
System Name' in the SLD Business System
IDoc Receiver Communication Channel: port the same as XI System IDX1
Question 43:
Where can I find aii_map_api.jar to create my Java mapping (if I have the access to OS level)?

Answer 43:
Go to your XI server folders and use this path:
j2ee\cluster\server0\apps\sap.com\com.sap.xi.services
Inside com.sap.xi.services folder you'll find the jar file.
Question 44:
How to download aii_map_api.jar file from market place
Answer 44:
If you want to download aii_map_api.jar from service marketplace, there are two ways:
1. Download SAPXITOOL13P_3-20000274.sca (about 40 MB)
Extract IntegrationServices.sda (with WinZip)
Here you find the aii_map_api.jar
2. Download SAPXIPCK13_0-20000423.sca (about 14 MB)
extract pck.sda
Both files are very big, so you should have a quick connection.
Question 45:
If I do not have the access to OS level then where can I find aii_map_api.jar to create my Java
mapping?
Answer 45:
If you don't have the access to your XI/PI server at the directory level or if you don't have access
to Market place download,
Then use the below procedure to get the aii_map_api.jar file,
If your machine is running on windows operating system, (remember your machine means from
where you work on Repository and Directory Frameworks)
Then look in this folder,
\Documents and Settings\\Application
Data\Sun\Java\Deployment\javaws\cache\http\D\P\DMrep\DMrepository
Where - host name of XI server.
- J2EE dispatcher port of XI server generally it will be 50000 if instance number is 00 or it will
50000+(100 X Instance number)
- The user profile with which you are working on your machine.
in the directory you will find "RMaii_map_api.jar". Copy this to your working directory for java
mapping class program and set in classpath. You can also rename this jar file as the original
name is "aii_map_api.jar".
Question 46:

How to solve if java mapping Linkage error occurred?


Incompatible class versions (linkage error)
Answer 46:
The problem "Linkage Error" is due to JDK version mismatch between XI / PI and your Java
IDE.
XI uses JDK1.4 so you have to use JDK 1.4 to compile your java code and generate .jar file.
To use different jdk version at netbeans go to your project -----> right click and than go to
properties tab. than at left hand side select libraries------at top right select manage platform---click add platform--- select the jdk version here and follow the wizard.
Question 47:
How to perform IDOC and HTTP Adapter Monitoring?
Answer 47:
IDOC and HTTP Adapter resides directly in IS (ABAP Stack) and hence they can not be
monitored via transaction SXMB_MONI or from RWB.
IDOC adapter can be monitored from TCODE IDX5
You can test if HTTP adapter is working fine or not as mentioned below.
1. Test the adapter_plain service in TCODE SICF
adapter_plain service can be found under /default_host/sap/xi/adapter_plain
2. TCODE : SMICM and then Shift + F1 and you can see the status of the HTTP server
Question 48:
If each row of the input flat/text file has a different structure, then how to convert text file to
XML file?
Answer 48:
If each row of the input flat/text file has a different structure, then it is referred to as complex
transformation.
Use SAP standard Module named "localejbs/AF_Modules/MessageTransformBean".
Further help is available in
http://help.sap.com/saphelp_nw04/Helpdata/EN/24/4cad3baabd4737bab64d0201bc0c6c/content.
htm.
Question 49:
Can we integrate Peoplesoft with SAP PI?
Answer 49:
Yes, we can integrate Peoplesoft with SAP PI.
1. Go through these blogs for peoplesoft iWAY adapter

https://weblogs.sdn.sap.com/pub/wlg/3734 - Part I
https://weblogs.sdn.sap.com/pub/wlg/3735 - Part II
https://weblogs.sdn.sap.com/pub/wlg/3736 - Part III
2. Another way is to use SOAP Adapter.
Third-party Peoplesoft can send an Asynchronous XML message to PI through SOAP Adapter.
Question 50:
How to get aii_map_api.jar file in PI 7.1?
Answer 50:
The library has been renamed in PI 7.1 as follows.
PI 7.0(3.0) = aii_map_api.jar
PI 7.1 = com.sap.xpi.ib.mapping.lib.jar
You can find the libraries here:
1. com.sap.aii.af.lib.mod.jar = /ext/com.sap.aii.af.lib/lib
2. com.sap.aii.af.ms.ifc_api.jar = /ext/bin/interfaces/com.sap.aii.af.ms.ifc/lib
3. sap.com~tc~logging~java~impl.jar = /system
4. com.sap.aii.af.svc_api.jar = /services/com.sap.aii.af.svc/lib
5. com.sap.aii.af.cpa.svc_api.jar = /services/com.sap.aii.af.cpa.svc/lib
6. com.sap.aii.af.ms.ifc_api.jar = /interfaces/com.sap.aii.af.ms.ifc/lib
7. = /usr/sap//J01/j2ee/cluster/bin
Posted by Madan Agrawal at 6:05 AM 38 comments:

Tuesday, April 7, 2009


Combining three different aspects of PI in one shot

Combining three different aspects of PI in one shot


This web log describes how to combine three different aspects of PI (ASMA, AF Module and
variable substitution) in one shot.
Requirement:
Set Receiver File Name as Payload Attribute Value:
Receiver file name should be ORDERS.xml where will be having the value of an attribute
named order_no from Payload.
Brief Solution:
1. Using dynamic configuration, set the attribute value of payload dynamically to ASMA
2. Using AF module, write the value of ASMA in a variable
3. Using the variable substitution, set the receiver file name schema

Step 1: Dynamic Configuration


In message mapping, create a UDF that will store the value of the attribute order_no
dynamically in the adapter specific message attributes named FileName
Java Code for UDF is below.
DynamicConfiguration conf = (DynamicConfiguration)
container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CON
FIGURATION);
DynamicConfigurationKey FileName =
DynamicConfigurationKey.create("http:/"+"/sap.com/xi/XI/System/File","FileName");
conf.put(FileName, a);
return "";

Step 2: AF Modules
Now as we have set the value of an attribute from payload in ASMA so we will write its value in
a variable message.interface
In the receiver CC, under Modules tab, we will call an AF module
AF_Modules/DynamicConfigurationBean before the Call SAP Adapter.
In the module configuration, we will set the following information.
key.0 = write http://sap.com/xi/XI/System/File FileName
value.0 = message.interface

Step 3: Variable Substitution


We have the value in message.interface so we will assign it to variable substitution.

The value of this variable substitution will be used in the receiver file name schema.

Receiver File Name Schema = + % + + %.xml


For example: ORDERS%order_no%.xml
Since we are not going to use ASMA in our receiver File name schema rather we are using the
variable substitution so make sure that the ASMA is unchecked in your receiver CC.

Another Simple way


There is a simple way to achieve the above requirement Set Receiver File Name as Payload
Attribute Value and the way is to write the UDF to store the value dynamically in ASMA.
UDF code will be as below.
String str = ORDERS + a + .xml
DynamicConfiguration conf = (DynamicConfiguration)
container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CON
FIGURATION);
DynamicConfigurationKey FileName =
DynamicConfigurationKey.create("http:/"+"/sap.com/xi/XI/System/File","FileName");
conf.put(FileName, str);
return "";

But in this web log I have just described the possible ways to combine three different aspects of
PI (ASMA, AF Module and Variable substitution) in one single shot.

You might also like