TECHNICAL ARCHITECTURE FORM FACTORY V2

Size: px
Start display at page:

Download "TECHNICAL ARCHITECTURE FORM FACTORY V2"

Transcription

1 TECHNICAL ARCHITECTURE 1

2 SUMMARY OVERVIEW FROM FF1 TO FF SERVER SIDE ARCHITECTURE Structure Rest API OSGI/Extendability CLIENT SIDE ARCHITECTURE LIBRARY Creation Management Use as template Duplicate Import/Export BUILDER Inputs ActionS Steps Validations Logics Layout Jahia Solutions Group SA Page 2 / 72

3 5.7 Metadata Themes Progress Bar Captcha Tracking PREVIEW/LIVE Rendering Inputs Validations Logics Submission Actions Callbacks Per form callback Form Factory API JS callback RESULTS Actions/Results Bound APIBackendType Interface ResultsProviderService Interface Implementations Fetching Views API Mapping JSP file Results API Views Jahia Solutions Group SA Page 3 / 72

4 7.3.2 Metadata view Datatable view Dashboard view PROJECT STRUCTURE GruntJS tasks APPENDIXES WZD files definitions Inputs Actions Validations Logics Renderers Progress Bars Roles/Permissions Roles Permissions JavaScript Frameworks Jahia Solutions Group SA Page 4 / 72

5 Overview In this document we will introduce to the architecture and design of Form Factory 2.0, we will highlight all the changes from version1. First we will describe what has changed and what is new in the structure of the application itself. Form Factory is an application dedicated to ease the creation of all your forms on your platform. To achieve this, FF provide a set of functionalities that can be group in 4 big sections: Building custom form Manage your forms Render/Submit forms Analyze results Jahia Solutions Group SA Page 5 / 72

6 1 FROM FF1 TO FF2 In FF2 we have switch from using Spring Webflow on the server side and BackboneJS on the client side to using a RESTful API and AngularJS for the client. On the DX side we did not touch the node types so that it is easier to move from FF1 to FF2. Your forms and results from version 1 are not lost and will appear right away in version 2. The UI has switch from Bootstrap 2 to Bootstrap 3. The captcha is not using Jahia DX captcha but it is using recaptcha from Google. Changes has been made on how you declare new input/action/validation/logic/callback/renderers/progress bar. From now on once you have defined the node type in the definition file of your module, all the files needed are views of this node type. No more modification of the repository.xml file. From the previous list of extension points you figured that there is quite a lot of new things in this version. FF 2 will allow to have logics on your field to toggle their visibility. This will allow to define forms where fields appear only if the user match certain conditions, you are able to provide your own rules as for validations. Validations validate one field upon static criteria mostly whereas logics allows to show/hide a field based on value of fields on the same step or on previous steps. It is also possible to change the layout of your form, so once you have assembled all the fields you are going to need on each steps of your form you can now dispatch those inputs on a grid and not just under one another as previously. You can now define a progress bar along your form to show to the user where they stand in the form completion. It is possible to associate a form to a callback to react after submission to the result of the actions. The only unchanged part is the results; those have just been upgraded to Bootstrap 3. FF 2 retain the concept of building language, meaning that a form structure (inputs/steps/actions) can only be altered in its building language, in other languages you can only translate some properties Jahia Solutions Group SA Page 6 / 72

7 2 SERVER SIDE ARCHITECTURE The JCR structure of the form has not changed; the new functionalities are working the same way as previous ones. Meaning that logics for example are stored and define like validations. 2.1 STRUCTURE The JSON serialization of a FF2 form is quite similar to the FF 1 serialization. Here an example of FF2 serialization: { "jcrid": "0b7f45fb-081a-4be5-b72f-7bb9d6165d46", "formname": "architecture", "buildinglang": "en", "cssclassname": null, "formdescription": null, "aftersubmissiontext": null, "modified": " T14:02: :00", "steps": [ { "jcrid": "72898fce-effb-4dcf-b6d bd48b9", "label": "Step 1", "inputs": [ { "name": " -input_0_1", "label": " input", "tab": "input", "template": "<ff- ></ff- >", "wizard": "<ff- view-type ='designview'></ff- >", "nodetype": "fcnt: definition", "jcrid": "7714bafe bcd-ba a5eb7e3e", "choicefield": null, "value": null, "layoutuuid": "510917c2-0ea0-47c6-a717-2aa1d545c303", "inputsize": "input-md", "helptext": "Please enter a valid here", "placeholder": "aaa@aaa.com", "definitionoptions": [ "inputsize" ], "definitionoptionstranslatable": [ "helptext", "placeholder" ], "validations": { "required": { "nodetype": "fcnt :requiredvalidation", Jahia Solutions Group SA Page 7 / 72

8 "jcrid": "ef343f97-a59b adf9a06118ab", "message": "This field is required", "definitionoptions": [ ], "definitionoptionstranslatable": [ "message" ], " ": { "nodetype": "fcnt: validation", "jcrid": "7c9f48b7-8ffb-4b96-a46c-6935cbc21997", "message": "Please enter a valid address", "definitionoptions": [ ], "definitionoptionstranslatable": [ "message" ], { "name": "checkboxes-matrix_0_2", "label": "Checkboxes Matrix", "tab": "checkbox", "template": "<ff-checkboxes-matrix></ff-checkboxes-matrix>", "wizard": "<ff-checkboxes-matrix view-type='designview'></ff-checkboxesmatrix>", "nodetype": "fcnt:matrixcheckboxesdefinition", "jcrid": "0ef30bc8-ba51-460e ee7f3c72ca0", "choicefield": "rows,columns", "value": null, "layoutuuid": "d2a15b d-a9f2-8869d0bcc32d", "helptext": "Help", "rows": [ { "key": "q1", "value": "Question One", { "key": "q2", "value": "Question Two", { "key": "q3", "value": "Question Three" ], "columns": [ { "key": "a1", "value": "Answer One", { "key": "a2", "value": "Answer Two", { Jahia Solutions Group SA Page 8 / 72

9 "key": "a3", "value": "Answer Three" ], "definitionoptions": [ ], "definitionoptionstranslatable": [ "helptext", "rows", "columns" ], "validations": { "matrix-required": { "nodetype": "fcnt:matrixrequiredvalidation", "jcrid": "3f38c426-add4-438c-8b21-78cf2ab9f8f3", "message": "Enter your error message here", "definitionoptions": [ ], "definitionoptionstranslatable": [ "message" ], "logics": [ { "name": "if-field-is-valid_0", "nodetype": "fcnt:iffieldisvalidlogic", "jcrid": "16b30c64-9e00-45ec-ac b3ed4", "fieldname": " -input_0_1", "noview": "true", "definitionoptions": [ "fieldname", "noview" ], "definitionoptionstranslatable": [ ] ] ] ], "actions": [ { "jcrid": "1b8226f ae61-b61fcab6960b", "nodetype": "fcnt:savetojcraction", "actionname": "savetojcr", "apientrypoint": "/modules/formfactory/results", "definitionoptions": [ "actionname", "apientrypoint" ], "definitionoptionstranslatable": [ ] Jahia Solutions Group SA Page 9 / 72

10 ], "missinglanguages": null, "existinglanguages": { "en": "English", "progressbar": null, "callbacks": null, "displayablename": "architecture", "layoutjson": "{\"active\":false,\"layoutempty \":true,\"steps\":[{\"rows\":[],\"inputpositionmanagement\":{\"colindex\":null,\" rowindex\":null,\"activeinputfieldname \":null,\"activeinputexists\":false,\"inputmovementhistory\":[]]", "token": null, "trackuser": true, "callbackname": null, "displaycaptcha": true, "theme": null The structure is the same as in V1 a form with its metadata and an array of steps and another array of actions. Each steps contains an array of inputs with their validations and logics. 2.2 REST API The API is defined with JAX-RS, each entry point is managing certain parts of the application. The 4 main entry points are /formfactory/builder: all the sub resources for form creation/management /formfactory/settings: all the sub resources for form factory settings /formfactory/live: all the sub resources for form rendering/submission /formfactory/results: all the sub resources to load/analyze the submissions 2.3 OSGI/EXTENDABILITY Once Form Factory is deployed on your platform it will react upon every module deployment and scan their definition file, looking for node types specific to Form Factory. With V2 there no need anymore to create complex structure in the repository.xml file of your module. To declare a new input, you just declare the type in the definition file, then you create a WZD view (it s a file following a specific DSL in groovy to ease the creation of extensions for Form Factory). Example of a WZD file, from Input Text definition: Jahia Solutions Group SA Page 10 / 72

11 input { label "Text input" template "<ff-input-text></ff-input-text>" wizard "<ff-input-text view-type='designview'></ff-input-text>" supportedvalidationtypes "required", "equal", "length", "number", "regex" supportedlogictypes "valid", "input" properties { inputsize "input-md" propertiesi18n { helptext "Help" placeholder "Text input" An input like this one, will need a few other files to be working with Form Factory Jahia Solutions Group SA Page 11 / 72

12 3 CLIENT SIDE ARCHITECTURE With the switch to AngularJS, we have decided that each element of Form Factory 2 will be an AngularJS directive. This means that for each input/action/validation/logic/etc. you might have to code a JS file and if needed some JSP s. Form Factory 2 will aggregate all those JS files inside only one JS file so that all the application can be loaded with as less requests as possible. All the resource bundle from your module are going to be aggregated together and merge in a dictionary available in the builder so that you can use them in JS without worrying about how to load them across modules. This structure has allowed us to have custom templates for each input either for rendering or for editing. The panels are no more auto-generated but now you design them the way you want. The build system of Form Factory is doing the same, upon building we aggregate all the JS libraries we are using into one file (_ff2.js)., we do the same for our AngularJS application, we aggregate each components in there own JS file (ff-core.js, ff-builder.js, ff-rendering.js, ffsettings.js). We are using NPM, Bower and Grunt in conjunction with maven. Here is what a typical input structure will look like: As you can see we need 4 files to define a new input. Actions and validations will need even less files (it is possible to declare a new action with just a wzd file) Jahia Solutions Group SA Page 12 / 72

13 The wzd file is the properties of your input (label, properties, i18n properties, validations, logics, etc.) The directive view is the AngularJS directive defining how and which template to load and if needed some specific behavior. Then the default view is used to render the input in the builder/preview/live mode, this is the view your visitor will see when they fill the form. And last view is the designview which will be visible by your form designer when they create/modify a form and update an input. The builder is build as a Single Application Page (SAP) every redirection is done internally using AngularJS UI-Router. The main routes are the library, the builder, and the translation mode. angular.module('formfactory').config(function(contextualdata, $stateprovider, $urlrouterprovider) { $stateprovider.state('library', { url: '/library', templateurl: ).state('builder', { url: '/builder', template: '<ff-controller>', params: { ).state('translator', { url: '/translator', template: '<ff-form-translator>', params: { );, ['contextualdata', '$stateprovider', '$urlrouterprovider']); On the preview/live side each form is bootstrapped individually so that they do not collide on the same page. There is no routing on the preview/live side, we load the whole form at once from the REST API and then navigate between all the steps, until submission. The module in preview/live is much lighter and with less dependencies than in the builder side. Live module declaration: Jahia Solutions Group SA Page 13 / 72

14 ff.app = angular.module('formfactory', ['i18n', 'formfactory.validation', 'formfactory.logic', 'ngfileupload', 'checklist-model', 'formfactory.commonusefactory', 'formfactory.templateresolver', 'ui.bootstrap', 'formfactory.datafactory', 'vcrecaptcha']); Builder module declaration: angular.module('formfactory', ['ui.router', 'formfactory.datafactory', 'datatables', 'datatables.bootstrap', 'i18n', 'ui.bootstrap', 'ui.bootstrap.tooltip', 'formfactory.commonusefactory', 'ngresource', 'formfactory.downloadzipfactory', 'formfactory.updaterfactory', 'checklist-model', 'uiswitch', 'formfactory.templateresolver', 'toaster', 'nganimate'], function ($uibtooltipprovider) { $uibtooltipprovider.options({ placement: 'bottom', popupdelay: 200, popupclosedelay: 0, appendtobody: true ); ); Jahia Solutions Group SA Page 14 / 72

15 4 LIBRARY The library is the main entry point to your form creation and lifecycle management. Users need to be part of the role Form Factory Manager, Form Factory Editor or Form Factory Reviewer to access the library. 4.1 CREATION When you want to create a new form we validate that there is no form existing with the same name already. The UI is calling the entry point: /formfactory/builder/checkformnameavailability/{language If name is available and valid then upon click we route you to the builder with a predefined form composed of one input text and one action ( Save To JCR ). 4.2 MANAGEMENT Once you have created a form and saved it in the builder, when you are coming back to the library you will see it in the lift of forms you can manage Jahia Solutions Group SA Page 15 / 72

16 You can easily modify the form, or by expanding the menu you have access to some other actions like publishing the form, deleting it. There is a shortcut to go directly to the metadata edition, this will route you the builder and open up the metadata side panel automatically Use as template This function will create a virtual copy of the form with its new name and then you can edit/save it. If you are working with multiple languages it will copy only the current language Duplicate On the other side duplicate is here to help you create an exact copy of an existing form, by duplicating it on the server side, meaning that as soon as you duplicate the form this one is saved on the server. The interesting behavior of duplicate is that it allows you to duplicate a form that has been created in English for say into French and then start modifying it in French. The duplicate process will switch the building language of your form to your current one. This way you can duplicate a form and modify its structure in another language. 4.3 IMPORT/EXPORT FF 2 allows you to export one or multiple form(s) at the same time. If you export multiple forms, we are aggregating all the zip in a parent zip file. You can then import this/those form(s) inside another platform. The import/export is otherwise using the usual archive format of DXM import/export services Jahia Solutions Group SA Page 16 / 72

17 5 BUILDER The form building is with the submission analysis the main components of Form Factory. The building process can be tear down to multiple phases/functionalities. We are going to go through them one by one. 5.1 INPUTS Inputs are the heart of your forms, the builder allows you to select which inputs to add to your form. An input is comprised of multiple sub elements: Node type definition WZD file to declare the properties of this input AngularJS directive to define the behavior of this input and how to load the different template A default template for rendering in preview/live of this input A designview to edit the defined properties in the builder Definition example from country selection: [fcnt:countrylistdefinition] > jnt:content, fcmix:definition, mix:title, jmix:droppablecontent, jmix:hiddentype - country (string, choicelist[country, sort]) Jahia Solutions Group SA Page 17 / 72

18 //Here we are declaring a fake country property at the cnd level so that we can use DXM choicelist //initializer capabilities WZD file allows to define all the properties of your input, from the same country selection example: select { label "Select Country" template "<ff-select-country></ff-select-country>" wizard "<ff-select-country view-type='designview'></ff-select-country>" supportedvalidationtypes "required" supportedlogictypes "valid", "country" properties { inputsize "input-md" topselections { values "US", "FR" propertiesi18n { helptext "Help" placeholder "Select country" In this file you are defining the template you want to use for the default view and for the wizard. See the appendix for a more detailed description of this WZD format. Then you list the validation and logic rules that this input support. After that you need to list all your properties, there is non I18N properties and I18N properties. The I18N properties are the only one that can be edited in translation mode. Form Factory is using the label property of you WZD file to create the node, the node name is the label in lowercase and with the whitespaces hyphenated. So that Select Country become select-country. See how the node name is referenced in the next file (the directive to resolve the different views from DXM). The AngularJS directive is the one defining the behavior of your input when the user interacts with it: <jcr:propertyinitializers var="countries" nodetype="fcnt:countrylistdefinition" name="country"/> angular.module('formfactory').directive('ffselectcountry', ['$log', 'fftemplateresolver', function ($log, fftemplateresolver) { var directive = { Jahia Solutions Group SA Page 18 / 72

19 restrict: 'E', require: ['^ffcontroller'], templateurl: function(el, attrs) { return fftemplateresolver.resolvetemplatepath('${formfactory:addformfactorymodulepath('/ form-factory-definitions/select-country', rendercontext)', attrs.viewtype);, link: linkfunc ; return directive; function linkfunc(scope, el, attr, ctrl) { var countrylist = [ <c:foreach items="${countries" var="country" varstatus="s"> { country: { key: '${country.value.string', name: '${functions:escapejavascript(country.displayname)', renderername: 'country' <c:if test="${not s.last">, </c:if> </c:foreach> ]; ]); In this directive we are initializing the list of country from DXM country initializer, this way we do not need to get the country list from another service than DXM, but it will be possible to do some asynchronous request to an external service to get the list of countries. We then build a JavaScript structure to use as a source for our AngularJS dropdown list. The directive template is calculated upon runtime depending on your context fftemplateresolver.resolvetemplatepath, but the view itself is rendered once and only, for the builder and for the live mode, per site and per language the results are stored in a JS file in digital-factory-data/generated-resources, if you are in development mode then this file is generated every time: Jahia Solutions Group SA Page 19 / 72

20 This means that calling the initializer is done only once for everybody, whereas if we were using an external services it will called for every user, so depending on the type of data each solution as its benefits. Now the UI part, the default view, this is the one your users will see when they submit the form, or when they build it: Here is the code for this input: <div class="form-group" ng-class="{'has-error': form[input.name].$invalid&&form.$dirty" ng-show="resolvelogic()"> <label class="col-sm-2 control-label"> {{input.label </label> <div class="col-sm-10"> <select name="{{input.name" class="form-control" ng-model="input.value" ng-required="isrequired()" ng-options="country as country.country.name for country in countries" ng-disabled="readonly" ff-validations ff-logic> <option value="">{{input.placeholder</option> </select> <span class="help-block" ng-show="input.helptext!= undefined"> {{input.helptext </span> <span class="help-block" ng-repeat="(validationname, validation) in input.validations" ng-show="form[input.name].$error[(validationname normalize)]&&form.$dirty"> {{validation.message Jahia Solutions Group SA Page 20 / 72

21 </span> </div> </div> When AngularJS is compiling this template, you will have access to the form controller form and to the current input itself input. The ng-show="resolvelogic()" instruction mean that we want to display this div only if the logic rules are true (works only in live/preview mode, will do nothing in builder mode). The ng-class="{'has-error': form[input.name].$invalid&&form.$dirty" will apply Bootstrap 3 error classes on this div if the field is invalid and if the form has been started by the user. On your input itself you need to map the model to input.value, and add the directives ff-validations and ff-logic if you want to have access and apply all the logic/validations rules defined on your input by the form designer. The wizard view: Jahia Solutions Group SA Page 21 / 72

22 is defined by a JSP view like this one: <div class="row"> <div class="col-md-12"> <div class="row" ng-if="!intranslatemode"> <div class="col-md-12"> <label> <span message-key="ff.label.changeinputfieldname"></span> </label> <input class="form-control" ng-model="input.name"/> </div> </div> <br/> <label> <span message-key="ff.label.changelabel"></span> </label> <input class="form-control" ng-model="input.label"/> <br/> <label> <span message-key="ff.label.changeplaceholder"></span> </label> <input type="text" class="form-control" ng-model="input.placeholder"/> <br/> <label> <span message-key="ff.label.changehelptext"></span> </label> Jahia Solutions Group SA Page 22 / 72

23 <input type="text" class="form-control" ng-model="input.helptext"/> <br/> <ff-country-top-selection countries="countries" top-selections="input.topselections" ng-if="!intranslatemode"> </ff-country-top-selection> </div> </div> Here again we inject some object in the scope of your directive, so you have access to your current input object input, there is also a flag that is very useful: intranslatemode will be true during translation, should be used on every non I18N property to avoid changing it. In the wizard it is possible to use other directives to have complex input and very helpful wizard. In this example we are using a dedicated directive to allow to select a list of countries that will appear on top of the list of countries instead of having them all sorted alphabetically. <ff-country-top-selection countries="countries" top-selections="input.topselections" ng-if="!intranslatemode"> </ff-country-top-selection> 5.2 ACTIONS Actions are a much simpler element for Form Factory. The actions are standard DXM actions, to use a DXM action in Form Factory you need to declare a specific node type, a WZD file and an AngularJS directive. You can also but it is not mandatory have a wizard view for your action (if you need to setup some properties for the action). List of files for declaring a working action: Node type definition WZD file to declare the properties of this input AngularJS directive to define the behavior of this action and how to load the different template An optional wizard view to edit the defined properties in the builder Jahia Solutions Group SA Page 23 / 72

24 And of course a Java class (the action is found by its action name, so it is possible to map easily any available action to be used inside Form Factory) Here is the example from the core action Redirect To URL, first the definition: [fcnt:redirecttourlaction] > jnt:content, fcmix:action, mix:title, jmix:droppablecontent, jmix:hiddentype now the WZD file: action { label "Redirect To Url" wizard "<ff-redirect-to-url view-type='designview'></ff-redirect-to-url>" properties { actionname "redirecttourl" propertiesi18n { redirectto "" then the directive: (function () { 'use strict'; var redirecttourl = function($log, $compile, contextualdata, ffdatafactory, fftemplateresolver) { var directive = { restrict: 'E', templateurl: function(el, attrs) { return fftemplateresolver.resolvetemplatepath('${formfactory:addformfactorymodulepath('/ form-factory-actions/redirect-to-url', rendercontext)', attrs.viewtype);, link: linkfunc ; return directive; Jahia Solutions Group SA Page 24 / 72

25 ; function linkfunc(scope, el, attr) { angular.module('formfactory').directive('ffredirecttourl', ['$log', '$compile', 'contextualdata', 'ffdatafactory', 'fftemplateresolver', redirecttourl]); )(); Jahia Solutions Group SA Page 25 / 72

26 And finally the wizard view: <div class="side-panel-body-content"> <label messagekey="fcnt_redirecttourlaction.designview.label.redirectto"></label> <input type="text" class="form-control" ng-model="action.redirectto"> </div> 5.3 STEPS Steps are really only managed by the designer of the form. There is no specific code associated to them. The live controller enforce that all steps are valid before allowing to go to the next one or to submit the form Jahia Solutions Group SA Page 26 / 72

27 5.4 VALIDATIONS Validations are simple JavaScript function receiving the new and the previous value of the field they are validating; each field can have multiple validation active at the same time. This means that contrary to inputs or actions, validations do not always need a specific directive, in fact if they need a directive it will be for their wizard view, to achieve more complex scenarios. So at minima a validation need: A node type in the CND file A WZD file to define its properties A JavaScript file for the rule itself (loaded only in live/preview mode) A view for the wizard (validation have no views in live/preview mode) use in the builder Optionally they can have an associated AngularJS directive to allow more complex input in the builder Example code from the validation rule, this rule ensure that the input text is matching a specified regex ff.validationrules. = function(rule, scope, el, attr, ctrls) { 'use strict'; var model = ctrls[1]; //Regexp taken from var regexp = /^[A-Z0-9._%+-]{1,64@(?:[A-Z0-9-]{1,63\.){1,125[A-Z]{2,63$/i; return function(modelvalue, viewvalue) { return model.$isempty(viewvalue) regexp.test(viewvalue); ; Jahia Solutions Group SA Page 27 / 72

28 ; When Form Factory render an input it is calling every validation defined on it and register the returned function in the ngmodel.$validators array of the AngularJS model, this will automatically ensure that the whole AngularJS form controller behave as expected from AngularJS point of view. Also this validation is a standard view of DXM it is easy to override it by redefining the exact same view in a module with a higher priority for rendering. This way you can easily override all your validation for a specific site by deploying another module. No need to tell your users to use the regex validation with a specific rule, just override the one. 5.5 LOGICS Logics rule are defined exactly the same way as validations, what changes is how they are called in the system. Every time an input value change, Form Factory check if this input is used as a source for logics rule on other inputs in the current active step (as it is the only step where values can change). If if it is then we call every logic rule on the found input, until a rule is failing. If all the rule pass the field is flagged as visible. To declare a logic this is all the files you will need: A node type in the CND file A WZD file to define its properties A JavaScript file for the rule itself (loaded only in live/preview mode) A view for the wizard (validation have no views in live/preview mode) use in the builder Optionally they can have an associated AngularJS directive to allow more complex input in the builder (after the beta) Jahia Solutions Group SA Page 28 / 72

29 Jahia Solutions Group SA Page 29 / 72

30 Example code of if field is valid logic : ff.logicrules.iffieldisvalid = function(rule, scope, el, attr, ctrls) { 'use strict'; var model = ctrls[1]; var ffformcontroller = ctrls[0]; // Try to find the input in a previous step if not found it must be in the current step var searchedinputvalue = ffformcontroller.getpreviousstepinputvalue(rule.fieldname); return function(scope,fieldvalue) { if (_.isundefined(searchedinputvalue) &&!_.isundefined(scope.form[rule.fieldname])) { return scope.form[rule.fieldname].$valid && scope.form[rule.fieldname].ffvisible && scope.form[rule.fieldname].$dirty; else if (!_.isundefined(searchedinputvalue)) { //we have a valid result from a previous step. return (searchedinputvalue!= null); ; Logic and Validation rules are not loaded by the builder. The only way to test those rules is to load the form in Preview or in Live Jahia Solutions Group SA Page 30 / 72

31 5.6 LAYOUT The layout of the form once activated is defined at the form level, and serialized as a JSON property: layoutjson: { "active": true, "layoutempty": true, "steps": [ { "rows": [ { "row": [ { "col": "col-sm-6", "layoutuuid": "510917c2-0ea0-47c6-a717-2aa1d545c303", "offset": "col-sm-offset-0", "moveactive": true, "activeclass": "activecolumn", { "col": "col-sm-6", "layoutuuid": "d2a15b d-a9f2-8869d0bcc32d", "offset": "col-sm-offset-0", "moveactive": false, "activeclass": "inactivecolumn" ] ], "inputpositionmanagement": { "colindex": 0, "rowindex": 0, "activeinputfieldname": "510917c2-0ea0-47c6-a717-2aa1d545c303", "activeinputexists": true, "inputmovementhistory": [ { "rowindex": 0, "colindex": 0, "createdcolumn": false ] ] The layout is a structure listing the rows per steps and for each rows the number of cells and if there is an input in the cell. Input that are not dispatched in a cell won t be visible by the user Jahia Solutions Group SA Page 31 / 72

32 Use preview mode to test your layout Jahia Solutions Group SA Page 32 / 72

33 5.7 METADATA As layout, metadata are stored at the form level they contain: the list of languages for this form its title its description CSS class submission message progress bar tracking captcha themes Themes Themes allows user to override the default views of Form Factory for every input, allowing user to switch from our default Bootstrap 3 theme to another one like Material CSS for example. This way you will be able to have forms matching your website theme/css engine. Those themes are just sets of views allowing a quick overhaul of Form Factory forms in your site, not in the builder and not how they behave. Themes are an integrated part of Form Factory so you can have multiple modules defining multiple themes. To declare a theme, you just need to declare a view of fcnt:form and use the same name for all the views you want to overhaul. Once the theme is selected it will be injected into the form as an attribute called view-type, this happening only in live/preview mode, excerpt from form.angular.jsp <div id="formfactory${identifier"> <ff-controller view-type="${currentnode.properties['theme'].string" id="'${identifier'" data-locale="'${currentnode.resolvesite.language'" datashow-form-title="${currentresource.moduleparams.showformtitle"></ff-controller> </div> Jahia Solutions Group SA Page 33 / 72

34 Then we are calling your main entry point form.theme-name.jsp <c:if test="${jcr:isnodetype(currentnode, 'fcmix:formtheme')"> <template:include view="${currentnode.properties['theme'].string" templatetype="html"/> </c:if> This way you can initialize any framework you are using if needed. The theme property is also used in the ffinputformdirective during form rendering. var formcontroller = ffcontrollerctrl[0]; scope.form = formcontroller.getformcontroller(); scope.readonly =!formcontroller.islivemode(); el.append($compile(angular.element(scope.input.template).attr('viewtype',!_.isundefined(formcontroller.currentform.theme) && formcontroller.currentform.theme!== null? formcontroller.currentform.theme : ''))(scope)); Progress Bar Progress Bar are showing information like steps name or percentage of completion along your form. They are composed of a definition, a WZD file, a directive and a template Definition // // Form Center Progress Bar Definition // [fcmix:hasprogressbar] mixin + progressbar (fcmix:progressbar) = fcmix:progressbar [fcmix:progressbar] mixin - template (string) mandatory - wizard (string) mandatory - position (string, choicelist) = "top" mandatory < "top", "bottom", "both" + * (fcnt:definitionoptions) = fcnt:definitionoptions [fcnt:percentprogressbar] > jnt:content, fcmix:progressbar, mix:title, jmix:droppablecontent, jmix:hiddentype The mixin fcmix:hasprogressbar will be applied on the form if there is a progress bar for this form Jahia Solutions Group SA Page 34 / 72

35 The mixin fcmix:progressbar is the mixin your progress bar definition should extend to be found by the system WZD progressbar { label "Percent Progress Bar" template "<ff-percent-progress-bar></ff-percent-progress-bar>" wizard "<ff-percent-progress-bar view-type='designview'></ff-percentprogress-bar>" position "top" Directive angular.module('formfactory').directive('ffpercentprogressbar', ['$log', 'fftemplateresolver', '$filter', function ($log, fftemplateresolver, $filter) { var directive = { restrict: 'E', templateurl: function (el, attrs) { return fftemplateresolver.resolvetemplatepath('${formfactory:addformfactorymodulepath('/ form-factory-progress-bars/percent-progress-bar', rendercontext)', attrs.viewtype);, ; link: linkfunc return directive; function linkfunc(scope, el, attr, ctrl) { scope.roundvalue = function(value) { return $filter('roundvalue')(value); ; ]); View/Template <div class="row"> <div class="col-md-12"> <div class="progress"> <div class="progress-bar progress-bar-success" role="progressbar" Jahia Solutions Group SA Page 35 / 72

36 aria-valuemin="0" aria-valuemax="100" ariavaluenow="{{roundvalue((currentstep+1)/form.steps.length*100)" style="min-width: 2em; width: {{roundvalue((currentstep+1)/form.steps.length*100)%;"> {{roundvalue((currentstep+1)/form.steps.length*100)% </div> </div> </div> </div> Jahia Solutions Group SA Page 36 / 72

37 5.7.3 Captcha Form Factory 2 is using recaptcha from Google instead of the DX captcha by default. This need to be configured by setting up your API key. The integration is done on the client side, there is no server call to google. This integration use Angular ReCaptcha to validate the form or not, as long as the captcha is not validated the submit buttons are not activated. The JS files are loaded if needed in form.angular.jsp and the captcha is displayed on the last step with this code from formdefinition.formview.jsp, here is the code. <div class="row" ng-if="vm.getcaptchakey()!== null && vm.currentform.steps.length-1 === vm.currentstep && vm.currentform.displaycaptcha"> <div class="col-sm-12 text-right"> <div vc-recaptcha theme="'light'" key="vm.getcaptchakey()" oncreate="vm.notifyofcaptchaload()"></div> </div> </div> Tracking The tracking option will save the user IP upon submission or not Jahia Solutions Group SA Page 37 / 72

38 6 PREVIEW/LIVE The preview/live mode allows you to test/submit your form. In preview you will able to validate your validations, logics and layout. Actions can be only tested in live mode. 6.1 RENDERING During the rendering first we bootstrap every form separately. This way you could have different forms on the same page. Once every app has been bootstrapped, we load the form data. We are using Jahia Assets management capabilities so that the JavaScript files are loaded only once, even the one aggregating every element at your disposal Inputs We render every inputs of the current step. For each type of input we request compile the template, by default it means rendering the default view of this input. The HTTP request for the view should happen only once per type as AngularJS should cache the result of the template locally. Then for each input AngularJS will apply the model of the input into its template Validations Validations are executed on every field upon every changes in the model of the current step. So every time the user enters a new data or select a new entry all the fields are validated. When moving between steps, we restore the status of every input/validation upon re-entering, this will flag the form as dirty and touched once again Jahia Solutions Group SA Page 38 / 72

39 6.1.3 Logics Every change in the values of the input will trigger an evaluation of the logic rules on the current step, to show or hide fields depending on the current state of the model. All invisible inputs are considered valid. A field can be required and invisible, as long as it is invisible it will not block the validation of the form, if it become visible then it will block the user to move forward until it fills this input Logic directive and Logic service The logic directive is in charge of listening to the changes of values on the current step and evaluate all the logic rules define on those fields. The directive is in charge of finding the fields values in the previous steps or in the current one, apply all the rules on a field. The Logic service is the repository of rules available, same as the Validation service. In preview/live we load only the rule for Validation and Logic, we do not load any template 6.2 SUBMISSION Reaching the last step, as long as the form is valid, it is possible to submit it. Upon submission the user will submit only the ids of the inputs along with there value, we do not submit the whole model to the server. 6.3 ACTIONS Those are regular DX Actions, by default FF provide 4 actions: Save to JCR: Will save the data submitted in the JCR backend Jahia Solutions Group SA Page 39 / 72

40 Send Will send an to the configured s address, the will contain the data submitted by the user Redirect to Page: Will redirect the user to a specific page after submission Redirect to URL: Will go to another website upon submission All actions are called in the backend whatever their result is. So you will always receive in the response a message from each action. 6.4 CALLBACKS Per form callback One of the new functionality of this version 2, it is now possible to define at the form level which callback function you want to apply once the actions have been called, this will allow to customize the way you handle errors, redirection etc. on a per form basis. Here is an example of a callback that will automatically redirect to the page selected in Redirect to a page action but also display a message to the user and let it choose between waiting or clicking, the callback also detects if there is a Redirect to URL and in that case offer a link to the URL instead of an automatic redirect. angular.module('formfactory').directive('callbacktwo', ['$log', 'fftemplateresolver', '$interval', function ($log, fftemplateresolver, $interval) { var directive = { restrict: 'E', require: ['^ffcontroller'], scope: { actiondata: '=', callback: '&', templateurl: function(el, attrs) { return fftemplateresolver.resolvetemplatepath('${formfactory:addformfactorymodulepath('/ form-factory-callbacks/callback-two', rendercontext)', attrs.viewtype);, link: linkfunction ; return directive; Jahia Solutions Group SA Page 40 / 72

41 function linkfunction(scope, el, attr, ctrl) { scope.url = '#'; scope.page = '#'; scope.secondstoredirect = 5; for (var i in scope.actiondata) { if ('actionname' in scope.actiondata[i] && scope.actiondata[i].actionname[0] === 'redirecttourl') { scope.url = scope.actiondata[i].redirecturl[0]; if ('actionname' in scope.actiondata[i] && scope.actiondata[i].actionname[0] === 'redirecttoapage') { scope.page = scope.actiondata[i].redirecturl[0]; scope.countdown = function() { if (scope.secondstoredirect === 0) { window.location.assign(scope.page); return; scope.secondstoredirect -= 1; ; ]); $interval(scope.countdown, 1000); Jahia Solutions Group SA Page 41 / 72

42 6.4.2 Form Factory API JS callback This type of callback is the one used to integrate Form Factory forms with other systems, they are used in our own products like Marketing Factory or Marketo module. Those integrations work in two steps, first those tools allow a tighter integration with Form Factory for their form mapping functionalities, allowing to map multiple steps form easily to their own sets of fields. Once the mappings are defined those products register themselves as callback for Form Factory, doing so they will receive all the data submitted. <script type="text/javascript"> document.addeventlistener("ffformready", function(e) { var forminfo = e.forminfo; window.ffcallbacks.registercallback(forminfo, testobject.testfunction, testobject); ); var testobject = { testfunction : function(data, forminfo) { var self = this; settimeout(function() { forminfo.notifyformfactoryofcompletion("testfunction");, 3000); </script> Jahia Solutions Group SA Page 42 / 72

43 7 RESULTS The overall architecture of the results analysis as not changed from V1 to V2, this is still the same code, the views have been switched to Bootstrap 3 and all the JavaScript framework have been updated. The form submits are saved in the live Workspace, under the folder named formfactory/results. In all the cases, whatever the destination of the form submitted data, the form metadata are saved in this folder. The actual data are saved in JCR only when the form contain the action Save to JCR. We can see that the Results are fetched from JCR directly by the API which return JSON objects to pages. The structure of the returned JSON Object is : { "status" : <"success" "error">, "code" : <HTML CODE>, "message" : <String Message>, "data" : <Data Object> The results are wrapped in an object under the data key. 7.1 ACTIONS/RESULTS BOUND In the Form Center, the actions have to be mapped to the results display methods to be able to fetch view data from the good source (JCR, Database...). Form center actions bounding is based on three entities: Backend type: A constant to define where the results are saved. API: An API name (this represent how results can be fetched) Mapping view: A file defined for each API/Backend couple that returns the API entry points for each request of the view Jahia Solutions Group SA Page 43 / 72

44 Views: View to display results fetched from a given API to the user. To know which API to map on each action, the form center watch for the ResultsProviderService implementations which map a list of API on a backend type. As each actions declare a Backend type implementing the APIBackendType interface, the org.jahia.modules.formfactory.api.subresources.formresults get the backend type for each action and watch for ResultsProviderService implementation with this backend type, then it gets the corresponding list of API and from there can access all the views of the APIs APIBackendType Interface The interface org.jahia.modules.formfactory.api.apibackendtype is implemented by the action class to declare the Action Backend type. This action Backend type is a String constant that has to be reused in the class that will implement org.jahia.modules.formfactory.api.resultsproviderservice to map the backend to the right API ResultsProviderService Interface The Interface org.jahia.modules.formfactory.api.resultsproviderservice is implemented for each couple Action / API to map an API to a given Backend type. For the action SaveToJCRAction, the class org.jahia.modules.formfactory.impl.savetojcrrawresultsimpl is doing this mapping : public class SaveToJcrRawResultsImpl implements ResultsProviderService public String getapinames() { List<String> APINames = new ArrayList<String>(); APINames.add("rawResults") return public String getbackendtype() { Jahia Solutions Group SA Page 44 / 72

45 return "JCR"; We can see here that the Backend type is the same than the one declared in the SaveToJCRAction class. 7.2 IMPLEMENTATIONS FETCHING The function getviewsbyaction of SaveToJCRResultAPI.java return all the view and the APIs by action. To do so, it gets the list of actions in the formed saved in JCR and from this list it gets all the API by action: //Putting in the map all the views for each [backend,api] couple for (ResultsProviderService providerservice : resultsproviderservices) { String providerbackendtype = providerservice.getbackendtype(); if (providerbackendtype.equals(((apibackendtype) action).getbackendtype())) { List<Map<String, String>> prefixedviews = new ArrayList<Map<String, String>>(); for(string APIName : providerservice.getapinames()){ prefixedviews.addall(prefixviews(providerbackendtype, viewmap.get(apiname))); actionviewmap.put("views", prefixedviews); Then it gets the list of views for each API. Finally, it returns the list of views for each action Views A view is linked to an API because it has to submit to the format of the results returned. To declare this bound, each view name has to contain the API name. A results view is a view of the node submissions (of type fcnt:submissions) and its name has to respect a rule: submissions.<apiname>.<viewname> Jahia Solutions Group SA Page 45 / 72

46 A resource bundle property is used to properly display this view name to a user, this property key has to be defined precisely: fcnt_submissions.viewname.<apiname>.<viewname> for example the the view datatable of the rawresults API will be named: submissions.rawresults.datatable and its property key will be: fcnt_submissions.viewname.rawresults.dashboard API Mapping JSP file The last link between the actions and the API is the JSP file that map the view fetch keys to the API entry points. The different views that displays results call getfetchurl function : //Generate an URL from parameters function getfetchurl(urlparameters) { return APIMethods[urlParameters.APIMethodName](urlParameters); This function takes the following object as parameter: { formid:this.model.formid, APIMethodName:"results_submissiontime", fromdate: this.model.fromdate, todate: this.model.todate The parameter APIMethodName is a constant used to map API entry points thanks to the object APIMethods : { "results":function(parameters){ if(parameters.fromdate!=null && parameters.todate!=null){ return APIURLBase + parameters.formid + "/from/" + parameters.fromdate + "/to/" + parameters.todate + "/results"; else{ Jahia Solutions Group SA Page 46 / 72

47 return APIURLBase + parameters.formid + "/results";, "results_submissiontime":function(parameters){ return APIURLBase + parameters.formid + "/results/submissiontime";, "results_submissionpage":function(parameters){ return APIURLBase + parameters.formid + "/results/submissionpage";, "results_submissionempty":function(parameters){ return APIURLBase + parameters.formid + "/results/submissionempty";, "results_choicelabel":function(parameters){ return APIURLBase + parameters.formid + "/results/choicelabel";, "results_label":function(parameters){ return APIURLBase + parameters.formid+"/results/labels";, "results_choice":function(parameters){ return APIURLBase + parameters.formid+"/results/choice/"+parameters.choiceid;, "total":function(parameters){ return "${url.context/modules/formcenter/results/total/"+parameters.formid;, "lastdays":function(parameters){ return "${url.context/modules/formcenter/results/${rendercontext.uilocale.language/tot allastdays/"+parameters.formid;, "grouptotal":function(parameters){ return "${url.context/modules/formcenter/results/${rendercontext.uilocale.language/gro uptotal/"+parameters.formid; This object map the different String keys to API get URLs. This system make possible: The creation of new view for each API in separated module (by naming the views the right way). The mapping of a Backend type to new API in any separated module (implementing org.jahia.modules.formfactory.resultsproviderservice). The creation of new APIs for a given backend type in any separated module (Implementing the API and org.jahia.modules.formfactory.resultsproviderservice) Jahia Solutions Group SA Page 47 / 72

48 7.3 RESULTS API The results API is developed using JAX-RS, the source of API different function (All HTTP GET methods ) is localized in the org.jahia.modules.formfactory.api.subresources.formresults class. This class uses different Spring injected variables: renderservice: Jahia RenderService used to get views of node submissions repository: jcrsessionfactory used to get current session resultsproviderservices: List of implementations of the interface ResultsProviderService. templatemanagerservice: Jahia TemplateManagerService used to get the actions available on the server. The API class contains a certain number of methods (all HTTP Get) that return JSON object. Some of these methods will always be used even if the form results are not saved in JCR : getviewsbyactions : Returns an object containing the views for each action basing on the existing Form center actions. Example: {<actionname>:{<view1name>:<view1label>, <view2name>:<view2label> [{"views":[{"viewname":<viewname>,"viewlabel":<viewlabel>],"actionname":<actionname >] The view name is composed the following way: <APIName>.<viewName>, so the name of dashboard view of rawresults API will be rawresults.dashboard. The view Label is a resource bundle with a key composed the following way : fcnt_submissions.viewname.<apiname>.<viewname>, so the resource bundle key for the dashboard view of the RawResult API is : fcnt_submissions.viewname.rawresults.dashboard getactionsproviders: Returns the list of actions id in an array Jahia Solutions Group SA Page 48 / 72

49 getformsdetails: Returns in an object the details (metadata) from a given form Views The results section contains multiple pages. The first pages (That we can call results home page) displays the list of forms that have at least one result already saved : The JCR Results API (org.jahia.modules.formfactory.api.subresources.formresults) is called to fill this table. The function getviewsbyactions is called with the API entry point /views to fill the view selection of the Form Display column. The columns Name and Date are filled with the getformsdetails function. This table is displayed using a Backbone view (FormsResultsView) based on a collection (FormsCollection). All the Backbone Views definitions are localized in the main-results.js file. Each table line contains a form that is submitted to the same page. On the page load, if a form and a view have been submitted the form results are displayed in the selected view. The form center comes with the RawResult API and its JCR implementation. The rawresult API contains 3 views : Metadata view The metadata view is made to display only metadata of the submitted results (Source, user and date) and its code is in the submissions.rawresults.metadata.jsp file Jahia Solutions Group SA Page 49 / 72

50 It uses the Backbone view MetadataResultsView which initializes a Datatable fetching backbone model. In each line the submission date value is clickable and display the submitted result in a popover which is defined by the function displaydata of the JSP file Jahia Solutions Group SA Page 50 / 72

51 7.3.3 Datatable view The Datatable view render results in a table managed by Datatables. The Backbone model used is a pageable collection called PageableResults from the framework Backbone.Paginator defined in the results.js file under the collections folder. The view implemented to display this collection is PageableResultsView (from main-results.js). The size of the page is 500 results per page. The view defines a Datatable with unlimited scroll using Scroller datatable extension Jahia Solutions Group SA Page 51 / 72

ADDING INPUTS FORM FACTORY V2

ADDING INPUTS FORM FACTORY V2 1 Example input This tutorial will guide you through creation of a simple text input field. I will use form-factorysnippets-extension module but you can use any module with dependency on Form Factory.

More information

WIDGETS TECHNICAL DOCUMENTATION PORTAL FACTORY 2.0

WIDGETS TECHNICAL DOCUMENTATION PORTAL FACTORY 2.0 1 SUMMARY 1 INTRODUCTION... 3 2 CUSTOM PORTAL WIDGETS... 4 2.1 Definitions... 4 2.2 Vie s. 5 2.3 kins 6 3 USING PORTALS IN YOUR SITE (PORTAL TEMPLATES)... 7 3.1 Activate the Portal Modules for your site...

More information

Jahia Studio JAHIA DOCUMENTION

Jahia Studio JAHIA DOCUMENTION JAHIA DOCUMENTION Jahia Studio Rooted in Open Source CMS, Jahia s Digital Industrialization paradigm is about streamlining Enterprise digital projects across channels to truly control time-to-market and

More information

Oracle APEX 18.1 New Features

Oracle APEX 18.1 New Features Oracle APEX 18.1 New Features May, 2018 Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated

More information

Comprehensive AngularJS Programming (5 Days)

Comprehensive AngularJS Programming (5 Days) www.peaklearningllc.com S103 Comprehensive AngularJS Programming (5 Days) The AngularJS framework augments applications with the "model-view-controller" pattern which makes applications easier to develop

More information

MIGRATION GUIDE DIGITAL EXPERIENCE MANAGER 7.2

MIGRATION GUIDE DIGITAL EXPERIENCE MANAGER 7.2 1 SUMMARY 1 INTRODUCTION... 4 2 HOW TO UPGRADE FROM DIGITAL EXPERIENCE MANAGER 7.1 TO 7.2... 5 2.1 Code base review and potential impacts... 5 2.2 Deployment scripts/procedure review... 5 2.3 Test environment

More information

Documentation for the new Self Admin

Documentation for the new Self Admin Documentation for the new Self Admin The following documentation describes the structure of the new Self Admin site along with the purpose of each site section. The improvements that have been made to

More information

Configuring Ad hoc Reporting. Version: 16.0

Configuring Ad hoc Reporting. Version: 16.0 Configuring Ad hoc Reporting Version: 16.0 Copyright 2018 Intellicus Technologies This document and its content is copyrighted material of Intellicus Technologies. The content may not be copied or derived

More information

A Guide to Understand, Install and Use Pie Register WordPress Registration Plugin

A Guide to Understand, Install and Use Pie Register WordPress Registration Plugin A Guide to Understand, Install and Use Pie Register WordPress Registration Plugin 1 P a g e Contents 1. Introduction... 5 2. Who is it for?... 6 3. Community v/s PRO Version... 7 3.1. Which version is

More information

Multiple Custom Forms

Multiple Custom Forms Multiple Custom Forms for Magento 2 Extension for Magento 2 User Guide Table of contents 1. Module Features 2. Module Configuration 3. Manage Forms 4. Add Field 4.1. Text Field 4.2. Text Area 4.3. Drop

More information

AngularJS Intro Homework

AngularJS Intro Homework AngularJS Intro Homework Contents 1. Overview... 2 2. Database Requirements... 2 3. Navigation Requirements... 3 4. Styling Requirements... 4 5. Project Organization Specs (for the Routing Part of this

More information

Digital Factory 7 Search and Query API under the hood

Digital Factory 7 Search and Query API under the hood Digital Factory 7 Search and Query API under the hood #jahiaone Benjamin Papež, QA Architect Search and Query API under the hood Overview on used search engine frameworks and API Jahia's extensions to

More information

PEGACUIS71V1 pegasystems

PEGACUIS71V1 pegasystems PEGACUIS71V1 pegasystems Number: PEGACUIS71V1 Passing Score: 800 Time Limit: 120 min Exam A QUESTION 1 Which of the following rule types does the Localization wizard translate? (Choose Two) A. Field Value

More information

AngularJS Introduction

AngularJS Introduction AngularJS Introduction Mendel Rosenblum AngularJS JavaScript framework for writing web applications Handles: DOM manipulation, input validation, server communication, URL management, etc. Considered opinionated

More information

Custom Contact Forms Magento 2 Extension

Custom Contact Forms Magento 2 Extension Custom Contact Forms Magento 2 Extension User Manual This is the user manual of Magento 2 Custom Contact Forms v100.0.0 and was last updated on 29-06-2017. To see what this extension can do, go to the

More information

DREAMFACTORY SOFTWARE INC. Snapshot User Guide. Product Usage and Best Practices Guide. By Sathyamoorthy Sridhar June 25, 2012

DREAMFACTORY SOFTWARE INC. Snapshot User Guide. Product Usage and Best Practices Guide. By Sathyamoorthy Sridhar June 25, 2012 DREAMFACTORY SOFTWARE INC Snapshot User Guide Product Usage and Best Practices Guide By Sathyamoorthy Sridhar June 25, 2012 This document describes Snapshot s features and provides the reader with notes

More information

AngularJS. CRUD Application example with AngularJS and Rails 4. Slides By: Jonathan McCarthy

AngularJS. CRUD Application example with AngularJS and Rails 4. Slides By: Jonathan McCarthy AngularJS CRUD Application example with AngularJS and Rails 4 1 Slides By: Jonathan McCarthy Create a new Rails App For this example we will create an application to store student details. Create a new

More information

What s new in IBM Operational Decision Manager 8.9 Standard Edition

What s new in IBM Operational Decision Manager 8.9 Standard Edition What s new in IBM Operational Decision Manager 8.9 Standard Edition Release themes User empowerment in the Business Console Improved development and operations (DevOps) features Easier integration with

More information

Eclipse Scout. Release Notes. Scout Team. Version 7.1

Eclipse Scout. Release Notes. Scout Team. Version 7.1 Eclipse Scout Release Notes Scout Team Version 7.1 Table of Contents About This Release.......................................................................... 1 Service Releases..........................................................................

More information

Roxen Content Provider

Roxen Content Provider Roxen Content Provider Generation 3 Templates Purpose This workbook is designed to provide a training and reference tool for placing University of Alaska information on the World Wide Web (WWW) using the

More information

IBM emessage Version 9 Release 1 February 13, User's Guide

IBM emessage Version 9 Release 1 February 13, User's Guide IBM emessage Version 9 Release 1 February 13, 2015 User's Guide Note Before using this information and the product it supports, read the information in Notices on page 471. This edition applies to version

More information

Blue Form Builder extension for Magento 2

Blue Form Builder extension for Magento 2 Blue Form Builder extension for Magento 2 User Guide Version 1.0 Table of Contents I) Introduction......5 II) General Configurations....6 1) General Settings.....7 2) ReCaptcha... 8 III) Manage Forms......

More information

Using Sitecore 5.3.1

Using Sitecore 5.3.1 Using Sitecore 5.3.1 An End-User s Guide to Using and Administrating Sitecore Author: Sitecore Corporation Date: December 12, 2007 Release: Rev. 1.0 Language: English Sitecore is a registered trademark.

More information

Kendo UI. Builder by Progress : Using Kendo UI Designer

Kendo UI. Builder by Progress : Using Kendo UI Designer Kendo UI Builder by Progress : Using Kendo UI Designer Copyright 2017 Telerik AD. All rights reserved. December 2017 Last updated with new content: Version 2.1 Updated: 2017/12/22 3 Copyright 4 Contents

More information

BeetleEye Application User Documentation

BeetleEye Application User Documentation BeetleEye Application User Documentation BeetleEye User Documentation 1 Table of Contents Welcome to the BeetleEye Application... 6 Overview... 6 Navigation... 6 Access BeetleEye... 6 Update account information...

More information

End User Monitoring. AppDynamics Pro Documentation. Version 4.2. Page 1

End User Monitoring. AppDynamics Pro Documentation. Version 4.2. Page 1 End User Monitoring AppDynamics Pro Documentation Version 4.2 Page 1 End User Monitoring....................................................... 4 Browser Real User Monitoring.............................................

More information

CMIS CONNECTOR MODULE DOCUMENTATION DIGITAL EXPERIENCE MANAGER 7.2

CMIS CONNECTOR MODULE DOCUMENTATION DIGITAL EXPERIENCE MANAGER 7.2 CMIS CONNECTOR MODULE DOCUMENTATION SUMMARY 1 OVERVIEW... 4 1.1 About CMIS... 4 1.2 About this module... 4 1.3 Module features... 5 1.4 Implementation notes... 6 2 CONFIGURATION... 6 2.1 Installation...

More information

AngularJS AN INTRODUCTION. Introduction to the AngularJS framework

AngularJS AN INTRODUCTION. Introduction to the AngularJS framework AngularJS AN INTRODUCTION Introduction to the AngularJS framework AngularJS Javascript framework for writing frontend web apps DOM manipulation, input validation, server communication, URL management,

More information

ESIGATE MODULE DOCUMENTATION DIGITAL EXPERIENCE MANAGER 7.2

ESIGATE MODULE DOCUMENTATION DIGITAL EXPERIENCE MANAGER 7.2 1 SUMMARY 1 OVERVIEW... 3 1.1 About Esigate... 3 1.2 About this module... 3 2 INSTALLATION AND SETUP... 4 2.1 Requirements... 4 2.2 Installation on Digital Experience Manager... 4 2.2.1 Method 1 (a link

More information

Sourcing - How to Create a Negotiation

Sourcing - How to Create a Negotiation Martin Baker Secure Source-To-Pay Sourcing - How to Create a Negotiation December 07 Contents To Create a Project... To Create a Negotiation... 5 Attachments... 7 Private File Archive... 7 Creating Lines,

More information

Sparqube Lookup Column

Sparqube Lookup Column Sparqube Lookup Column Contents Overview... 2 Features... 3 Setup... 4 Requirements... 4 Installation... 4 Licensing... 4 Configuration... 9 Lookup column types... 9 Adding Sparqube Lookup Classic to SharePoint

More information

1z0-412.oracle. ORACLE 1z Oracle Eloqua and Oracle Content Marketing Cloud Service 2013 Implementation Essentials

1z0-412.oracle.   ORACLE 1z Oracle Eloqua and Oracle Content Marketing Cloud Service 2013 Implementation Essentials 1z0-412.oracle Number: 1z0-412 Passing Score: 800 Time Limit: 120 min File Version: 5.0 ORACLE 1z0-412 Oracle Eloqua and Oracle Content Marketing Cloud Service 2013 Implementation Essentials Version 5.0

More information

Intellicus Enterprise Reporting and BI Platform

Intellicus Enterprise Reporting and BI Platform Configuring Ad hoc Reporting Intellicus Enterprise Reporting and BI Platform Intellicus Technologies info@intellicus.com www.intellicus.com Copyright 2012 Intellicus Technologies This document and its

More information

Angular 2 Programming

Angular 2 Programming Course Overview Angular 2 is the next iteration of the AngularJS framework. It promises better performance. It uses TypeScript programming language for type safe programming. Overall you should see better

More information

ANGULARJS - MOCK TEST ANGULARJS MOCK TEST II

ANGULARJS - MOCK TEST ANGULARJS MOCK TEST II http://www.tutorialspoint.com ANGULARJS - MOCK TEST Copyright tutorialspoint.com This section presents you various set of Mock Tests related to AngularJS Framework. You can download these sample mock tests

More information

Table Basics. The structure of an table

Table Basics. The structure of an table TABLE -FRAMESET Table Basics A table is a grid of rows and columns that intersect to form cells. Two different types of cells exist: Table cell that contains data, is created with the A cell that

More information

2 Apache Wink Building Blocks

2 Apache Wink Building Blocks 2 Apache Wink Building Blocks Apache Wink Building Block Basics In order to take full advantage of Apache Wink, a basic understanding of the building blocks that comprise it and their functional integration

More information

Ignite UI Release Notes

Ignite UI Release Notes Ignite UI 2013.1 Release Notes Create the best Web experiences in browsers and devices with our user interface controls designed expressly for jquery, ASP.NET MVC, HTML 5 and CSS 3. You ll be building

More information

All India Council For Research & Training

All India Council For Research & Training WEB DEVELOPMENT & DESIGNING Are you looking for a master program in web that covers everything related to web? Then yes! You have landed up on the right page. Web Master Course is an advanced web designing,

More information

ADF Code Corner How-to bind custom declarative components to ADF. Abstract: twitter.com/adfcodecorner

ADF Code Corner How-to bind custom declarative components to ADF. Abstract: twitter.com/adfcodecorner ADF Code Corner 005. How-to bind custom declarative components to ADF Abstract: Declarative components are reusable UI components that are declarative composites of existing ADF Faces Rich Client components.

More information

"Charting the Course... Comprehensive Angular. Course Summary

Charting the Course... Comprehensive Angular. Course Summary Description Course Summary Angular is a powerful client-side JavaScript framework from Google that supports simple, maintainable, responsive, and modular applications. It uses modern web platform capabilities

More information

Intellicus Enterprise Reporting and BI Platform

Intellicus Enterprise Reporting and BI Platform Designing Adhoc Reports Intellicus Enterprise Reporting and BI Platform Intellicus Technologies info@intellicus.com www.intellicus.com Designing Adhoc Reports i Copyright 2012 Intellicus Technologies This

More information

AngularJS. CRUD Application example with AngularJS and Rails 4. Slides By: Jonathan McCarthy

AngularJS. CRUD Application example with AngularJS and Rails 4. Slides By: Jonathan McCarthy AngularJS CRUD Application example with AngularJS and Rails 4 1 Slides By: Jonathan McCarthy Create a new Rails App For this example we will create an application to store student details. Create a new

More information

Kaltura Video Package for Moodle 2.x Quick Start Guide. Version: 3.1 for Moodle

Kaltura Video Package for Moodle 2.x Quick Start Guide. Version: 3.1 for Moodle Kaltura Video Package for Moodle 2.x Quick Start Guide Version: 3.1 for Moodle 2.0-2.4 Kaltura Business Headquarters 5 Union Square West, Suite 602, New York, NY, 10003, USA Tel.: +1 800 871 5224 Copyright

More information

UI Course HTML: (Html, CSS, JavaScript, JQuery, Bootstrap, AngularJS) Introduction. The World Wide Web (WWW) and history of HTML

UI Course HTML: (Html, CSS, JavaScript, JQuery, Bootstrap, AngularJS) Introduction. The World Wide Web (WWW) and history of HTML UI Course (Html, CSS, JavaScript, JQuery, Bootstrap, AngularJS) HTML: Introduction The World Wide Web (WWW) and history of HTML Hypertext and Hypertext Markup Language Why HTML Prerequisites Objective

More information

AngularJS Fundamentals

AngularJS Fundamentals AngularJS Fundamentals by Jeremy Zerr Blog: http://www.jeremyzerr.com LinkedIn: http://www.linkedin.com/in/jrzerr Twitter: http://www.twitter.com/jrzerr What is AngularJS Open Source Javascript MVC/MVVM

More information

A Closer Look at XPages in IBM Lotus Domino Designer 8.5 Ray Chan Advisory I/T Specialist Lotus, IBM Software Group

A Closer Look at XPages in IBM Lotus Domino Designer 8.5 Ray Chan Advisory I/T Specialist Lotus, IBM Software Group A Closer Look at XPages in IBM Lotus Domino Designer 8.5 Ray Chan Advisory I/T Specialist Lotus, IBM Software Group 2008 IBM Corporation Agenda XPage overview From palette to properties: Controls, Ajax

More information

1Z0-430

1Z0-430 1Z0-430 Passing Score: 800 Time Limit: 0 min Exam A QUESTION 1 On a normally well-performing environment, you are experiencing unexpected slow response times, or no server response, for some page requests

More information

ANGULARJS INTERVIEW QUESTIONS

ANGULARJS INTERVIEW QUESTIONS ANGULARJS INTERVIEW QUESTIONS http://www.tutorialspoint.com/angularjs/angularjs_interview_questions.htm Copyright tutorialspoint.com Dear readers, these AngularJS Interview Questions have been designed

More information

Tarek Elachkar, VP Customer Solutions - Jahia A real world story of Angular and Apache Unomi integration.

Tarek Elachkar, VP Customer Solutions - Jahia A real world story of Angular and Apache Unomi integration. Tarek Elachkar, VP Customer Solutions - Jahia telachkar@jahia.com A real world story of Angular and Apache Unomi integration #ApacheCon 1 QUICK INTRODUCTIONS Me, myself and I QUICK INTRODUCTIONS Our software

More information

Marketer's Guide. User guide for marketing analysts and business users

Marketer's Guide. User guide for marketing analysts and business users Marketer's Guide Rev: 18 November 2014 Email Campaign Manager 2.2 for Sitecore CMS 7.5 Marketer's Guide User guide for marketing analysts and business users Table of Contents Chapter 1 Introduction...

More information

Developer Cockpit. Introduction 1. Prerequisites 2. Application Lifecycle in MindSphere 3. User interfaces "Developer Cockpit" 4

Developer Cockpit. Introduction 1. Prerequisites 2. Application Lifecycle in MindSphere 3. User interfaces Developer Cockpit 4 Introduction 1 Prerequisites 2 Application Lifecycle in MindSphere 3 System Manual User interfaces "Developer Cockpit" 4 User rights in "Developer Cockpit" 5 Workflow of Developer Cockpit 6 Develop applications

More information

OpenText StreamServe 5.6 Document Broker Plus

OpenText StreamServe 5.6 Document Broker Plus OpenText StreamServe 5.6 Document Broker Plus User Guide Rev A OpenText StreamServe 5.6 Document Broker Plus User Guide Rev A Open Text SA 40 Avenue Monterey, Luxembourg, Luxembourg L-2163 Tel: 35 2 264566

More information

Desktop Studio: Charts. Version: 7.3

Desktop Studio: Charts. Version: 7.3 Desktop Studio: Charts Version: 7.3 Copyright 2015 Intellicus Technologies This document and its content is copyrighted material of Intellicus Technologies. The content may not be copied or derived from,

More information

Template Builder User Guide. Product Version 1.0 August 11, 2017

Template Builder User Guide. Product Version 1.0 August 11, 2017 Template Builder User Guide Product Version 1.0 August 11, 2017 Copyright 2017 Vizrt. All rights reserved. No part of this software, documentation or publication may be reproduced, transcribed, stored

More information

Real Application Security Administration

Real Application Security Administration Oracle Database Real Application Security Administration Console (RASADM) User s Guide 12c Release 2 (12.2) E85615-01 June 2017 Real Application Security Administration Oracle Database Real Application

More information

JSN UniForm User Manual. Introduction. A simple contact form created by JSN UniForm. JSN UniForm is a Joomla form extension which helps you create

JSN UniForm User Manual. Introduction. A simple contact form created by JSN UniForm. JSN UniForm is a Joomla form extension which helps you create JSN UniForm User Manual Introduction A simple contact form created by JSN UniForm JSN UniForm is a Joomla form extension which helps you create forms quickly and easily - from normal forms to complex forms.

More information

Magento 2 Certified Professional Developer. Exam Study Guide

Magento 2 Certified Professional Developer. Exam Study Guide Magento 2 Certified Professional Developer Exam Study Guide U Contents Contents Introduction... 1 Topics and Objectives... 3 1 Magento Architecture and Customization Techniques... 3 1.1 Describe Magento

More information

Mastering the APEX Universal Theme

Mastering the APEX Universal Theme Mastering the APEX Universal Theme Roel Hartman Copyright 2015 APEX Consulting 2 Themes APEX GURU What are Themes? What was wrong with the old Themes? Table Based CSS tuning Templates The answer of the

More information

vfire 9.8 Release Notes Version 1.5

vfire 9.8 Release Notes Version 1.5 9.8 Release Notes 9.8 Release Notes Table of Contents Version Details for 9.8 Release Notes 4 Copyright 5 About this Document 6 Intended Audience 6 Standards and Conventions 6 Introducing 9.8 7 Installation

More information

Single Page Applications using AngularJS

Single Page Applications using AngularJS Single Page Applications using AngularJS About Your Instructor Session Objectives History of AngularJS Introduction & Features of AngularJS Why AngularJS Single Page Application and its challenges Data

More information

3 Days Training Program

3 Days Training Program 3 Days Training Program What is AngularJS? A JavaScript framework for creating dynamic web applications Open Source GitHub: https://github.com/angular/angular.js MIT License Uses jquery jquery 1.7.1 or

More information

Understanding Angular Directives By Jeffry Houser

Understanding Angular Directives By Jeffry Houser Understanding Angular Directives By Jeffry Houser A DotComIt Whitepaper Copyright 2016 by DotComIt, LLC Contents A Simple Directive... 4 Our Directive... 4 Create the App Infrastructure... 4 Creating a

More information

Skyway Builder 6.3 Reference

Skyway Builder 6.3 Reference Skyway Builder 6.3 Reference 6.3.0.0-07/21/09 Skyway Software Skyway Builder 6.3 Reference: 6.3.0.0-07/21/09 Skyway Software Published Copyright 2009 Skyway Software Abstract The most recent version of

More information

Client Side JavaScript and AJAX

Client Side JavaScript and AJAX Client Side JavaScript and AJAX Client side javascript is JavaScript that runs in the browsers of people using your site. So far all the JavaScript code we've written runs on our node.js server. This is

More information

Datastore Model Designer

Datastore Model Designer Datastore Model Designer The Datastore Model Designer allows you to define the datastore model for your Wakanda application. A model is a description of how data will be accessed and stored into structures

More information

Logi Ad Hoc Reporting System Administration Guide

Logi Ad Hoc Reporting System Administration Guide Logi Ad Hoc Reporting System Administration Guide Version 10.3 Last Updated: August 2012 Page 2 Table of Contents INTRODUCTION... 4 Target Audience... 4 Application Architecture... 5 Document Overview...

More information

Liferay Digital Experience Platform. New Features Summary

Liferay Digital Experience Platform. New Features Summary Liferay Digital Experience Platform New Features Summary Liferay has redesigned its platform with new functionality in Liferay Digital Experience Platform (DXP). The following is a summary of the key new

More information

EMC Documentum Composer

EMC Documentum Composer EMC Documentum Composer Version 6.0 SP1.5 User Guide P/N 300 005 253 A02 EMC Corporation Corporate Headquarters: Hopkinton, MA 01748 9103 1 508 435 1000 www.emc.com Copyright 2008 EMC Corporation. All

More information

Active Servicedesk Release Notes

Active Servicedesk Release Notes 8.00.00 Integration Added new history information related to external notifications Notifications Added config.xml to templates folder so specific email settings can be controlled using template scripts

More information

Modern and Responsive Mobile-enabled Web Applications

Modern and Responsive Mobile-enabled Web Applications Available online at www.sciencedirect.com ScienceDirect Procedia Computer Science 110 (2017) 410 415 The 12th International Conference on Future Networks and Communications (FNC-2017) Modern and Responsive

More information

Front-End UI: Bootstrap

Front-End UI: Bootstrap Responsive Web Design BootStrap Front-End UI: Bootstrap Responsive Design and Grid System Imran Ihsan Assistant Professor, Department of Computer Science Air University, Islamabad, Pakistan www.imranihsan.com

More information

SPARK. User Manual Ver ITLAQ Technologies

SPARK. User Manual Ver ITLAQ Technologies SPARK Forms Builder for Office 365 User Manual Ver. 3.5.50.102 0 ITLAQ Technologies www.itlaq.com Table of Contents 1 The Form Designer Workspace... 3 1.1 Form Toolbox... 3 1.1.1 Hiding/ Unhiding/ Minimizing

More information

Price ƒ(x) Release 'Mai Tai' Release Notes Go-live Datum:

Price ƒ(x) Release 'Mai Tai' Release Notes Go-live Datum: Price ƒ(x) Release 'Mai Tai' Release Notes Go-live Datum: Release 'Mai Tai' Page 1 of 9 This document summarizes major improvements and fixes introduced in the latest Price f(x)

More information

Reference Cart and One Page Checkout BETA February 3, 2014 Version 2014 Release 1

Reference Cart and One Page Checkout BETA February 3, 2014 Version 2014 Release 1 Reference Cart and One Page Checkout BETA February 3, 2014 Version 2014 Release 1 Copyright NetSuite, Inc. 2009 2013 All rights reserved. This document is the property of NetSuite, Inc., and may not be

More information

Release Notes Release (December 4, 2017)... 4 Release (November 27, 2017)... 5 Release

Release Notes Release (December 4, 2017)... 4 Release (November 27, 2017)... 5 Release Release Notes Release 2.1.4. 201712031143 (December 4, 2017)... 4 Release 2.1.4. 201711260843 (November 27, 2017)... 5 Release 2.1.4. 201711190811 (November 20, 2017)... 6 Release 2.1.4. 201711121228 (November

More information

Transact Qualified Front End Developer

Transact Qualified Front End Developer Transact Qualified Front End Developer Transact Qualified Front End Developer Avoka Certified Exam Guide and Preparation Exam name: Transact 5.x Qualified Front End Developer Exam number: PR000002 Becoming

More information

User Guide Product Design Version 1.7

User Guide Product Design Version 1.7 User Guide Product Design Version 1.7 1 INTRODUCTION 3 Guide 3 USING THE SYSTEM 4 Accessing the System 5 Logging In Using an Access Email 5 Normal Login 6 Resetting a Password 6 Logging Off 6 Home Page

More information

Desktop Studio: Charts

Desktop Studio: Charts Desktop Studio: Charts Intellicus Enterprise Reporting and BI Platform Intellicus Technologies info@intellicus.com www.intellicus.com Working with Charts i Copyright 2011 Intellicus Technologies This document

More information

Database Developers Forum APEX

Database Developers Forum APEX Database Developers Forum APEX 20.05.2014 Antonio Romero Marin, Aurelien Fernandes, Jose Rolland Lopez De Coca, Nikolay Tsvetkov, Zereyakob Makonnen, Zory Zaharieva BE-CO Contents Introduction to the Controls

More information

MASTERS COURSE IN FULL STACK WEB APPLICATION DEVELOPMENT W W W. W E B S T A C K A C A D E M Y. C O M

MASTERS COURSE IN FULL STACK WEB APPLICATION DEVELOPMENT W W W. W E B S T A C K A C A D E M Y. C O M MASTERS COURSE IN FULL STACK WEB APPLICATION DEVELOPMENT W W W. W E B S T A C K A C A D E M Y. C O M COURSE OBJECTIVES Enable participants to develop a complete web application from the scratch that includes

More information

Question No: 1 In which file should customization classes be specified in the cust-config section (under mds-config)?

Question No: 1 In which file should customization classes be specified in the cust-config section (under mds-config)? Volume: 80 Questions Question No: 1 In which file should customization classes be specified in the cust-config section (under mds-config)? A. web.xml B. weblogic.xml C. adf-config.xml D. adfm.xml Question

More information

Learn how to login to Sitefinity and what possible errors you can get if you do not have proper permissions.

Learn how to login to Sitefinity and what possible errors you can get if you do not have proper permissions. USER GUIDE This guide is intended for users of all levels of expertise. The guide describes in detail Sitefinity user interface - from logging to completing a project. Use it to learn how to create pages

More information

JSN Sun Framework User's Guide

JSN Sun Framework User's Guide JSN Sun Framework User's Guide Getting Started Layout Overview & Key concepts To start with layout configuration, Go to Extension Template JSN_template_default The first tab you see will be the Layout

More information

Kendo UI Builder by Progress : Using Kendo UI Designer

Kendo UI Builder by Progress : Using Kendo UI Designer Kendo UI Builder by Progress : Using Kendo UI Designer Notices 2016 Telerik AD. All rights reserved. November 2016 Last updated with new content: Version 1.1 3 Notices 4 Contents Table of Contents Chapter

More information

News in RSA-RTE 10.1 updated for sprint Mattias Mohlin, November 2017

News in RSA-RTE 10.1 updated for sprint Mattias Mohlin, November 2017 News in RSA-RTE 10.1 updated for sprint 2017.46 Mattias Mohlin, November 2017 Overview Now based on Eclipse Neon.3 (4.6.3) Many general improvements since Eclipse Mars Contains everything from RSARTE 10

More information

INTRODUCTION TO BLACKBOARD

INTRODUCTION TO BLACKBOARD INTRODUCTION TO BLACKBOARD Working URL - https://www.d11.org Layout of the site MY START BAR CHANNEL BAR HEADER GLOBAL ICONS Logging In Use your email as your username and your network password. SITE MANAGER

More information

Sequence Kinetics SP1 Release Notes. Issue Date: 9 th December 2012

Sequence Kinetics SP1 Release Notes. Issue Date: 9 th December 2012 Sequence Kinetics SP1 Release Notes Issue Date: 9 th December 2012 2012 PNMsoft All Rights Reserved No part of this document may be reproduced in any form by any means without the prior authorisation of

More information

Installation & User Guide

Installation & User Guide SharePoint List Filter Plus Web Part Installation & User Guide Copyright 2005-2017 KWizCom Corporation. All rights reserved. Company Headquarters KWizCom 95 Mural Street, Suite 600 Richmond Hill, Ontario

More information

Release Notes (Build )

Release Notes (Build ) Release Notes (Build 6.0.4660) New to this build (6.0.4660) New in build 6.0.4490 New in build 6.0.4434 OneWeb CMS 6 features Additional enhancements Changes Fixed Known Issues New to this build (6.0.4660)

More information

Nintex Forms 2010 Help

Nintex Forms 2010 Help Nintex Forms 2010 Help Last updated: Monday, April 20, 2015 1 Administration and Configuration 1.1 Licensing settings 1.2 Activating Nintex Forms 1.3 Web Application activation settings 1.4 Manage device

More information

Release Notes: Schoolwires Centricity2

Release Notes: Schoolwires Centricity2 New or Changed Functionality or User Experience General Centricity2 is Certified by SIFA Schoolwires, Inc. has successfully completed the SIF Certification process indicating that Centricity 2 has demonstrated

More information

Siteforce Pilot: Best Practices

Siteforce Pilot: Best Practices Siteforce Pilot: Best Practices Getting Started with Siteforce Setup your users as Publishers and Contributors. Siteforce has two distinct types of users First, is your Web Publishers. These are the front

More information

SAP BusinessObjects Live Office User Guide SAP BusinessObjects Business Intelligence platform 4.1 Support Package 2

SAP BusinessObjects Live Office User Guide SAP BusinessObjects Business Intelligence platform 4.1 Support Package 2 SAP BusinessObjects Live Office User Guide SAP BusinessObjects Business Intelligence platform 4.1 Support Package 2 Copyright 2013 SAP AG or an SAP affiliate company. All rights reserved. No part of this

More information

Documentation External Synchronization FirstSpirit

Documentation External Synchronization FirstSpirit Documentation External Synchronization FirstSpirit 2018-10 Status RELEASED Department Copyright FS-Core 2018 e-spirit AG File name SYNC_EN_FirstSpirit_External_Synchronization e-spirit AG Stockholmer Allee

More information

Blue Form Builder extension for Magento2

Blue Form Builder extension for Magento2 Blue Form Builder extension for Magento2 User Guide Version 1.0 Table of Contents I) Introduction.. 4 II) Installation 5 III) General Configurations...6 IV) Manage Forms.. 7 1) List of Forms 7 2) Add New

More information

Smart Bulk SMS & Voice SMS Marketing Script with 2-Way Messaging. Quick-Start Manual

Smart Bulk SMS & Voice SMS Marketing Script with 2-Way Messaging. Quick-Start Manual Mobiketa Smart Bulk SMS & Voice SMS Marketing Script with 2-Way Messaging Quick-Start Manual Overview Mobiketa Is a full-featured Bulk SMS and Voice SMS marketing script that gives you control over your

More information

Developing ASP.NET MVC Web Applications (486)

Developing ASP.NET MVC Web Applications (486) Developing ASP.NET MVC Web Applications (486) Design the application architecture Plan the application layers Plan data access; plan for separation of concerns, appropriate use of models, views, controllers,

More information

Configuring Autocomplete & Suggest

Configuring Autocomplete & Suggest How to install extension 1. Backup your store database and web directory. 2. Login to SSH console of your server and navigate to root directory of Magento 2 store. 3. Copy installation instructions from

More information

Website Design Guide

Website Design Guide Website Design Guide 8/28/2017 Spark Website Design US 2017 Blackbaud, Inc. This publication, or any part thereof, may not be reproduced or transmitted in any form or by any means, electronic, or mechanical,

More information