Sunday 29 June 2014

Mendix abbreviatens / prefix types for Microflows

There is no standaard for name convention of microflows within Mendix. During the time there are some best-practises about using name convention of the microflows.  Below there is a list of microflows name convention for the different type of microflows.  


Prefix typeMeaningComment
AD_After Delete
BD_Before Delete
ACr_Before create
BCr_Before create
ACo_After commit
BCo_Before commit
IVK_Invoke
VA_Visual AttributeThese microflow have visual attributes as output/return
OC_On Change(do not use, use OCh)
OCh_On Change
DS_Data SourceThis microflow returns an Object or a lijst of Objects as Output/return
SE_Scheduled Event
EVT_Event handlersThese microflows are attached to Event handlers
NAV_NavigationCalled from navigation (menu item)

Tips:





  • Name convention:
    • MF triggers by an action : <prefix type>_<action to execute>
    • MF that does something: <action to execute>
  • When you have a MF which is called by VA_ and OCh_, then the following:
    • MF should be created with name <action to execute>
    • VA_ --> Call MF <action to execute>
    • OCh_ --> Call MF <action to execute>
  • Monday 23 June 2014

    RM3 Proof Of Concept for connecting C to java RM3 Engine

    The Retail Mix & Match Module (RM3) Engine is a promotion rule engine that is specialized  in processing promotions. A promotion can be buy one get one or get 10% discount. To avoid coding these promotions direct in the POS/register system or Webshop, the RM3 is invented. Besides the flexibility the RM3 Engine also very fast in processing promotions. RM3 Engine can be used as java API or as a servlet. The RM3 Engine servlet can run on nearly any application server that is based on java.

    To proof that the RM3 Engine could also run on a POS system, that is build on C technology a Proof of Concept is executed.

    Proof Of Concept starting point:
    • Connect with a C program to the RM3 Engine
    • A minimum of 2000 promotions should be active
    • A minimum of 100.000 items should be part of the promotions
    • Discount results should be displayed per invoice line.

    After a few days, we had the Proof of concept ready. The result was a C program that connected to the RM3 Engine and executed the promotion processing. The results were amazing for the performance. Calculating the promotions for an invoice with about 20 invoice lines took less than 100 milliseconds.

    The following steps were executed by the C program:
    • starts a JVM instance,
    • Create RM3 Engine instance.
    • Loading 2000 promotions, which were based on 100.000 items.
    • Validate promotions
    • Push the invoice header information to the RM3 Engine
    • Push the invoice line information to the RM3 Engine
      • After each invoice line the RM3 Engine was started to calculate the promotions
    • At total
      • Start the RM3 Engine again for final calculation
    • Print invoice including discount information on invoice line level.

    Sunday 9 February 2014

    Mendix and SQL Server: Initializing the ConnectionBus failed

    After installing Mendix and SQL Server it happens most of the time that running a mendix application the following message appears:
    Message: Initializing the ConnectionBus failed.
    Cause: Error on initializing database connection.
    Stack trace: com.mendix.m2ee.api.AdminException: Initializing the ConnectionBus failed.
    at com.mendix.core.MxRuntime.H(SourceFile:472)
    Caused by: n: Error on initializing database connection.
    at bz.b(SourceFile:218)
    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".

    You need to start "SQL Server Configuration Manager"
    Go to Start --> Microsoft SQL Server --> Configuration Tools --> SQL Server Configuration Manager

    When it opens go to "SQL Server Configuration Manager" --> "SQL Server Network Configuration" --> "Protocols for SQLExpress".

    1. Where you'll find the Protocol TCP/IP, if disabled then Enable it.
    2. Double click on TCP/IP, You'll find its properties and select the "IP Address" tab. In this tab Remove All the TCP Dynamic Ports and add value 1433 to all TCP Port
    3. Restart your SQL Server via "SQL Server Services" --> "SQL Server" --> Restart

    Change TCP/IP Disabled to Enabled

    Set TCP Dynamic Ports to 0 and TCP Port to 1433

    After this, the Mendix application can be started.

    Tuesday 4 February 2014

    Mendix performance optimization for batch processing.

    For some projects we needed to do batch updates or clone records.With Mendix 4, there is the possibility to commit a list entity objects.By using this feature it will improve the performance a lot.

    In Mendix 3 it is done like the picture below.

    Clone item without optimization

    Note: In Mendix 3 it is not possible to create and update attributes at the same time, two activities are needed.
    Explanation of the Microflow steps above. This example is limited to process 1000 records.
    1. Retrieve 1000 records
    2. For every record
      1. Create new record including update attributes, commit and refresh.



    With Mendix 4, this can be improved. Performance improvement of 50% can be reached.

    Explanation of the Microflow steps above. This example is limited to process 1000 records.
    1. Create a empty list
    2. Retrieve 1000 records
    3. For every record
      1. Create new record including update attributes (no commit and no refresh)
      2. Add new record to the list
    4. Finally commit the list including refresh.
      1. Refresh is needed when data needs to be displayed within screen.

    In the example above the duration went from 9 seconds to 3.5 seconds.

    When much more records needs to be processed it is advised to do it in batches. This can be done by setting the limit and offset at retrieve of the database entity. After the list is commited, clean the list and retrieve a new set of records from the database (see second activity in the Microflow).
    Processing too many records at the same time can give memory overflow errors.

    tip: When you have entities with more than 10 attributes it could be useful to use the Java clone function within the community commons from Mendix the App Store.