Forms adapter for InterSystems Cache.
Import classes and create web app with Form.REST.Main
broker.
URL | Type | Description |
---|---|---|
test | GET | Test request |
logout | GET | End current session |
form/info | GET | List of all availible forms |
form/info/all | GET | Get metainformation for all forms |
form/info/:class | GET | Form metainformation |
form/field/:class | POST | Add field to form |
form/field/:class | PUT | Modify form field |
form/field/:class/:property | DELETE | Delete form field |
form/object/:class/:id | GET | Retrieve form object |
form/object/:class/:id/:property | GET | Retrieve one field of the form object |
form/object/:class | POST | Create form object |
form/object/:class/:id | PUT | Update form object from dynamic object |
form/object/:class | PUT | Update form object from object |
form/object/:class/:id | DELETE | Delete form object |
form/objects/:class/:query | GET | (SQL) Get all members for the form by query |
form/objects/:class/custom/:query | GET | (SQL) Get all members for the form by custom query |
form/file/:class/:id/:property | POST | Add files to this property |
form/file/:class/:id/:property | DELETE | Delete all files from this property |
form/file/:class/:id/:property/:name | DELETE | Delete one file from property |
form/file/:class/:id/:property/:name | GET | Download one file from property |
For POST/PUT requests see method descriptions for request body samples
GET http://localhost:57772/forms/form/objects/Form.Test.Simple/info?size=2&page=1&orderby=text
GET http://localhost:57772/forms/form/objects/Form.Test.Simple/all?orderby=text+desc
GET http://localhost:57772/forms/form/objects/Form.Test.Simple/all?filter=text%20eq%20A9044
GET http://localhost:57772/forms/form/objects/Form.Test.Simple/all?filter=text%20in%20A9044~B5920
Note, that for SQL access user must have relevant SQL privileges (SELECT on form table).
It's a second REST (not URL) parameter in form/objects/:class/:query
request, it determines the contents of query between SELECT and FROM.
Currently new query types can be specified as parameters in Form.REST.Objects
class.
Query | Description |
---|---|
all | all information |
info | displayName and id |
infoclass | displayName, id, class |
You can define your own class with queries. To define your own query named myq
:
- Define a class
- Define there a
MYQ
parameter orqueryMYQ
class method. Parameter takes precedence over the method. - Method or param must return the part of SQL query between SELECT and FROM
- Execute in a terminal:
Do ##class(For.Settings).setSetting("queryclass", YourClassName)
Method signature is: ClassMethod queryMYQ(class As %String) As %String
You can define a class-specific query. To define your own class query named myq
:
- Define a
queryMYQ
class method in your form class - Method signature is:
ClassMethod queryMYQ() As %String
- Method must return the part of SQL query between SELECT and FROM
RESTForms looks for a query named myq
in the following paths (till first hit):
- Class method
queryMYQ
in your form class - Parameter
MYQ
in your query class - Class method
queryMYQ
in your query class - Parameter
MYQ
inForm.REST.Objects
class - Class method
queryMYQ
inForm.REST.Objects
class
all arguments are optional.
Argument | Sample Value | Description |
---|---|---|
size | 2 | page size |
page | 1 | page number |
filter | Value+contains+W | WHERE clause |
orderby | Value+desc | ORDER BY clause |
collation | SQLUPPER | COLLATION clause |
Value can be: Column
or Column+desc
. Column is a column from the sql table or a colum number.
In a format: Column+condition+Value
.
Several conditions are possible: Column+condition+Value+Column2+condition2+Value2
.
If Value contains white spaces replace them with tabs before sending to the server.
Conditions:
URL | SQL |
---|---|
neq | != |
eq | = |
gte | >= |
gt | > |
lte | <= |
lt | < |
startswith | %STARTSWITH |
contains | [ |
doesnotcontain | '[ |
in | IN |
In a format: collation=SQLUPPER' or
collation=EXACT`.
Forces specified collation on WHERE clause. If omitted, default collation is used.
Custom query allows user code to determine the full content of the query.
Query name is passed as a second REST (not URL) parameter in form/objects/:class/custom/:query
request, URL parameters besides size
and page
are unavailable. Your method must parse all other url parameters.
To define your own custom query named myq
:
- Define a
customqueryMYQ
class method in your form class - Method signature is:
ClassMethod customqueryMYQ() As %String
- Method must return a valid SQL query
You can setup several settings.
Set them via Write ##class(For.Settings).setSetting(Setting, Value)
.
Setting | Values | Description |
---|---|---|
queryclass | Caché class name | Class with your own queries. See Query types for details. |
fileDir | Directory path | Directory for files. Defaults to MGR\DB directory |
timezone | ignore, utc | Affects how timestamps are converted for a client. UTC has Z on end, ignore does not |
#Samples
See Form.Test.Simple
and other forms in Form.Test
package for samples.
To remove test forms permanently from your local repository
- Enter
Form\Test
directory from git bash git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')
- Delete
Form\Test
directory
For Form.Test.Simple
.
POST http://localhost:57772/forms/form/object/Form.Test.Simple
Headers must contain Content-Type
and (probably) authorization
Content-Type: application/json
Authorization: Basic Base64String
Body:
{
"_class":"Form.Test.Simple",
"text":3
}
For Form.TestForm
.
PUT http://localhost:57772/forms/form/object/Form.Test.Simple
Body:
{
"_class":"Form.Test.Simple",
"_id":3,
"text":4444
}