Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - umang@guixt.com

Pages: 1 [2] 3
16
This article is applicable to
Liquid UI for Android Version : 4.0.13.0 and BELOW

Explanation of SY9 Enterprise Production Edition License

Synactive's perpetual license allows the Licensee to use the software for as long as the Licensee/end user complies with all terms of the license agreement. The end user is required to pay for maintenance annually. As long as the user pays maintenance, they have a right to upgrade to any version of the software that is released during the maintenance period.

Licensee must pay Synactive's then annual fee in order to continue Product Technical Support and Update Rights for the Software, its versions and its documentation.
Not paying maintenance will result in loss of rights to any subsequent upgrade versions, (including online store downloads) and loss of any Synactive support. If there is a maintenance lapse, returning to maintenance in any given year will require payment for that year and a negotiated amount for each of the years of the maintenance lapse including penalties.

Upon paying maintenance, a new SY9 license will be generated with the upgrade validity/maintenance to date extended based on the number of years of paid maintenance.

Terminology of SY9 License Document

For the purpose of SY9 Perpetual production Licenses, Valid Till/Expires in date specified means Upgrade Validity/Maintenance To date, and is used interchangeably in any type of communication.

Please refer to attached document for additional details

17
The requirement is to display/change screen title during long function processing, when automating multiple screens

When the processing time exceeds few seconds, users becomes impatient, as well have the perception that the system is slow.
It makes sense in these scenarios, to indicate clearly that the system is carrying out substantial amount of task and therefore user needs to wait for the action to be completed.

With the use of title command, a suitable message can be displayed to the user during auto processing.
The title can be changed multiple times within each onscreen block and/or steps for a long running function.

Example

function testFunction() {

onscreen 'SAPLSMTR_NAVIGATION.0100'
   title("Reading Notification Data.. Please Wait..."
   enter('/niw23');

onscreen 'SAPLIQS0.0100'
   title("Navigation to Notification Screen.. Please Wait..."
   set('F[Notification]','10001291');
   enter();

}


18
The requirement is to call the transaction and skip the initial screen by setting fixed values into the initial screen of the transaction
This is possible with a function attached to a pushbutton.
But in simple cases there is an alternate method, by using a SAP GUI built-in feature which allows specifying field values as part of the OK code

Examples:

1. Executes in same session
pushbutton([TOOLBAR],'Create Work Order (IW31)','/*IW31 AUFPAR-PM_AUFART=PM02; CAUFVD-IWERK=1000');

2. Executes in a new session
pushbutton([TOOLBAR],'Create Work Order (IW31)','/O*IW31 AUFPAR-PM_AUFART=PM02; CAUFVD-IWERK=1000');


19
Examples:
pushbutton([TOOLBAR], "@0V@Payment Cards (Ctrl+Shift+F3)", "=KRPL", "Ctrl+Shift+F3");
pushbutton([TOOLBAR], "@BY@Carry Forward (Shift+F5)", '?', "Shift+f5", { "process":va01_headerCarryForward});
pushbutton([TOOLBAR], "@0V@Payment Cards (Ctrl+F4)", "=KRPL", "Ctrl+F4");

The specified FKey will only be assigned if it is available for assignment on the screen.  If the FKey has already been taken up by SAP, then SAP will automatically assign the
next available FKey when pushbuttons are placed on TOOLBAR

22
When a button is pressed on the screen, the requirement is to suppress the user action, read values from the screen
based on the values read from the screen, either stay on the screen or execute a user action within a function.

This way the user entered value can first be captured, checked followed by user action based on desired logic.

Below is an example for VA01 transaction (Overview Screen)

When user clicks the back or save button, in this scenario, we need to first check what user has entered in the delivery block field.
If user has entered the value '01' then we want the user to stay on the same screen and display a message to the user to select a different value.
If user has entered any other value, then we want to execute the user action in the function.  In this example either Back ('/3') or Save ('/11')

Sample script for the scenario as per below
----------------------------------------------------------------------------------------------------------------------------------------------
Script File Name: SAPMV45A.E4001.sjs
----------------------------------------------------------------------------------------------------------------------------------------------
// Back Button is clicked on the UI
// In below case 'Back' action is suppressed and replaced with '?' which is equivalent to screen refresh
onUIEvents['/3']={'fcode':'?','process':executeFunction,'using':{'l_code':'/3'}};
// Save Button is clicked on the UI
// In below case 'Save' action is suppressed and replaced with '?' which is equivalent to screen refresh
onUIEvents['/11']={'fcode':'?','process':executeFunction,'using':{'l_code':'/11'}};


function executeFunction(param) {
   
   onscreen 'SAPMV45A.4001'
      set('V[z_va01_deliveryblock]','&F[Delivery block]');
      // If Delivery Block selected is 01, then stay on SAPMV45A.4001 screen and do not perform
      // any additional action in the function.  Exit Function
      // [Change is logic as per your use case and requirements]
      if(z_va01_deliveryblock=='01') {
         message('E: Please select different delivery block');
         enter('?')
         goto SCRIPT_END;
      }
      // Execute the function as passed to the function.
      // In this example either '/3' [Back] or '/11' [Save]
      enter(param.l_code);
   
   SCRIPT_END:;
}

23
Yes.  Please refer to below article which outlines the details.
http://www.guixt.com/forum/index.php?topic=163.0

24
Authentication Scenario
1.   User enter domain credentials on Liquid UI for iOS/Android Native SAP logon screen
2.   Liquid UI Server receives the credential information and passes the credential to Active Directory which provides Kerberos security token to Liquid UI Server
3.   Liquid UI Server forwards the Kerberos token to the system. The Kerberos token is validated on the SAP Application Server (ABAP), and user is logged into SAP ECC.

Pre-Requisites

•   Valid Windows Domain Login Credentials
•   Kerberos Configuration on SAP ECC (Transaction: RZ10)
•   Liquid UI Server v3.5.549.0 and later
o   Liquid UI Server should be on the DOMAIN
o   Kerberos DLL, distributed as part of Liquid UI Server installation

Liquid UI Server Configuration
sapproxy.ini - configuration file
#Configuration for Unified Login based on Windows Domain Credentials
[Proxy1]
ListenPort = 3210
TargetServer = SAPSERVER
TargetServerPort = 3200
GuiXT = 10
SNCName=sidadm@DOMAIN


25
Environment:
Liquid UI Server Version: 3.5.538.0 and below

Issue:
Old SAPGUI session locked sporadically when opening a new session.

Scenario where behavior is exposed
Use below script on SAP Easy Access Screen (SAPLSMTR_NAVIGATION.E0100.sjs)
clearscreen()
pushbutton([1,1],'Open session overview popup','/0',{'process':openSessionOverview});
pushbutton([4,1],'Open CICO','/ocico',{'process':openCICO});


function openSessionOverview() {
   
   onscreen 'SAPLSMTR_NAVIGATION.0100'
      enter('/o');
}

function openCICO(){
   onscreen 'SAPLCIC0.8100'
      enter("?");
}

When a /o screen is displayed from within the function execution (function openSessionOverview() in above example), discarding the popup, and immediately opening a new session either using the new session icon in SAPGUI
or via pushbutton click causes the old session to hang up


Resolution:
The issue is resolved in Liquid UI Server Version 3.5.539.0 and above.



26
Issue:

Trouble with SAPHTTP functionality via the Liquid UI server.
The symptoms include very long wait times when accessing documents from the DMS
system (e.g. using transaction CV04N to open a document).

Environment:

SAPGUI
Liquid UI Server

Reproducible Scenario:
Easy was to reproduce the issue is via transaction SM59, where a connection test with destination SAPHTTP fails when logged on via LiquidUI server

Resolution
Configure RFC proxy within Liquid UI Server.  See example Below

[Proxy2]
ListenPort = 3300
TargetServer = SAPSERVERNAME
TargetServerPort = 3300
GuiXT = 10


If both DEV/QA are on same Liquid UI Server, with the same RFC ports, then
there will still be an issue, as only the first ListenPort with bind

27
Issue:
Error Message 'Invalid Gui input data: invalid length' in some scenarios with transactions like mi04 on Liquid UI for Windows Mobile connecting thru Liquid UI Server

Environment:
Windows Mobile/CE Handhelds
Liquid UI for Windows CE Mobile
Liquid UI Server

Cause:
Liquid UI for Windows CE Mobile Profile Setting
Misc. Tab
 
Under 'R/3 Screens should display'
Actual screen width - Unchecked
Actual screen height - Unchecked
Pixels wide and Pixels tall are specified

Effect:
This setting will cause 'Invalid GUI input data: invalid length' in some scenarios with transactions like mi04, as shown in below screen shot
 
Resolution
When connecting using Liquid UI Server, below settings are required
 
Under 'R/3 Screens should display'
Actual screen width - Checked
Actual screen height - Checked



28
title('Exontrol Gantt Chart - Powered by Liquid UI');
pushbutton([TOOLBAR],"@2M@Main Menu","/n/d1="+dirMain);

for (a=firstChild;a!=null;a=a.nextSibling){
   a.del();
}


var ganttChart = new ActiveXObject('Exontrol.Gantt');
ganttChart.Columns.Add('Gantt Chart Integration - Powered by Liquid UI');

h1 = ganttChart.Items.AddItem('Task 1');
h2 = ganttChart.Items.AddItem('Task 2');
h3 = ganttChart.Items.AddItem('Milestone 1');

ganttChart.Chart.FirstVisibleDate = '1/1/2016';
ganttChart.Chart.LevelCount = 2;


ganttChart.Items.AddBar(h1,'Task','1/2/2016','1/15/2016');
ganttChart.Items.AddBar(h2,'Task','1/9/2016','1/22/2016');
ganttChart.Items.AddBar(h3,'Milestone','1/22/2016','1/22/2016');

//ganttChart.FirstVisibleDate = '02162016';
//ganttChart.LevelCount = 2;

addToScreen(ganttChart, [1,2], [32,140], "container1");


Note: Above example is for a Gantt Chart OCX Control provided by: http://exontrol.com/exdownload.jsp?product=exgantt

29
The examples demonstrates the ability to embed Windows COM controls within SAPGUI

Liquid UI Scripts

1. User Interface
pushbutton([0,1],"Orders Since","/0" ,{"process":getOrders});
inputfield([0,20],"Date",[0,30],{"name":"z_date","size":"10"});

if (isBlank(Z_SCRN)) {
} else {
   if (Z_SCRN == 'LIST') {
      pushbutton([TOOLBAR],"Start Over","/0" ,{"process":closeOrders});
      box([1,1],[26,62],"&V[z_rowcount] Orders Since: &V[z_date]");

      var listview = new ActiveXObject('COMCTL.ListViewCtrl');
      addToScreen(listview, [2,2], [26,62], "container1");
      listview.View = 3;

      if(listview.ColumnHeaders.Count == 0) {
         listview.ColumnHeaders.Add(1, "colkey1", "Order No");
         listview.ColumnHeaders.Add(2, "colkey2", "PO Date");
         listview.ColumnHeaders.Add(3, "colkey3", "Customer");
         listview.ColumnHeaders.Add(4, "colkey4", "PO Number");
      }

      for (var idx = 0; idx < z_rowcount; idx++) {

         keyid = idx + 1;

         set('V[keynumber]','key&V[idx]'); 
         
         set('V[vbeln]','&V[vbeln_&V[idx]]');
         set('V[bstdk]','&V[bstdk_&V[idx]]');
         set('V[kunnr]','&V[kunnr_&V[idx]]');
         set('V[bstkd]','&V[bstkd_&V[idx]]');

         keyno = parseInt(keyid);
         keynumberjs = keynumber;
         keyvaluevbeln = vbeln;
         keyvaluebstdk = bstdk;
         keyvaluekunnr = kunnr;
         keyvaluebstkd = bstkd;

         listview.ListItems.Add(keyno,keynumberjs, keyvaluevbeln);
         listview.ListItems(keyno).SubItems(1) = keyvaluebstdk;
         listview.ListItems(keyno).SubItems(2) = keyvaluekunnr;
         listview.ListItems(keyno).SubItems(3) = keyvaluebstkd;

      }
   }
}

2. Function to Retrieve data using RFC Call to ABAP function module
function getOrders() {
   var selopt = [];
   var ordersTable = [];

   vmvaa = "VMVAA";
   bstdk = "BSTDK";
   i = "I";
   ge = "GE";
   from = z_date;

   z_queryOption = padString(vmvaa, 30, PADDING_RIGHT, " ");
   z_queryOption += padString(bstdk, 30, PADDING_RIGHT, " ");
   z_queryOption += i;
   z_queryOption += ge;
   z_queryOption += padString(from, 45, PADDING_RIGHT, " ");
   selopt.push(z_queryOption);

   call("Z_S10_SEARCHHELP", {
      "in.SEARCHHELP": "VMVAA", "in.COLUMNS":"VBELN(10),BSTDK(10),KUNNR(10),BSTKD(20)",
      "table.SELOPT": "selopt",
      "table.DATA(width:50)": "ordersTable"
   });

   for (var rowNumber = 0; rowNumber < ordersTable.length; rowNumber++) {
      var result = {
         vbeln: ordersTable[rowNumber].substring(0, 10),
         bstdk: ordersTable[rowNumber].substring(10, 20),
         kunnr: ordersTable[rowNumber].substring(20, 30),
         bstkd: ordersTable[rowNumber].substring(30, 50)
      };
      set("V[vbeln_&V[rowNumber]]", result.vbeln);
      set("V[bstdk_&V[rowNumber]]", result.bstdk);
      set("V[kunnr_&V[rowNumber]]", result.kunnr);
      set("V[bstkd_&V[rowNumber]]", result.bstkd);
   }
    Z_SCRN = 'LIST';
    set('V[z_rowcount]',ordersTable.length);
    return;
}




See attached documents for details

30
Integrating Word Spell Checker, for verifying the text entered within a long text control in SAPGUI using Liquid UI

Liquid UI Script

// Sample User Interface
box([1,0], [12,72], "Spelling Check - MS Word Automation");
textbox([2,1],[11,71],{'name':'sampletext'});
pushbutton([13,0],'@3V@MS Word Spell Check',{'process':spellCheck});

// Sample Function
function spellCheck() {
   var myWord = new ActiveXObject('Word.Application');

   myWord.Caption = "Spell Check";
   myWord.Visible = true;

   var doc = myWord.Documents.Add();
   doc.Activate();
   doc.Content.Text = sampletext;
   doc.CheckSpelling();

   newText = doc.Content.Text;
   doc.Saved = false;
   doc.Close(0);
   doc = null;

   myWord.Quit();
   myWord = null;

   onscreen '*'
      copytext({'fromstring':'newText', 'totext':'sampletext'});
      enter('?');

}

See Attachments for Samples

Pages: 1 [2] 3