Feb 5, 2023

Trigger Infor ION Workflow from an external application

 It is a very common scenario to integrate/trigger your workflow with an external application. With the help of ION APIs, we can do this.

The Context


Infor ION WF

Firstly, let’s create a very simple WF which will send a notification to the user.

  1. Login to the ION Desk.
  2. Go to the Workflows menu in the Monitors and Workflows section. Then, Add New Workflow
  3. Give it a name “KG_WF_TriggerFromApp” and fill in the Description if you want.
  4. Click on the Start Icon in the WF designer canvas to see the Workflow properties. Add below two parameters.

    Name Type Input
    PurchageOrderNo STRING YES
    SourceApp STRING YES


  5. Drag and Drop the Notification function between Stat and End of the workflow. Provide the following configuration in the Notification Properties section.
    1. In the Notification Tab,
      1. Give it a name.
      2. Enter the message, like “You have received a purchase order from [SourceApp]”. You can select the parameter SourceApp by hitting CTRL+SPACE in the message text box. 
    2. Go to the Content tab and select the two parameters we created from the left table and add them to the right table. This is to include values of parameters in the notification. 



    3. Go to the Distribution tab and add the User to be notified.


  6. Save the WF and activate it. 

Infor ION API

Infor ION API provides a POST API under IONProcessApplicationServer to start a workflow. The API has two required parameters;

  1. logicalId -to differentiate the application.
  2. StartWorkflowJSONBody – to specify WF Name, instance, input variables and structures.

Invoking the API

In this example, I’m using the Postman client to mimic the external call. Refer to my post to configure the Postman to call ION APIs

  1. Create a new POST request in the Postman client.
  2. Paste the API endpoint from the ION API documentation. The URL is similar to  https://[ Your CloudSuite URL and Tenent ]/IONSERVICES/process/application/v1/workflow/start .
  3. Add a Query Parameter as


  4. Go to the Body tab and add the following JSON payload and Send.


The Output

  1. Postman response.


  2. Workflow instance from the ION Desk.


  3. The Notification in my Inbox.


Dec 26, 2022

Upload a document to Infor IDM using Infor ION

You will find many posts/videos about this topic, but I intend to guide you step-by-step with more information to comprehend and also refer to this faster in your future need. You can comment on any improvements, bugs, and thoughts to get me motivated.  

This post is based on an actual requirement from my current project with Infor M3 13.4. I’m explaining the general concept aiding with my actual requirement in the project.

The Context


A User or any application in an on-premise environment needs to archive files with Infor IDM. As you are aware we can use Infor Enterprise Connector to establish a secure connection between the two environments. Explaining Enterprise Connector is out of this post and you can find more information here.  

In the actual scenario, after archiving

  1. The users want to search the archived files related to the SBU/DIVI, the Business Process (User, Application, process, etc.), and the upload date. 
  2. Purge files after a predefined retention time. 

We can facilitate these requirements using Infor IDM very easily.

Prerequisites in Infor IDM. 

Document Types

Note: To create a Document Type in IDM you need to be in the IDM-Administrator role. 

For this example, I created a Document Type with the following information.  For more information refer to the Infor IDM Guide.


Tab Field Value
  Display Name/Name BDX_FR_FILE

Document title Filename
  Rest of the Fields Keet Default values
     
Attributes SBU  
  Display Name SBU
  Data Type String
  Max. Length 3
  Other Single-value, Required
     
  UploadDate  
  Display Name UploadDate
  Data Type Date
  Other Single-value, Required
     
ACL Public (for this example)  

ION IDM API

We have the Infor ION APIs suite to integrate with Infor IDM.  The suite has a bunch of Apis but for this example, we are using only Add item API. The body parameter in the API is used to send the document types information along with the file name and file content (as bast64 string). 


The Solution

We will be creating Infor ION Document Flow to 
  1. Read the file from the location.
  2. Enrich the BOD with the necessary information for Infor IDM.
  3. Call the Infor IDM Items (to Add an item).
Login to the ION Desk. 

Configure the file location and the document (BOD)

  1. Create a File Template.
    1. Go to Connect-> File Template -> Add
    2. Add the following Information.
    3. Field Value Remark
      Name  BDX_FR_FILE_SOURCE
       
      File Type
      Binary
      Fields Format Type, Document ID Filed Name and Raw Data Field Name will automatically fill and will be added to the BOD.
      File Name Attribute FileName
      Will be added to the BOD.
      File Extension Attribute FileExtension
      Will be added to the BOD.
      File Path FilePath Will be added to the BOD.
      Document
      FRRAWDATA
      Give any meaningful name. A custom BOD will be created using this name.
    4. Save the Information.
    5. Select GENERATE METADATA. This is will create the required Custom BOD to use in the rest of the data flow.
    6. Click Yes, in the popup to accept that we are sure to generate the document with provided Document ID.
  2. Create a connection point to the File folder (refer to the context diagram above), using Enterprise Connector (EC). 
    1. Go to Connect-> Connection Points -> Add -> File 
    2. Add the following information. 
    3. Tab/ Group Field Value Remark
      Name BDX_FRFileLocation  
        Location Related Enterprise Location Please check with your System Admin to get the EC data.
      Connection Tab Transfer Protocol Shared Folder  
          Provide necessary information Host Name, User name, and Password fields  
      Document Tab Add a Scenario Click on the + icon  
        Scenario Select Read a File from a folder  
      Document Tab / File Format Template & Document Settings File Format Template BDX_FR_FILE_SOURCE Select the File Template to create in Step 1.
        Document Noun   Automatically selected.
        Document Verb Select Sync  
      Document Tab / Read File Settings Create non-existing folder(s) Tick On  
        Read Location FR_File_In Substitute your actual folder paths without the hostname only the shared folder path. For sub-folders separate with “/” as an e.g. FR_File_In/FR_File_Error.
        Error Location FR_File_In/FR_File_Error  
        Archive Location FR_File_In/FR_File_Arc  
        File Name pattern .csv Specify any pattern you need. To accept all the files in the read location you can set this as *.*.
    4. Keep the rest of the settings as it is. 
    5. Click on TEST. If all is good, subfolders will be created in the shared location.
Your final settings should look similar to the following screenshot. 

Configure the Infor IDM API Connection 

  1. Go to Connect -> Connection Points-> Add -> API.
  2. Name it BDX_FR_IDM.
  3. In the Connection, tab import the legit service account.
    1. Please contact your System Admin to get the Service Account file, which contains the Access Key, Secret Key, Description, and User Name.
  4. Go to the Documents Tab and click on the + icon to add ION API.
  5. Select Send to API option in the Scenario section as we need to post data.
  6. Select the Input Document tab.
  7. From the Document dropdown select Sync.FRRAWDATA.
  8. Select the ION API tab, enter IDM_FR_UPD as API Call Name
  9. Click on the Select button.
  10. In the Search ION API Operation dialog select Document Management as Product.
  11. Then search and select Add an Item (POST, IDM/api/items)
  12. Click OK to close the popup
  13. Click on the Request Body tab.
  14. Tick on in the Map input document to API request check box.
  15. From the Format dropdown select application/xml. Because we using Sync.FRRAWDATA BOD.
  16. In the Body EXAMPLE text box add this API Payload.  Tip: You can get the payload from Infor IDM API Suite. 
  17. Then save all the changes we made. 
  18. You can test the API by pasting the below Sync.FRRAWDATA BOD   into the Message Content of the Test ION API Call popup.

Create the Document Flow

We are going to create a very simple Document flow as follows.

  1. Go to Connect -> Data Flows -> Document Flow.
  2. Name it BDX_FR_IDM_UPD.
  3. Drag and drop the File activity to the canvas and change properties as follows.
    Property 
    Value
    Remark
    Name
    FRSourceFile  
    File Connector
    BDX_FRFileLocation
    Hit the New button to create a new file connector and the Details button to review the settings of the selected connector. 
  4. Select the File Icon after the File connector we just created and add the document by selecting FRRAWDATA from the Add Documents popup.
  5. Before calling the IDM API, we have to combine the two attributes FileName and FileExtenstion of FRRAWDATA element in the Sync.FRRAWDATA. Drag and drop the Script Activity after the File, to enrich the BOD. Alternatively, you can use the Mapping activity where the Script is not available. I will discuss it in Appendix 2.
  6. Change the Script Activity Properties as follows.
    Tab Property Value Remark
    Properties Name ChangeFileName_IDM
    Script Change_File_Name_IDM Refer to the Script section below for creation.
    Document Mapping Input Document Sync.FRRAWDATA
    Output Document Sync.FRRAWDATA Click on the Magnifier Glass icon in the Output Document column and select.
    Input Parameters Name input_var_1
    Input Input Document Content
    Output
    Document Script Parameter output_var_1
    Header Script Parameter From Input Document
  7. Drag and drop API Activity after the Script.
  8. Change the properties as follows.
    Property Value Remark
    Name IDM_AddFile
    Select ION API Connector BDX_FR_IDM
  9. Activate the Document Flow.
  10. Integration is ready to test.

Appendix 1

Sync.FRRAWDATA BOD structure

The BOD structure generated from Infor ION is as follows.

Tip: Note the FRRAWDATA (line number 19) complex element in the BOD. It generated the attributes and subelements as we instructed when creating the file template.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<SyncFRRAWDATA releaseID="9.2">
	<ApplicationArea>
		<Sender>
			<LogicalID> </LogicalID>
			<ComponentID>External</ComponentID>
			<ConfirmationCode>OnError</ConfirmationCode>
		</Sender>
		<CreationDateTime>2022-12-25T10:09:11.997Z</CreationDateTime>
		<BODID> </BODID>
	</ApplicationArea>
	<DataArea>
		<Sync>
			<AccountingEntityID/>
			<LocationID/>
			<ActionCriteria>
				<ActionExpression actionCode="Replace"/>
			</ActionCriteria>
		</Sync>
		<FRRAWDATA FileName="File name" FileExtension="csv" FilePath="FR_File_In">
			<DocumentID>RD-954584925-1670321351981</DocumentID>
			<RawData>UmVhZCBwb3N0cyBmcm9tIGh0dHBzOi8vd2FybmFqaXRoLmJsb2dzcG90LmNvbS8gYW5kIGh0dHBzOi8vd2FybmFqaXRoLndvcmRwcmVzcy5jb20v<RawData>
		</FRRAWDATA>
	</DataArea>
</SyncFRRAWDATA>
 

Infor IDM Api payload

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<item xmlns="http://infor.com/daf">
	<attrs>
		<attr>
			<name>SBU</name>
			<value>SBU1</value>
		</attr>
	<attr>
			<name>UpdalodDate</name>
			<value><IonApiRef>SyncFRRAWDATA/ApplicationArea/CreationDateTime</IonApiRef></value>
		</attr>
	</attrs>
	<resrs>
		<res>
			<filename><IonApiRef>SyncFRRAWDATA/DataArea/FRRAWDATA/@FileName</IonApiRef></filename>
			<base64><IonApiRef>SyncFRRAWDATA/DataArea/FRRAWDATA/RawData</IonApiRef></base64>
		</res>
	</resrs>
	<acl>
		<name>Public</name>
	</acl>
	<entityName>BDX_FR_FILE</entityName>
</item>

Tip: 
  • Line numbers 2 to11: There are two <attr> occurrences because we defined two mandatory attributes in the IDM Document Type.
  • <IonAPiRef> is used to map the respective BOD element or attribute.
  • Line Number 21<entityName> is the name of the IDM Document Type.

Appendix 2

Steps to create the Python script

  1. Go to Scripting - > Scripts -> Add.
  2. Change the Name to Change_File_Name_IDM.
  3. Add the following script.
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    from xml.etree import ElementTree as etree
     
    tree =  etree.fromstring(input_var_1)
    
    for node in tree.getiterator():
       
        if node.tag == 'FRRAWDATA':
             
           fn = node.attrib.get('FileName')
           fe = node.attrib.get('FileExtension')
           n_fn = fn +'.'+ fe
           node.attrib['FileName'] =n_fn
           
    root = tree
    #print (etree.tostring(root,encoding='UTF-8', method='xml', short_empty_elements=True))
    decoded = etree.tostring(root,encoding='UTF-8', method='xml', short_empty_elements=True)
    output_var_1 = decoded
    
  4. In the Property section, under the Input and Output select Edit. In the popup add the variable below. Click Update to close the popup. 
    Direction Variable Name Data Type
    Input Variables input_var_1 String
    Output Variables ouput_var_1 String


  5. And test the script by copying the same Sync.FRRAWDATA into the input_var_1. If all is well, you can see now FileName attribute includes the file extension. 
  6. Then go back to the Script home dashboard and approve the script. 

Using Mapping Activity instead of Script

  1. Go to Connect -> Mappings -> Add -> Graphical Mapping.
  2. Name the map Map_IDMFileNameChange.
  3. Select Sync.FRRAWDATA for both Source and Target.
  4. In the Modeler tab, drag Sync.FRRAWDATA element from the source and drop it onto the Sync.FRRAWDATA in the target. Then mapper will connect other elements. 


  5. Go to the XSLT Editor. Remove the highlighted code line. When you try to change it, the editor will ask you want to switch to editing mode. Click on Yes.


  6. Paste the below code into the removed line. Note line number 12 which concatenates both file name and extension.
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <xsl:copy-of select="/*:SyncFRRAWDATA/*:ApplicationArea" copy-namespaces="no"/>
    <xsl:if test="/*:SyncFRRAWDATA/*:DataArea">
    	<xsl:element name="DataArea">
    		<xsl:copy-of select="/*:SyncFRRAWDATA/*:DataArea/*:Sync" copy-namespaces="no"/>
    		<xsl:element name="FRRAWDATA">
    			<xsl:if test="/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/@FileExtension">
    				<xsl:attribute name="FileExtension">
    					<xsl:value-of select="/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/@FileExtension"/>
    				</xsl:attribute>
    			</xsl:if>
    			<xsl:attribute name="FileName">
    				<xsl:value-of select="fn:concat(/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/@FileName,'.',/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/@FileExtension)"/>
    			</xsl:attribute>
    			<xsl:if test="/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/@FilePath">
    				<xsl:attribute name="FilePath">
    					<xsl:value-of select="/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/@FilePath"/>
    				</xsl:attribute>
    			</xsl:if>
    			<xsl:if test="/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/*:DocumentID">
    				<xsl:element name="DocumentID">
    					<xsl:value-of select="/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/*:DocumentID/text()"/>
    				</xsl:element>
    			</xsl:if>
    			<xsl:if test="/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/*:RawData">
    				<xsl:element name="RawData">
    					<xsl:value-of select="/*:SyncFRRAWDATA/*:DataArea/*:FRRAWDATA/*:RawData/text()"/>
    				</xsl:element>
    			</xsl:if>
    		</xsl:element>
    		<xsl:value-of select="/*:SyncFRRAWDATA/*:DataArea/text()"/>
    	</xsl:element>
    </xsl:if>
    
  7. Click on Validate to check errors. 
  8. Test the XSLT to make sure we can see the File name with the extension. 


Dec 12, 2022

How to configure Postman to call Infor ION API

In this post, I'm going to explain the step-by-step approach to configuring the popular development tool Postman to test/execute Infor ION API. Even though this is straightforward, better to have a document to do quickly whenever you need it, to save time. 

As you know Infor ION APIs use OAuth2.0 (The OAuth 2.0 Authorization Framework) for authorization and Bearer Tokens which are the predominant type of access token.

Configuration from the Infor ION API

Create Postman as Authorized Apps in Infor ION.

Note: To complete the below steps you must be in the IONAPI-Administrator security role.
  1. Goto Infor ION API -> Authorized Apps
  2. Click on  + icon on the left top (Add New App)


  3. Give it a name, description select type as "Backend Service", then Save 

  4. After save, we can see additional information like, Client ID, Secret, Associated Events etc. 
  5. Click on the Download Credentials button (next to the Secret text box).
  6. In the Download Credentials Dialog, toggle on the Create Service Account.
  7. Select a user from the Full Name text box. This is required because we are configuring this as Backend service and need impersonation. Or You will get Illegal impersonation attempt (error: 163) error. 


  8. A file will be created(eg. PostmanClient.ionapi) and downloaded to your local Download folder. After you download, store these credentials securely. 
If you open the file, can see it is a JSON file and contains several properties.  Infor API Admin guide defines those properties as follows;
  
PropertyDescription
tiTenant identifier
cnApplication name
ciClientID that must be passed to the Authorization
csServerClient Secret to pass to the Authorization Server
iuBase URL for calling the ION API Gateway for this tenant/environment
puBase URL for calling the authorization server for this tenant/environment
oaPath to append to "pu" to create the Authorization URL
otPath to append to "pu" to create the Access Token URL
orPath to append to "pu" to revoke a previously obtained token
SAAKService Account Access Key
SASKService Account Secret Key

Configuration in Postman

  1. On the Authorization tab in the Postman, select Type as OAuth 2.0


  2. On the right-hand side , under the Configure New Token-> Configuration Options, enter parameter values as below.  
  3. Token NameName it as you want
    Grand TypePassword Credentials
    Access Token URL value of "pu"+"ot" from the .ionapi file
    Client IDvalue of "ci" from the .ionapi file
    Client Secretvalue of "cs" from the .ionapi file
    Usernamevalue of "saak" from the .ionapi file
    Passwordvalue of "sask" from the .ionapi file
    Scope[blank]
    Client AuthenticationSend as Basic Auth header

  4. Click on the Get New Access Token button. 
  5. You will the success mesage like this.
  6. In the next window, click on the Use Token
  7. Now Postman client is ready to call Infor ION API.



Jan 28, 2021

How to remove the Header row of a CSV file (Infor MEC/IEC)

Integrating CSV files with MEC is a very old but frequently used method. A CSV file may have a header and the data as in the below format. If we use this file (converting FLAT To XML) directly as it is, it will feed the data with the header. In this post, I'm going to share one of the possible methods to get rid of the CSV header.

FACI,PRDCT,MO,OPERNO,MANUQTY
A01,Y3003-Y01-010,3000018,10,2
A01,Y3003-Y01-010,3000018,50,2

Using the Flat file definition tool I will define the following structure.


Then I will get the following XML message into the MEC process.

<WORKBOOK>
	<ManuObj>
		<FACI>FACI</FACI>
		<PRDCT>Product</PRDCT>
		<MO>MO</MO>
		<OPRNO>Operation No</OPRNO>
		<MANUQTY>ManuQty</MANUQTY>
	</ManuObj>
	<ManuObj>
		<FACI>A01</FACI>
		<PRDCT>Y3001-Y02-016</PRDCT>
		<MO>0003000164</MO>
		<OPRNO>0010</OPRNO>
		<MANUQTY>1</MANUQTY>
	</ManuObj>
	<ManuObj>
		<FACI>A01</FACI>
		<PRDCT>Y3001-Y02-016</PRDCT>
		<MO>0003000164</MO>
		<OPRNO>0040</OPRNO>
		<MANUQTY>1</MANUQTY>
	</ManuObj>
</WORKBOOK>

You can notice the XML message contains the header. To get rid of the header one method is;
  1. Read all the XML elements into a Java array in the Mapper.
  2. Then process the data from the first position of the Array (remember 0th position will have the header segment).
But here I will show you a different method that is using XSLT transformation. Very easy.

Steps are:

  1.  Define the XLST definition. You can reuse this definition with two small modifications. Change the "WORKBOOK" value in <xsl:element name="WORKBOOK"> to the root element of your XML message. The change the xpath of  <xsl:copy-of select=""/> to match your respetive xpath.

    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    version="1.0">
    	<xsl:output indent="yes"/>
    	<xsl:template match="/">
    		<xsl:element name="WORKBOOK">
    			<xsl:copy-of select="WORKBOOK/ManuObj[position()>1]"/>
    		</xsl:element>
    	</xsl:template>
    </xsl:stylesheet>
    
  2. Go to the Partner Admin, Manage->XSLT Definitions..,  create the new XSLT Definition.
  3. Go the Process tab in your Partner Admin. Right click and select XSL Transform.

  4. Select the XSLT definition you created in Step 2.


  5. Make sure XSL Transform process step will be after the FLAT To XML process step in the process tab and Save. (You can add XML Transform after the XSL Transform to implement the logic, transformation you want).




  6. Test the process and see messages in Admin page. 

     Happy Coding.

Dec 28, 2020

What are the challenges in Virtual leadership?

Managing a team in person is a challenge. Now, managers around the world are confronted with a new dimension that is virtual team management. For the current COVID-19 pandemic, we can't expect it to be only for the short term, but for many of us (such as IT), virtual work will be the future. Major tech giants are embracing remote work.

Whether we are managing the team virtually short-term or long-term, it is presenting a set of interesting challenges in addition to the classic obstacles we have. The most difficult part, but it is important, is to keep the team in touch with their way.

Here are the challenges I have experienced in my virtual leadership career.

Communication

When we are physically present, communication is very easy. We can see the body language, read non-verbal communication, and other natural observations. However in the virtual space with efficient communication is the most difficult part.

We have so many technical tools available to us, but the most important is to inculcate a culture of communication. As managers and team leaders, we should begin by providing daily updates, check-ins with your team, and communicating on a case-by-case basis. It's a little cumbersome at first, but eventually, the team follows us.

Productivity

With virtual teams, it is very to hard see who is working who is not. Setting smaller goals, the short deadlines will help you to manage them to a certain extent. The use of tracking tools (JIRA, Planner, Trello, etc.) will assist in keeping the team on track.

Trust

When it comes to trust it is two folds. To demonstrate trust and earn trust. A strong communication culture will build trust within the team. We must listen more and engage in frank conversations. Showing empathy, especially in today's COVID context, can build a strong relationship with the team.

Emotional Stability

Naturally, People are looking for social interaction, interaction with their Family. In this pandemic situation specially, lack of such interaction and working long hours at home may adversely affect mental health and emotions. Emotional stability is strongly related to productivity and efficiency.

Things we may do,

  • Contributes to work-life balance.
  • Do not continue to stretch the time they have used for evening exercise or commuting.
  • Have a flexible schedule. Also, a few short pauses between work.
  • Take a moment to recognize and appreciate their long hours of work and achievement.

Sep 1, 2019

Moving to The Cloud

Infor M3 has taken the approach to move into the cloud by releasing  major version of M3 Cloud Edition (M3 CE) in early 2018. With this release Infor is encouraging customers to move as well, highlighting the key benefits that they are gaining.

M3 Big Picture
M3 Big Picture (courtesy  of Infor)

Key Highlights


  • Single Version 
    • You will always have one version across your environments. 
    • Incremental developments.
    • Continuous delivery of new features. 
    • To stay "Super Current".
  • Automatic Updates
    • No more upgrades. You will receive recent updates automatically to make sure the system is up-to-date. 
    • Controlled through Toggles and Parameters not to have impact on existing business processes.  
  • Scalable
    • As it is in the cloud, by nature, we don't have to worry about the load of the system. We can scale the system to fit into out load. 
  • Secure
    • Infor is making sure the security factor by implementing 3 SD concepts. 
    • Secure by Default.
    • Secure by Design. 
    • Secure by Deployment.
  • Extensible 
    • Ability to extends existing feature to suit your needs. 
Having said that, practically you will have challenges when providing the solution. For an example, you know the relationship between the hammer and the nail. depending on size of the nail, you have to choose the type or size of the hammer. Like wise, our solutions has to be adjusted accordingly the Cloud concepts. 

However, as the time moves on,  Infor M3 CE will mature to the level where these challenges become insignificant.  

Single Tenant Vs Multi Tenant

In the Cloud, we are talking about Multi-Tenancy.  In short, Multi Tenant is, the System is shared with multiple organizations(tenants), as shown in below diagram.

Single-Tenant Vs Multi-Tenan
Single-Tenant Vs Multi-Tenant (Courtesy of  https://www.peoplefluent.com/blog/learning/single-tenant-lms-vs-multi-tenant-lms-security)
For M3 same multi-tenant (MT) principle applies and separation is based on the Tenant ID. The individual organization will have separate Tenant ID, which make sure no overlapping will happens with other tenants.

M3 Solutions for The Cloud

As we are more used to providing solution for M3 On-prem or Single Tenant, working with MT environment may be a paradigm shift. Because, We have to work with the certain constrains, selective technology and tools. 

For an example, we cannot run SQL commands, we used to execute in On-prem version, in MT environment. For me it is hard to work without SQL (similar to the feeling that my both hands were tied and ask to develop) , but due to this constrain I have to think about differently.  

What is next

M3 world is changing and Infor is investing in M3.  We should be ready.

I'm planning publish few posts with regards to M3 MT technical solution in future.


Aug 31, 2019

Breaking the Silence

After so many silence months, started to write.....!

It is almost  one and half year since my last post. During the time I was in a 13.4 upgrade project. In this project I worked with Info and working as Infor Technical Project Manager.

The project went  on exactly one year (plus two months PGL) and it was a upgrade from M3 10.1 to 13.4. This client owned the largest M3 data base ever. It was 13.5 TB in size. Back end is running on IBM iSeries sever.

Additionally they had

  1. 200+ MAK Mods.
  2. 220+ Jscripts.
  3. 220+ M3 Web Services.
  4. 640+ Miciost SQL Server Reports.
  5. 55+ External Interfaces.
  6. 40+ StreamServe modifications.
  7. 10 MEC developments.
My responsibilities were make sure all the above developments upgrades to M3 13.4 and planning the UAT.

During the peek of upgrade there were 20 Technical Consultants from 3 different regions (Egypt, Philippine and Sri Lanka).

It was quite challenging and but interesting project. 

What next:

Currently I'm over seeing a M3 multi-tenant (M3 MT) implementation, and hoping to write posts about M3 MT concepts and technologies. 
 

MEC: How to Set Message Counter for EDI Message

When you sending/creating EDI messages it is necessary to include unique message interchange number. This is to ensure each message that we ...