├── .eslintrc ├── .gitignore ├── LICENSE ├── README.md ├── babel.config.js ├── package-lock.json ├── package.json ├── react-container-servicenow.xml ├── src ├── App.css ├── App.js ├── assets │ ├── img1.png │ ├── img2.png │ ├── img3.png │ └── logo.svg ├── index.html └── index.js └── webpack ├── servicenow.config.js ├── servicenow.postbuild.js ├── webpack.base.js ├── webpack.dev.config.js └── webpack.prod.config.js /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "parserOptions": { 4 | "ecmaVersion": 6, 5 | "sourceType": "module", 6 | "ecmaFeatures": { 7 | "jsx": true, 8 | "experimentalObjectRestSpread": true 9 | } 10 | }, 11 | "env": { 12 | "es6": true, 13 | "browser": true, 14 | "node": true, 15 | "mocha": true 16 | }, 17 | "extends": [ 18 | "eslint:recommended", 19 | "plugin:import/errors", 20 | "plugin:import/warnings" 21 | ], 22 | "plugins": [ 23 | "react", 24 | "babel", 25 | "import" 26 | ], 27 | 28 | "rules": { 29 | "comma-dangle": 0, 30 | "no-mixed-spaces-and-tabs": 0, 31 | "no-alert": 0, 32 | "import/default": 2, 33 | "import/named": 2, 34 | "import/no-unresolved": 2, 35 | "no-underscore-dangle": 0, 36 | "no-case-declarations": 0, 37 | "strict": 0, 38 | "no-console": 1, 39 | "no-trailing-spaces": 0, 40 | "react/display-name": 0, 41 | "react/jsx-no-undef": 2, 42 | "react/jsx-sort-prop-types": 0, 43 | "react/jsx-sort-props": 0, 44 | "react/jsx-uses-react": 1, 45 | "react/jsx-uses-vars": 1, 46 | "react/no-did-mount-set-state": 1, 47 | "react/no-did-update-set-state": 1, 48 | "react/no-unknown-property": 1, 49 | "react/prop-types": 0, 50 | "react/react-in-jsx-scope": 1, 51 | "react/self-closing-comp": 0, 52 | "react/sort-comp": 0, 53 | "react/jsx-wrap-multilines": 1 54 | }, 55 | "settings": { 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | 6 | # testing 7 | /coverage 8 | 9 | # production 10 | /build 11 | /dist 12 | 13 | # misc 14 | .DS_Store 15 | .env.local 16 | .env.development.local 17 | .env.test.local 18 | .env.production.local 19 | 20 | npm-debug.log* 21 | yarn-debug.log* 22 | yarn-error.log* 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 ELIN Software 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | NOTE: This is an old legacy boilerplate. Use the new one for your ServiceNow projects: https://github.com/elinsoftware/servicenow-react-app 2 | -- 3 | 4 | # React boilerplate for ServiceNow applications 5 | 6 | This is a React boilerplate that is specifically designed to build ServiceNow-ready web applications. 7 | 8 | The boilerplate includes a minimalistic example of a ServiceNow scoped app, which serves as a container for a web application. Update set `react-container-servicenow.xml` can be found in a root folder. 9 | 10 | This boilerplate supports all of the modern web development features and capabilities: 11 | 12 | - Standard React loaders/processors 13 | - Proxy requests 14 | - Chunks and lazy loading optimizations 15 | - CSS-in-JS 16 | - Hot reloading etc. 17 | 18 | The key feature is the ability to build the web application ServiceNow-ready, so it can be deployed simply by uploading bundle files to ServiceNow. 19 | 20 | It's assumed that you already have an app container (Scripted REST API) ready on a ServiceNow side, that is the place where files need to be uploaded. If you don't have it yet then you can use the `react-container-servicenow.xml` app as an example and build your own containers. 21 | 22 | ## 1. Configuration 23 | 24 | To run a local development server you need to update ServiceNow configuration in `./webpack/servicenow.config.js`. Proper configuration is required to proxy REST calls to the ServiceNow instance and to build the application package. 25 | 26 | #### Configuration Settings Overview 27 | 28 | These are the available configuration settings. 29 | 30 | **`REST_API_PATH`** - `'/api'` 31 | 32 | This is a default prefix for all ServiceNow APIs and should not be changed. 33 | 34 | --- 35 | 36 | **`SERVICENOW_INSTANCE`** - `'https://.service-now.com'` 37 | 38 | ServiceNow instance URL for REST calls 39 | 40 | - it is being used in Development mode only 41 | - this should be the instance where React application will be deployed to 42 | 43 | --- 44 | 45 | **`REACT_APP_USER`** - `''` 46 | 47 | ServiceNow username for API requests 48 | 49 | - it is being used for sending REST calls in Development mode only 50 | - no need to provide credentials for Production 51 | 52 | --- 53 | 54 | **`REACT_APP_PASSWORD`** - `''` 55 | 56 | ServiceNow user password, for Development mode only 57 | 58 | --- 59 | 60 | **`JS_API_PATH`** - `'api//container/js/'` 61 | 62 | ServiceNow path to the GET resource which serves JavaScript files 63 | 64 | - Current configuration does not produce CSS files 65 | - CSS code will be embedded into javascript files 66 | 67 | --- 68 | 69 | **`IMG_API_PATH`** - `'api//container/img/'` 70 | 71 | ServiceNow path to the GET resource which serves Image files (png, jpg, gif) 72 | 73 | - SVG files will be embedded into JavaScript files 74 | 75 | --- 76 | 77 | **`ASSETS_API_PATH`** - `'api//container/other_assets/'` 78 | 79 | ServiceNow path to the GET resource which serves other files like fonts etc. 80 | 81 | --- 82 | 83 | **`ASSET_SIZE_LIMIT`** - `10000` 84 | 85 | Fonts and images below this size (in bytes) will be put inside JS chunks, instead of being saved as separate files. 86 | 87 | ## 2. Development 88 | 89 | Development of a ServiceNow application with React is no different from any other stuff you would do in modern web development — component libraries, routing, CSS-in-JS, lazy loading, optimization, etc. Everything supported, there are no limits! 90 | 91 | Start the development server 92 | 93 | ``` 94 | $ npm start 95 | ``` 96 | 97 | ## 3. Production build 98 | 99 | To create a production build for ServiceNow deployment: 100 | 101 | 1. Make sure you provided correct API paths to your REST resources (JS/IMG/ASSETS) in `./webpack/servicenow.config.js` 102 | 2. Run `npm run build` 103 | 3. Find the production build in the `dist/` directory 🎉 104 | 105 | ##### Chunks and assets 106 | 107 | > **Note** Instead of '.' (dots) in file names, all chunks and assets use '-' (dash), so build files don't have typical extensions. 108 | 109 | Apart from your application source code, the **JS bundle** includes images (png, jpg, gif) and fonts below the size limit (10kB by default) and all CSS styles. 110 | 111 | Files larger than the size limit and other file types are saved as separate files under the assets directory. 112 | 113 | To change the size limit, set the `ASSET_SIZE_LIMIT` config property. 114 | 115 | ## 4. Deployment 116 | 117 | Once the application is built, the package files will be located in the folders you specified in `./dist` folder: 118 | 119 | 1. Copy `index.html` code into a UI page. HTML code is ServiceNow-ready, so you don't need to make any changes. 120 | 2. Drag-n-drop JavaScript files from `./dist/api/.../js` folder to the corresponding REST API resource. Do the same with image and asset files. 121 | 122 | That would conclude the deployment process. Open the application by navigating to the UI page URL. 123 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.cache(true); 3 | const presets = ["@babel/preset-react", "@babel/preset-env"]; 4 | const plugins = [ 5 | "@babel/plugin-proposal-class-properties", 6 | "@babel/plugin-proposal-object-rest-spread", 7 | "@babel/plugin-syntax-dynamic-import", 8 | "@babel/plugin-transform-runtime" 9 | ]; 10 | 11 | return { 12 | env: { 13 | test: { 14 | presets 15 | }, 16 | development: { 17 | plugins: [ 18 | // hot reloads 19 | "react-hot-loader/babel", 20 | // default plugins 21 | ...plugins 22 | ] 23 | } 24 | }, 25 | presets, 26 | plugins 27 | }; 28 | }; 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-boilerplate", 3 | "version": "1.0.0", 4 | "description": "react boilerplate", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node_modules/.bin/webpack-dev-server --config=./webpack/webpack.dev.config.js", 8 | "build": "rm -rf ./dist; mkdir ./dist; node node_modules/webpack/bin/webpack.js --progress --config webpack/webpack.prod.config.js --bail", 9 | "postbuild": "node webpack/servicenow.postbuild.js" 10 | }, 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "@blueprintjs/core": "^3.22.3", 15 | "axios": "^0.19.0", 16 | "dotenv-webpack": "^1.7.0", 17 | "react": "^16.8.4", 18 | "react-dom": "^16.8.4", 19 | "styled-components": "^4.4.1" 20 | }, 21 | "devDependencies": { 22 | "@babel/core": "^7.3.4", 23 | "@babel/plugin-proposal-class-properties": "^7.2.1", 24 | "@babel/plugin-proposal-object-rest-spread": "^7.2.0", 25 | "@babel/plugin-syntax-dynamic-import": "^7.2.0", 26 | "@babel/plugin-transform-classes": "^7.3.4", 27 | "@babel/plugin-transform-runtime": "^7.6.2", 28 | "@babel/preset-env": "^7.3.4", 29 | "@babel/preset-react": "^7.0.0", 30 | "@babel/runtime": "^7.6.2", 31 | "@hot-loader/react-dom": "^16.11.0", 32 | "babel-core": "^7.0.0-bridge.0", 33 | "babel-eslint": "10.0.1", 34 | "babel-loader": "8.0.4", 35 | "body-parser": "1.18.3", 36 | "chalk": "^3.0.0", 37 | "clear": "^0.1.0", 38 | "core-js": "3.1.3", 39 | "css-loader": "1.0.1", 40 | "directory-tree": "^2.2.4", 41 | "eslint": "5.16.0", 42 | "eslint-import-resolver-webpack": "0.11.0", 43 | "eslint-loader": "2.1.1", 44 | "eslint-plugin-babel": "4.1.2", 45 | "eslint-plugin-import": "2.16.0", 46 | "eslint-plugin-react": "7.11.1", 47 | "events": "1.0.2", 48 | "express": "4.16.3", 49 | "file-loader": "2.0.0", 50 | "html-webpack-plugin": "3.2.0", 51 | "optimist": "^0.6.1", 52 | "react-hot-loader": "4.12.16", 53 | "react-test-renderer": "^16.8.6", 54 | "serve-static": "1.13.2", 55 | "style-loader": "0.19.1", 56 | "svg-sprite-loader": "3.9.2", 57 | "svg-url-loader": "^2.3.2", 58 | "url-loader": "1.1.2", 59 | "webpack": "4.33.0", 60 | "webpack-bundle-analyzer": "^3.3.2", 61 | "webpack-cli": "3.2.3", 62 | "webpack-dev-server": "3.1.11" 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /react-container-servicenow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | f2ba728813da041032813092e144b01f 4 | React App 5 | x_elsr_react_app 6 | 1.0.0 7 | 8 | 9 | 10 | Application container to serve React bundle files. 11 | 12 | React App 13 | 14 | 15 | 16 | 17 | 18 | 8f708b40131e041032813092e144b078 19 | loaded 20 | 21 | sys_remote_update_set 22 | andrew.pishchulin 23 | 2020-01-07 21:21:11 24 | 06908b40131e041032813092e144b07b 25 | 0 26 | andrew.pishchulin 27 | 2020-01-07 21:21:11 28 | 29 | 30 | 31 | 32 | 33 | INSERT_OR_UPDATE 34 | f2ba728813da041032813092e144b01f 35 | customer 36 | 37 | sys_scope_privilege_acee3ecc13da041032813092e144b0a6 38 | readf2ba728813da041032813092e144b01fallowedsys_scope_privilegeandrew.pishchulin2020-01-07 21:13:42acee3ecc13da041032813092e144b0a60sys_attachmentf2ba728813da041032813092e144b01ff2ba728813da041032813092e144b01fsys_scope_privilege_acee3ecc13da041032813092e144b0a6andrew.pishchulin2020-01-07 21:13:42sys_attachmentglobalsys_db_object]]> 39 | -985964803 40 | 06908b40131e041032813092e144b07b 41 | false 42 | andrew.pishchulin 43 | 2020-01-07 21:21:11 44 | 02908b40131e041032813092e144b07e 45 | 0 46 | 16f81e19de30000001 47 | andrew.pishchulin 48 | 2020-01-07 21:21:11 49 | 50 | sys_attachment 51 | Cross scope privilege 52 | global 53 | e8ee3ecc37da0410e35332a10b811da7 54 | e8ee3ecc37da0410e35332a10b811da7:-985964803 55 | 56 | 57 | 58 | 59 | INSERT_OR_UPDATE 60 | f2ba728813da041032813092e144b01f 61 | customer 62 | 63 | sys_scope_privilege_60ee3ecc13da041032813092e144b0a9 64 | executef2ba728813da041032813092e144b01fallowedsys_scope_privilegeandrew.pishchulin2020-01-07 21:13:4260ee3ecc13da041032813092e144b0a90GlideSysAttachment.getContentf2ba728813da041032813092e144b01ff2ba728813da041032813092e144b01fsys_scope_privilege_60ee3ecc13da041032813092e144b0a9andrew.pishchulin2020-01-07 21:13:42GlideSysAttachment.getContentglobalscriptable]]> 65 | 115103585 66 | 06908b40131e041032813092e144b07b 67 | false 68 | andrew.pishchulin 69 | 2020-01-07 21:21:11 70 | 06908b40131e041032813092e144b07d 71 | 0 72 | 16f81e19dd60000001 73 | andrew.pishchulin 74 | 2020-01-07 21:21:11 75 |
76 | GlideSysAttachment.getContent 77 | Cross scope privilege 78 | global 79 | acee3ecc73da0410edd9a99da7ab73a9 80 | acee3ecc73da0410edd9a99da7ab73a9:115103585 81 | 82 | 83 | 84 | 85 | INSERT_OR_UPDATE 86 | f2ba728813da041032813092e144b01f 87 | customer 88 | 89 | sys_app_module_6bdc3a4c13da041032813092e144b07e 90 | true163c7a0c13da041032813092e144b0beDIRECTREST APIMobile200falsesys_ws_definition.do?sys_id=74daba8813da041032813092e144b0e1sys_app_moduleandrew.pishchulin2020-01-07 21:05:19global/6bdc3a4c13da041032813092e144b07e1REST APIf2ba728813da041032813092e144b01ff2ba728813da041032813092e144b01fsys_app_module_6bdc3a4c13da041032813092e144b07eandrew.pishchulin2020-01-07 21:06:17REST APIfalse]]> 91 | 564190232 92 | 06908b40131e041032813092e144b07b 93 | false 94 | andrew.pishchulin 95 | 2020-01-07 21:21:11 96 | 0a908b40131e041032813092e144b07c 97 | 0 98 | 16f81e19d9c0000001 99 | andrew.pishchulin 100 | 2020-01-07 21:21:11 101 |
102 | REST API 103 | Module 104 | global 105 | b72dfe4cecda041029098e23d456ea8d 106 | b72dfe4cecda041029098e23d456ea8d:564190232,a5fc7a4c1dda04100680030eb8159c79:1903545126 107 | 108 | 109 | 110 | 111 | INSERT_OR_UPDATE 112 | f2ba728813da041032813092e144b01f 113 | customer 114 | 115 | sys_ws_definition_74daba8813da041032813092e144b0e1 116 | true/api/x_elsr_react_app/containerapplication/json,application/xml,text/xmlfalseNo active default versioncf9d01d3e73003009d6247e603f6a990falseReact App Containerx_elsr_react_appapplication/json,application/xml,text/xmlfalsecontainersys_ws_definitionandrew.pishchulin2020-01-07 20:56:1474daba8813da041032813092e144b0e12React App Containerf2ba728813da041032813092e144b01ff2ba728813da041032813092e144b01fsys_ws_definition_74daba8813da041032813092e144b0e1andrew.pishchulin2020-01-07 21:04:37]]> 117 | -1205176465 118 | 06908b40131e041032813092e144b07b 119 | false 120 | andrew.pishchulin 121 | 2020-01-07 21:21:11 122 | 0e908b40131e041032813092e144b07e 123 | 0 124 | 16f81e19d690000001 125 | andrew.pishchulin 126 | 2020-01-07 21:21:11 127 |
128 | React App Container 129 | Scripted REST API 130 | global 131 | dbccb64c32da04108201ca34e89c5dd1 132 | dbccb64c32da04108201ca34e89c5dd1:-1205176465,99fabe8832da04101176f3136f69fb4c:2091963919,60ea7a88c9da0410ed86e73115ea9106:-404018353 133 | 134 | 135 | 136 | 137 | INSERT_OR_UPDATE 138 | f2ba728813da041032813092e144b01f 139 | customer 140 | 141 | sys_scope_privilege_4d3ff68c13da041032813092e144b0f0 142 | readf2ba728813da041032813092e144b01fallowedsys_scope_privilegeandrew.pishchulin2020-01-07 21:15:064d3ff68c13da041032813092e144b0f00sys_ws_operationf2ba728813da041032813092e144b01ff2ba728813da041032813092e144b01fsys_scope_privilege_4d3ff68c13da041032813092e144b0f0andrew.pishchulin2020-01-07 21:15:06sys_ws_operationglobalsys_db_object]]> 143 | 1181963391 144 | 06908b40131e041032813092e144b07b 145 | false 146 | andrew.pishchulin 147 | 2020-01-07 21:21:11 148 | 42908b40131e041032813092e144b07d 149 | 0 150 | 16f81e19e480000001 151 | andrew.pishchulin 152 | 2020-01-07 21:21:11 153 |
154 | sys_ws_operation 155 | Cross scope privilege 156 | global 157 | 413fb200671e0410f1777218eec6cb6c 158 | 413fb200671e0410f1777218eec6cb6c:1181963391 159 | 160 | 161 | 162 | 163 | INSERT_OR_UPDATE 164 | f2ba728813da041032813092e144b01f 165 | customer 166 | 167 | sys_app_module_6b4cfa0c13da041032813092e144b07e 168 | true163c7a0c13da041032813092e144b0beDIRECTUI pageMobile100falsesys_ui_page.do?sys_id=fb0cb60c13da041032813092e144b0a5sys_app_moduleandrew.pishchulin2020-01-07 21:04:14global/6b4cfa0c13da041032813092e144b07e1UI pagef2ba728813da041032813092e144b01ff2ba728813da041032813092e144b01fsys_app_module_6b4cfa0c13da041032813092e144b07eandrew.pishchulin2020-01-07 21:06:05UI pagefalse]]> 169 | -1643903517 170 | 06908b40131e041032813092e144b07b 171 | false 172 | andrew.pishchulin 173 | 2020-01-07 21:21:11 174 | 46908b40131e041032813092e144b07c 175 | 0 176 | 16f81e19d850000001 177 | andrew.pishchulin 178 | 2020-01-07 21:21:11 179 |
180 | UI page 181 | Module 182 | global 183 | 8d2d7e4cc7da0410a92a9844fe0d3b0d 184 | 8d2d7e4cc7da0410a92a9844fe0d3b0d:-1643903517,b5bc364cb2da0410afec492b8be896f7:-1709617807 185 | 186 | 187 | 188 | 189 | INSERT_OR_UPDATE 190 | f2ba728813da041032813092e144b01f 191 | customer 192 | 193 | sys_ws_operation_f1cb7ec813da041032813092e144b06a 194 | <?xml version="1.0" encoding="UTF-8"?><record_update table="sys_ws_operation"><sys_ws_operation action="INSERT_OR_UPDATE"><active>true</active><consumes>application/json,application/xml,text/xml</consumes><consumes_customized>false</consumes_customized><default_operation_uri/><enforce_acl/><http_method>GET</http_method><name>Assets</name><operation_script><![CDATA[(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) { 195 | var fileName = request.pathParams.file; 196 | var currentRecord = "f1cb7ec813da041032813092e144b06a"; 197 | var ar = new GlideRecord('sys_attachment'); 198 | ar.addQuery('table_sys_id', currentRecord); 199 | ar.addQuery('file_name', fileName); 200 | ar.query(); 201 | 202 | response.setContentType('application/octet-stream'); 203 | response.setStatus(200); 204 | 205 | if (ar.next()) { 206 | var gsa = new GlideSysAttachment(); 207 | var attachmentStream = new gsa.getContentStream(ar.sys_id.toString()); 208 | var writer = response.getStreamWriter(); 209 | writer.writeStream(attachmentStream); 210 | } else { 211 | return "file not found"; 212 | } 213 | })(request, response);]]></operation_script><operation_uri>/api/x_elsr_react_app/container/other_assets/{file}</operation_uri><produces>application/json,application/xml,text/xml</produces><produces_customized>false</produces_customized><relative_path>/other_assets/{file}</relative_path><request_example/><requires_acl_authorization>false</requires_acl_authorization><requires_authentication>false</requires_authentication><requires_snc_internal_role>false</requires_snc_internal_role><short_description/><sys_class_name>sys_ws_operation</sys_class_name><sys_created_by>andrew.pishchulin</sys_created_by><sys_created_on>2020-01-07 21:00:09</sys_created_on><sys_id>f1cb7ec813da041032813092e144b06a</sys_id><sys_mod_count>2</sys_mod_count><sys_name>Assets</sys_name><sys_package display_value="React App" source="x_elsr_react_app">f2ba728813da041032813092e144b01f</sys_package><sys_policy/><sys_scope display_value="React App">f2ba728813da041032813092e144b01f</sys_scope><sys_update_name>sys_ws_operation_f1cb7ec813da041032813092e144b06a</sys_update_name><sys_updated_by>andrew.pishchulin</sys_updated_by><sys_updated_on>2020-01-07 21:13:37</sys_updated_on><web_service_definition display_value="React App Container">74daba8813da041032813092e144b0e1</web_service_definition><web_service_version/></sys_ws_operation></record_update> 214 | 427562653 215 | 06908b40131e041032813092e144b07b 216 | false 217 | andrew.pishchulin 218 | 2020-01-07 21:21:11 219 | 46908b40131e041032813092e144b07f 220 | 0 221 | 16f81e19dbd0000001 222 | andrew.pishchulin 223 | 2020-01-07 21:21:11 224 |
225 | Assets 226 | Scripted REST Resource 227 | global 228 | d7defaccd6da0410bce03823a748a8f0 229 | d7defaccd6da0410bce03823a748a8f0:427562653,b7eb720cf8da0410e2c0dec0108d467c:353933935,35cb7ec80bda0410e5eec2372d35f06b:-508833278 230 | 231 | 232 | 233 | 234 | INSERT_OR_UPDATE 235 | f2ba728813da041032813092e144b01f 236 | customer 237 | 238 | sys_ui_page_fb0cb60c13da041032813092e144b0a5 239 | generaltruex_elsr_react_app_index-html.doindex-htmlsys_ui_pageandrew.pishchulin2020-01-07 21:01:42fb0cb60c13da041032813092e144b0a52index-htmlf2ba728813da041032813092e144b01ff2ba728813da041032813092e144b01fsys_ui_page_fb0cb60c13da041032813092e144b0a5andrew.pishchulin2020-01-07 21:18:06]]> 240 | 1679667812 241 | 06908b40131e041032813092e144b07b 242 | false 243 | andrew.pishchulin 244 | 2020-01-07 21:21:11 245 | 4a908b40131e041032813092e144b07e 246 | 0 247 | 16f81e19e630000001 248 | andrew.pishchulin 249 | 2020-01-07 21:21:11 250 |
251 | index-html 252 | UI Page 253 | global 254 | b0eff600b81e04101d8fe1965921c784 255 | b0eff600b81e04101d8fe1965921c784:1679667812,6f6e368cafda0410f998882a3d1f814a:-1998983481,a82c3a0cb3da041064cf202aa449f114:-1541652025 256 | 257 | 258 | 259 | 260 | INSERT_OR_UPDATE 261 | f2ba728813da041032813092e144b01f 262 | customer 263 | 264 | sys_scope_privilege_a8ee3ecc13da041032813092e144b0b1 265 | executef2ba728813da041032813092e144b01fallowedsys_scope_privilegeandrew.pishchulin2020-01-07 21:13:43a8ee3ecc13da041032813092e144b0b10ScriptableServiceResultStreamWriter.writeStringf2ba728813da041032813092e144b01ff2ba728813da041032813092e144b01fsys_scope_privilege_a8ee3ecc13da041032813092e144b0b1andrew.pishchulin2020-01-07 21:13:43ScriptableServiceResultStreamWriter.writeStringglobalscriptable]]> 266 | -1548920415 267 | 06908b40131e041032813092e144b07b 268 | false 269 | andrew.pishchulin 270 | 2020-01-07 21:21:11 271 | 4e908b40131e041032813092e144b07d 272 | 0 273 | 16f81e19e130000001 274 | andrew.pishchulin 275 | 2020-01-07 21:21:11 276 |
277 | ScriptableServiceResultStreamWriter.writeString 278 | Cross scope privilege 279 | global 280 | e4ee3ecce2da0410d766c7f967c3dcb2 281 | e4ee3ecce2da0410d766c7f967c3dcb2:-1548920415 282 | 283 | 284 | 285 | 286 | INSERT_OR_UPDATE 287 | f2ba728813da041032813092e144b01f 288 | customer 289 | 290 | sys_app_f2ba728813da041032813092e144b01f 291 | truefalseloghelsinki_es5truenonenoneReact Appfalsefalsepermissivex_elsr_react_appfalseApplication container to serve React bundle filesx_elsr_react_appsys_appandrew.pishchulin2020-01-07 20:55:34f2ba728813da041032813092e144b01f1andrew.pishchulin2020-01-07 21:20:22