a5_getCalendarEventDataJSON Function
Syntax
dim jsonData as c = a5_getCalendarEventDataJSON(defn as p)
Arguments
- defnPointer
An object that defines the data source, query, and the fields that contain the event data.
- typeCharacter
The type of query. Can be 'sql' or 'dbf'.
- connectionStringCharacter
The connection string to connect to the database. Can be a named connection or an ad-hoc connection string.
- tableNameCharacter
The name of the table that contains the event data or SQL query to retrieve the event information from the database.
- startDateCharacter
The start date for events. Specified using the format "YYYY-M-D" where YYYY is four digit year, M is a number representing the month, and D is the day of the month. E.g. '1993-1-1' or '2017-11-10'
- endDateCharacter
The end date for events. Specified using the format "YYYY-M-D" where YYYY is four digit year, M is a number representing the month, and D is the day of the month. E.g. '1993-1-31' or '2017-2-8'
- eventDateCharacter
The table column or field name from the SQL query that contains the event date.
- eventIdCharacter
The table column or field name from the SQL query that contains the event id.
- eventNameCharacter
The table column or field name from the SQL query that contains the event name.
- eventDescriptionCharacter
The table column or field name from the SQL query that contains the event description.
- filterCharacter
An optional filter. Used when specifying a table to fetch the data from.
- argumentsXMLCharacter
A string containing XML defining arguments used in the filter. argumentsXML is required if filter contains any arguments.
Returns
- jsonDataCharacter
A JSON object of dates with one or more events mapped to each date as an array of objects. Each event entry has the following properties:
- idNumeric
The event ID.
- nameCharacter
The event name.
- detailCharacter
A description of the event.
Description
Used in the UX Component for the Calendar Control to get events for a date range in the required JSON format.
Discussion
The a5_getCalendarEventDataJSON() function can be used to retreive data from a SQL or DBF data source to display in a Calendar control. The Calendar control requires data to be in the following format:
{
'2012-1-1' : [{id: 1, name: 'event1', detail: 'detail for event 1'}],
'2012-1-5' : [
{id: 2, name: 'event2', detail: 'detail for event 2'},
{id: 3, name: 'event3', detail: 'detail for event 3'}
],
'2012-1-12' : [
{id: 4, name: 'event4', detail: 'detail for event 4'},
{id: 5, name: 'event5', detail: 'detail for event 5'},
{id: 6, name: 'event6', detail: 'detail for event 6'},
{id: 7, name: 'event7', detail: 'detail for event 7'},
{id: 8, name: 'event8', detail: 'detail for event 8'},
{id: 9, name: 'event9', detail: 'detail for event 9'}
]
}where each date is a key with an array of event objects that define an id, name, and detail property.
Example: Data from a Table
Data can be retrieved from a specific table or using a SQL select statement. If the event data is contained in a single table, only the table name needs to be specified in the defn property. For example:
dim jsonData as c dim defn as p defn.type = "sql" defn.connectionString = "::Name::AADemo-Northwind" defn.tableName = "orders" defn.startDate = "1994-8-1" defn.endDate = "1994-8-31" defn.eventDate = "orderDate" defn.eventId = "orderId" defn.eventName = "orderDate" defn.eventDescription = "orderDate" jsonData = a5_getCalendarEventDataJSON(defn) showvar(jsonData)
Example: Using a SQL Select Statement
A SQL select statement can also be used to retrieve event data from a database. In the example below, the event name and description are created by building a concatentad string of data from the orders and customers table:
dim jsonData as c
dim defn as p
defn.type = "sql"
defn.connectionString = "::Name::AADemo-Northwind"
defn.tableName = <<%sql%
SELECT orders.orderId as orderId,
concatenate(orders.orderId, ': ', customers.companyName) as eventName,
orders.orderDate as orderDate,
concatenate('Order: ', orders.orderId, ': ', customers.contactName, ' ', customers.companyName) as eventDescription
FROM orders orders
INNER JOIN customers customers
ON orders.customerId = customers.customerId
%sql%
defn.startDate = "1994-8-1"
defn.endDate = "1994-8-31"
defn.eventDate = "orderDate"
defn.eventId = "orderId"
defn.eventName = "eventName"
defn.eventDescription = "eventDescription"
jsonData = a5_getCalendarEventDataJSON(defn)
showvar(jsonData)Example: Specifying a Filter
You can define an optional filter and arguments used to retrieve data from the data source. In the example below, only orders from customers in France will be retrieved:
dim jsonData as c
dim defn as p
defn.type = "sql"
defn.connectionString = "::Name::AADemo-Northwind"
defn.startDate = "1994-8-1"
defn.endDate = "1994-8-31"
defn.eventDate = "orderDate"
defn.eventId = "orderId"
defn.eventName = "eventName"
defn.eventDescription = "eventDescription"
defn.tableName = <<%sql%
SELECT orders.orderId as orderId,
concatenate(orders.orderId, ': ', customers.companyName) as eventName,
orders.orderDate as orderDate,
concatenate('Order: ', orders.orderId, ': ', customers.contactName, ' ', customers.companyName) as eventDescription
FROM orders orders
INNER JOIN customers customers
ON orders.customerId = customers.customerId
%sql%
defn.filter = "customers.country = :whatcountry"
defn.argumentsXML = <<%xml%
<SQLArguments>
<SQLArgument>
<Name>whatcountry</Name>
<Data Type="C">France</Data>
<IsNull Type="L">0</IsNull>
<Usage>Input</Usage>
</SQLArgument>
</SQLArguments>
%xml%
jsonData = a5_getCalendarEventDataJSON(defn)
showvar(jsonData)You do not need to manually define the XML for the argumentsXML property. You can take advantage of the SQL::Arguments class to generate the XML. Simply add the arguments to a SQL::Arguments object using the Set Method. Once you have defined all the arguments used in your filter, you can get the XML representation of the arguments from the SQL::Arguments XML Property. For example:
dim args as sql::Arguments
args.set("whatcountry","Brazil")
args.set("whatcity","Rio de Janeiro")
defn.argumentsXML = args.XML
? defn.argumentsXML
= <SQLArguments>
<SQLArgument>
<Name>whatcountry</Name>
<Data Type="C">Brazil</Data>
<IsNull Type="L">0</IsNull>
<Usage>Input</Usage>
</SQLArgument>
<SQLArgument>
<Name>whatcity</Name>
<Data Type="C">Rio de Janeiro</Data>
<IsNull Type="L">0</IsNull>
<Usage>Input</Usage>
</SQLArgument>
</SQLArguments>Limitations
UX Component with Calendar Control Only
See Also