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");