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
1
Below code demonstrates the use of powershell to execute a file open dialog for selecting an excel spreadsheet


del("X[IMAGE_CONTAINER]");
//pushbutton([23,42], "Select File - UserAccounts  ",{ "process":selectFileUserAccounts, "size":[2,25]});
//pushbutton([7,42], "Select File - Execute PS1 ",{ "process":selectFilePS1, "size":[2,25]});
//pushbutton([11,42], "Select Folder - Shell.Application",{ "process":selectFolder, "size":[2,25]});
//pushbutton([15,42], "Select File - CommonDialog",{ "process":selectFileCommonDialog, "size":[2,25]});

pushbutton([19,42], "Select File - PowerShell  ", '?', { "process":selectFilePowerShell, "size":[2,25]});

function selectFilePowerShell() {
   onscreen '*'
   println('\n\nExecuting ... selectFilePowerShell() .....\n\n');
   variableX = 'undefined';
   
   var tempOutputFile = "C:\\LiquidUI\\Scripts\\output.txt";           // Temporary file to store the output from the batch script

   executeOpenFileDilaogCommand(tempOutputFile, false);
   
   do {
      println('\n\n.... Inside do while .....\n\n');
      sleep(500);
      openfile(tempOutputFile, {"delimiter":"\n"});
      readfile(tempOutputFile, {"variableX":true});
      closefile(tempOutputFile);
      println("===============");
      println("\nvariableX:"+ variableX + ":\n");
      println("===============");
   } while (variableX == 'undefined');
   


   if(variableX != 'undefined') {
      println('\n\nBefore Removing File .... variableX ... : ' + variableX + '....selectFilePowerShell() .....\n\n');
      removefile(tempOutputFile);
   }
   
   enter('?');

   //Continue with rest of the function.....
}


// Import the necessary Liquid UI functions
function getPowerShellFormsExecutionString(fileAbsolutePathWithName) {
   println('\n\nExecuting ... getPowerShellFormsExecutionString() .....\n\n');
   //return "@echo off\nsetlocal\n\nrem Run the PowerShell command and store the result in a variable\nfor /f \"tokens=* delims=\" %%i in ('powershell -Command \"Add-Type -AssemblyName System.Windows.Forms; $openFileDialog = New-Object System.Windows.Forms.OpenFileDialog; $openFileDialog.InitialDirectory = [Environment]::GetFolderPath('Desktop'); $openFileDialog.Filter = 'All files (*.*)|*.*'; $openFileDialog.Multiselect = $true; if ($openFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $openFileDialog.FileNames -join '|' }\"') do set \"SelectedFiles=%%i\"Display the selected files\nif defined SelectedFiles (\nrem echo Selected files: %SelectedFiles%\necho %SelectedFiles% > " + fileAbsolutePathWithName + " \n) else (\nrem echo No file selected\necho DISMISSEDDIALOG > " + fileAbsolutePathWithName + " \n)\n";
   return "@echo off\nsetlocal\n\nrem Run the PowerShell command and store the result in a variable\nfor /f \"tokens=* delims=\" %%i in ('powershell -Command \"Add-Type -AssemblyName System.Windows.Forms; $openFileDialog = New-Object System.Windows.Forms.OpenFileDialog; $openFileDialog.InitialDirectory = [Environment]::GetFolderPath('Desktop'); $openFileDialog.Filter = 'Excel Files (*.xls;*.xlsx)|*.xls;*.xlsx'; $openFileDialog.Multiselect = $false; if ($openFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { $openFileDialog.FileNames -join '|' }\"') do set \"SelectedFiles=%%i\"Display the selected files\nif defined SelectedFiles (\nrem echo Selected files: %SelectedFiles%\necho %SelectedFiles% > " + fileAbsolutePathWithName + " \n) else (\nrem echo No file selected\necho DISMISSEDDIALOG > " + fileAbsolutePathWithName + " \n)\n";

}


function executeOpenFileDilaogCommand(fileName, remove) {
   println('\n\nExecuting ... executeOpenFileDilaogCommand() .....\n\n');
    //var fileName = "C:\\LiquidUI\\tempCommand.txt";
    var batcName = fileName + "_term.bat";
    // Open the file in write mode, which creates it if it does not exist
    openfile(batcName, {"output":true});

    // Write the command string to the file
    name1 = getPowerShellFormsExecutionString(fileName);
    appendfile(batcName, {"name1":true});

    // Close the file
    closefile(batcName);
    system.ShellExecute(batcName, "", "open", 0);
   
    // Optionally read back the content (uncomment if needed)
    // readfile(fileName, {"output":"????"});

    // Remove the file after it has served its purpose
    if(remove) {sleep(2000); removefile(batcName);}
}

2
Liquid UI for Android can be licensed on a per NAMED USER basis or on a per DEVICE basis.

License Type: USER

This type of license will allow 1 (one) named SAP User to be connected to SAP environment.  Over usage of 1 (one) additional named SAP User to be connected to SAP environment is allowed and granted (This can change in future releases).

Effective Version: 4.24.6.0

A maximum for 2 named users will be allowed to login to SAP with this license type to maintain compliance.
A license limitation popup will appear on the UI if additional named user logs into SAP environment, as it are not permitted with this license type.

See document for details on maintaining the usage for this license type

License Type: DEVICE

When there is a need to use multiple named SAP users on a single device, this type of license will be mandatory and required.  This license type allows the customers to use the application across multiple named users and work shifts on a single device.

Please contact sales@guixt.com for additional details and pricing or reach out to your Account Executive at Synactive Inc.



3
User Count and Details based on specific user role

For role based customization using Liquid UI, Liquid UI needs to be enabled for a pre-determined role
Example: Z_LIQUIDUI

Use Transaction SE16
Table: AGR_USERS
Role: Z_LIQUIDUI  (in this example)
Click 'Execute'

This will give all the users who has Z_LIQUIDUI role assigned.

This can be used to determine the user count for Liquid UI usage.


4
WS aka Web Scripts (Attended RPA for SAP) / RFC CALL: /GUIXT/SELECT
« on: January 17, 2024, 03:52:03 PM »
This article describes the details on how to call /GUIXT/SELECT , RFC enabled function module in SAP using Liquid UI

Calling /GUIXT/SELECT Function Module

Things to pay attention to:

1. FUNCTION NAME SHOULD BE UPPERCASE IN CALL STATEMENT
2. PARAMETER NAMES SHOULD BE UPPERCASE IN CALL STATEMENT
3. WIDTH FOR OUTPUT IS 2X THE TOTAL CHAR COUNT (DOUBLE BYTE UNICODE)
4. IF TABLE OUTPUT IS CHAR (EXAMPLE: CHAR8000), THEN PASS DEFINED STRUCTURE TO RETRIEVE DATA. 
5. STRUCTURE DETAILS TO BE DETERMINED BASED ON WHAT THE OUTPUT IS DERIVED FROM
(EXAMPLE: TABLE, CHECK SE11 FOR TABLE STRUCTURE)
6. THE STRUCTURE NEEDS TO BE DEFINED TILL THE LAST FIELD DATA THAT NEEDS TO BE RETRIEVED

// Sample script: Easy Access Screen


// SAPLSMTR_NAVIGATION.E0100.sjs

del("X[IMAGE_CONTAINER]");

pushbutton([1,1],"RFC Test","?",{"size":[1,20], "process":fnTestRFC});

function fnTestRFC() {
   var r = [];

   var z_KNA_DETAILS_E = {
      name:'CHAR8000_D',
      components:[
            { name:'MANDT',      length:3,      decimalpl:0,    type:'C' },                                 //Order Number
            { name:'KUNNR',      length:10,      decimalpl:0,    type:'C' },                                 //Order Type
            { name:'LAND1',      length:3,      decimalpl:0,    type:'C' },                                 //Maintenance Planning Plant
            { name:'NAME1',      length:35,      decimalpl:0,    type:'C' }                                 //Business Area
      ]
   }

   //set("V[z_flds]","MANDT,KUNNR,LAND1,NAME1");
   set("V[z_flds]","KUNNR,NAME1");

   println("Calling RFC.......");

   var rfcResult = call("/GUIXT/SELECT",{"in.TABLE":"KNA1","in.FIELDS":"&V[z_flds]", "in.CONDITION":"ORT01 = 'HEIDELBERG'", "table.RESULTTABLE(width:16000,type:z_KNA_DETAILS_E)":"r","verbose":true});

   println("rfcResult.rc:"+rfcResult.rfc_rc+":");
   println("rfcResult.key:"+rfcResult.key+":");
   println("rfcResult.exception:"+rfcResult.exception+":");
   println("Total Records:"+r.length+":");

   for(i=0;i<r.length;i++) {
      println("i:"+i+":"+r["KUNNR"]+":"+r["NAME1"]+":");
   }
}


5
Pre-Requisites
+++++++++++++++++++++++++++++++++++++++++++++++++
SAP Secure Login Client must be installed on the Liquid UI Server
Liquid UI Server must run under a AD Domain Admin account
SAP PSE certificate must be exported and installed on Liquid UI Server

sapproxy.ini  Proxy configuration as per below
+++++++++++++++++++++++++++++++++++++++++++++++++
[Proxy1]
ListenPort = 3297
TargetServer = HELIOS
TargetServerPort = 3200
GuiXT = 10
snc_lib=C:\Program Files\SAP\FrontEnd\SecureLogin\lib\sapcrypto.dll
sncname = CN=SAPSNCID7, OU=IT, OU=SYNACTIVE, O=SYNACTIVE C=US
SNCMode=3
SNCSSO=0

Connectivity Details
1. SAPGUI to Liquid UI Server will be SAP username and password based logon - without encryption
2. iOS/Android Liquid UI Clients can be connected to Liquid UI Server via TLS1.3 and can be encrypted


6
Download TSC SAP Device Types from below link
https://usca.tscprinters.com/en/downloads
Use Filter: Desktop
Printer Serices: TE Series ....

SAP Device Types Download from above link attached including Documentation

Use SPAD transaction in configuration client to import these .pri files
Menu: Utilities->For Device types->Import

Once these are installed, using SPAD, specify Output Device: TSC and click on Display
Click on Change Icon on toolbar
Select YTSC200 as Device Type from the dropdown
Save

*Once the above setup is completed, go to the transaction and print by selecting TSC as Output Device and Selecting Print Now checkbox.
These should generate a front end data print stream that the TSC printer would understand and print appropriate content. *

Additional refer to
SAP Note 1540910

7
Operation System: Windows *ONLY*
Pre-Requisites - Liquid UI Server must be installed, licensed and running

After downloading the zip file, and the attached document please execute admin.exe to launch the Admin Console for Liquid UI Server


8
For generating logs and bins for any execution related issues when using Liquid UI Server or Liquid UI Desktop
please follow below steps

Log in to SAP, and to generate logs type in transaction code box


1.   /ws_blackbox=1
2.   /ws_log=1
3.   Perform the action that needs to be recorded, typically the issue that is been identified by the user on execution of a transaction/process.
4.   /ws_log=0
5.   /ws_backbox=0

This will generate the log files and associated txt/bin files.

Provide this to support@guixt.com with detailed description of the issue along with the generated log and txt/bin files
for investigation


9
Requirements:
Managing software installation and scripts for user's across multiple locations

Pre-Requisites:
Liquid UI Desktop (Local user software deployment), or Liquid UI Server (Central Software Deployment)

Scenario 1: 
The scripts are common across all locations from where user is required to access the solution.
[One set of scripts for all locations]

Preferred Solution:
- Deploy software centrally using Liquid UI Server
- One Configuration file for all users across location
- Depending on the number of users, install single Liquid UI Server or multiple Liquid UI Servers and load balance them using a 3rd party hardware load balancer.
  Refer to Server Sizing Requirements: https://www.guixt.com/knowledge_base/content/18/310/en/32-server-sizing-requirements.html
- Deploy the scripts either locally on the Liquid UI Server or SAP Web Repository
  Refer to Script Deployment Options: http://www.guixt.com/forum/index.php/topic,317.msg321.html#msg321
- Set up SAPGUI Connection to Liquid UI Server for all users.  ** No Need to Activate GuiXT" on end user's machine

Scenario 2: 
The scripts are different for individual locations from where user is required to access the solution.
[Multiple et of scripts for all locations]

Preferred Solution:
- Deploy software centrally using Liquid UI Server for each location
- Separate Liquid UI Configuration file or each location identifying the script location
- Depending on the number of users at each location, install single Liquid UI Server or multiple Liquid UI Servers and load balance them using a 3rd party hardware load balancer.
  Refer to Server Sizing Requirements: https://www.guixt.com/knowledge_base/content/18/310/en/32-server-sizing-requirements.html
- Deploy the scripts either locally on the Liquid UI Server or SAP Web Repository
  Refer to Script Deployment Options: http://www.guixt.com/forum/index.php/topic,317.msg321.html#msg321
- Set up separate SAPGUI Connection to Liquid UI Server for users specific to their location .  ** No Need to Activate GuiXT" on end user's machine
  This will require different SAPGUI connection details based on where the user is located.

Alternatively:
- User's can be assigned different role based on their location, and a usercatalog can be setup which is role specific
- The usercatalog allows specification of groups and directories based on groups
- This way solution can be deployed using Scenario 1.
- Refer to article for using usercatalog: http://www.guixt.com/forum/index.php/topic,152.msg156.html#msg156


With Liquid UI Server deployment approach 
  a. Both software and configuration can be maintained centrally, and no software files and associated configuration files needs to be
      deployed to each individual users.
  b. Scripts can stay either centrally on Liquid UI Server folder or in SAP Web Repository depending on customer's preference.
  c. Mobile ready, to leverage the solution on iOS, Android and Windows CE based devices



With Liquid UI Desktop Deployment Approach
  a. Software needs to be installed on each individual user's machine.
  b. Software configuration files needs to be installed on each individual user's machine.
  c. Software upgrade will require each user's machine to be updated.
  d. If scripts are stored using network share location, then their is additional dependency on the network share, if the share is not accessible, the Liquid UI Solution is not accessible

Note:
With both Desktop and Server Deployment, there are multiple options to deploy the scripts.
Refer to article: http://www.guixt.com/forum/index.php/topic,317.msg321.html#msg321





10
Liquid UI Server aka GuiXT Server / Upgrading Liquid UI Server
« on: February 02, 2022, 10:46:49 AM »




http://updates.guixt.com/secured/v617_x64.zip
username: guixt.dnld
password: guixt950
 
Below are the steps to update the software
1. Download the new release from the link provided (Version 3.5.617.0), and extract the files (sapproxy.exe and webscript.dll)
2. Make a backup of existing files (sapproxy.exe and webscript.dll) in the current software install location
3. Stop the Liquid UI Service
4. Copy the new extracted files to the software install location  (sapproxy.exe and webscript.dll)
5. Re start the Liquid UI Service

As with any software upgrade, please test your existing scripts before upgrading the production envinronment.

Please check any scripts that has
- Reference to SAP table which is referred by using Non English Language, if so change it to technical name.  You can put the cursor on the table cell and perform F1 to retrieve technical details of the table


11
Issue:
While connecting to S/4 HANA environment using Liquid UI for Windows Mobile/CE, even though a valid license exist, a license error popup shows up on the UI

Reason:
Launching system>status from the menu bar did not launch the usual, expected system status screen.
Instead, it displayed avery restricted subset of the information under the header ?Repository Data? ?

Resolution:
For solution see SAP Note 2658772.

SAP_BASIS version 7.53 has now introduced a new authorization check on system>status.
The contents of this popup is now restricted through the authorization object S_SYS_INFO.
There was no restriction on this in the earlier versions.
In order to get back the unrestricted view, you will need to create a new role containing the above object, or add it to an existing role, with the below field values ?

ACTVT:
03 (Display)

INFO:
USER (to view the ?user data? section)
SYSTEM (to view the ?SAP system data? section)
HOST (to view the ?host data? section)
DB (to view the ?database data? section)
KERNEL (to access the kernel information)
* (to view everything)


12
The purpose of Liquid UI Server is for central software deployment.  No software footprint on user's local machine.

The scripts are developed on developer's desktop using local SAPGUI and local software installation
This way the scripts are accessible to the developer on their own machine, and Liquid UI console window is available for the developer to debug
any issues.  This is the preferred method in a multi developer environment.

The developed scripts are then then deployed centrally using web repository, or network share.

Also when deploying the software centrally using Liquid UI Server, the production and non production environment shoule be executed on different machines
to prevent any disruptions in production environment usage

Liquid UI Server for development can also be executed in console mode as and when need,
which can provide access to the console window for additional debugging at the Server Level




13
There is no impact
We do not use Java or log4j module

14
LiquidUI - SAP NetWeaver AS ABAP SSO
Workflow for iOS and Android Clients

SAP Communication Channels


See Diagram in attached file, which shows the connection from Liquid UI iOS-Android Clients to LUI Server secured using TLS 1.3


From LUI Server to SAP ECC, connection is established as SAP's trusted server SSO, using SAP's digitally signed Logon Ticket.

On both ends of the Server the connections are secured.  One via TLS 1.3 and the other via Trusted Server Logon Ticket


Trusted Server Connection to SAP ECC is compressed, and the SAP ECC Kernel does not support further encryption.  This SAP Native protocol is not https traffic.
Synactive recommends the LUI server be placed close to the SAP ERP Server to the maximize the optimizing feature as well as to ensure security.
Furthermore, the trust relationship established between LUI Server and SAP ECC ensures that no 3rd party can access this Trusted Server Channel.
Trusted Server Connection is needed not only in the Desktop mode, but it is a necessity in the Mobile environment, where there is no Kerberos SSO.  Connection to LUI Server from the Mobile device is protected by TLS 1.3.

15
LiquidUI - SAP NetWeaver AS ABAP SSO


SAP Communication Channels


See Diagram in attached file, which shows the connection from SAP GUI to LUI Server via the standard SAP's SNC interface. There are no changes in SAP GUI other than service principal.  Available only with Cybersafe TrustBroker

From LUI Server to SAP ECC, connection is established as SAP's trusted server SSO, using SAP's digitally signed Logon Ticket.

On both ends of the Server the connections are secured.  LUI Server connects via standard SAP secure channels.  One via Kerberos and the other via Trusted Server Logon Ticket.


Pages: [1] 2 3