This document is intended for developers interested in adding new DIAL slots, and using that control technology elsewhere. Aside from academic interest, this document may not be directly useful to non developers.
One of the initial project for our COVID response, was a tool to assist the Contact Tracing team. As part of the data feed into this system, we wrote the Daily Interactions and Activity Log (DIAL) tool. Members of the community were expected to use the DIAL tool on a daily basis to record their interactions with other people - to help the contract tracers. As the COVID response continued to evolve, people on campus were required to report their symptoms on a daily basis. Rather than create a second tool, we instead integrated the Daily Health Check function into the DIAL tool.
When someone ran the DIAL tool for the first time each day, a button "Enter Health Status" would be displayed. Once they provided their health status for the day, the button would no longer be at the start of the DIAL tool, although there was a menu item always available. During the fall of 2020, we needed to understand students plans for the Thanksgiving Break. So we wrote another page that prompted people to make a selection from a list. Like with the Health Status, a button would appear in the DIAL tool until the person had made a selection. Even though the button would no longer appear, there was a menu item if the person needed to update their selection.
We continued to need short term additions to the DIAL tool for other quick questions, typically targeted at a subset of our total community. From a technical perspective this involved editing the "Interactions" page to add a new region, as well as "Offer_xxx" function that would be used to control when the new region will be displayed. This was awkward as the DIAL tool was in production and got frequent use, and the control function required recompiling major modules - which wasn't always possible due to Oracle library locks.
From an operational perspective, it is highly preferable to make a configuration change via tools vs making code change or editing an APEX page. In the ARTS project, we had already developed an Access Control List system (ACLs) to control access to ARTS events, so we made some extensions that allowed us to call ARTS ACLs outside of typical ARTS events.
We defined 5 "slots" in the DIAL tool. Since we were adding test scheduling when we did this change, the code of interest is in the the ARTS_TIME_SLOT package. When the Integration page starts up, it calls the Initialize_DIAL_State function that initializes a number of APEX page variables.
[APEX page variable screen]
At present there are 5 sets of variables. The function evaluates all of the active slots and sets appropriate values. These will trigger both prompt text and buttons and as well as menu entries. This allows us to add new "slots" without changing the page at all.
In the Schedule Assignment Tool (time slots were the first targets for the DSC), there is a Dial Slot Control menu item. This will let you manage the different DIAL Slots. The Edit screen gives you the following options.
[Edit Slot Control screen]
- Slot Name - Have to call it something. This may also appear on the DIAL page.
- Slot Application - At present, DIAL is the only application we support, but the intention is to extend it to other applications - and this will help with the code sharing.
- Slot Status - A quick way to enable slots
- Active - In production
- Pending (Under Development) - lets you fiddle with settings before releasing it to the world
- Test Users Only - Intended for a test page - may not be available
- Slot Start, Slot End - the dates when we evaluate the Slot for inclusion.
- Department - Slots are tied to a department, since slots are also tied to ARTS events. This needs to be set in order to link to the ARTS control event.
- ARTS Event Id - This is the ARTS event that will be controlling access and providing text for the DIAL slots.
- Link Type - Select the control function that controls if the Menu link is included or not,
- ARTS ACL - person is "allowed access" according to the ACLs in the ARTS event
- ACL but not in group set - Like ACL, but also the person can NOT have a group entry in the group set defined by the ARTS event (see next section). Typically, most Slot Entries result in the person being added to a group. This is often used to suppress the prompt once the person makes a selection.
- Always - This entry will always be included. A quick way to add new menu entries,
- Never - Do not include this type
- Prompt Type - like the Link, but controls when the Prompt will appear. Often uses the "ACL Not in group set" to included the prompt until they make the selection.
- Link Label - the text to be used for the menu link
- Prompt Label - the text to be used for the button
- URL - The actual URL the button and link redirect to. These can be other web sites, or one of the following special cases. These are defined in Initialize Dial State function. Most of these redirect to custom pages and are invoked as modal windows.
- TIME_SLOT - Links to Time Slot selection (discussed elsewhere)
- TIME_2SLOT - Special version of Time slot selection where the person needs to select two tine slots.
- RADIO_SLOT - Person must select one choice from a radio group (each choice is a group)
- NOTICE_SLOT - Displays a notice (and has a Don't show this again switch)
- VAX_UPLOAD_SLOT - prompts to upload an image of vaccination certificate (or any blob)
- TEST_RESULT_UPLOAD_SLOT - Same as VAX, but different back end processing. Needs a better selection option
- FILE_UPLOAD_SLOT - A more generic file upload
- SHORT_FORM_SLOT - Under development -
- COMPLIANCE_CHECK - Displays current COVID compliance - used to add a menu item
ARTS Control Event
When a new ARTS event is created, a call is made to the ARTS_Time_Slot.Setup_Group - this looks at the event type of the new event, and if it one the the following list, it will create a group with the a group index the same as the arts event id. The Group will also be owned by the same department that owns the event. Ironically, you can't select any of these values, you need to use special create buttons that are restricted to APEX DBAs.
- Time Slot Scheduler (Group of Groups)
- Radio Slot Selector (Group of Groups)
- Notice Slot Selector (Normal Group)
- File Upload Slot Selector (Normal Group)
- Short Form Web Selector (Group of Group)
Along with using the ACLs in this event to control the DIAL Slot, we also use text stanzas - with token substitution, to provide the text in the Prompt display (the Splash Stanza), and many of the special URLs also use the "Accepted" stanza for the text on the pop up page.
Much of this was written to solve specific COVID Compliance requirements, but I tried to do things in a way that we can generalize it and use the same code and whatnot for other projects. The biggest limitation at the moment, is that most of the admin tools are closely held - we need to move some functions to other tools, or provide other access paths. Another aspect is documenting the new services. Some specific changes I want to make:
- Clean up the ARTS Event types - a much shorter list, that reflects actual ARTS events rather than calendar events (as was the original concept). Might want to restrict some types based on releasing DIAL Slot Controls to something other than DIAL.
- Link the text stanza LOV to the Event Types - many of the defined text stanzas only make sense for certain types of events
- Limited group management in ARTS for control events.
- Both the GROUPS and GROUP_MEMBERS tables have a number of "SPARE_xxx" columns. I have been dabbling with ways to label these based on group usage - likely set via the GROUP.PLATFORM field. The Time_Slot_Groups view gives a hint of some of the potential.
SHORT FORM EVENTS
The Title IX compliance project for the athletic department is growing. I am considering two approaches - one using ARTS with "Extra" fields, and RSVP mode, to use it as a crude forms tool. The other approach, is to use a DIAL slot control to set some of the spare fields in the group member table, An advantage to this approach, is groups are better integrated with the back end "compliance" tools. My current thought, is to have a DIAL slot control (short form), that has a set of groups, each representing a question that must be answered. The Yes/No response will go into one of the spare fields and additional logic would pop up a text box if a Yes is selected.
I want to write this in a general way, so all of the settings are taken from the groups and arts tables. There are technical details to make this more challenging - I think they are all solvable with CSS and HTML trickery - it is possible ARTS has added new items/options to make this easier. If I were doing this with page items (like the DIAL slot controls), dynamic actions make some of the features easy to do. Except I essentially want to pull a "report", with one or more questions per page, and multiple pages. I have already gone beyond the Title IX requirements, but would be good for a general solution. While form tools are available, it is the tight integration is where we can get the big win.