Documentation

Trace:

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
visionx:data_modeling_and_representation [2020/06/08 12:09]
cduncan [Use a view as data source]
visionx:data_modeling_and_representation [2020/06/12 13:57]
cduncan [Full Text Search]
Line 92: Line 92:
 Just in case you want to know how this works: [[:​jvx:​client:​model:​databook:​autolistboxes|JVX offers a a simple solution for linking tables]] called "​Automatic Link Reference"​. For every database table (or view) you access from within your screen, a so-called "​Storage"​ is created in the screen'​s server-class. Just in case you want to know how this works: [[:​jvx:​client:​model:​databook:​autolistboxes|JVX offers a a simple solution for linking tables]] called "​Automatic Link Reference"​. For every database table (or view) you access from within your screen, a so-called "​Storage"​ is created in the screen'​s server-class.
  
-With our [[:​visionx:​eplug_guide|EPlug Plugin]], you can jump to the storage'​s source code in Eclipse by opening the "Configure ​server-side Data storages"​ wizard ​(1) and pressing "Show Source code" (2).+With our [[:​visionx:​eplug_guide|EPlug Plugin]], you can jump to the storage'​s source code in Eclipse by opening the Configure ​Server-Side Data Storages Wizard ​(1) and pressing "Show Source code" (2).
  
 {{:​visionx:​data_modeling_and_representation:​drop_down_eplug_storage.png?​nolink|Drop-down no foreign-key relation: Eplug jump to storage}} {{:​visionx:​data_modeling_and_representation:​drop_down_eplug_storage.png?​nolink|Drop-down no foreign-key relation: Eplug jump to storage}}
Line 221: Line 221:
         // link databook to the server storage "​assets"​         // link databook to the server storage "​assets"​
         rdbAssets.setName("​assets"​);​         rdbAssets.setName("​assets"​);​
-        // specify the datasource ​to use(default)+        // specify the data source ​to use(default)
         rdbAssets.setDataSource(getDataSource());​         rdbAssets.setDataSource(getDataSource());​
         // ASSETS is a subtable of EMPLOYEES: available ASSETS rows depend on the currently selected EMPLOYEES row         // ASSETS is a subtable of EMPLOYEES: available ASSETS rows depend on the currently selected EMPLOYEES row
Line 305: Line 305:
 Open the editor for the server-side storage that VisionX created for the data object by pressing the "Edit storages"​ icon on the right side of the lower pane: Open the editor for the server-side storage that VisionX created for the data object by pressing the "Edit storages"​ icon on the right side of the lower pane:
  
-{{:​visionx:​data_modeling_and_representation:​views_storages_step0.png?​nolink|View as datasource: Edit storage}}+{{:​visionx:​data_modeling_and_representation:​views_storages_step0.png?​nolink|View as data source: Edit storage}}
  
 On the left, we have a list of available storages for the screen. We select the storage "​assets"​ (1) and specify the query that shall be used for the storage: On the left, we have a list of available storages for the screen. We select the storage "​assets"​ (1) and specify the query that shall be used for the storage:
Line 334: Line 334:
 We can verify the generated SQL query by pressing the "Show SQL Query" button (4). We can verify the generated SQL query by pressing the "Show SQL Query" button (4).
  
-{{:​visionx:​data_modeling_and_representation:​views_storages_step4.png?​nolink|Storage as datasource: Create Storage}}+{{:​visionx:​data_modeling_and_representation:​views_storages_step4.png?​nolink|Storage as data source: Create Storage}}
  
 As a foreign-key-relation exists between the table ASSETS and EMPLOYEES, the automatic link reference between the corresponding data objects is created automatically. In the case of ASSETS and LOCATIONS, we have to create the automatic link reference manually (as described in [[#​create_drop-down_without_foreign-key_relation|Create Dropdown Without Foreign-Key Relation]]). The generated code for this server-side looks like this: As a foreign-key-relation exists between the table ASSETS and EMPLOYEES, the automatic link reference between the corresponding data objects is created automatically. In the case of ASSETS and LOCATIONS, we have to create the automatic link reference manually (as described in [[#​create_drop-down_without_foreign-key_relation|Create Dropdown Without Foreign-Key Relation]]). The generated code for this server-side looks like this:
Line 408: Line 408:
 ; ;
 </​code>​ </​code>​
-We can use a view in the VisionX data object wizard just like any table.+We can use a view in the VisionX data-object wizard just like any table.
  
 In the VisionX lower pane, select the "NEW table" tab and press the (+) button to open the wizard. In the wizard, select "Use existing data from database tables"​ and confirm with "Next >", keep the selection "Use Application Database User" and, again, confirm with "Next >". You can now select the view as data source. Note that views have a different icon: In the VisionX lower pane, select the "NEW table" tab and press the (+) button to open the wizard. In the wizard, select "Use existing data from database tables"​ and confirm with "Next >", keep the selection "Use Application Database User" and, again, confirm with "Next >". You can now select the view as data source. Note that views have a different icon:
  
-{{:​visionx:​data_modeling_and_representation:​views_storages_step1.png?​nolink|View as datasource: Select view}}+{{:​visionx:​data_modeling_and_representation:​views_storages_step1.png?​nolink|View as data source: Select view}}
  
 Let's verify the server-side storage that VisionX created for the data object by pressing the "Edit storages"​ icon on the right side of the lower pane: Let's verify the server-side storage that VisionX created for the data object by pressing the "Edit storages"​ icon on the right side of the lower pane:
  
-{{:​visionx:​data_modeling_and_representation:​views_storages_step2.png?​nolink|View as datasource: Edit storage}}+{{:​visionx:​data_modeling_and_representation:​views_storages_step2.png?​nolink|View as data source: Edit storage}}
  
 On the left, we have the list of available storages for the screen. Remember that for every data object, a server-side storage is created. We select the storage "​vAssetsLocalized",​ which is the storage of our currently created view, to review its settings. On the left, we have the list of available storages for the screen. Remember that for every data object, a server-side storage is created. We select the storage "​vAssetsLocalized",​ which is the storage of our currently created view, to review its settings.
Line 422: Line 422:
 Per default, the view is set as "​Writeback Table"​. This means, that the application will try to save changes on the data object'​s data in the view itself (which works fine for updateable views or views using INSTEAD OF triggers). Per default, the view is set as "​Writeback Table"​. This means, that the application will try to save changes on the data object'​s data in the view itself (which works fine for updateable views or views using INSTEAD OF triggers).
  
-==== Define the writeback table ====+==== Define the Writeback Table ====
  
-Of course we can name another table or view as the target relation for an INSERT, UPDATE, or DELETE. Let's choose the table "​assets"​. Change the "​Writeback Table" to "​assets"​ (1) and the "​from"​ clause to "​v_assets_localized"​ (2) and confirm your changes with "​Finish"​..+Of coursewe can name another table or view as the target relation for an INSERT, UPDATE, or DELETE. Let's choose the table "​assets"​. Change the "​Writeback Table" to "​assets"​ (1)the "​from"​ clause to "​v_assets_localized"​ (2)and confirm your changes with "​Finish"​.
  
-{{:​visionx:​data_modeling_and_representation:​views_storages_step3.png?​nolink|View as datasource: Edit writeback table}}+{{:​visionx:​data_modeling_and_representation:​views_storages_step3.png?​nolink|View as data source: Edit writeback table}}
  
-Whenever we execute an insert or delete on the data object now, the row will actually ​become ​inserted into or deleted from the table ASSETS. Given that the columns of the view and the writeback table are named equally, any UPDATES on that columns will also target the ASSETS table.+Whenever we execute an insert or delete on the data object now, the row will actually ​be inserted into or deleted from the table ASSETS. Given that the columns of the view and the writeback table are named equally, any UPDATES on that columns will also target the ASSETS table.
  
 This is the generated code for the views server-side storage (after [[#​creating_an_additional_automatic_link_reference|creating an additional Automatic Link Reference]] between V_ASSETS_LOCALIZED and LOCATIONS): This is the generated code for the views server-side storage (after [[#​creating_an_additional_automatic_link_reference|creating an additional Automatic Link Reference]] between V_ASSETS_LOCALIZED and LOCATIONS):
Line 457: Line 457:
     }     }
 </​code>​ </​code>​
-We can use any of the upper data storages ("​Assets"​ or "​VAssetsLocalized"​) for our data object "​Assets"​. I designed this screento contain all relevant information about the asset, the employee currently holding the asset and that employee'​s department. Therefore I created data objects for the tables LOCATIONS and EMPLOYEES and linked ​it to the "​Assets"​ data object by setting [[#​master_references|Master References]]. Moreover I created a data object for the table DEPARTMENTS and made "​EMPLOYEES"​ the Master Table for it. The resulting assets screen looks like this:+We can use any of the upper data storages ("​Assets"​ or "​VAssetsLocalized"​) for our data object "​Assets"​. I designed this screen to contain all relevant information about the asset, the employee currently holding the assetand that employee'​s department. ThereforeI created data objects for the tables LOCATIONS and EMPLOYEES and linked ​them to the "​Assets"​ data object by setting [[#​master_references|Master References]]. MoreoverI created a data object for the table DEPARTMENTS and made "​EMPLOYEES"​ the master table for it. The resulting assets screen looks like this:
  
 {{:​visionx:​data_modeling_and_representation:​views_storages_step7.png?​nolink|Storage as data source: Desktop app Assets}} {{:​visionx:​data_modeling_and_representation:​views_storages_step7.png?​nolink|Storage as data source: Desktop app Assets}}
  
-Anyway, I do not want all that information to be editable in this screen. Let's set some of the data read-only.+However, I do not want all that information to be editable in this screen. Let's set some of the data as read-only.
  
-===== Set data read-only =====+===== Set Data as Read-Only =====
  
-Select the assets screen in designer mode and press the "​Customize"​ button (1) at the top left corner. In the lower part of the popup, VisionX suggest some of the events provided by the currently selected control. We want that the data is set read-only in this screen immediately after the screen is createdlet's therefore click on "​Create On Load" (2).+Select the assets screen in designer mode and press the "​Customize"​ button (1) at the top left corner. In the lower part of the popup, VisionX ​will suggest some of the events provided by the currently selected control. We want that the data is set to read-only in this screen immediately after the screen is createdlet'sthereforeclick on "​Create On Load" (2).
  
 {{:​visionx:​data_modeling_and_representation:​views_storages_step5.png?​nolink|Set data read-only: On Load}} {{:​visionx:​data_modeling_and_representation:​views_storages_step5.png?​nolink|Set data read-only: On Load}}
  
-The "Edit Action"​ window opens. The text in the tab page "​Description"​ will be copied to the documentation of the source code. Let's select the tab page "​Action"​ (1) to specify what shall be done whenever the screen is loaded. Press the drop down list button (2) to see all predefined commands. To avoid scrolling through the list I filter the list by entering "​disable"​ in the editor (3) and press the drop down list button again. Select "​Disable Edit in table" (3).+The "Edit Action"​ window opens. The text in the tab page "​Description"​ will be copied to the documentation of the source code. Let's select the tab page "​Action"​ (1) to specify what shall be done whenever the screen is loaded. Press the dropdown ​list button (2) to see all predefined commands. To avoid scrolling through the listI filter the list by entering "​disable"​ in the editor (3) and press the drop down list button again. Select "​Disable Edit in table" (3).
  
 > **See**: For detailed information on all available VisionX Actions and how to use them, check out the [[:​visionx:​actions|documentation]]. > **See**: For detailed information on all available VisionX Actions and how to use them, check out the [[:​visionx:​actions|documentation]].
Line 475: Line 475:
 {{:​visionx:​data_modeling_and_representation:​views_storages_step6.png?​nolink|Set data read-only: Select command}} {{:​visionx:​data_modeling_and_representation:​views_storages_step6.png?​nolink|Set data read-only: Select command}}
  
-Next we have to specify the data objectthat shall not be editable; we choose "​[Table:​ Departments]"​. To add another action for the same event, drag and drop a command from the right pane to the action table. Let's select "​Disable Edit in table" again, this time for "​[Table:​ Employees]"​.+Nextwe have to specify the data object that shall not be editable; we choose "​[Table:​ Departments]"​. To add another action for the same event, drag and drop a command from the right pane to the action table. Let's select "​Disable Edit in table" again, this time for "​[Table:​ Employees]"​.
  
-I still want to be able to change the employeethat is the current holder of the asset. Therefore I bind the editor "Last Name" to the column "Last Name" of the "​Localized Assets"​ storage (which is editable). In designer mode, select the editor and press the "​Customize"​ icon (1). Open the Binding ​drop-down ​list (2) and choose "​[Localized Assets.Last Name]" (3) as binding for that editor.+I still want to be able to change the employee that is the current holder of the asset. ThereforeI bind the editor "Last Name" to the column "Last Name" of the "​Localized Assets"​ storage (which is editable). In designer mode, select the editor and press the "​Customize"​ icon (1). Open the Binding ​dropdown ​list (2) and choose "​[Localized Assets.Last Name]" (3) as binding for that editor.
  
 {{:​visionx:​data_modeling_and_representation:​views_storages_step8.png?​nolink|Set data read-only: Change editor binding}} {{:​visionx:​data_modeling_and_representation:​views_storages_step8.png?​nolink|Set data read-only: Change editor binding}}
  
-Done! My asset screen is ready to usewithout writing even one line of Java code:+Done! My asset screen is ready to use without writing even one line of Java code:
  
 {{:​visionx:​data_modeling_and_representation:​views_storages_step9.png?​nolink|Set data read-only: result web}} {{:​visionx:​data_modeling_and_representation:​views_storages_step9.png?​nolink|Set data read-only: result web}}
Line 487: Line 487:
 ====== Filters ====== ====== Filters ======
  
-To be honest, showing the location table in the departments screen is dispensable. As my use-case is to show all available assets by their locations, I could have done easier ​by creating a filter editor for the asset'​s location. Let's give a try:+To be honest, showing the location table in the departments screen is dispensable. As my use-case is to show all available assets by their locations, I could have done so more easily ​by creating a filter editor for the asset'​s location. Let's give that a try:
  
 Open the "​Assets with Filter"​ screen in designer view and drag and drop the "​Search"​ editor (1) to the screen (2). Open the "​Assets with Filter"​ screen in designer view and drag and drop the "​Search"​ editor (1) to the screen (2).
Line 493: Line 493:
 {{:​visionx:​data_modeling_and_representation:​filters_step1.png?​nolink|Filters:​ add filter}} {{:​visionx:​data_modeling_and_representation:​filters_step1.png?​nolink|Filters:​ add filter}}
  
-Select the editor, press the "​Customize"​ icon (1) and specify the Search Mode in the lower part of the popup. Let's select "​Like"​ as search mode (2) and "​[Localized Assets.Location]"​ as column (3) to search in.+Select the editor, press the "​Customize"​ icon (1)and specify the search mode in the lower part of the popup. Let's select "​Like"​ as search mode (2) and "​[Localized Assets.Location]"​ as column (3) to search in.
  
 {{:​visionx:​data_modeling_and_representation:​filters_step2.png?​nolink|Filters:​ specify filter}} {{:​visionx:​data_modeling_and_representation:​filters_step2.png?​nolink|Filters:​ specify filter}}
  
-VisionX automatically creates a drop-down ​list for the location filter editor due to the Automatic Link Reference ​between the storage [Localized Assets.Location] and the table LOCATIONS. But the "​Like"​ filter does more than simple text matching. You can use the wildcard character ? as placeholder for any single character and * or % as placeholders for any number of characters.+VisionX automatically creates a dropdown ​list for the location filter editor due to the automatic link reference ​between the storage [Localized Assets.Location] and the table LOCATIONS. But the "​Like"​ filter does more than simple text matching. You can use the wildcard character ? as placeholder for any single character and * or % as placeholders for any number of characters.
  
 For example, you may want to filter for assets at locations starting with "​South"​ (such as **South**lake,​ **South** San Francisco or **South** Brunswick) by entering "​South*"​ (or "​South%"​) into the location filter editor. Or you enter "​*en*"​ (or "​%en%"​) to get all assets at locations containing "​en"​ (such as "UK C**en**tral"​ or "​V**en**ice"​). For example, you may want to filter for assets at locations starting with "​South"​ (such as **South**lake,​ **South** San Francisco or **South** Brunswick) by entering "​South*"​ (or "​South%"​) into the location filter editor. Or you enter "​*en*"​ (or "​%en%"​) to get all assets at locations containing "​en"​ (such as "UK C**en**tral"​ or "​V**en**ice"​).
Line 505: Line 505:
 {{:​visionx:​data_modeling_and_representation:​filters_step3.png?​nolink|Filters:​ result desktop}} {{:​visionx:​data_modeling_and_representation:​filters_step3.png?​nolink|Filters:​ result desktop}}
  
-===== Filters ​use IConditions =====+===== Filters ​Use IConditions =====
  
 How does this work? Each filter editor creates an [[http://​www.sibvisions.com/​files/​jvx/​current/​api/​index.html?​javax/​rad/​model/​condition/​ICondition.html|ICondition]] and is connected to other conditions by the logical operator AND. In other words, if multiple filters are set, the result contains only those rows that match all of the filters. How does this work? Each filter editor creates an [[http://​www.sibvisions.com/​files/​jvx/​current/​api/​index.html?​javax/​rad/​model/​condition/​ICondition.html|ICondition]] and is connected to other conditions by the logical operator AND. In other words, if multiple filters are set, the result contains only those rows that match all of the filters.
  
-Of course VisionX supports more than one search mode to use in filters and conditions. These are:+Of courseVisionX supports more than one search mode to use in filters and conditions. These are:
  
 ^Search mode       ​^Description ​                                                                                                                                ^ ^Search mode       ​^Description ​                                                                                                                                ^
Line 521: Line 521:
 |**Starts with** ​  ​|Matches all literals that start with the entered value ignoring the character casing. <​html><​br></​html>​Supports ?, * and % as wildcards. ​   | |**Starts with** ​  ​|Matches all literals that start with the entered value ignoring the character casing. <​html><​br></​html>​Supports ?, * and % as wildcards. ​   |
  
-All the above filters operate on a specific column.+All of the above filters operate on a specific column.
  
-===== Full text search ​=====+===== Full Text Search ​=====
  
-And what about the default search editorwe've used in all our screens so far? If you just drag and drop the "​Search"​ editor to a screen, a filter with the following specification is created:+What about the default search editor we've used in all of our screens so far? If you just drag and drop the "​Search"​ editor to a screen, a filter with the following specification is created:
  
 ^Search mode         ​^Description ​                                                                                                         ^ ^Search mode         ​^Description ​                                                                                                         ^
 |**Full text search**|Matches all literals that contain the entered value in any column. <​html><​br></​html>​Supports ?, * and % as wildcards.| |**Full text search**|Matches all literals that contain the entered value in any column. <​html><​br></​html>​Supports ?, * and % as wildcards.|
  
-The "full text search filter"​ operates on all columns of the data object.+The "Full text search filter"​ operates on all columns of the data object.
  
-===== Specify a BETWEEN ​filter ​=====+===== Specify a BETWEEN ​Filter ​=====
  
-Let's implement the possibility to filter for assets issued in a specific ​timespan, in other words, between two dates. Simply drag and drop two Search Editors ​and bind them to "​[Localized Assets.Issue Date]" (1). Use "​Greater equals"​ (2) for the first filter and "Less equals"​ for the second filter.+Let's implement the possibility to filter for assets issued in a specific ​time span, in other words, between two dates. Simply drag and drop two search editors ​and bind them to "​[Localized Assets.Issue Date]" (1). Use "​Greater equals"​ (2) for the first filter and "Less equals"​ for the second filter.
  
 {{:​visionx:​data_modeling_and_representation:​filters_step4.png?​nolink|Filters:​ specify between filters}} {{:​visionx:​data_modeling_and_representation:​filters_step4.png?​nolink|Filters:​ specify between filters}}
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information