TableEditor Control elements enable your extension
node to access SAS data sets that are accessible by the Enterprise
Miner server or that are generated by your extension node's server
code. The server code that is required for a
TableEditor Control is typically minimal. The essential
purpose of the server code is to provide a way for the Enterprise
Miner server to identify and track the data sets or files that are
to be accessed by the
Control. The
Control elements also typically provide a way for you
to add more sophisticated functionality beyond the minimal requirements.
The following XML code
illustrates the most basic configuration of a
String Property with a
TableEditor Control:
<Property description="write your own description here"
displayName="TableEditor Control Example"
name="TableEditor"
type="String">
<Control>
<TableEditor key="COMPANY">
<Actions>
<Open name="OpenTable" />
<Close name="CloseTable" />
</Actions>
</TableEditor>
</Control>
</Property>
This configuration requires
a single
Control element. This
Control element has no attributes. Nested inside of
this
Control element is a single
TableEditor element. The
TableEditor element has a
key attribute. The value
of the
key attribute is the name of a file
key that you register using the %EM_REGISTER macro. In this example,
the node prefix is EXMPL and the
key is COMPANY,
so the name of the table is EMWS.EXMPL_COMPANY.
You also need some code
that associates a data set with that
key.
For example, you might have code in the CREATE action that registers
the
key, COMPANY, and a SAS DATA step that
associates the
key with the data set Sashelp.Company:
%em_register(type=data,key=COMPANY,property=Y);
data &EM_USER_COMPANY;
set sashelp.company;
run;
If you want the table
to be available before run time, place the code that associates the
data set with the key in the CREATE action. However, in some cases,
the table that you are opening with the
TableEditor Control is not created until after the
node is run. The data set might be created by a process within the
TRAIN code. In that case, you could still register the key in your
CREATE code, but the code that associates the key with the data set
would be in your TRAIN code. If the user attempted to open the table
before the node was run, an error message would appear indicating
that the table does not exist.
Nested within the
TableEditor element is an
Actions element. The
Actions element associates
a block of SAS code with a user action. Inside of the
Actions element are an
Open element and a
Close element; both have
a
name attribute. In your node's main program,
you can add code that might look like this:
%if %upcase(&EM_ACTION) = OPENTABLE %then %do;
filename temp catalog 'sashelp.emext.example_actions.source';
%include temp;
filename temp;
%OpenTable;
%end;
%if %upcase(&EM_ACTION) = CLOSETABLE %then %do;
filename temp catalog 'sashelp.emext.example_actions.source';
%include temp;
filename temp;
%CloseTable;
%end;
The values of the
name attributes correspond to the names of the actions
that are executed when the user either opens or closes the table.
The following actions occur when the user opens the table by clicking
the ellipsis (

) icon:
-
The &EM_ACTION macro variable
is assigned the value of the
Open action
(for example,
OpenTable) before the server
code is processed.
-
The &EM_TABLE macro variable
is initialized; it resolves to the name of the table (for example,
EMWS. EXMPL_COMPANY).
-
The
OpenTable action that is specified in the
Open element
executes before a copy of the table is returned to the client.
-
A temporary table named WORK.key
is created (for example, WORK.COMPANY). This table stores any changes
that the user makes to the original table.
The following actions
occur when the user closes the table:
-
The %EM_ACTION macro variable is
assigned the value of the
Close action (for
example,
CloseTable) before the server code
is processed.
-
The &EM_TABLE macro variable
is initialized; it resolves to the name of the table (for example,
EMWS. EXMPL_COMPANY).
-
The &EM_TEMPTABLE macro variable
is initialized; it resolves to the name of the temporary table that
contains any changes to the table that the user made (for example,
WORK.COMPANY).
-
The
CloseTable action that is specified in the
Close element
executes.
-
The permanent table is overwritten
by the temporary table so that any changes made by the user are recorded
in the permanent table.
You must have at least
one named action (
Open or
Close) specified in the XML properties file for a
TableEditor Control. However, you are not required
to write any code or to include a call to the action in your main
program. When you do not have any code that you want to execute when
the table is opened or closed, the
Actions,
Open, and
Close elements act as placeholders.
When implemented, the

icon appears in the Value column of the Properties
panel.
When a user clicks the

icon, a
SAS Table Editor window appears, displaying the table that is associated with the
Control.
In this example, the
entire table is displayed when the user clicks the

icon and the table cannot be edited. Adding a
Column element with nested
Column elements enables you to control which variables appear in the table
and whether a variable's values can be edited by the user. In the
following example, the
Control configuration
restricts which variables are displayed in the table and enables the
user to edit the values of those variables:
<Property description="write your own description here"
displayName="TableEditor Control Example"
name="TableEditor"
type="String">
<Control>
<TableEditor key="COMPANY">
<Actions>
<Open name="OpenTable"/>
<Close name="CloseTable"/>
</Actions>
<Columns displayAll="N">
<Column name="DEPTHEAD"
type="String"
editable="Y"/>
<Column name="JOB1"
type="String"
editable="Y"/>
<Column name="LEVEL3"
type="String"
editable="Y"/>
<Column name="N"
type="int"
editable="Y"/>
<Column name="LEVEL4"
type="String"
editable="Y"/>
</Columns>
</TableEditor>
</Control>
</Property>
In the
Columns element, the
displayAll attribute has a
value of
N. This indicates that only those
variables that are specifically identified by
Column elements should appear when the table is opened. Four
Column elements are specified. In each
Column element, there are three attributes defined as follows:
-
name —
specifies the name of the variable to display.
-
type —
specifies one of four supported types of variables. The supported
types are as follows:
Note: These values are case-sensitive.
-
editable — indicates whether the user can modify the variable's values.
Valid values are Y or N.
When the
editable attribute of a Column element is set to
Y, the user can edit the values of the corresponding
variable by typing a new value in the
SAS Table Editor window.
You can also add
Range Control elements to restrict
the values that can be used to edit the values in the table. For example,
suppose you add a
Range Control to the
N Column element as follows:
<Property description="write your own description here"
displayName="TableEditor Control Example"
name="TableEditor"
type="String">
<Control>
<TableEditor key="COMPANY">
<Actions>
<Open name="OpenTable" />
<Close name="CloseTable" />
</Actions>
<Columns displayAll="N">
<Column name="DEPTHEAD"
type="String"
editable="Y">
</Column>
<Column name="JOB1"
type="String"
editable="Y"/>
<Column name="LEVEL3"
type="String"
editable="Y"/>
<Column name="LEVEL4"
type="String"
editable="Y"/>
<Column name="N"
type="int"
editable="Y">
<Control>
<Range min="1" max="3" />
</Control>
</Column>
</Columns>
</TableEditor>
</Control>
</Property>
Now when the user tries
to edit the
N column of the table, they must
enter an integer value between the
min and
max values specified. If they enter a value that is
outside of that range, the value of
N is
set to missing in that row of the table.