Showing posts with label M3. Show all posts
Showing posts with label M3. Show all posts

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.

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. 
 

Apr 1, 2018

Control Properties in MEC

When we want to keep some parameters in the MEC we often use “.properties” file.  But alternatively we also can use Control properties in the Partner Administrator.

image


The control properties can be accessed from the MEC mapper using the following code.


String strVariable = getManifestInfo("agr:outputFolderPath");


Hint:

You can add control properties to the individual “Agreement” or to the “Group”.


Depending on the situation, we can choose the suitable method to use. Below comparison will help to choose appropriate method.


Comparison:


Control PropertiesProperties File
FormatKey,Value formatKey, Value format
DeploymentWill be ported to the environment with import/export function.

Possibility to miss the file to copy unless it is documented properly.

Code

Very easy. No explicit initiation of objects.

One line required to access the variable. 

Not very easy. Need to read the file and initiate property object. Require few extra coding to access first variable.
Usage Properties to be used in agreement or group level.

Properties to be used as common to share across all the agreements.

E.g. data base connections,

Sep 4, 2017

Infor M3 TechEd 2017

InforTechEd2017_M3_Stockholm_RegOnline_3250x521
It is so exciting to be here in Sweden & to participate 2nd Infor M3 TechEd event. In the keynote session today (by Ole Ramsussen – Infor M3 Product Global Director) following key points were mentioned.
  1. Infor Xi platform  
    1. There are 3 extensibility levels for end users (HomePages), consultants(App Builder) & developers(Mongoose).
  2. 13.4 highlights
    1. Full support of Xi platform
    2. Available both on-prem & cloud
    3. Extensibility improvements
    4. 288 performance improvements
    5. Factory Track as warehouse mobility solution
    6. Soho design
  3. Cloud strategy 
    1. Multi tenant ColudSuites 11.1 M3 CE planned to release in 2018 for F&B , Distribution enterprise, Fashion, Equipment & chemicals
    2. M3 Cloud Edition 19.1 panned to release in 2019.
  4. Infor M3 roadmap
    1. Utilize the power of Xi platform
    2. Remove tech legacy
    3. Cloud strategy as above point #3
    4. Strategically below components are going away.
      1. IPA –> ION Workflow
      2. LBI –> InforBI/Birst
      3. ISO –> M3 H5 client/Mingle
      4. Mashup Designer –> Infor App Builder
  5. Infor OS : Infor Operating Services
    1. A solution to fully integrate industry specific solutions with mobile first design  & science driven analytics.
    2. Components incudes: UX, Collaboration, Extensibility, Security, Process integration, API gateway , Analytics, documents & reporting.
  6. M3 Core Extensibility Framework
  7. In Future, What will happen to the OutFile, & MEC
    1. OutFile will completely be replaced with configurable XML file.
    2. MEC will only becomes connector to M3. ION will take over all the integrations, including EDI, integration with other systems etc.
  8. M3 Solution stack.
    Below diagram depicts it.
    IMG_0580

Aug 17, 2017

Access APIs , When you don’t have MI Test

When you want to run an API, MITest (external tool or inside ISO Client ) is a handy tool. But if you have them, for an example in H5 client you cannot call MITEST, still, there is a way to an API. You need to have LCM access or server view access.

Steps:

Following steps were captured in LCM.
  1. Go to the Topology View in Infor ION Grid Management pages and find M3ApiWS.  The expand it.
    image
  2. Then Click on MI-WS. Then click on Global Management Pages (M3-API-WS). In the next
    image
  3. You will get the page where you can select Program, Transaction & run.
    image

Dec 29, 2016

Browse Control for ISO SDK App–Part 1

Background

In a conventional M3 Program, data in some fields can be searched by pressing the F4 key or Browse function.

image

Using MAK (M3 Adaptation Kit – the framework to develop M3 programs), it is just mater of overriding  PxPMT() to enable this Browse feature. However, in SDK development, we don’t have that option. Neither a function to override nor control to re-use. 

Instead, using WPF & C# we have to create it from the scratch. I did this for my current SDK project and going to share with SDK development community.

There is an article in Potato IT blog (https://potatoit.kiwi/2013/09/19/smart-office-sdk-first-project-part-6-the-browse-control/).  This was a good starting point for me. However, since I have MAK background, I wanted to implement similar way, that PxPMT() method does (below is an excerpt of  M3 Browse )

if (IN62) {
   if (DSP.hasFocus("W1TOOL")) {
      this.PXFILE.moveLeft("CSYTAB00");
      this.PXMBR.clear();
      this.PXOPT = '1';
      this.PXKVA1.moveLeft(LDAZD.CONO, 3);
      this.PXKTY1.move("EQ");
      this.PXKTY2.move("EQ");
      this.PXKVA3.moveLeft("TOOT");
      this.PXKTY3.move("EQ");
      this.PXKVA4.moveLeft(DSP.W2TOOT);
      this.PXFLD1.moveLeftPad("CTSTKY");
      this.PXFLD2.moveLeftPad("CTTX15");
      this.PXF11 = '1';
      COMF04();
....

That is, the client (developer) should not worry about the data binding, extraction logic etc. Instead, only specify Logical file, it’s keys with values, columns to be displayed, etc.

Similar way, my SDK app should be called without any data extraction logic etc.  (like below code).

if (e.Key == Key.F4)
{
	IInstanceHost child = theHost.CreateDialog();

	BrowseControl bc = new BrowseControl(child);
	bc.Field = "BANO";
	bc.AlternativeField = "";
	bc.BrowseVariant = "";
	bc.KeyFields = new String[] { "LMCONO","LMITNO","LMBANO" };
	bc.KeyValues = new String[] { "0", "" };
	bc.SearchText = txtUser.Text;
	//child.HostContent = bc;
	if (bc.ShowDialog().Value)
	{
		txtUser.Text = bc.SearchText;
	}
	
	
}
        

 

Solution

imageIn my solution, I’ve used CRS990MI program and its transactions to encapsulate data extraction from the developer. This MI Program will works based on defined browse definitions in MNS185 program.

The Transactions InitBrowse & LstBrowse are actually doing the work. You will understand this when we talk about the C#/WPF code. But for now, for your quick information, I summarized it as below.

  1. InitBrowse – Returns the browse definition of the search field with the columns headings. As in the above code , if you are going to search BANO (lot number ) , first we want to know what are the keys , key positions in order to get the BANO value. That is CONO (company) & ITNO(Item Number).  Likewise, InitBrowse API provides us these metadata.
  2. LstBrowse – Gets data for the given search field (BANO) along with meta information from InitBrowse API.

In the next post (Part 2) I’m going to explain the C#/WPF Code.

Dec 6, 2016

Read Profile Settings from ISO SDK App

Background

Accessing  Web Services, external data sources from a SDK app is common like other technologies do. To store these access points, parameters etc. can be done in various ways. In a .net application common scenario is store then in the .config file or setting file. Why we want to do like this is, avoid hassles of deployment. When ISO SDK application is considered, we can achieve same thing by using .manifest file.

Problem

I need to get database connection string from the M3 profile.

Solution

  1. Using Profile Editor, add a setting to store database connection string. For this example, I’m going to use setting name as “DbConnection”.
    image
  2. Use the following code to extract above information.
    txtDBConStr.Text= ApplicationServices.SystemProfile.GetProperty("M3", "SDKApp", "DbConnection");
    

Sep 5, 2016

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 are sending is unique.

In EANCOM/EDIFACT

Element 0020 of UNB segment:
UNB+UNOA:4+xxxxxxx:14+xxxxxx+20160905:0831+00000000000057+    +ORDERS++1'

In X12

Element ISA13 of ISA segment:
ISA*00* *00* *ZZ*167520391 *ZZ*39319445 *991201*1248*U*00200*000000001*0*P*>

This number need to be persistent. The middleware we are using for EDI transformation should cater this requirement. I used MS-BizTalk  Server for two EDI projects, which cater the same. (just by a configuration)

M3 e-Collaborator (MEC) does the same thing in a different way. In the MEC database (e.g. MEC_Storage_TST) has a table (UTIL_Message_Counters) for this purpose.

Table structure is like this:

image

Note 1: To be able to use this class you must first create this table (use the SQL script MeC_Utilities_db_script.sql).

You don’t have to enter a record or write code to save/get data. Instead, you have to write 2 lines of java code in your mapper to get the Value. ( Unique Message Interchange Number)

Note 2: Values in Key fields are case sensitive.

Steps:

  1. Initialize the message counter for the map.
    myMap is reference to the Map.
    MessageCounter mc = new MessageCounter(myMap);
    
  2. Get a new counter value using one of 3 overloads

    /*
    * getNewValue(String counterId)
    * counterID = Choose suitable name (max 20 chars)
    *
    * Returns new counter for the map
    */
     String newVal = mc.getNewValue("MsgCounter");
    

    Or
    /*
    * getNewValue(String counterId, int keyFields);
    * counterID = Choose suitable name (max 20 chars)
    *
    * Returns new counter for the map AND parnter ID
    */
     String newVal = mc.getNewValue("MsgCounter",mc.MAP_NAME + mc.PARTNER_ID);
    

    Or
    /*
    * getNewValue(String counterId, int keyFields, String cono, String divi, String date) 
    * counterID = Choose suitable name (max 20 chars)
    *
    * Returns new counter for the map AND parnter ID AND cono AND divi AND date.
    * you can omit cono and divi by setting null 
    * below code resets the counter for each day (format CCYYMMDD).
    */
     String newVal = mc.getNewValue("MsgCounter",mc.MAP_NAME + mc.PARTNER_ID, null, null, DATE);
    

If, everything OK, you will return the new counter other wise –1.

If you look at the table (UTIL_Message_Counters) , a record has been added and value will be incremented each time when getNewValue() is called.

image

Jul 22, 2016

MEC: Call Web Service in a cleaner way

Background

In the MEC mapper, calling a web service is a general scenario. There are few ways to do it. One method is build the SOAP request Payload in a string and submit via POST method. (as below code snippet)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
java.net.URL obj = new java.net.URL(iURL);
java.net.HttpURLConnection con = (java.net.HttpURLConnection) obj.openConnection();

con.setRequestMethod("POST");
con.setRequestProperty ("Content-Type","text/xml");
con.setRequestProperty ("Accept","text/xml");

String itemStr = "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
			+ "<soap:Body>"
			+ "<GetItem xmlns=\"http://tempuri.org/\">"
			+ "<itemNumber>KelumG</itemNumber>"
			+ "</GetItem>"
			+ "</soap:Body></soap:Envelope>";		
con.setDoOutput(true);
java.io.DataOutputStream wr = new java.io.DataOutputStream(con.getOutputStream());
wr.writeBytes(itemStr);
wr.flush();
wr.close();

This is very primitive and takes lot of times of developer. Also it hinders the code readability & maintainability.

From this post I’m going to tell you a cleaner way, rather simple way. We, programmers, know easy way to call web service is using Proxy objects/classes.

Proxy objects are type of representations of the web service for the programming language we are using.

Solution

  1. Create Proxy class from the web service.
    The service I’m using for this post is http://localhost:4599/HelloService.asmx?wsdl  (refer below P.S. section). There are few tools to create proxy classes in java (wsimport, axis2, java2wsdl etc. ). Here I’m using wsimport with following argument.

    -d KG : store generated class into KG folder

    wsimport -d KG http://localhost:4599/HelloService.asmx?wsdl command to create proxy classes.

    image
  2. Create jar file for the generated files.
    Using command line: https://docs.oracle.com/javase/tutorial/deployment/jar/build.html
    Using Eclipse: http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-33.htm

    Note:
    There are limitations for customer JARs. ( Page # 85, Business Document Mapper, Version 11.4.3.0)
    Package
    To use a Java class from a Custom JAR in a mapping, the class has to use a package. The default package, that is no package, will not work. Note that you have to enter this package for all references to the custom class in the code for Java functions within a mapping.

    Javadoc, encoding
    If you want to get Javadoc in the mapping Java editor when using a Java class from a Custom JAR, the Java source code, that is, the .java file, must be included in the Custom JAR. The .java file must use the character encoding UTF-16, otherwise no Javadoc will be shown in the mapper. This is because the files for the mapping use that encoding.
  3. In the map add reference to this custom JAR file.
    image
  4. Simply call the service just like a method.
    1
    2
    3
    4
    5
    6
    private void callWebSvc() throws Throwable {
    	// Please implement me
    	org.tempuri.HelloService hs = new org.tempuri.HelloService(new java.net.URL(iUrl));
    	org.tempuri.HelloServiceSoap hsoap= hs.getHelloServiceSoap();
    	oItem = hsoap.getItem(iItem);
    }
    


P.S:

For this post I have created a mock web service (.asmx ) using C# and hosted in IIS. Sample code as below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
namespace WebServiceApp
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class HelloService : System.Web.Services.WebService
    {
        [WebMethod]
        public string GetItem(string itemNumber)
        {
            return new ItemService().GetItem(itemNumber);
        }
    }

    public class ItemService
    {
        public string GetItem(string itno)
        {
            return string.Format("Item {0}",itno);
        }
    }

image

Jun 30, 2016

MEC: Change out file name dynamically

Background

Manipulating the out file name generated by the middle ware is a common scenario. By default file names are generated with a GUID (13a7a838-a706-4273-b190-9d58a79bf04e). It is more practical if the file name is human readable.

Solution

  1. In the Mapper add User function to change the file name. (Note: this function should the last function in the map)
    image
  2. Add similar code to the function. This code set file name to the manifest information of the map.
    1
    2
    3
    4
    5
    6
    String date = new java.text.SimpleDateFormat("yyMMdd").format(new java.util.GregorianCalendar().getTime());
    String time = new java.text.SimpleDateFormat("HHmmss").format(new java.util.GregorianCalendar().getTime());
    
    String fileName  = "EDI_832_OUT_"+ date+time;
    
    setManifestInfo("map:FileName", fileName);
    
  3. Then, configure the relevant Send (in partner agreement) object to take the given file name.
    image
  4. And you are done. !!!

Jun 5, 2016

Development with MEC older version

Presently I’m working with a MEC older version (Ver 9.1).

This version is not part of an Eclipse plugin. It’s a standalone application that use for MEC mapper development. Very tedious to work with.

MEC Mapper different than the Eclipse version. But Flat file definition tool, it’s manager & the partner agreement tool looks the same.

Mapping manger looks like this.

Mapping Manger

  1. Load button to retrieve all the existing mappings.
  2. New button to create a new one
  3. Generate & Publish buttons to compile the map & deploy to the server
  4. Import & export button: Once you create a map, you cannot change it. Instead, import existing version and export with a new changes and new version number

Mapper looks like this.

Mapper

  1. Mapping flow is organized in “tree-view” like structure.
  2. You can generate the map from this screen. But to publish you have to close this and go back to Mapping manger & publish.
  3. Two options to save (to DB & to File)
  4. Validate map option also available on this screen.

Mar 28, 2016

ISO SDK : Unkown Error

Problem

I’ve got following error when I try to testing after configuring ISO SDK.
ISO_ERROR_Unknown

Solution

When you configure “SERVER” path in the registry entry  (HKEY_CURRENT_USER\Software\Lawson\MangoDev)  make sure correct path of LSO server path is set.  

How to get correct LSO PATH?

  1. Go to the log viewer of the LSO by clicking
    LogView
  2. Then select following entry & copy LSO server path
    LSOServerPath

What I got wrong?

I’ve set LSO client installation path (that can be access through Web browser) to the “Server” registry entry.

Jan 26, 2016

How MEC Message Flow Work

Like any other middle-ware application MEC has unique architectural components. Below diagram depicts them.

Sol_Consept

  1. Inbound message will be consumed by the MEC and goes through detection rules defined in the partner agreement. Detection is either channel or XML detection. If inbound message is a flat file, channel detection will be used.
    For XML detection, inbound message must have meta data to configure the detection.

    Note below payload has RequestHeader as meta data.
    <ItemInfo>
    <RequestHeader>
    <environment>A</environment>
    <program>B</program>
    <company>A</company>
    </RequestHeader>
    <RequestBody>
    <!-- Items goes here-->
    </RequestBody>
    </ItemInfo>



    detection configuration is:
    XMLDetect
    • Detection information  & rules are saved in MEC storage. MEC will evaluate all saved detections (in a order) until its find the correct one.
  2. Once the detection has passed, process the message based on the defined processing steps. (in the given order)
    mec_proc
    • These steps are also saved on the MEC Storage
  3. Generate the output message.

Jan 18, 2016

M3 Integrations (MEC)

I was able to refresh my knowledge of   M3 integration with MEC (M3 E-collaborator).  MEC is a middle-ware specifically design for M3 integration development. Over the past few years it has been evolved.

MEC has following components:
  1. Flat-File definition tool -  Using this tool you can create XML schema file. Also it can generate sample Flat File & XML file for the schema. 
  2. Flat-File Repository manger - Is the repository for the local and server definitions. 
  3. Mapper - Use to transform data to a output file or update M3 directly for the given input schema and the defined logic. It has certain functions to perform this level of transformation.  (Later, with my next posts I'm hopping to reveal them). If you are familiar with Ms-BizTalk server, it's orchestration and MEC mapper is  similar in behavior. 
  4. Partner Admin tool - Use to configure agreement for the integration such as, 
  • Detection
  • Processes
  • Error handling
  • and other admin tasks (e.g. communication, web-service definitions, EventHub subscriptions etc.) 
Its mapper look as follows, 

MEC Mapper
MEC Mapper


Feb 11, 2013

Convert a Double to String : M3

Since M3 java code is similar to RPG and use MvxString rather than String, here it is the code to convert/format numeric value to alpha value in M3.

   1:  this.PXNUM = dSUM;
   2:  this.PXALPH.clear();
   3:  SRCOMNUM.COMNUM();
   4:  WQT[tempIdx].moveRight(this.PXALPH);



In line number:


1. assign double value which is to be converted.
2. clear any previous value of PXALPH.
3. actual conversion . The SRCCOMNUM is an object of cSRCOMNUM class declared in mvx.app.util
4. gets converted alphanumeric value.


Let, dSUM= 38.05580 and if we want



  • to display dSUM with 2 decimal:

   1:  this.PXNUM = dSUM; 
   2:  this.PXALPH.clear();   
   3:  this.PXDCCD = 2; // setting number of decimals.
   4:  SRCOMNUM.COMNUM(); 
   5:  WQT[tempIdx].moveRight(this.PXALPH);




Output> 38.05






  • to display negative value: Here we have a option, to which character to be used for negative representations. (i.e. –38.05, (38.55), 38.05- etc)

   1:  this.PXNUM = dSUM; 
   2:  this.PXALPH.clear();   
   3:  this.PXDCCD = 2; 
   4:  SRCOMNUM.PXPNVB='('; // Left character if negative
   5:  SRCOMNUM.PXPNVA=')'; // Right character if negative
   6:  SRCOMNUM.COMNUM(); 
   7:  WQT[tempIdx].moveRight(this.PXALPH);






Output> (38.05)

Jan 24, 2013

Move to Movex (M3)

From 2012-12-10, I’ve engaged with M3 , development. Now, I’m playing Senior Technical Lead role.  But I’m still interesting .net development which is my core strength.

What is M3

It is an ERP (Enterprise Resource Planning) solution for, specially, the fashion industry known as Movex. Originally it was developed by Intentia, a Sweden company and somewhere around 2008 it was acquired by Lawson. In late 2012, Infor1 has acquired M3.

Technology

To discuss about the technology, it will take pages. In this post, I’m only going to talks about briefly.

  1. M3BE (M3 Business Engine) is the core component in M3. It is Java. It’s encapsulates ERP functionalities and Data Access Layer. Main data base is DB2, but new versions supports multiple data sources, including MS SQL server.
  2. ISO (Infor Smart Office)- is the front end for the users and client based application. It is WPF  (Microsoft Presentation Foundation) client application.

ISOFigure 1: Infor Smart Office

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 ...