. . .

Version 3.0.0

New Features

ApiOmat Studio Web

Starting with ApiOmat 3.0 you can easily create React based web apps by using ApiOmat Studio Web. Built for designers, ApiOmat Studio Web provides all the tools to quickly piece together web apps, prototypes or MVPs.

Gain start up speed and give lines of business, departments, and designers the only tool to build native apps and digital services for their customers, without IT complexity.
Deliver rapid prototypes and digital services in hours and launch apps in as little as a day to digitalize how employees, customers and partners interact with your business.

  • Design apps tailored to your use-case

  • Supports all popular browsers

  • Huge selection of predefined UI elements

  • Direct connection to the app backend

  • Free of charge: Included in ApiOmat 3.0

images/download/attachments/27164677/webstudio_mockup2.png

Managing User Interfaces with ApiOmat

With ApiOmat 3.0 a new type of component named User Interface (UI) is introduced.
In contrast to modules that hold only backend logic of your app, User Interfaces (UIs) contain the frontend code of your app. You are able to connect UIs to one or more modules to access your backend data.
As UI Developer you can create your own UI templates and share them across your projects. UI Orchestrators on the other hand can use the ApiOmat UI Marketplace to attach and configure those UIs to a specific backend application.

This provides the possibility to create frontend templates and integrate them into specific backend applications or share them with other ApiOmat users.

images/download/attachments/27164677/previewImagesPNG.PNG

More information can be found at User Interfaces.

Fine grained Cron Jobs in Native Modules

You can now define your own custom cron method within your module classes. Those methods will be registered as interruptable jobs (which basically means that they will be interrupted if the server breaks down or your module gets undeployed or redeployed). Cronjobs can now be executed in every periodic schedule like it is required for your digital service, for example every midnight, every certain working day or hourly.

All you have to do is to use the new annotation @Cron to mark your custom cron method within your module class.
In order your cron-marked module methods get executed timebased you also need to specify the annotation parameters cronExpression and executeOnAllNodes.

Example:

@Cron( cronExpression = "0 0/5 * * * ?", executeOnAllNodes = true )
public void myCustomCronMethod( final com.apiomat.nativemodule.Request request )
{
final String moduleName = "MyModule";
final String appName = request.getApplicationName( );
final String system = request.getSystem( );
final String className = "TestSimpleClass";
final String query = "";
final IModel<?>[ ] findByNames = MyModule.AOM.findByNames( appName, moduleName, className, query, request );
[...]
}

More on this topic can be found here.

Dynamic roles in native modules

Dynamic roles are a way to write custom authorization logic (as opposed to authentication logic). Write your own authorization logic in addition to the preset roles and get your role informations out of third party systems. This enables you more flexibility and perfect compliance fit.

The "Dynamic Roles" feature works similar to the Authentication Classes feature, but while authentication classes are assigned to a backend and are for general authentication, the dynamic roles are assigned to classes (MetaModels) and enable custom role checks. These custom role checks can be used instead of default role checks (simple roles "Guest", "User", "Owner" etc.) and ACLs. ACL role objects can still be assigned, but you have to check their contents yourself.

You can create your own "role classes" by implementing your own isUserInRole() method in the related hook class, like the following example:

@Override
public boolean isUserInRoles( com.apiomat.nativemodule.DynamicRoleWrapper roleData,
com.apiomat.nativemodule.Request request )
{
// Make call to some other service that contains authorization information
return isAuthorizedByThirdPartySystem();
}

You can assign multiple role classes to one class and set the order in which the custom role check methods should be called in Dashboard and via code:

images/download/attachments/27721917/DynamicRoles.png

More information can be found on the documentation page.

Breaking changes

Breaking changes may require changes in configuration, apps, or native module code after an ApiOmat upgrade to ensure system stability.

Git Modules

The whole git handling has changed:

  • Module status "NATIVEGIT" has been removed

  • Behaviour of the git endpoints changed

  • Existing Git modules will be migrated on first start. A restart of yambas is necessary after the first full start!

Read more about the change on our page Introducing the new git flow

ApiOmat Studio Mobile

Because of the deprecations listed below, you'll need to re-install ApiOmat Studio Mobile. Therefor simply download ApiOmat Studio Mobile and run the install script again. If you have configured the app location within your apiomat.yaml, you'll to update the version folder from 2_6 to 3_0 before, to get the latest version.

Deprecations

The deprecations, which were scheduled to be removed for March 2018, have been removed:

  • newly downloaded SDKs may break existing Apps, due to missing methods

  • see the Deprecations and Migration page for detail information and replacements

Sharepoint module

Files were previously handled as Base64 strings in the attribute downloadableFile of the class SharepointFile. This attribute was changed to the type File and full static data handling was implemented. This means for example that in the response JSON the attribute is called downloadableFileURL and contains a URL where the actual file can be fetched.

You need to change native module and SDK code to handle files correctly, as well as any code that manually sends HTTP requests to the SharepointFile REST endpoint.

EULA Acceptance

Each ApiOmat account (including the SuperAdmin) is forced to accept the EULA to enable the account. After installation or update, each account has to log into the dashbord one time and accept the EULA. Until then, each request with this account will raise an error, including all SuperAdmin requests.

Native Module Methods

The methods and resourceMethods field on AbstractClientDataModel are now of type IModelMethodsBackend and IResourceMethodsBackend. If you set your own mock-implementation of these Interfaces, you have to rewrite them to implement the new interfaces

Server Code

The user object in ServerCode does not have the [get/set]LocLatitude and [get/set]LocLongitude methods anymore and instead, the [get/set]Latitude and [get/set]Longitude methods are (furthermore) available.

The [get/post/put/delete]Request methods are now only available on the static AOM object, but not on the objects itself.

  • Change [get/set]LocLatitude and [get/set]LocLongitude to [get/set]Latitude and [get/set]Longitude

  • Change obj.[get/post/put/delete]Request(...) to AOM.[get/post/put/delete]Request(...)
    in your ServerCode

Paymill module

The Paymill module is not available anymore, as it was only useable in ServerCode. The module will be removed from your Backends automatically after upgrade.

Tumblr module

The tumblr module is not available anymore. The module will be removed from your Backends automatically after upgrade.

Swift SDK

Swift SDK now uses Swift 4. You have to update existing Swift 3 apps to Swift 4: Swift 4 Information

Remarkable changes

Remarkable changes do not affect system stability after ApiOMat upgrade, but may require changes in configuration, apps, or modules in the next development cycle

sdk.properties

The build.xml for modules for Version 3.0.0 now also searches for properties defined in {user.home}/apiomat/apiomat.properties . If the sdk.properties defines the same value, the value is read from sdk.properties file. We recommend the removal of customerName, password and host from the sdk.properties files of your module and instead putting these values to your local {user.home}/apiomat/apiomat.properties file.

Modules with Git repository

Native modules can now be stored in a subfolder of a git directory. Additionally, we automatically create a .gitignore file, which ignores common build directories.

Java SDK

JSON lib in class folder was replaced by library. Update project/build settings by adding the new json library in the /lib folder and remove the existing org.json package in the project folder.

Native Module objects

The structure of the NativeModule classes (extending AbstractClientDataModel) have been changed. The IModel interface now extends IResourceMethods and IModelMethods and therefore, you can use these Methods directly on an IModel object without casting.

All changes in the current and previous versions can be found at the root page.

All deprecations and their removal date can be found at Deprecations and Migration.

Changelog

Key

Summary

T

Resolution

DAS-1714

Support dynamic roles

images/jira.apiomat3.com/secure/viewavatar

Fixed

DAS-1712

Implement CSRF attack protection

images/jira.apiomat3.com/secure/viewavatar

Fixed

DAS-1694

Upgrade PHP and Apache to latest version

images/jira.apiomat0.com/secure/viewavatar

Fixed

DAS-1692

Native module cronjob running time arbitrary

images/jira.apiomat0.com/secure/viewavatar

Fixed

DAS-1670

User interface zip must not have the same name like the user interface

images/jira.apiomat1.com/secure/viewavatar

Fixed

DAS-1649

Get Notification when UI is updated with additional Modules that are not contained in App

images/jira.apiomat1.com/secure/viewavatar

Fixed

DAS-1604

Delete all apps forcefully when deleting account

images/jira.apiomat0.com/secure/viewavatar

Fixed

DAS-1550

Transfer owner of app-backends & modules to other account

images/jira.apiomat1.com/secure/viewavatar

Fixed

DAS-1515

Changing of hosts URL should also change app-backend URLs for existing app-backends

images/jira.apiomat1.com/secure/viewavatar

Fixed

DAS-1496

Let Organizations manage apps

images/jira.apiomat3.com/secure/viewavatar

Fixed

DAS-1409

Show warning when renaming attributes

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4874

Removal of deprecated code

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4873

[Facebook] Deprecate methods which Facebook does not support anymore

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4810

Possibility to send customized error codes in authentication failed exception

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4801

Calling makeNative REST interface breaks SSL KeyStore context

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4799

Secure mongodb connection with TLS/SSL

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4797

Customized Cron Job execution using Quartz Job Scheduler

images/jira.apiomat4.com/secure/viewavatar

Fixed

AOM-4796

Long app and class names lead to index creation error

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4792

Add REST Endpoints to get and execute available Cron-Methods

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-4780

Calling makeNative REST interface does not use internal host

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4779

Upper case in the customer email leads to problems

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4778

[Webhosting] Renaming of files makes them unusable

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4775

Upgrade to Jackson 2.9

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4773

[ApiOmat Studio] Remove accountPassword from apiomat-account.conf

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4748

ClassNotFoundException shown on OnDeploy during ServerStart

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4744

Make replacement in config files after upgrade more robust

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4736

[NativeModule] Custom error codes > 999 not visible in SDKs

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4733

Transferring owner of App-Backend or module sets NullOrganization as new owner

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4730

[Swift] Compile errors in SDK without Push module

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4722

Caching of module resource files

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4711

[Backbone] Model.loadByHref doesn't work

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4708

Customer with GRANT role on app should not be able to attach unreleased/permissionless module

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4705

Loading of images/files which are not in app broken for old endpoints

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4704

Expired contracts are considered to need acceptance

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4702

X-Fowarded Host not forwarded by AWS

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4688

[ObjectiveC] Can't get any data if in mobile network

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4685

Support for MongoDB 3.6

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4684

Allow domain names <255 chars for email addresses

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4679

[Xamarin-, C#-SQLite] Throw NotImplementedException when calling save on embeddedObject

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4675

[Swift] Loading after Save returns only cached result using CacheElseNetwork

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4672

Remove "Main"-Module creation and handling

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4665

Internal Server Error when loading inherited User via /me endpoint with Token

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4656

Add examples file in Native Module

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4655

[Swift] Wrong Datatype "CUnsignedLong" in CacheResponse for 32 Bit

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4637

Put for embedded collection not working correctly

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4631

Wrong appname is used under some circumstances in native module code

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4625

CSV module exports too few records

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4602

parallel designed dependent modules don't include dependent module.jar

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4589

[JavaScript] New static data logic is used even for old hrefs

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4585

[Xamarin, C#] Implement READ for Embedded Documents

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4566

[JavaScript] After posting static data the object in the offline storage doesn't contain the returned URL

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4555

[Xamarin,C#] Support for READ Embedded Documents

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-4550

[Objective-C] Wrong Datatype when store cache response

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4548

Working in parallel on the same native module causes problems

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4539

Provide new createAccount Rest Endpoints for setting PolicyType

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4530

makeNative takes wrong password/customerName when sharing modules

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4501

Support for Debian 9, Centos 7.4

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4499

[Authentication]: setNoAuth not working for staticData

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4498

[Native Module] Make user or account authentication configurable via request

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4497

restrictResourceAccess not taken into account in transient classes

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4481

[JavaScript] Hrefs in Offline Tasks are not updated

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4443

Adapt Java SDK for DELETE of static data

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4442

Implement Custom native module Cronjobs

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-4427

When attaching a file to multiple objects and deleting one of the objects, the file gets deleted, leading to broken references on the other objects

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4405

Implement header end points for static data

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4402

MediaType.MULTIPART_FORM_DATA not working in custom REST endpoints

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4390

Unify handling of GIT- and JAR Native Modules

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4388

Delete apps forcefully when deleting account

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-4386

[Swift] Update SDK to Swift 4

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4383

Errors for encryptionkeys larger than 16chars

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4376

Datamodel creation wrongly categorized as "Updated" instead of "Created"

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4357

Adapt Swift SDK for new CRUD of static data

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4356

Adapt ObjC SDK for new CRUD of static data

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4350

Adapt Android SDK for new CRUD of static data

images/jira.apiomat2.com/secure/viewavatar

Fixed

AOM-4327

Tomcat doesnt stop properly on windows server

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4226

Force acceptance of default contract

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4205

Do not show compile warning after upload and release

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4192

Remove Tumblr Module

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4166

[NativeModule] Provide checkRoles() methods to check enhanced auth on transient data

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-4161

[Wordpress] RestRessource not shown in ApiDocs

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-4083

Organizations can create Customers

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-4082

[C#] Remove ApiOmat Analytics, as not supported on all target platforms

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-3913

[Objective-C] Offline Handling not working on iOS 8+ due to faulty NSURLCache

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-3797

Transfer owner of App-Backend & modules to other account

images/jira.apiomat3.com/secure/viewavatar

Fixed

AOM-3456

Limit call-depth for hook methods

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-3231

[iOS/Swift] OfflineCaching configurable if the server is not reachable

images/jira.apiomat0.com/secure/viewavatar

Fixed

AOM-2479

Unify naming of embedded objects

images/jira.apiomat1.com/secure/viewavatar

Fixed

AOM-2472

Embedded Object Collection in an Embedded Object Collection update does not work

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-2430

Deleting object in embedded list in object in embedded list doesn't work

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-2410

Mandatory fields in embedded documents

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-2404

Wrong href gets generated into newly created embedded objects

images/jira.apiomat.com/secure/viewavatar

Fixed

AOM-2401

[ObjC] Replace NSURLConnection by NSURLSession

images/jira.apiomat1.com/secure/viewavatar

Fixed

92 issues