An app project is a customized version of the mobile application dedicated to a particular set of users. Or more precisely, the application remains the same, but each project may have a different set of data and functions available.
What's an app project
App projects are defined by three main blocks:
- Data scheme (see #Managing entities and #Managing fields)
- User interface (see #User interface components)
- Business logic
App projects are represented as a set of metadata. The customizations are saved on the backend server.
- For installations with Microsoft Dynamics/Dataverse, app projects are saved directly in Dataverse.
- For installations with Salesforce and Resco Cloud, app projects are saved in Resco Cloud.
App projects are designed for a particular user role. For example, you can create one project for field technicians and a different one for the manager.
Grouping app projects
Optionally, you can group app projects into apps. Each project belongs to a group. Users of Resco mobile apps can then switch between apps.
Go to Setup/Settings to change between apps
You can create app groups when creating a new app project or when editing the properties of an existing app project: Set the App to "Create a new app..." and enter a New App Name.
To delete an app group, simply remove all app projects from the group, either by assigning them to a different app group or by deleting them.
Select App Projects from the Administration menu of Woodford to display a list of existing projects. The following project properties are displayed in the list:
- App group
- App projects can be grouped into apps. If you don't use this feature, all projects are in a single group called "Default". You can set the app group when creating the app project and modify it using the Properties button > App field.
- The icon offers a visual clue about the state of projects.
- Green check mark: The latest version of the project has been published.
- Grey exclamation mark: If a project has a grey icon with an exclamation mark, it means the project is dirty, i.e. there has been a change in the project but it was not published after making these changes.
- Red no-entry sign: Project has been deactivated.
- You can enter any name for your project. As you create more projects, an intuitive name will help you identify them.
- When you create more projects for the same security role, the one with a higher priority is used.
- For example, if you create two mobile projects for a role Salesperson, one with the priority number 10 and second with 100, the second one will be used when the application synchronizes (since it has a higher priority number).
- The same principle applies when a user has multiple security roles assigned and there are mobile projects created for these roles.
- Name of the parent project; see #Project hierarchy below.
- Published on
- Date and time of the last successful publishing of a project.
- For internal CRM users (usually employees), use Standard User. See External users for information about the other options.
- Format 1 (Packed) means that the project was created and used by Silverlight Woodford. The project is stored in CRM as a Note attachment associated to a Mobile Project record. When a Format 1 project is opened using HTML Woodford, the project is updated to Format 2. We recommend exporting Format 1 projects before opening them in Woodford HTML.
- Format 2 means that the project was opened or created using HTML Woodford. It is no longer stored as a Note attachment; each project file is stored as a record in Mobile Project Item entity. This allows multiple users to work concurrently on the same project (on different parts of the project), and prevents projects from accidental corruption, e.g. due to bulk deletion of notes or using cloud storage for note attachments. Format 2 projects can still be opened using Silverlight Woodford, however, HTML Woodford is necessary to publish them.
|Note||HTML version of Woodford can only delete Format 2 projects. Usually, the upgrade from Format 1 to Format 2 happens seamlessly, when you open a Format 1 project. If you are cleaning up old projects and you attempt to delete a Format 1 project, this will fail. Open the project and save it immediately; then you can delete it.|
Additional properties are available when you create projects:
- Select one or more security roles (or profiles in Salesforce) for which you want to create the project. You can create different app projects for different users based on their roles (profiles).
- Select one of the pre-defined app templates, such as sales or field service. Templates come with a pre-configured home screen and defined lists and views designed for a particular use case.
- Custom Version Identifier (Optional)
- Enter an optional text that identifies this particular project version. This information is displayed in the app.
The following buttons and options are available when working with the list of app projects.
- Create a new project.
- Select a project and modify it. Alternatively, you can simply double-click a project.
- Modify the project's properties: Name, Role, and Priority.
- Show Users
- Display the list of users who receive the customization, i.e., users with a security role that's assigned to this project.
- Delete the project.
- Activate a previously deactivated project.
- Deactivate a project. New mobile users cannot use inactive projects. Existing users can continue using it.
- Import a previously exported project.
- Save a copy of the project to your local computer. This can be useful for backup.
- Create a copy of the selected project. You must enter a new Name, Role, and Priority. Cloning is useful when you want to duplicate a project for different users or when you want to experiment with Woodford and you don't want to lose your current project.
- Return to the last published version of the selected project. If you accidentally delete Resco Mobile project’s note (or its attachment), which leads to losing your project and there is no backup, you can use the Restore button. It will create the project’s note and attachment from the last published version of the project. Only changes made after publishing will be lost and you don’t have to rebuild the project from scratch.
- If you for example accidentally destroy your CRM organization and recover it without Resco entities, it is possible to recover the project from data synced on the Windows device. In case such a situation happens, please contact us on firstname.lastname@example.org for further steps, from which the last one is using the Recover button.
- Creates a child project.
- Makes a standalone project from a derived project ("flattens" the hierarchy)
- Check User
- Specify a user name to display a list of all app projects where a user is involved, including project priority, so that you can see which customization is used.
- Sends project changes to GitHub
- Retrieves project changes from GitHub
- Configures GitHub connection
- (Salesforce) Downloads metadata from Salesforce.
Once you open an app project for editing, you can use the following buttons and options.
- Publish, Publish All
- Once you are done editing an app project and you would like to push your changes to the mobile users, you need to publish your project. Next time your app users synchronize their apps, the customization will be applied on their devices. See Publishing app projects for more information.
- Verify if your changes to the app project have not broken anything. Validation is also performed automatically before each publishing.
- Publish Version
- Use the latest version, unless you know that your users have an old version of the app.
- Send project changes to GitHub. See GitHub integration for more information.
Additional controls may become available once you select a function from the Project menu.
You can establish a parent/child relation between your projects. Child projects inherit all changes from the parent project except for the parts changed directly in the child project.
Here are the basic principles of how this functions:
- Creating a child project creates essentially an empty project with a reference to the parent project, because it uses the project files of the parent project.
- When you modify a setting or component in the parent project, and the child project does not have its own definition of the component, parent change is used.
- When you modify a setting or component in the child project, the link to the parent is permanently broken for that component. Any further changes for the component in the parent no longer apply to the child.
- Behind the scenes, project components are saved as files. For example, Sync Filter is stored as a single file. If you modify the sync filter in the child project, further changes in the parent will no longer be inherited.
- In Woodford, many project components include the State column, indicating whether a component is inherited from the parent or overridden by the child.
- You can use the Publish All button to publish the selected parent project including its all derived projects in a single click.
- For more information about the project hierarchy, please check this section of one of our webinars.
- For information about the child project’s parts, whether they are inherited or changed in the child project, please check this additional webinar.
- Woodford project hierarchy
Merge child changes to parent
The Flatten function allows you to merge changes in the child project into its parent.
For example, imagine three projects in a hierarchy:
Continuing with this example, if you click Flatten on the project in the lowest level (in this case, the grandchild), all changes from the entire child hierarchy are merged into the highest project (in this case, the parent) and will result in a standalone project, when you will be given two options: export the project or create it as new one, free of any previous parent project reference.
The merge is perfomed in a cascade, all changes made in the grandchild project are merged into the child project and then into the parent project. Depending on whether you’ve made changes in both child projects on the same item, the changes from the grandchild overwrite changes in the child.
Before flattening the projects, please remember to back up all projects you wish to merge. Remember that sync filters of all entities are joined into one file, therefore, if you changed the grandchild's sync filter, flattening will overwrite sync filters in the child and parent project.
The Project menu in the left pane of Woodford allows you to access various functions and settings related to app projects, as well as all entities available in the backend.
- Search: Use to quickly filter menu items. The search is not case-sensitive.
- Disabled entities: Toggle to show or hide disabled entities.
- Favorites: Click to show only menu items that you marked as favorite.
- Expand/collapse all: Expand or collapse all submenus.
The Project menu replaces the Administration menu when you are editing an app project. To return to the Administration menu, use the back (arrow left) button in the top left corner of the application.
Map & Routes
- Voice control
- AI Image Recognition
- Process Flow (Dynamics only)
- List of entities available on your server.
All entities available in your backend system are displayed in the Project menu. Some entities are grayed out, disabled. Disabled entities are invisible and unavailable in the mobile apps (both online and offline mode).
- To show or hide unavailable entities, toggle the phone button next to the search bar.
- To make an entity available in your projects, select it and click Enable. You can modify its properties, then click Save.
- You can set the Read, Write, Create, and Delete permissions for the whole entity.
- Permissions can be also configured individually on each field, see #Managing fields below.
- Select whether the data is available offline.
- If set to Online & Offline mode, the CRM data is available in both online and offline mode. For offline mode, the app synchronizes the entity records: uploads user changes made in the Mobile CRM app and downloads changes from the server. In online mode, users have access to server records based on the configured view filters.
- If set to Online only mode, the online mode continues to function as in the previous option. In offline mode, however, no records are downloaded from backend server, and even if a user creates a new record, the record cannot be uploaded. Basically, this entity is completely ignored by the synchronization process.
- To avoid the creation of records in offline mode, it is possible to create a simple On Load rule for the entity form (Conditions: If Configuration.isonline equals True; Step: IsFormEditable equals False)
- Select how this entity should be synchronized after it has been successfully synchronized at least once. (The initial entity sync always behaves in the same way: it downloads all records matching the sync filter.)
- Standard Sync: This is the default option. The app downloads all changed records from the server. (Records that don't match the sync filter are later deleted.)
- Always Full Sync: The app downloads all entity records (as if it was never synced before). In rare cases, performing full sync might be more efficient than the standard algorithm. However, in most cases, full sync increases synchronization time; sometimes dramatically. (When to use Always Full Sync?)
- Incremental with Sync Filter: The app downloads all changed records that match the sync filter. This can save a lot of network traffic. However, the risk is that the client might not get the information that some server records stopped matching the sync filter. This option works best for immutable records.
- Note: SyncAnalyzer can override the above setting by enforcing full sync for performance reasons. You can switch off SyncAnalyzer using Woodford configuration (Disable Sync Analyzer).
- On Conflict
- Conflict appears when the same record is changed on the device and before being synchronized, a change occurs on the CRM server (e.g. other user changes the same record and synchronizes changes before the first user, or the record is changed on the CRM server). See conflict resolution for details.
- Upload Status with Data
- This option controls how changes in the state/status fields are uploaded to the backend server during synchronization. The default behavior is that status fields for some entities are uploaded separately, after the regular fields. When you select this option, all entity fields including status are uploaded in one pass. See the description of the upload step for more information.
- Include Lookup Labels
- When checked, the app no longer shows data related to that entity as “Unknown” in the offline mode. This often happened with ownerIDs of records, as the data with User names is stored in the User entity (by default the Owner entity is not enabled in Woodford).
- Incremental Linked SyncFilter
- Incremental Linked Sync Filter ensures that the linked filters on entities are checked during Incremental Synchronization. You can enable or disable it per entity, or use project default.
- Synchronize linked files
- Select which Salesforce files related to this object should be available offline.
- Owned and shared: Only files that are created or explicitly shared with the user logged into the app are available offline.
- All: Make all Salesforce files related to this object available offline.
- This setting can have a considerable impact on sync performance and API count, especially when enabled for an object with a large number of records. After enabling this option, full sync is needed on all mobile devices.
- Synchronize entity feed
- Required for each object where you want to use chatter. This option is selected automatically when you add a chatter tab to any form of that object.
- Sync shared records
- Enable this option if you want to properly synchronize recently shared and unshared records during incremental sync.
- Sync archived and deleted records
- Enable this option to work with archived and deleted records in Resco mobile apps. This setting applies to both offline and online modes. After enabling this feature, full sync is required to make all records available offline. You can use Sync Filter or View Filter on fields "isdeleted" and "isarchived" if you want to download only deleted or only archived records. The ability to sync archived records is particularly useful for Events because Salesforce automatically archives them after one year.
- Sync Filter
- Sync Filter allows you to limit the number of records downloaded into the offline storage on user devices.
- Edit Index
- Create indexes to optimize the performance of the application by speeding up offline queries.
After enabling an entity, you can select fields that you plan to use on this entity in Resco mobile apps.
- To enable a field, select the checkbox in the field's row and click Save.
- To disable a field, clear the checkbox in the field's row and click Save.
- Some fields are mandatory and cannot be disabled.
For example, you can pick some additional fields you want to use in your mobile project: City, Country/Region, Street and ZIP/Postal Code. Here you can also enable the custom fields for the entity. You cannot create custom fields here; this must be done on the backend server.
|Tip||Best practice: We recommend not to include too many entities and fields in your mobile project. Backend servers often include a large wealth of entities and fields, and most organizations only use a small subset. An even smaller subset of the data is necessary in the field. Sync Filter can further restrict which records should be downloaded to the mobile device. Careful planning can improve the performance of the app and satisfaction of the users.|
You can also configure some properties for each field. Select a row and modify the Properties pane on the right. Some parameters are read-only.
- Configure the permissions to Read, Create, or Update values in the field.
- Affects the appearance of the fields in the forms and views. Proper formatting ensures that the correct action button is displayed next to the field.
- Single line – Field is formatted to have the appearance of a single-line field in the mobile app.
- Multiline – Field will have the appearance of a multiline field.
- Email – Adds an action button to the field in the mobile app, activation of which will provide user with an opportunity to immediately create an email.
- Phone number – Field gets an action button that provides phone call functionality (the device will dial the number contained in the field).
- URL – Adds an action button to open the URL in the native browser of the device.
- Barcode – Adding an action button that activates a camera so user can scan Barcodes and QR codes. This function will only work on devices that have a camera with Autofocus.
- HTML – Formats the text field into an HTML type (bodies of email, signatures and etc).
- DropDown, DropDownList, Multi DropDown, Multi DropDownList – this feature allows you to predefine input for users, so instead of entering a value, they can choose to use options from a drop-down list (or enter what is needed manually). See detailed instructions or watch this webinar section.
- Requirement Level
- A field can be either optional ("None") or required ("SystemRequired").
- For option/status fields, the available values are listed here.
- The default value of the field.
- For numbers, see the minimum and maximum allowed value. For strings, see the maximum size.
- For floating-point numbers, see the maximum allowed precision.
- Lookup Targets
- For lookup fields, this parameter lists the allowed targets of the lookup.
- Mark as Parent Pointer – When you enable this flag for a lookup field, you can establish a child-parent relationship between entities. See Mark as Parent Pointer for implications.
- Description of the field.
|Warning||If you disable any previously enabled field, please check all existing views and forms and remove any fields or lists marked by the sign “Invalid”, or enable the corresponding field so that the field will no longer be listed as invalid. If there are any invalid fields or lists in the form or view, the application will crash when you try to open an entity list or record details. See Metadata changes in live projects for more information.|
User interface components
Use the following building blocks to create your application:
Views, forms, and charts are defined for each entity. Select an entity in the Project menu and click Show UI to display a list of existing components.
Use the toolbar buttons to manage views, forms, and charts.
- Show Fields / Show UI: Toggle between entity settings and entity UI.
- New View, Special View, New Chart, New Form: Create a new UI component for the selected entity.
- Clone: Create a copy of the selected UI component.
- Select Form: If you have multiple forms defined for an entity, configure what form is used when.
- Edit: Change the design of the selected component.
- Properties: Edit the properties of the selected component.
- Delete: Delete the selected component.
- Restore: Restore the selected component to the version inherited from the parent project. See project hierarchy for more information.
- Import File / Export File: Use these functions to transfer UI components between app projects.
- Import Form / Import Views (Salesforce only): Import UI components (page layouts and views) from the Salesforce server.
Custom images, colors, brands, and more
Apps created from the building blocks can be further customized to better match your corporate design:
App projects can include custom business logic that direct the interaction between user interface and data, such as:
- No-code business logic using rules
- Entity notification workflow for triggering automatic notifications when an entity record is created or modified.