Skip Headers
Oracle® Clinical Remote Data Capture Classic Data Entry User's Guide
Release 4.6.2

Part Number E18824-01
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
View PDF

19 Managing the Activity List

The Activity List window is a standard RDC Classic feature that allows users to load a workset in the RDC Spreadsheet based on the selection of a task, rather than search criteria defined in the Search window. When it is present in a session, the Activity List serves as a more intuitive alternative to the Search window that allows users to begin working on tasks immediately.

Discussion

Administration of the Activity List includes configuring activities and enabling RDC Classic sessions to use the Activity List window.

Configure the Activity List for Use in RDC Classic Sessions

You use the "Default Search Option" setting in the RDC Classic Configurations Settings to specify that the Activity List window is present when a user starts an RDC Classic session.

  • When Default Search Option is set to ACTIVITY, all sessions associated with the configuration use the Activity List window as the default tool to specify worksets. Users have the option to access the Search window, either from the Activity List window or the File menu.

  • When the parameter is set to SEARCH, all sessions associated with the configuration use the Search window to specify worksets and the Activity List window is not accessible.

Interaction with the Summary Task Tab

When the Activity List window is open, it is positioned just above the Summary task tab in the RDC Workspace. This allows the user to view information that is displayed in the task tab.

The Summary task tab displays information that tracks with the scope of the node that is currently selected in the Navigation pane of the Activity List window. Three summary views are available, one for each scope:

  • Study

  • Site

  • Patient

Refer to "Summary" for details.

Default Activities

When you install RDC Classic, there are a set of activities that are automatically available for use in the Activity List window. In most cases, you will use these as the basis to develop a custom list of activities.

  • Study

    1. Review All <xx> Active discrepancies – if there is at least one CRF in the study with an active discrepancy for the current user

    2. Review All <xx> Other discrepancies – if there is at least one CRF in the study with an other discrepancy (and no active discrepancies) for the current user

    3. Show all data for Study <study_name> – if there is at least one CRF entered for a patient in the study

  • Site

    1. Review All <xx> Active discrepancies for Site <site_name> – if there is at least one CRF in the site with an active discrepancy for the current user

    2. Review All <xx> Other discrepancies <site_name> – if there is at least one CRF in the site with an other discrepancy (and no active discrepancies) for the current user

    3. Show all data for Site <site_name> – if there is at least one CRF entered for a patient in the site

  • Patient

    1. Show all Data for Patient <patient_id> - if there is at least one CRF entered for the patient

    2. Begin new Data Entry for Patient <patient_id> - if no CRFs have been entered for the patient.

Activity List Structure

This section consists of the following topics:

Background Structure of the Activity List Window

The Activity List consists of two major modules, one for the Navigation pane and one for the Task pane. This section consists of the following topics:

Figure 19-1 Example of the Activity List Window

Description of Figure 19-1 follows
Description of "Figure 19-1 Example of the Activity List Window"

Navigation Pane

The Navigation pane uses a hierarchical tree structure with three levels of organization. Each level corresponds to a scope. Each instance of a level that is displayed in the Navigation pane is referred to as a node.

Table 19-1 Scope, Number of Nodes, and Explanation

Scope Number of Nodes Explanation

Study

One

Only one study can be accessed at a time.

Site

1 to ?

Based on the security settings specified for the user. This must be at least one, but is only limited by the number sites defined in the study.

Patient

1 to ?

Based on the number of patient numbers that are assigned to the site.


Task Pane

The Task pane lists the activities that are available to the user for the currently selected node. When a user clicks an activity, the system alters the search criteria appropriately, queries the database for the search criteria and loads the result into the RDC Spreadsheet as the workset.

Initially, the Study node is active and the Task pane lists the activities associated with that scope and user role. As the user selects nodes in other scopes, the list of activities in the Task pane changes to display the set of activities that are associated with the scope, the specific node, and the role of the user.

When the Activity List window opens as part of session initiation, the scope is set to Study and all of the activities that are available to the user's role at that scope are listed in the Task pane. As the user changes the scope by selecting other nodes, the list of activities in the Task pane changes accordingly.

Link Type

Each activity is a pre-defined short cut that is displayed as a hyperlink in the Task pane. There are two types of links:

  • P (Procedure) — Queries all patients/CRFs within the current node that meet the criteria set out in the activity.

  • U (URL) — Launches a browser instance and navigates to the URL associated with the activity.

Activity Conditions

Each activity can have certain conditions placed on it. These conditions can define when the system displays the activity in the Task pane, even when its associated scope is active. If a condition is defined for an activity, the condition must evaluate to "TRUE" in order for the activity to be included in the displayed set of activities. If there are no conditions defined for an activity, the activity is always displayed for its specific scope and user roles.

Activity Evaluation

When the user selects a node, the system evaluates each activity and displays those that are appropriate.

System Processing

The RDC_ACTIVITY_LIST uses the values in the RDC_ACTIVITIES Table to create a URL object (object type of RDC_ACTIVITY_T) that contains the text of the hyperlink and the code that is executed when the user selects the activity. The text in this object is previously parsed and includes the values for any TAGS included in the activity text.

The primary code that processes this object resides in a function called, RDC_USER_ACTIVITY_TAGS.getActivities. This function does the following:

  • Creates the activity text by parsing the TEXT value to find, evaluate, and substitute appropriate strings for tags that occur within the text; for example, "%OPEN_DISCREPS% may evaluate to "23", which this function inserts in the activity text

  • Determines if, based on the result of the display expression (the DISPLAY_EXPR column), the activity should be included in the Task pane; if the field evaluates to FALSE, the activity is not included

  • If the value of ACTIVITY_TYPE is "U" (for URL), then parse the ACTIVITY_EXEC field in case the URL contains a TAG; for example, the URL may contain "%CURR_STUDY%", which returns the name of the current study and inserts it in the URL

Based on the above processing, if the activity can be included in the list of activities, it is added to the object table RDC_ACTIVITY_LIST_T. The object view, RDC_ACTIVITY_LIST, is based on this object table.

When all activities are parsed and placed into the object table RDC_ACTIVITY_LIST_T, the RDC_USER_ACTIVITY_LIST View presents all applicable activities in the Task pane.

Example of Activity List Processing

An example is presented here to illustrate the system processing entailed in a single activity.

Assumptions

The following conditions are assumed for this example:

  • The user is part of the CRA user group.

  • The user has access to the HANDSON study and sites 001 and 002.

  • The scope of the activity is set to XSITE, that is, across sites.

  • The scope in the Navigation pane is STUDY, which simulates initial login and session initiation.

  • There are active discrepancies associated with CRFs in site 001, but not in site 002.

Note that because the scope is XSITE, the system will process each activity for every accessible site.

RDC_ACTIVITIES Table Record

Table 19-2 describes the record in the RDC_ACTIVITIES table for this example.

Table 19-2 Columns and Field Values for Example Activity

Column Value

ACTIVITY_ID

2000

USER_ROLE

CRA

TEXT

Review %OPEN_DISCREPS% active discrepancies for site %P_SITE%

ACTIVITY_SCOPE

XSITE

ACTIVITY_TYPE

P

ACTIVITY_EXEC

rdc_activity_std.process_open_discreps

DISPLAY_EXPR

%OPEN_DISCREPS%>0


Processing

The system processes the relevant record in the RDC_ACTIVITIES table in the following manner:

  1. The system populates the RDC_ACTIVITY_LIST object view. The bulk of the processing occurs through the RDC_USER_ACTIVITY_TAGS.getActivities function.

  2. For each activity listed in the RDC_ACTIVITIES table, the function getActivities(ID, SCOPE, TEXT, TYPE, EXEC, DISPL_EXPR) is processed. The record that is listed in Table 19-2, "Columns and Field Values for Example Activity" is processed:

    getActivities(2000, ''XSITE', 'Review %OPEN_DISCREPS% active discrepancies for site %P_SITE%', 'P', 'rdc_activity_std.process_open_discreps', '%OPEN_DISCREPS%>0');
  3. The getActivities function calls a local procedure called lSetLink for each site to which the user has access. This occurs because the value of Activity_Scope is 'XSITE'.

    The conditions of the example generate two lSetLink calls:

    lSetLink('Review %OPEN_DISCREPS% active discrepancies for site %P_SITE%', 'rdc_activity_std.process_open_discreps', '001','P', '%OPEN_DISCREPS%>0', 1, myList);
    and
    lSetLink('Review %OPEN_DISCREPS% active discrepancies for site %P_SITE%', 'rdc_activity_std.process_open_discreps', '002','P', '%OPEN_DISCREPS%>0', 2, myList);
    where '1' in the first call and '2' in the second are unique index numbers for the object table and 'myList' is an RDC_ACTIVITY_LIST_T object table used to hold the URL_INFO information that is used in the RDC_ACTIVITY_LIST view.
  4. The lSetLink procedure calls a function called 'parseActivity', which evaluates the text "Review %OPEN_DISCREPS% active discrepancies for site %P_SITE%".

    Also, if the ACTIVITY_TYPE is 'U', the function evaluates the ACTIVITY_EXEC value, because the URL is allowed to contain one or TAGS. However, in the example, ACTIVITY_TYPE is 'P', so the parseActivity function evaluates TEXT value.

    The two calls to parseActivity are:

    parseActivity('Review %OPEN_DISCREPS% active discrepancies for site %P_SITE%', '%OPEN_DISCREPS%>0', '001');
    and
    parseActivity('Review %OPEN_DISCREPS% active discrepancies for site %P_SITE%', '%OPEN_DISCREPS%>0', '002');
Processing the parseActivity function

The parseActivity function evaluates the first call, which is displayed in Step 4, above, in the following manner:

  1. Locates and evaluates TAGS, using the RDC_ACTIVITY_TAGS table to identify what should be executed or substituted for the tag:

    1. %OPEN_DISCREPS% – this tag executes RDC_ACTIVITY_STD.OPEN_DISCREPS; the TAG Type is 'F' (function). The function is executed and evaluates to '3'.

      %OPEN_DISCREPS% = 3
    2. %P_SITE% – this tag substitutes for SITE; the TAG Type is 'P' (parameter substitution). The parameter evaluates to '001'

      %P_SITES% = 001
  2. Transforms the TEXT value with the TAG substitution so that it is:

    'Review 3 active discrepancies for site 001.'
  3. Decides if the activity should be displayed in the Task pane. If the DISPLAY_EXPR is null or evaluates to TRUE, then the activity is displayed.

    The value of DISPLAY_EXPR is ('%OPEN_DISCREPS%>0'). Because it is not null, it must be evaluated.

    The value of %OPEN_DISCREPS% was found to be '3'. So the expression in DISPLAY_EXPR is '3 > 0'.

  4. Because the DISPLAY_EXPR evaluates to TRUE, the process adds the item to the object table.

The second call is evaluated in a similar manner, however, in the case of site 002, the RDC_ACTIVITY_STD.OPEN_DISCREPS evaluates to '0' (that is, there are no active discrepancies for site 002), which causes the DISPLAY_EXPR to become '0 > 0', which is FALSE. Therefore, the site 002 activity is not added to the object table.

URL_INFO table status

Based on the processing of the parseActivity function, one activity has been added to the object view. The URL_INFO is:

  • Text = Review 3 active discrepancies for site 001

  • Activity_Exec = RDC_ACTIVITY_STD.PROCESS_OPEN_DISCREPS

  • Site = 001

RDC_USER_ACTIVITY_VIEW status

A query of the RDC_USER_ACTIVITY_LIST view returns the following.

Table 19-3 RDC_USER_ACTIVITY_VIEW Query

Column Value

ACTIVITY_ID

2000

USER_ROLE

CRA

ACTIVITY_TYPE

P

ACTIVITY_SCOPE

XSITE

TEXT

Review 3 active discrepancies for site 001

ACTIVITY_EXEC

rdc_activity_std.process_open_discreps

SITE

001


Processing Activities

When the user selects an activity that is displayed in the Task pane, the initial system response is based on the ACTIVITY_TYPE.

URL Activities

If the ACTIVITY_TYPE is 'U', which indicates the activity is a URL, the system does the following:

Web.show_document( {value in Activity_Exec column} )

For example:

Web.show_document(1014)

where 1014 is the study ID.

This causes the client computer to start the default Internet browser and navigate to the specified URL.

Procedure Activities

If the ACTIVITY_TYPE is 'P', which indicates the activity is a procedure, the system response is more involved, as outlined in the following steps:

  1. RDC_USER_ACTIVITY_PROCESS.CLEAR_STACK – this clears the memory stack that the system uses to populate with the activity query.

  2. SET_LIST.RESET_ALL – this is an RDC Classic Form Program unit that resets all of the values in the SEL block, which comprises all of the Search window fields.

    1. RDC_ACTIVITY_STD.PROCESS_OPEN_DISCREPS

      • add_to_stack('SITE','001'); – adds SITE to the memory stack

      • add_to_stack('DISCREP_STATUS','ACTIVE'); – adds DISCREP_STATUS to the memory stack

    2. UTILS.PROCESS_WIZARD_SEARCH – retrieves the search parameters from the stack, sets each parameter in the Search window and executes the search, which is analogous to clicking the OK button in the Search window:

      • sets SITE = 001

      • sets DISCREP_STATUS=ACTIVE

      This loads the Search window with the appropriate parameters and executes UTILS.PROCESS_SEL_OK. This is the same processing that executes when a user manually changes Search window parameters.

The result of this processing is that the workset that contains the CRFs with active discrepancies from site 001 is displayed in the RDC Spreadsheet.

Tables Associated with the Activity List Window

This section describes the tables that are associated with the Activity List window.

RDC_ACTIVITIES Table

Table 19-4 lists the column names and descriptions of values for the RDC_ACTIVITIES table. This table contains the setup information for all the activities that are defined in the system.

Table 19-4 Columns in the RDC_ACTIVITIES Table

Column Name Description of Value

ACTIVITY_ID

A unique key for the activity.

USER_ROLE

Role names for which the Activity will be displayed. Each user logging into RDC Classic has one role associated with them. For example, when a Data Manager (role DM) logs into the system, activities with the column USER_ROLE = '%' or the column USER_ROLE contains the DM role will be displayed. The Activity may still not display if it does not PASS a criteria setup in the DISPLAY_EXPR column. Please read the notes on that column to understand how this criterion is used.

This column can be one of three different role values (example value follow each in parentheses):

  1. single role (DM)

  2. multiple roles (DM, CRA, SITE)

  3. all roles (%)

TEXT

This value consists of the text wording of the activity in the English version of RDC Classic. It may contain TAGS that provide substitution variables. This value is always in English.

ACTIVITY_SCOPE

The scope in which the activity is eligible for display in the Task pane. There are for possible values:

  1. STUDY

  2. XSITE

  3. SITE

  4. PATIENT

ACTIVITY_TYPE

This value is either:

  • "P", for procedure, or

  • "U", for URL.

ACTIVITY_EXEC

This value is either the procedure name, for ACTIVITY_TYPE "P", or the actual URL, for ACTIVITY_TYPE "U".

DISPLAY_EXPR

This value can either be null or it may be the display expression associated with the activity. If the value is not null, the expression must evaluate to TRUE in order for the system to include the activity in the Task pane.


TEXT

The value in each TEXT column record is the actual wording that is presented to the user as an activity and any TAGs that allow for variable substitution, for example, Site Number, number of Active Discreps for a site, etc. TAGs are denoted with % signs, for example; %OPEN_DISCREPS%. When a TAG is found in the TEXT, the process locates the TAG in the RDC_ACTIVITY_TAGS Table and runs the code named in the FUNCTION_NAME of this table to produce the variable substitution for the TAG. A complete example may be as follows:

TEXT column field = Review %OPEN_DISCREPS% active discrepancies for site %P_SITE%

Activity shown - "Review 3 active discrepancies for site 001"

ACTIVITY_SCOPE

Currently, there are four SCOPE levels:

  1. STUDY is the highest level and will reflect activities for all sites for which the user has access.

  2. XSITE also displays activities at the STUDY scope level BUT will break up the activities for each SITE for which the user has access.

  3. SITE reflects activities for the current SITE selected in the Navigation Pane.·

  4. PATIENT reflects activities for the current PATIENT selected in the Navigation Tree.Scope levels are based on the users selection within the Navigation Tree.

Initially, the SCOPE is set to STUDY upon entering the Activity List.

ACTIVITY_TYPE

There are two types of Activities:·

  1. P for procedure, meaning the activity will start a procedure within the database named in the ACTIVITY_EXEC column of this table. For example; rdc_activity_std.process_open_discreps·

  2. U for URL, indicates that the activity will initiate a new browser session and navigate to the URL found in the ACTIVITY_EXEC column of this table. ·

    For example; http://opa-apps26.us.oracle.com/v_rsdir/study%CURR_STUDY%.htm

    Note: The code that can be executed for activity type U can also contain TAGS. The procedure substitutes a value for each TAG during the creation of the activity. For example, the URL above, for a study named 'HANDSON', would be processed as: http://opa-apps26.us.oracle.com/v_rsdir/studyHANDSON.htm

ACTIVITY_EXEC

This column holds the Procedure name or URL, depending on value of the ACTIVITY_TYPE = 'P' or 'U', respectively. For example: P = rdc_activity_std.process_open_discreps; U = http://opaapp.us.ora.com/v_rsdir/study%CURR_STUDY%.htm

DISPLAY_EXPR

This column contains the final display criteria for an activity. After making sure that the activity is at the correct scope level, user role matches the activity role, the DISPLAY_EXPR, possibly, will determine whether the activity is displayed or not.If a condition is present in this column then it must evaluate to TRUE to be displayed. It is mainly used to suppress activities that would yield a NO DATA FOUND error. For example, if we have an activity like: Review %OPEN_DISCREPS% active discrepancies for site %P_SITE% then a valid activity might look like: Review 0 active discrepancies for site 002. This will cause the search to retrieve NO CRFs. A valid criteria to place on this activity would be to display this activity only when the number of active discrepancies > 0, i.e. %OPEN_DISCREPS% > 0.

RDC_ACTIVITY_TAGS Table

This table contains the tags that are defined in the system and the execution module (function name) that evaluates the tag. Table 19-5 describes the column names and values for the RDC_ACTIVITY_TAGS table.

Table 19-5 Columns in the RDC_ACTIVITY_TAGS Table

Column Name Description of Value

ACTIVITY_TAG

This value contains the TAG that can be found in the RDC_ACTIVITIES Table columns: TEXT, ACTIVITY_EXEC and DISPLAY_EXPR. When each of these columns is parsed, if a TAG is found, the process searches this column to find the TAG match so that it can identify the code or substitution variable to use to display in place of the TAG. If a match is found it processes the expression found in the FUNCTION_NAME column.

FUNCTION_TYPE

This value describes whether the tag is associated with a function or a parameter substitution.

FUNCTION_NAME

This value is either the name of the substitution variable or the name of the function in the system.


ACTIVITY_TAG

Contains the TAG that can be found in the RDC_ACTIVITIES table columns: TEXT, ACTIVITY_EXEC and DISPLAY_EXPR.

The system parses each of these fields and if a TAG is identified, the process searches this field to locate the TAG match so the system can identify the code or substitution variable to use to display in place of the TAG. When a match is found, the system processes the expression found in the FUNCTION_NAME column.

FUNCTION_TYPE

Currently, there are two values for the TAG Function Type:

  1. F (function) – executes the function located in the FUNCTION_NAME field

  2. P (parameter) – sets the TAG to the name of a particular SITE

FUNCTION_NAME

Depending on the FUNCTION_TYPE value, this value in this field can be one of several types.

If the FUNCTION_TYPE = F then this column holds a database function, for example: rdc_activity_std.open_discreps.If the FUNCTION_TYPE is P then this column holds the keyword SITE. The TAG gets the value of the current SITE being processed.

RDC_ACTIVITY_COLUMN table

Table 19-6 describes the column names and values for the RDC_ACTIVITY_COLUMN table. This table lists all the columns that are currently defined for the Search window.

Table 19-6 Columns in the RDC_ACTIVITY_COLUMN Table

Column name Description of value

ACTIVITY_COLUMN_ID

This value contains unique key.

COLUMN_NAME

This value contains the name of a column that is defined for the Search window.


COLUMN_NAME

This column holds a list of all the COLUMN names that can be filled in to perform a search. Behind the scenes, the Activity List places values into the different search columns in the Advanced Search screen. There needs to be a valid column name in this table to perform a proper search. If the column is not found, then a search is not performed.

Views Associated with the Activity List Window

This section describes the views that are used to display the different activities to the RDC Classic application.

RDC_ACTIVITY_LIST View

This view contains a list of activities, including multiple rows for SITE scope if the user has access to multiple clinical sites. This view is used to create the TEXT of the activities that are displayed in the Task pane. It uses the function RDC_USER_ACTIVITY_TAGS.getActivities to produce the TEXT, including all relevant TAG substitutions. An activity is only present in this view if it has been processed completely and the DISPLAY_EXPR evaluates to TRUE.

CREATE OR REPLACE FORCE VIEW RXC.RDC_ACTIVITY_LIST OF "RDC_ACTIVITIES_T" WITH OBJECT IDENTIFIER (activity_id) AS select a.activity_id, CAST(rdc_user_activity_tags.getActivities( a.activity_id, a.activity_scope, a.activity_type, a.activity_exec, a.display_expr) AS rdc_activity_list_t) FROM rdc_activities a where ( instr(','||a.user_role||',',','||rdc_user_activity_tags.getCurrRole||',') > 0 or a.user_role = '%' ) and instr(rdc_user_activity_tags.getCurrScope,','||a.activity_scope||',') > 0 order by decode(a.activity_scope,'STUDY',1,'XSITE',2,'SITE',3,'PATIENT',4,5), a.activity_id;

RDC_USER_ACTIVITY_LIST View

This view is queried within RDC Classic to produce the final list of activities that are displayed to the user. It joins the RDC_ACTIVITIES Table with the RDC_ACTIVITY_LIST.

create or replace view rdc_user_activity_list
AS select a.activity_id, a.user_role, a.activity_type, a.activity_scope, t.text, t.activity_exec, t.site
from rdc_activities a, table(select url_info from rdc_activity_list
where activity_id = a.activity_id) t;

Defining an Activity for the Activity List

This section describes how to define an activity. To illustrate the process, the topics in this section describe the steps to produce the following activity:

"You have %NUM_UNAPP% CRFs to Approve"

For this example activity, the function and the procedure are already coded, however, a new TAG must be constructed.

Note:

The instructions to define a new activity assume the reader has a firm understanding of the structure of Oracle Clinical databases and the SQL language.

This section includes the following topics:

Copy the Demo Packages

The first step in the process of creating a new activity is to copy the demo packages, which are shipped and installed as part of the Oracle Clinical/RDC Classic installation process.

The names you use for the copied files are irrelevant, as long as each is unique. In this section, the string, client, is inserted to make the filenames unique.

  1. At a command prompt, type:

    opa_setup <database_name> <code_env>
    
  2. Change directories to RXC_INSTALL:

    cd $RXC_INSTALL 
    
  3. Copy rdc_activity_dmo_ps.sql to rdc_activity_client_ps.sql

  4. Copy rdc_activity_dmo_pb.sql to rdc_activity_client_pb.sql

After you create these two package files, you can use them for all subsequent functions and procedures that are required to create new activities.

Edit rdc_activity_client_ps.sql

Edit the file rdc_activity_client_ps.sql, as follows:

  1. Change the line:

    Create or replace package rdc_activity_dmo as
    to:
    Create or replace package rdc_activity_client as
  2. Change the lines:

    end rdc_activity_dmo; /show errorsgrant execute on rdc_activity_dmo to rxclin_read;exec opa_ddl.createdroppublicsynonym('rdc_activity_dmo');
    to:
    end rdc_activity_client; /show errorsgrant execute on rdc_activity_client to rxclin_read;exec opa_ddl.createdroppublicsynonym('rdc_activity_client');
  3. Change the line:

    function num_unapproved return varchar2;
    to:
    function num_unapp return varchar2;
  4. Change the line:

    end num_unapproved;
    to:
    end num_unapp;
  5. Change the line:

    procedure process_unapproved(pSite in varchar2:=null);
    to:
    procedure process_unapp(pSite in varchar2:=null);
  6. Change the line:

    end process_unapproved;
    to:
    end process_unapp;

As you construct other activities, leave the balance of the information in this package specification as-is, using it as a template for your work. Remove sections as you find them unnecessary for your activities.

When you complete the preceding steps, the rdc_activity_client_ps.sql file should resemble the following code.

Rem  Created by copying rdc_activity_dmo_ps.sql into this file name.
Rem
Create or replace package rdc_activity_client as
 
Rem - Standard variables setup for use in local procedures defined in the body
Rem - Do not erase or change
Rem
/* System wide variables */
vStudy     clinical_studies.study%type;
nStudyId   clinical_studies.clinical_study_id%type;
vSite      ocl_sites.site%type;
nSiteId    ocl_sites.site_id%type;
vBook      dci_books.name%type;
nBookId    dci_books.dci_book_id%type;
vPatient   patient_positions.patient%type;
nPatientId patient_positions.patient_position_id%type;
vRole      varchar2(50);
vMode      varchar2(1);
 
/* Patient variables */
 vSex           patient_positions.reported_sex%type;   /* Patient sex */
 dBirth         date;                                  /* Date of birth */
 vMissingPages  varchar2(500);                         /* List of missing pages */
 vPatBook       dci_books.name%type;                   /* Default DCI book */
 nCRFs          pls_integer;                           /* Number of CRFs */
 nCRFActiveDisc pls_integer;                           /* Number of CRFs with active discrepancies */
 nCRFOtherDisc  pls_integer;                           /* Number of CRFs with other discrep's */
 nActiveDisc    pls_integer;                           /* Number of active discrepancies */
 nOtherDisc     pls_integer;                           /* Number of other discrepancies */
 nClosedDisc    pls_integer;                           /* Number of closed discrepancies */
 nCRFVerified   pls_integer;                           /* Number of verified CRFs */
 nCRFReverify   pls_integer;                           /* Num of CRFs awaiting re-verification */
 nCRFApproved   pls_integer;                           /* Number of approved CRFs */
 nCRFReapprove  pls_integer;                           /* Number of CRFs awaiting re-approval */
 vFirstVisit    varchar2(20);                          /* First visit */
 dFirstMin      date;                                  /* Earliest date of first visit */
 dFirstMax      date;                                  /* Latest date of first visit */
 vLastVisit     varchar2(20);                          /* Last visit */
 dLastMin       date;                                  /* Earliest date of last visit */
 dLastMax       date;                                  /* Latest date of last visit */
 vNextVisit     varchar2(20);                          /* Next visit */
 dNextMin       date;                                  /* Earliest date of next visit */
 dNextMax       date;                                  /* Latest date of next visit */
 dMinEntry      date;                                  /* Earliest data entry date */
 dMaxEntry      date;                                  /* Latest data entry date */
 dMaxMod        date;                                  /* Latest data modification date */
 
Rem - End of package variable setup
Rem
Rem - Clients new packages added under this comment
Rem
function num_unapp return varchar2;
procedure process_unapp(pSite in varchar2:=null);
 
end rdc_activity_client;/
 
 
show errors
grant execute on rdc_activity_client to rxclin_read;
exec opa_ddl.createdroppublicsynonym('rdc_activity_client');

Edit rdc_activity_client_pb.sql

Edit the rdc_activity_client_pb.sql file as follows:

  1. Change the line:

    Create or replace package body rdc_activity_dmo as
    to:
    Create or replace package body rdc_activity_client as
  2. Change the line:

    end rdc_activity_dmo;
    to:
    end rdc_activity_client;
  3. Change the line:

    function num_unapproved return varchar2 is
    to:
    function num_unapp return varchar2 is
  4. Change the line:

    end num_unapproved;
    to:
    end num_unapp;
  5. Change the line:

    procedure process_unapproved(pSite in varchar2:=null) is
    to:
    procedure process_unapp(pSite in varchar2:=null) is
  6. Change the line:

    end process_unapproved;
    to:
    end process_unapp;

The changes you make to the file in Steps 3 and 4 should result in code immediately before the "end rdc_activity_client;" command line that resembles the following:

function num_unapp return varchar2 is
nOut pls_integer;
begin
  begin
  lGet_internal_ids;
  if vMode = 'P' then
     select count(*) into nOut from received_dcis rdci
     where  clinical_study_id=nStudyId
       and  (site_id = nSiteid or nSiteid is null)
       and  rdc.rdci_app_status(vMode,rdci.received_dci_id) in ('NOT APPROVED','UNDONE');
  else
     select count(*) into nOut from received_dcisT rdci
     where  clinical_study_id=nStudyId
       and  (site_id = nSiteid or nSiteid is null)
       and  rdc.rdci_app_status(vMode,rdci.received_dci_id) in ('NOT APPROVED','UNDONE');
  end if;
  exception
    when no_data_found then nOut := null; 
  end;
  return to_char(nOut);  
end num_unapp;
 
procedure process_unapp(pSite in varchar2:=null) is
begin
  if pSite is not null then
     rdc_user_activity_process.add_to_stack('SITE',pSite);
  end if;
  rdc_user_activity_process.add_to_stack('APPROVAL_STATUS','NOT APPROVED');
end process_unapp;

As you construct other activities, leave the balance of the information in this package build as-is, using it as a template for your work. Remove sections as you find them unnecessary for your activities.

Create a new TAG for NUM_UNAPP

You create a new tag using an insert statement for the RDC_ACTIVITY_TAGS Table.

The following table describes the columns that are referenced in the insert statement.

Column Description
1st TAG NAME
2nd Created when
3rd Created by
4th Function type
5th Function name
6h Modification timestamp – insert as NULL
7th Modified By – insert as NULL

The form of the insert statement is:

insert into rdc_activity_tags values ('NUM_UNAPP',sysdate,user,'F','rdc_activity_client.num_unapp',to_date(NULL),NULL);

Create the Activity

You create the new activity using an insert statement for the RDC_ACTIVITIES Table.

The following table describes the columns that are referenced in the insert statement.

Column Description
1st Activity ID – must be unique, you should specify a large number; RDC Classic ships with IDs < 1000; search for max(activity_id) in the RDC_ACTIVITIES Table to ensure you use a unique ID
2nd Created when
3rd Created by
4th User Role – set to CRA for this example; alternative values are '%' for all roles, or DM, CRA, INV (for multiple roles), or any non-default role defined in the database
5th Text of Activity – uses the TAG created in the "Create a new TAG for NUM_UNAPP" section
6h Activity Scope – set to SITE for this example; alternative values are: STUDY, XSITE, and PATIENT
7th Activity Type – set to 'P' for example; alternative is 'U' for URL
8th Display Expression – set for this example to an expression that only displays the activity if CRFs in the unapproved or requires re-approval statuses exist for the user (role)
9th Modification timestamp – insert as NULL
10th Modified By – insert as NULL
11th through 14th Insert as NULL

The form of the insert statement is:

insert into rdc_activities values (1999000,sysdate,user,'CRA','You have %NUM_UNAPP% CRFs to Approve','SITE','P','rdc_activity_client.process_unapp','%NUM_UNAPP%>0',to_date(NULL),NULL,NULL,NULL,NULL,NULL);

Install the New Code and Insert the New TAG and Activity

To install the new code and insert the new TAG and activity:

  1. At a command prompt, type:

    opa_setup <database_name> <code_env>
    
  2. Change directories to RXC_INSTALL:

    cd $RXC_INSTALL
    
  3. Log in to SQL*Plus as rxc.

  4. At the SQL prompt, type the following commands:

    SQL> @ rdc_activity_client_ps.sql
    
    SQL> @ rdc_activity_client_pb.sql
    
    SQL> Insert into rdc_activity_tags values ('NUM_UNAPP',sysdate,user,'F','rdc_activity_client.num_unapp',to_date(NULL),NULL);
    
    SQL> insert into rdc_activities values (1999000,sysdate,user,'CRA','You have %NUM_UNAPP% CRFs to Approve','SITE','P','rdc_activity_client.process_unapp','%NUM_UNAPP%>0',to_date(NULL),NULL,NULL,NULL,NULL,NULL);
    
    SQL> commit;
    

The activity is ready to be tested.