0% found this document useful (0 votes)
61 views42 pages

Oracle WebADI Setups and Backend Effected Queries

Uploaded by

David George
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
61 views42 pages

Oracle WebADI Setups and Backend Effected Queries

Uploaded by

David George
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 42

Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

1.1. Responsibilities, menu


Applications: Web Application Desktop Integrator (WebApplications Desktop Integrator)
Responsibilities: Desktop Integration (Desktop Integration) <11i version: OracleWebADI>
Responsibilities: Desktop Integration Manager (Desktop Integration Manager)

Desktop Integration menu

Desktop Integration Manager menu

Profile Option:
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

BNE Allow No Security Rule Yes

ADI: Use Function Security Null (Whether security is enabled features. Yes, you need to include the
appropriate menu function)

Development WebADI to use "HR ADISeeded Integrator FormFunctions (HR ADI implanted Form Builder
function)."

Create database objects and register


Create Table
CREATE TABLE APPS.XXAA_WEBADI_DEMO
(
ADI_ID NUMBER,
ADI_ORGANIZATION_ID NUMBER,
ADI_CODE VARCHAR2(30 BYTE),
ADI_DATE DATE
)
-- Create synonym
CREATE PUBLIC SYNONYM XXAA_WEBADI_DEMO FOR APPS.XXAA_WEBADI_DEMO;

--Create sequence
CREATE SEQUENCE APPS.XXAA_WEBADI_DEMO_S;

CREATE PUBLIC SYNONYM XXAA_WEBADI_DEMO_S FOR APPS.XXAA_WEBADI_DEMO_S;


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

-- Insert demo data


INSERT INTO XXAA_WEBADI_DEMO VALUES(1,204,'TEST01',SYSDATE); COMMIT;

-- Register table and columns


BEGIN
ad_dd.register_table('cust','XXAA_webadi_demo','t');
ad_dd.register_column('cust','XXAA_webadi_demo','adi_id',1,'number',38,'y','n');
ad_dd.register_column('cust','XXAA_webadi_demo','adi_organization_id',2,'number',
38,'y','n');
ad_dd.register_column('cust','XXAA_webadi_demo','adi_code',3,'varchar2',30,'y','n
');
ad_dd.register_column('cust','XXAA_webadi_demo','adi_date',4,'date',9,'y','n');
COMMIT;
END;

-- Create demo view


CREATE OR REPLACE VIEW XXAA_WEBADI_DEMO_V
AS
SELECT
cwd.adi_id
,cwd.adi_organization_id
,cwd.adi_code ,cwd.adi_date
FROM XXAA_webadi_demo cwd;

Create a Package
CREATE OR REPLACE PACKAGE APPS.XXAA_WEBADI_DEMO_PKG IS
PROCEDURE upload_data(p_id IN NUMBER
,p_organization_id NUMBER
,p_code IN VARCHAR2
,p_date IN DATE);
END XXAA_WEBADI_DEMO_PKG;
/
CREATE OR REPLACE PACKAGE BODY APPS.XXAA_WEBADI_DEMO_PKG IS
PROCEDURE upload_data(p_id IN NUMBER
,p_organization_id NUMBER
,p_code IN VARCHAR2
,p_date IN DATE) IS
BEGIN
--do any thing you want to do here
IF p_id IS NULL THEN
INSERT INTO XXAA_WEBADI_DEMO
(adi_id
,adi_organization_id
,adi_code
,adi_date)
SELECT XXAA_WEBADI_DEMO_S.NEXTVAL
,p_organization_id
,p_code
,p_date
FROM dual;
ELSE
UPDATE XXAA_WEBADI_DEMO CWD
SET cwd.adi_organization_id = p_organization_id
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

,cwd.adi_code = p_code
,cwd.adi_date = p_date
WHERE cwd.adi_id = p_id;
END IF;
COMMIT;
END;
END XXAA_WEBADI_DEMO_PKG;
/

2.3. Creating Integrator(Required)


N: Desktop Integration -> Create Document
Select Integrator: HR Integrator Setup
Click on Next

Do not choose the report button, so you can edit and upload.
Select Excel 2007 and click on Next

Select None and Click on next

Click on Create Document

The system automatically creates a document and open Excel


Click on close button
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Enter the below details:


Item Value
Metadata Type UPDATE
Application Short Name CUST
Integrator User Name XXAA_WEBADI_DEMO
View Name XXAA_WEBADI_DEMO_V
Form Name GENERAL
API Package Name XXAA_WEBADI_DEMO_PKG
API Procedure Name UPLOAD_DATA
Interface User Name WEBADI demo Interface
Interface Parameter List Name Parameter List
API Type PROCEDURE
API Return Type
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Click on Add ins  Oracle  Upload

Select the the option and click on upload


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

If the records are loaded then


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

SELECT bni.application_id
,bni.integrator_code
,bni.user_name
FROM bne_integrators_vl bni
WHERE bni.user_name = 'XXAA_WEBADI_DEMO';

2.4 Maintenance Association Integrator Form Functions (Required)


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

N: Desktop Integration -> Create Document


Select Integrator: HR Maintain Integrator FormFunction Associations

N: Application Developer -> Applications -> Function

Function: XXAA_WEBADI_FUNCTION
Functions Username: XXAA_WEBADI_FUNCTION
Type: Functions
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Add functionality to the menu


N: Application Developer -> Applications -> Menu

Menu : DESKTOP INTEGRATION MENU


Function : XXAA_WEBADI_FUNCTION

Integrated desktop menu below to add functionality XXAA_WEBADI_FUNCTION, which prompted not need
to fill.
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

The system automatically creates a document and open Excel


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

SELECT
bni.application_id
,bni.integrator_code
,bni.user_name
,bsr.security_value
FROM
bne_integrators_vl bni
,bne_security_rules bsr
WHERE bni.user_name LIKE 'XXAA_WEBADI_DEMO'
AND bsr.application_id = bni.application_id
AND bsr.security_code = bni.integrator_code;

2.5 Definition of the layout (Required)


N: Desktop Integrator -> Custom Layout

Select Integrator created above: "XXAA_WEBADI_DEMO", Find, and then click Create

Enter layout name: XXAA_WEBADI_DEMO_LAYOUT, head a few do not control, directly next
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Required fields inside the arrangement of all select "OK." Optional field regardless, the next step.

Fields required field area is automatically out of the API Procedure Name list of parameters, and automatically
remove the front

The P_. We can arrange these fields are displayed in the Header or Line. Here we all changed Line, because I

They are single-table import


Note: 1, these values will be passed API Procedure Name, row once, whether here or Header Line

2, field names and variables P_XX views, some variables after removing P_ best not to view the inside of the
field same name.
So is separately displayed in Excel inside line, passed as a parameter when API Procedure Name is tied, as In
API Procedure Name code inside, we can distinguish himself in his early artificial line segment and sub-fields,
and then insert
Go to a different table.
The field is an optional field area View of the field, you cannot display all.
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

SELECT
bni.application_id
,bni.integrator_code
,bni.user_name
,blv.layout_code
,blv.user_name
,blc.sequence_num
,bic.*
FROM
bne_integrators_vl bni
,bne_layouts_vl blv
,bne_layout_cols blc
,bne_interface_cols_vl bic
WHERE 1=1
AND bni.user_name LIKE 'XXAA_WEBADI_DEMO'
AND blv.integrator_app_id = bni.application_id
AND blv.integrator_code = bni.integrator_code
AND blv.layout_code = blc.layout_code
AND blc.interface_app_id = bic.application_id
AND blc.interface_code = bic.interface_code
AND blc.interface_seq_num = bic.sequence_num;

2.6 Definition Mapping (Optional)


N: Desktop Integration -> Define Mapping
Select Integrator created above "XXAA_WEBADI_DEMO", find:
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

This will pop up a default defined mapping update:

Map details the next step.


Define the mapping
N: Application

Field defined here corresponds to the database interface shows which field.
We added four lines, the view out of the value of the parameter passed to Procedure.

SELECT bni.application_id ,
bni.integrator_code ,
bni.user_name ,
bmv.mapping_code
FROM bne_integrators_vl bni ,
bne_mappings_vl bmv
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

WHERE bni.user_name LIKE 'XXAA_WEBADI_DEMO'


AND bmv.integrator_app_id = bni.application_id
AND bmv.integrator_code = bni.integrator_code;

2.7 Definition of query (Optional)


Used to define the filtering criteria.
N: Desktop Integration -> Creating Documents

Select HR CreateStandaloneQuery

If you later want to modify the query instead HR Maintenance (HR Maintain StandaloneQuery).

We enter the following: (preferably double-click the cell and choose out LOV
Item Value
where
adi_organization_id=nvl($PARAM$.CUST:P_ORGANIZ
SQL WHERE clause ATION_ID,adi_ORGANIZATION_ID) order by ADI_ID
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

1st Parameter Name CUST:P_ORGANIZATION_ID


1st Parameter Type Number
1st Parameter Prompt Inventory Organization ID

Behind the first one ... the first five parameter name parameter name, this is according to the parameters
defined within the SQL WHERE clause to the front.

Parameter prompts when you are creating a document, select the parameter description.
Add to EBS
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

2.8 Use
N: Desktop Integration -> Creating Documents
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

You can also 2.9, by defining the function of way to access.

If you do not do that step to define the query conditions, without having to enter a query in this condition,
direct continuation

Document Creation Review


N: Creating Documents
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

You can see, ID field has a value, the field is automatically generated, indicating just record into the table.
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

3. Customized development (Advanced-Excel LOV)


3.1 Features Summary
This example is based on the second chapter customized development (basic) conducted. LOV is to achieve a
function in Excel.

3.2 The relationship between the components of a custom field with LOV
Directly update the base table
In APPS execution:

SELECT
bic.interface_col_name -- field name
, bic.val_type -- fill TABLE
, bic.val_id_col -- the parameters passed to the field program, fill
ORGANIZATION_ID
, bic.val_mean_col -- Ecxel displayed field, fill ORANIZATION_ID
, bic.val_desc_col -- LOV in the Description field, fill ORGANIZATION_CODE,
ORGANIZATION_NAME
, bic.val_obj_name -- where the list shows that fill
ORG_ORGANIZATION_DEFINITIONS
, bic.val_addl_w_c -- where the statement, from time to fill
, bic.val_component_app_id -- component application id, fill 20003
, bic.val_component_code -- component code, not yet created, filling in one,
and then create, fill CUX_ORGANIZATION
, bic.lov_type -- fill POPLIST or STANDARD, you can fill NONE
, bic.offline_lov_enabled_flag -- offline editing EXCEL spreadsheet is
available, fill Y
FROM bne_interface_cols_b bic
WHERE EXISTS
(SELECT NULL
FROM bne_interfaces_vl intf ,bne_integrators_vl intg --Integrator
WHERE bic.interface_code = intf.interface_code
AND intf.integrator_code = intg.integrator_code
AND intg.user_name = 'XXAA_WEBADI_DEMO'
)
AND bic.interface_col_name = 'P_ORGANIZATION_ID'
FOR UPDATE;

Note understand val_id_col, val_mean_col, val_desc_col, these three fields is very important.

val_id_col: program parameters passed to the field. This column need only pass values to
P_ORGANIZATION_ID, it only needs to fill ORGANIZATION_ID. If you define the parameters
P_ORGANIZATION_CODE, you need to fill ORGANIZATION_ID, ORGANIZATION_CODE.

val_mean_col: fields displayed in Excel. This column is to be displayed inventory organization ID, it only
needs to fill in a ORGANIZATION_ID. If you need to display the inventory organization code, then fill
ORGNIZATION_CODE (pass by value or can be passed ORGANIZATION_ID, but at the interface shows
inventory organization code). If both display inventory organization ID, inventory organization code on excle
interface, ORANIZATION_ID, ORGANIZATION_CODE need to enter both.

val_desc_col: LOV in the description field can be a field, it can be more than one field
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

If you do not understand what this place, you can take a standard WEBADI direct reference to see how
settings.

The reason for this error is reported: in val_mean_col input is ORANIZATION_ID, ORGANIZATION_CODE,
ORGANIZATION_NAME three fields, but only display inventory organization ID field on the interface. The
input value should be changed to: ORANIZATION_ID

3.3 Creating LOV components


Create components 1,
through the previously defined val_component_code to get value application_id, val_component_app_id,
val_component_code of

SELECT b.application_id ,
b.val_component_app_id ,
b.val_component_code
FROM bne_interface_cols_b b
WHERE b.val_component_code = 'OA_ORGANIZATION';

2, to the assembly base table insert records


INSERT INTO bne_components_b
(application_id
,component_code
,object_version_number
,component_java_class
,param_list_app_id
,param_list_code
,created_by
,creation_date
,last_updated_by
,last_update_login
,last_update_date
)
VALUES
(231 -- corresponding BNE_INTERFACE_COLS_B.VAL_COMPONENT_APP_ID
, 'CUST_ORGANIZATION' -- corresponding BNE_INTERFACE_COLS_B.VAL_COMPONENT_CODE
, 1
, 'oracle.apps.bne.integrator.component.BneOAValueSetComponent' -- Oracle
standard code
, 231 -- Parameter Application ID
, 'CUST_ORGANIZATION' -- the code name for the parameter, this parameter is very
important
, -1
, SYSDATE
, -1
, -1
, SYSDATE
);

3, to insert records in the table assembly language


INSERT INTO bne_components_tl
(application_id
,component_code
,LANGUAGE
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

,source_lang
,user_name
,created_by
,creation_date
,last_updated_by
,last_update_login
,last_update_date)

VALUES
(231 -- corresponding bne_components_b.application_id
, 'CUST_ORGANIZATION' -- corresponding bne_components_b.component_code
, 'US'
, 'US'
,'Inventory Organization' -- Parameter Description
, -1
, SYSDATE
, -1
, -1
, SYSDATE);

3.4 Definition of Parameters


Copy parameters based on existing parameters
Next: Desktop Integration Manager -> Define Parameters

Applications: Web Application Desktop Integrator


Un Check The Restrict to this application

Click Find Name the back, you can use an existing Oracle system parameters (eg: COMP_AVG_JNL_FLAG)
parameters and attributes to create customized applications.
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Click on duplicate
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Name: CUST_ORGANIZATION inventory organization


Application: CUSTOM Custom
Code: CUST_ORGANIZATION
Note: Application must be the same as the previous custom applications

Code must be consistent with bne_components_b. Param_list_code. Sql refer to the following
SELECT
bcb.param_list_code
,bcb.component_code
FROM bne_components_b bcb
WHERE bcb.component_code = 'CUST_ORGANIZATION'

Save and exit interface.

Change the parameter properties

Next: Desktop Integration Manager -> Define Parameters


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Modify table-columns property

Value: ORGANIZATION_ID, ORGANIZATION_CODE, ORGANIZATION_NAME


Description: inventory organization ID, inventory organization code, inventory organization

Click Save
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Description: 1, Value field is a field defined LOV displayed, Description define basically useless,
Show or Value LOV in the values. Only shows the first field can be modified in the table-headers attribute
Set.

2, enter the VALUE of each column name, use "," to separate. Note that the field names must be
One BNE_INTERFACE_COLS_B.VAL_OBJ_NAME field and appears in
BNE_INTERFACE_COLS_B in VAL_ID_COL, VAL_MEAN_COL or Val_Desc_Col
, Otherwise displays no value.

3, SQL Reference:
SELECT
b.val_obj_name ,
b.val_id_col ,
b.val_mean_col ,
b.val_desc_col
FROM bne_interface_cols_b b
WHERE b.val_component_code LIKE '%CUST_ORGANIZATION'

Modify table-column-alias attribute


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Value: P_ORGANIZATION_ID
Description: P_ORANIZATION_ID
Note: This step is very important. In front of the table column must be in the same order (separated by
commas), the name must

Hereinafter the same shall be the same as that PACKAGE parameters. Otherwise, the value is not returned
excel
Reference SQL:
SELECT bic.interface_col_name ,
bic.val_obj_name ,
bic.*
FROM bne_interface_cols_b bic ,
bne_interfaces_vl intf ,
bne_integrators_vl intg
WHERE bic.interface_code = intf.interface_code
AND intf.integrator_code = intg.integrator_code
AND bic.interface_col_type=1
AND intg.user_name = 'XXAA_WEBADI_DEMO'
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

ORDER BY bic.creation_date DESC;

Modify table-select-column attributes

Value: P_ORGANIZATION_ID (on behalf of the return of field)


Description: P_ORGANIZATION_ID
The name of the field must remain exactly BNE_INTERFACE_COLS_B.interface_col_name
Cause. And the field must exist in BNE_INTERFACE_COLS_B.VAL_OBJ_NAME column, or

The use of pseudonyms is specified in Table ColumnAlias parameters property. Otherwise, after the selection
of a list of values, not from

EXCEL spreadsheet automatically update the corresponding item.

Modify table-headers attribute


Value: Inventory Organization ID (LOV first header field value of)
Description: Inventory Organization ID
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Modify window-width property

Value: 600 (LOV width)


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Save

After each attribute modification finished, click Save oh we must remember that, or else you will regret it!

Use
1, restart the application, because the LOV call is Servlet class, you must reload the parties can enter into force.

If you modify the property value is no need to restart the application. Only update the base table

When bne_interface_cols_b the values only need to restart the application.

2, the use WEBADI, LOV finally see the effect:

4 custom development. (Advanced - other features to expand)


4.1 modify Excel column header

Parameters Excel column names package of WebADI generated is the same. Allowing users to see the column
headings in English, it is estimated
Some would disagree.
You can directly modify the base table bne_interface_cols_tl to achieve
SELECT
bic.prompt_left -- head table header
, bic.prompt_above -- row table header,bic.language
FROM bne_interface_cols_tl bic
WHERE EXISTS
(SELECT NULL
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

FROM bne_interfaces_vl intf ,bne_integrators_vl intg


WHERE bic.interface_code = intf.interface_code
AND intf.integrator_code = intg.integrator_code
AND intg.user_name = 'XXAA_WEBADI_DEMO')
FOR UPDATE
;

4.2 Use the drop down box query parameters


Defined set of values
First define a set of values, as a data source drop-down box
Value Set Name: CUX_WEBADI_ORGANIZATION
Authentication Type: Table
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

SELECT
pdf.rowid ,
pdf.param_defn_code ,
pdf.param_name ,
pdf.prompt_left ,
pdf.datatype ,
pdf.val_type ,
pdf.val_value ,
pdf.display_type ,
pdf.display_style ,
intg.user_name
FROM bne_integrators_vl intg ,
bne_contents_vl cont ,
bne_param_list_items pl ,
bne_param_defns_vl pdf
WHERE intg.application_id = cont.integrator_app_id
AND intg.integrator_code = cont.integrator_code
AND cont.param_list_app_id = pl.application_id
AND cont.param_list_code = pl.param_list_code
AND pl.param_defn_app_id = pdf.application_id
AND pl.param_defn_code = pdf.param_defn_code
AND intg.user_name ='XXAA_WEBADI_DEMO';

VAL_TYPE: Authentication Type, 1: no authentication 2: The value set validation 3: Lookup verification
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

VAL_VALUE: value value set under verification to verify the situation, fill value set; under Lookup validation,
in accordance with the

view_application_id: lookup_type format fill values, such as: 450: FII_PLAN_TYPE

DISPLAY_TYPE: Display Type 1: check box 2: radio button 3: list box

4: text area 5: password box

DISPLAY_STYLE: Display Style This value is only displayed when the entry into force of 1,2

Perform modifications
UPDATE bne_param_defns_b bpd
SET bpd.val_type = 2 -- value SET validation ,
, bpd.val_value = 'CUX_WEBADI_ORGANIZATION' -- the value SET name,
, bpd.display_type = '3 '
WHERE bpd.param_name = 'CUST:P_ORGANIZATION_ID';
COMMIT;

LOV achieve the desired form, the current is impossible. The reason is simple HTML standard components
LOV not realize it had Some difficulty

4.3 Creating an integrated shortcuts


N: Application Developer -> Applications -> Function

Function : XXAA_WEBADI_DEMO_FUN
User Function Name : XXAA_WEBADI_DEMO_FUN
Type : SSWA servlet functions
Html call : BneApplicationService
Parameters : bne: page = BneCreateDoc & bne: language = US & bne: reporting = N &
bne: integrator = 20067: GENERAL_463_INTG & bne: layout = 20067:
XXAA_WEBADI_DEMO_LAYOUT & bne: content = 20067: GENERAL_463_CNT & bne: map =
20067: GENERAL_463_MAP & bne: noreview = anything

20003 : represents the application product ID, to obtain the following ways :
SELECT application_id
FROM fnd_application
WHERE application_short_name = 'CUST';

Integrator: Get in the following ways :


SELECT t.integrator_code
FROM bne.bne_integrators_tl t
WHERE t.user_name = 'XXAA_WEBADI_DEMO'; -- Integrated Used username

layout: get the following ways :


SELECT a.layout_code
FROM bne_layouts_b a
WHERE a.integrator_code = 'GENERAL_463_INTG';

content: get the following ways :


SELECT t.content_code
FROM bne_contents_b t
Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

WHERE t.integrator_code = 'GENERAL_463_INTG';

map: Get in the following ways :


SELECT t.mapping_code
FROM bne_mappings_b t
WHERE t.integrator_code = 'GENERAL_463_INTG';

Custom Menu

N: Application Developer -> Applications -> Menu


Oracle WebADI Setups and Backend Effected Queries Raju Chinthapatla

Desktop integration features linked to the following (you can hang on to their desired menu below).
Use
Into the corresponding responsibilities Below, you can see the hang of features, then open, they can be used
directly, without Again for the steps in section 2.8.

You might also like