What is the Directory structure on the server ?
SERVER – SIDE DIRECTORY TREE TO STORE FILES
Application Directory
Bin SQL log srw mesg
Lib rpt forms out
plsql
(Lang)
·
Bin: Contains
executable code of your concurrent programs written in a programming language
such as C, Pro*C, Fortran, or an operating system script.
·
Lib: Contains
compiled object code of your concurrent programs.
·
SQL: Contains
concurrent programs written in SQL*Plus and PL/SQL scripts.
·
Rpt: Contains concurrent
programs written with SQL*Reports.
·
Log: Contains log
files from concurrent programs.
·
Forms/(Language):
Each language has a subdirectory (such as US). The language subdirectory holds
the forms .fmx files.
·
Srw: Contains
concurrent programs written with Oracle Reports.
·
Out: Contains
output files from concurrent program.
·
Mesg: Holds your
application message files for Message dictionary.
·
PLSQL: Contains
PL/SQL libraries used with Oracle reports.
What are the salient features of AOL and Sysadmin functions?
APPLICATION OBJECT LIBRARY
As evident from the name AOL i.e. Application Object
Library is the Library that contains all the Objects of an Application. For
Oracle Apps. To recognize any object, such object must be registered with this
Library.
Salient Features –
·
Registering
Tables with Oracle Apps.
·
Registering Forms
with Oracle Apps.
·
Registering
Concurrent Programs with Oracle Apps.
·
Building Menus.
·
Building
Flexfields.
·
Enabling Zoom.
·
Building Message
Dictionary.
SYSTEM ADMINISTRATION
·
Manage Oracle
Applications security.
·
Manage Concurrent
programs & Reports.
·
Manage Concurrent
processing.
·
Manage Printers.
·
Manage Profile
Options.
·
Manage Document
Sequences.
How do you create a customized form in Apps?
TEMPLATE
FORM
You
will find it in c:\Apps10\Fnd75\Forms\Us
Features
–
·
Starting your
form with TEMPLATE is the only way to ensure you get the following:
a)
Applications
Property Classes and Visual Attributes.
b)
Toolbar.
c)
Menu.
d)
Calendar.
e)
Required
Form-Level triggers.
f)
Required
Procedures.
g)
Applications
color palatte.
h)
Required
Parameters.
i)
Required LOVs and
Record Groups.
j)
And much more !
Which PlSql libraries
are used in customization of form and for what purpose ?
·
Attached
Libraries Used in forms development –
a)
APPCORE - Supports Form and User Interface Features.
1. Packages and Procedures that support the menu, Toolbar
and other standard behaviours.
2. Use APPCORE routines to enable fields
dynamically, maintain dependencies between items, and control specific window
behaviours.
b)
GLOBE
c)
FNDSQF – Supports
Many Application Object Library Features.
1. Most AOL extensions such as message dictionary,
multicurrency, WHO information tracking.
2. Includes Flexfield packages and procedures.
d)
JA
e)
JL
f)
JE
g)
CUSTOM – Supports
Zoom.
h)
APPDAYPK -
Supports the Calendar.
What
is ZOOM?
ENABLING ZOOM
In certain cases, it is useful to
be able to access one form directly from another. For example, it may be very convenient to be
able to open the Customers form directly from the Sales Orders form, to allow
entry of a new customer while creating a new order, or to view information
about a customer that has already been defined.
From within certain forms you can open another form directly by using
the Special menu or, depending on how Oracle Applications has been customized
at your site, by choosing Zoom from the Go menu.
Oracle Applications ship with no
Zooms defined, and the Zoom entry on the Action menu is disabled. When this feature is available and how it
behaves are determined by how Oracle Applications is customized at your site.
Zoom allows the addition of
user-invoked logic on a per-block basis.
How do you register tables in Apps? What is the PL/SQL
package used for registering?
REGISTERING
TABLES WITH ORACLE APPLICATIONS
With
Release 10.6 and 10.7, you now register your custom application tables using a
PL/SQL routine in the AD_DD package.
Procedures
in the AD_DD Package
Procedure
register_table (p_appl_short_name in varchar2,
p_tab_name
in varchar2,
p_tab_type in varchar2,
p_next_extent in number default
512,
p_pct_free in number default 10,
p_pct_used in number default 70);
Procedure
register_column (p_appl_short_name in varchar2,
p_tab_name in varchar2,
p_col_name in varchar2,
p_col_seq in number,
p_col_type in varchar2,
p_col_width in number,
p_nullable in varchar2,
p_translate in varchar2,
p_precision in number default
null,
p_scale in number default
null);
Procedure
delete_table (p_appl_short_name in
varchar2,
p_tab_name in varchar2);
Procedure
delete_column (p_appl_short_name in varchar2,
p_tab_name in varchar2,
p_col_name in varchar2);
p_appl_short_name The application short name of the application that
owns the table (usually your custom application).
p_tab_name The name of the
table (in uppercase letters).
p_tab_type Use 'T' if it is a transaction table
(almost all application tables), or 'S' for a "seed data" table (used
only by Oracle Applications products).
p_pct_free The percentage of space in each of the
table's blocks reserved for future updates to the table (1-99). The sum of p_pct_free and p_pct_used must be
less than 100.
p_pct_used Minimum percentage of used space in
each data block of the table (1-99). The
sum of p_pct_free and p_pct_used must be less than 100.
p_col_name The name of the
column (in uppercase letters).
p_col_seq The sequence number of the column in
the table (the order in which the column appears in the table definition).
p_col_type The column type ('NUMBER', 'VARCHAR2',
'DATE', etc.).
p_col_width The column size (a number). Use 9 for DATE columns, 38 for NUMBER columns
(unless it has a specific width).
p_nullable Use 'N' if the column is mandatory or
'Y' if the column allows null values.
p_translate Use 'Y' if the column values will be
translated for an Oracle Applications product release (used only by Oracle
Applications products) or 'N' if the values are not translated (most
application columns).
p_next_extent The next extent size, in kilobytes. Do not include the 'K'.
p_precision The total number
of digits in a number.
p_scale The number of digits to the right
of the decimal point in a number.
CONCURRENT PROCESSING IN ORACLE APPS.
Definitions
What is a Concurrent
Program?
An
instance of an execution file, along with parameter definitions and
incompatibilities. Several concurrent programs may use the same execution file
to perform their specific tasks, each having different parameter defaults and
incompatibilities.
An
executable program or report in Oracle, which is executed in the background,
and allows user to continue with other work while the job is being executed.
What is a Concurrent
Program Executable?
An
executable file that performs a specific task. The file may be a program
written in a standard language, a reporting tool or an operating system
language.
What is a Concurrent
Request?
A
request to run a concurrent program as a concurrent process.
What is a Concurrent
Process?
An
instance of a running concurrent program that runs simultaneously with other
concurrent processes.
What is a Concurrent
Manager?
A
program that processes user’s requests and runs concurrent programs. System
Administrators define concurrent managers to run different kinds of requests.
What is a Concurrent
Queue?
List of
concurrent requests awaiting processing by a concurrent manager.
What is a Spawned
Concurrent program?
A
concurrent program that runs in a separate process than that of the concurrent
manager that starts it.
PL/SQL
stored procedures run in the same process as the concurrent manager; use them
when spawned concurrent programs are not feasible.
LIFE CYCLE OF CONCURRENT REQUESTS
What are the phases and
statuses through which a concurrent prequest runs through?
·
A concurrent request proceeds through three, possibly four, life cycle
stages or phases:
Pending Request
is waiting to be run
Running Request
is running
Completed Request
has finished
Inactive Request
cannot be run
Within
each phase, a request's condition or status may change. Below appears a listing of each phase and the
various states that a concurrent request can go through.
Concurrent
Request Phase and Status
Phase Status Description
PENDING Normal Request
is waiting for the next available manager.
Standby Program to run request is incompatible with other
program(s) currently running.
Scheduled Request is scheduled to start at a future time or date.
Waiting A child request is waiting for its Parent request to mark
it ready to run. For example, a report
in a report set that runs sequentially must wait for a prior report to
complete.
RUNNING Normal Request
is running normally.
Paused Parent request pauses for all its child requests to
complete. For example, a report set pauses
for all reports in the set to complete.
Resuming All requests submitted by the same parent request have
completed running. The Parent request is
waiting to be restarted.
Terminating Running request is terminated, by selecting Terminate in the
Status field of the Request Details zone.
Life Cycle Contd…..
Phase Status Description
COMPLETED Normal Request
completes normally.
Error Request failed to complete successfully.
Warning Request completes with warnings. For example, a report is generated successfully
but fails to print.
Cancelled Pending or Inactive request is cancelled, by selecting
Cancel in the Status field of the Request Details zone.
Terminated Running request is terminated, by selecting Terminate in the
Status field of the Request Details zone.
INACTIVE Disabled Program
to run request is not enabled. Contact
your system administrator.
On Hold Pending request is placed on hold, by selecting Hold in
the Status field of the Request Details zone.
No Manager No manager is defined to run the request. Check with your system administrator.
What is the difference between Request group and
request set?
REQUESTS GROUPS AND REQUEST SETS
Reports
and concurrent programs can be assembled into request groups and request sets.
· A request group is a collection of
reports or concurrent programs. A System
Administrator defines report groups in order to control user access to reports
and concurrent programs. Only a System
Administrator can create a request group.
· Request sets define run and print
options, and possibly, parameter values, for a collection of reports or
concurrent program. End users and System
Administrators can define request sets.
A System Administrator has request set privileges beyond those of an end
user.
Standard
Request Submission and Request Groups
Standard
Request Submission is an Oracle Applications feature that allows you to select
and run all your reports and other concurrent programs from a single, standard
form. The standard submission form is
called Submit Requests, although it can be customized to display a different
title.
· The reports and concurrent programs
that may be selected from the Submit Requests form belong to a request security
group, which is a request group assigned to a responsibility.
· The reports and concurrent programs
that may be selected from a customized Submit Requests form belong to a request
group that uses a code.
In
summary, request groups can be used to control access to reports and concurrent
programs in two ways; according to a user's responsibility, or according to a
customized standard submission (Run Requests) form.
Once the report is defined what are the next steps
involved in running it through Apps?
1. Define Executables….
2. Define Concurrent program and
its parameters
3. Put the on
the server directory for the application of executables
/appl/databse/application/1.0/reports
DEFINE CONCURRENT PROGRAM
EXECUTABLE
What are different
execution methods of executables?
FlexRpt The
execution file is written using the FlexReport API.
FlexSql The
execution file is written using the FlexSql API.
Host The
execution file is a host script.
Oracle
reports The
execution file is an Oracle Reports file.
PL/SQL
Stored Procedure The execution file
is a stored procedure.
SQL*Loader The execution file
is a SQL script.
SQL*Plus The execution
file is a SQL*Plus script.
SQL*Report The execution file
is a SQL*Report script.
Spawned The execution
file is a C or Pro*C program.
Immediate The execution file is a program
written to run as a subroutine of the concurrent manager. We recommend against defining new immediate
concurrent programs, and suggest you use either a PL/SQL Stored Procedure or a
Spawned C Program instead.
DEFINE AND MODIFY YOUR CONCURRENT PROGRAMS
Prerequisites
· Build the execution file for your
concurrent program.
· Use the Concurrent Program
Executables window to define a concurrent program executable for your operating
system program.
Concurrent
Programs Block
The
combination of application name plus program name uniquely identifies your
concurrent program.
Program
You see
this longer, more descriptive name when you view your requests in the
Concurrent Requests window. If this
concurrent program runs through Standard Request Submission, you see this name
in the Submit Requests window when you run this program.
Short
Name
Enter a
brief name that Oracle Applications can use to associate your concurrent
program with a concurrent program executable.
Application
The
program's application determines what ORACLE username your program runs in and
where to place the log and output files.
Enabled
Indicate
whether users should be able to submit requests to run this program and the
concurrent managers should be able to run your program.
Disabled
programs do not show up in users' lists, and do not appear in any concurrent
manager queues. You cannot delete a
concurrent program because its information helps to provide an audit trail.
Name
Select
the concurrent program executable that can run your program. You define the executable using the
Concurrent Program Executables window.
You can define multiple concurrent programs using the same concurrent
program executable. See: Concurrent
Program Executables.
Options
If your
concurrent program is a SQL*Report program, you can enter execution options or
switches for the Report Formatter (RPF).
To use several options at the same time, do not repeat the '-'. For example, enter -FI to choose the form
feed and initial page eject options. You
can enter these options in either uppercase or lowercase and in any order. Valid options for SQL*Report are:
-F Form
Feed Choose this option to send a form feed character before printing a page.
-I Initial Page Eject Choose
this option to eject a page before printing.
-P:n:m Page Choose this option to print from page n
topage m.
-R Reverse
Underlining Order Choose this option to print the underline character on
devices that do not allow overstriking.
-U Upper
Case Choose this option to print all of your report in uppercase.
If you
define a concurrent program with the bitmapped version of Oracle Reports, you
must set the execution option field to "VERSION=2.0b".
You can
also pass ORIENTATION= and PAGESIZE=x
parameters to your bitmapped Oracle Reports program. Units of width and height are set in your
Oracle Reports program.
There
should be no spaces before or after the execution options values. The parameters should be separated by only a
single space.
Method
The
execution method your concurrent program uses appears here.
Valid
values are:
Spawned Your concurrent program is a
stand-alone program in C or Pro*C.
Host Your concurrent program is
written in a script for your operating system.
Immediate Your concurrent program is a
subroutine written in C or Pro*C.
Immediate programs are linked in with your concurrent manage and must be
included in the manager's program library.
Oracle
Reports Your
concurrent program is an Oracle Reports script.
PL/SQL Stored Procedure Your concurrent program is a stored
procedure written in PL/SQL.
SQL*Loader
Your concurrent
program is a SQL*Loader program.
SQL*Plus Your concurrent program is a SQL*Plus
or PL/SQL script.
Concurrent Programs Contd…….
SQL*Report Your concurrent program is a SQL*Report
program. You can enter switch options,
such as the form feed option, in the Execution Options field.
Priority
You can
assign this program its own priority.
The concurrent managers process requests for this program at the
priority you assign here.
If you
do not assign a priority, the user's profile option Concurrent:Priority sets
the request's priority at submission time.
Request
Type
If you
want to associate your program with a predefined request type, enter the name
of the request type here. The request
type can limit which concurrent managers can run your concurrent program.
You can
define a concurrent manager to run only certain types of concurrent requests.
Use in SRS
Check
this box to indicate that users can submit a request to run this program from a
Standard Request Submission window.
If you
check this box, you must register your program parameters, if any, in the
Parameters window accessed from the button at the bottom of this window.
Allow
Disabled Values
If you
check the Use in SRS box, you can also check this box to allow a user to enter
disabled or outdated values as parameter values.
Many
value sets use special table columns that indicate whether a particular value is
enabled (using ENABLED_FLAG, START_DATE_ACTIVE, and END_DATE_ACTIVE
columns). These value sets normally
allow you to query disabled or outdated values but not enter them in new data. For Standard Request Submission, this means
that a user would not normally be allowed to enter disabled values as report
parameter values when submitting a report, even if the report is a query-only
type report.
Run Alone
Indicate
whether your program should run alone relative to all other programs in the
same logical database. If the execution
of your program interferes with the execution of all other programs in the same
logical database (in other words, if your program is incompatible with all
programs in its logical database, including itself), it should run alone.
You can
enter any specific incompatible programs in the Incompatible Programs windows.
Save
Indicate
whether to automatically save the output from this program to an operating
system file when it is run. This value
becomes the default for all requests submitted for this program. The output of programs with Save set to No is
deleted after printing.
If this
is a Standard Request Submission program, users can override this value from
the Submit Requests window.
Print
If you
enter No, your concurrent program's output is never sent to the printer.
Columns
/ Rows
Enter
the minimum column and row length for this program's report output. Oracle Applications uses this information to
determine which print styles can accommodate your report.
Style
The
print style you select depends on your system and printer setup. Print styles include:
· 132 columns and 66 lines (Landscape)
· 180 columns and 66 lines (Landwide)
· 80 columns and 66 lines (Portrait)
· 132 columns and 62 lines (A4)
Your
list is limited to those styles that meet your program's columns and row length
requirements.
Style
Required
If your
program requires a specific print style (for example, a checkwriting report),
use this check box to enforce that print style.
Printer
If you
want to restrict your program's output to a single printer, enter the name of
the printer to which you want to send your output. If your program has minimum or maximum
columns or rows defined, your list of values is limited to those printers that
can support your program's requirements.
Users
cannot override your choice of printer from the Submit Requests or Concurrent
Requests windows.
Copy to... Choose this button to create another
concurrent program using the
same executable, request and report information. You can elect to copy the incompatibility and
parameter details as well.
Incompatibilities Choose this button to open
the Incompatible Programs window.
Parameters Choose this button to open the
Concurrent Program Parameters window.
CONCURRENT PROGRAM PARAMETERS
Enter
and update the program parameters that you wish to pass to the program
executable. Program parameters defined
here should match the variables in your execution file.
Sequence
Choose
the sequence numbers that specify the order in which your program receives
parameter values from the concurrent manager.
The
default value for this field is the next whole sequence number. If you frequently change sequence numbers or
frequently insert and delete parameters, carefully check the default value to
ensure it matches your expectations.
Enabled
Disabled
parameters do not display at request submission time and are not passed to your
execution file.
Validation
Information
Value
Set
Enter
the name of the value set you want your parameter to use for validation. You can only select from independent, table,
and non-validated value sets.
The
maximum size of your value set is 240 characters.
Default Type
If you
want to set a default value for this parameter, identify the type of value you
need.
Valid
types include:
Constant The default value can be
any literal value.
Current Date The default value is the current date in the format
DD-MON-YY or DD-MON-YYYY, depending on the length of the segment.
Maximum Date
Size Format
9 DD-MON-YY
11 DD-MON-YYYY
Current Time The default value is the current time or the current
date and time, depending on the length of the segment.
Maximum Time
Size Format
5 HH24:MI
8 HH24:MI:SS
15 DD-MON-YY HH24:MI
17 DD-MON-YYYY HH24:MI
18 DD-MON-YY HH24:MI:SS
20 DD-MON-YYYY HH24:MI:SS
Concurrent Programs Parameters
contd.......
Profile The
default value is the current value in the user profile option defined in the
Default Value field. Use the profile
option name, not the end-user name. You
do not need to include $PROFILE$.
SQL Statement The default value is determined by
the SQL statement you defined in the Default Value field.
Segment The default value is the value entered in a
prior segment of the same parameter window.
If you
choose Current Date or Current Time, you skip the next field.
Default
Value
You can
enter a default value for the parameter.
This default value for your parameter automatically appears when you
enter your parameter window. You
determine whether the default value is a constant or a context-dependent value
by choosing the default type.
Your
default value should be a valid value for your value set. Otherwise you see an error message when you
enter your parameter window on the Run Request window and your default value
does not appear.
Required
If the
program executable file requires an argument, you should require it for your
concurrent program.
Enable
Security
If the
value set for this parameter does not allow security rules, then this field is
display only. Otherwise you can elect to
apply any security rules defined for this value set to affect your parameter
list.
Range
Choose
either Low or High if you want to validate your parameter value against the
value of another parameter in this structure.
Parameters with a range of Low must appear before parameters with a
range of High (the low parameter must have a lower number than the high
parameter). For example, if you plan two
parameters named "Start Date" and "End Date," you may want
to force users to enter an end date later than the start date. You could assign "Start Date" a
range of Low and "End Date" a range of High. In this example, the parameter you name
"Start Date" must appear before the parameter you name "End
Date."
If you
choose Low for one parameter, you must also choose High for another parameter
in that structure (and vice versa).
Otherwise you cannot commit your
changes.
Window
Information
Display
Indicate
whether to display this parameter in the Parameters window when a user submits
a request to run the program from the Submit Requests window.
You
should provide a default type and value for any non-displayed parameter.
Display
Size
Enter
the field length in characters for this parameter. The user sees and fills in the field in the
Parameters window of the Submit Requests window.
You
should ensure that the total of the value set maximum sizes (not the display
sizes) for all of your parameters, plus the number of separators you need
(number of parameters minus one), does not add up to more than 240. If your program values' concatenated length
exceeds 240, you may experience truncation of your data in some forms.
Description
Size
Enter
the display length in characters for the parameter value description. Your window may show fewer characters of your
description than you specify here if there is not enough room (determined by the sum of your longest prompt
plus your display size for this parameter plus seven). However, your window does not display more
characters of the description than you specify here.
Prompt
A user
sees the prompt instead of the parameter name in the Parameters window of the
Submit Requests window.
Concatenated
Description Size
Enter
the display length in characters for the parameter value description. The user sees the parameter value in the
Parameter Description field of the Submit Requests and View Requests forms. The Parameter Description field concatenates
all the parameter values for the concurrent program.
Suggestion:
We recommend that you set the Concatenated Description Size for each of your
parameters so that the total Concatenated Description Size for your program is
80 or less, since most video screens are 80 characters wide.
Token
For a
parameter in an Oracle Reports program, the keyword or parameter appears
here. The value is case
insensitive. For other types of
programs, you can skip this field.
What are different types of validations for Value Sets?
VALUE SETS VALIDATION TYPES
There are several validation types
that affect the way users enter and use segment or
parameter values:
· None
(not validated at all)
· Independent
· Dependent
· Table
· Special
(advanced)
· Pair
(advanced)
Attention: The Accounting Flexfield
only supports Independent, Dependent, and
Table validation.
You cannot change the validation
type of an existing value set, since your changes
affect all flexfields and report
parameters that use the same value set.
None
You use
a None type value set when you want to allow users to enter any value so long
as that value meets the value set formatting rules. That is, the value must not exceed the
maximum length you define for your value set, and it must meet any format
requirements for that value set. Because a
None value set is not validated, a parameter that uses this value set
does not provide a list of values for your users.
Independent
An
Independent value set provides a predefined
list of values for a
segment. These values can have an associated
description. For example, the value 01 could have a
description of "Company 01".
The meaning of
a value in
this value set does not
depend on the value
of any other
segment. Independent values are stored in an Oracle Application
Object Library table. You define
independent values using an Oracle Applications window, Segment Values.
Table
A
table-validated value set provides
a predefined list of values like an independent set, but
its values are stored in an
application table. You
define which table you want to use, along with a WHERE cause to limit
the values you want to use for your set.
Typically, you use a table-validated set when you have a table whose
values are already maintained
in an application table (for
example, a table of vendor names
maintained by a
Define Vendors form).
Table validation also
provides some advanced advanced
features such as allowing a segment
to depend upon
multiple prior segments in the same structure.
Dependent
A dependent
value set is
similar to an
independent value set,
except that the available values
in the list and
the meaning of
a given value
depend on which independent value
was selected in a
prior segment of the flexfield structure. You can think of a dependent
value set as a collection of little value sets, with one
little set for each independent
value in the corresponding independent
value set. You must define your
independent value set before you define
the dependent value set that depends
on it. You
define dependent values in the
Segment Values windows, and your values
are stored in
an Oracle Application Object
Library table.
Special
and Pair Value Sets
Special
and pair value sets provide a mechanism to allow a "flexfield-within-a-
flexfield". These value sets are primarily used for
Standard Report Submission
parameters. You do not generally use these value sets for
normal flexfield segments.
What are the types of profile options? User and
System….
PROFILES
A user
profile is a collection of changeable options that affect the way your
applications run. Oracle Applications
establishes a value for each option in a user's profile when the user logs on
or changes responsibility. Oracle
Applications provides these options so that you can alter the behavior of your
applications to suit your own preferences.
Oracle
Applications uses a set of user profile options that are common to all the
application products. In addition, each
application product has its own unique set of user profile options. The reference guide for your application
contains a complete list and a description of each user profile option that is
specific to your application.
User
profile options can be set at one or more of four levels: Site, Application,
Responsibility, and User. Your system
administrator can set default option values at any of these levels.
SYSTEM PROFILE VALUES
Use
this window to view and set profile option values.
You can
view and set profile options at the site, application, responsibility, and user
levels. Your settings affect users as
soon as they sign on or change responsibility.
See: Overview of Setting User Profiles.
Profile Values Block
Set values for profile
options at one or more levels. Each
value overrides those set to its left.
For example, a User Value setting overrides a Responsibility Value
setting, which overrides an Application Value setting, which overrides a Site
Value setting.
Profile
This
field displays the name of a profile option.
Site
This
field displays the current value, if set, for all users at the installation
site.
Application
This
field displays the current value, if set, for all users working under
responsibilities owned by the application identified in the Find Profile Values
block.
Responsibility
This
field displays the current value, if set, for all users working under the
responsibility identified in the Find Profile Values block.
User
This
field displays the current value, if set, for the application user identified
in the Find Profile Values block.
Suggestion:
You should set site-level default values for any required options after
installation of an application. If you
do not assign a particular profile option at any of the four levels, that
option does not have a default value and may cause errors when you use forms,
run reports, or run concurrent requests.
No comments:
Post a Comment
Thanks for your comments submitted.,will review and Post soon! by admin.