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.


Topics - chirag.amin@guixt.com

Pages: [1] 2 3
1
This forum article will show an example of how to use the "dll" option in the "call" command. With the "dll" option, we can use functions that exist in a .dll software file. We must include the .dll function in the SAPgui folder (e.g. "C:\Program Files (x86)\SAP\FrontEnd\SAPgui"). Depending on what function you are using, the parameters you pass will differ.

LiquidUI Code:

SAPLSMTR_NAVIGATION.E0100.sjs


// Use call command with DLL option to call a DLL function
call('alphanum', {"dll":"guixtstring", "In":"123","In.2":"6", "Out":"result"});
// RESULT should be "000123"
title("RESULT: "+result);

2
This forum article will show an example of how we can update a Word document in LiquidUI. We will take data from a notification in IW22 and update a document marked with specific tags. Then the document will be saved as a new file, therefore never overwriting the template document. In order for this to work, you must load wsoffice.dll in the ESESSIONS.SJS file.



LiquidUI Code:

SAPLIQS0.E7200.sjs

// Define an array of tags for the Notification screen
NotificationTags = ["[LIQUID~UI~DESC]","[LIQUID~UI~NOTIFNUM]","[LIQUID~UI~NOTIFTYPE]"];

// Pushbutton that will trigger our function
pushbutton([TOOLBAR],"Update Word Template", "?", {"process":updateDoc, "using":{"tags":NotificationTags}});

// This function will create a Word document
function updateDoc(param){
   
   var tagsArr = param.tags;
   
   // Refer to https://msdn.microsoft.com/en-us/library/office/ff193977.aspx for which parameters Execute takes
   
   // WdFindWrap constants
   wdFindAsk = 2;
   wdFindContinue = 1;
   wdFindStop = 0;
   
   // WdReplace constants
   wdReplaceNone = 0;
   wdReplaceOne = 1;
   wdReplaceAll = 2;

   onscreen 'SAPLIQS0.7200'
      // Create MS Object for Word
      var wordObj = new ActiveXObject('word.application');
      // Do not show the Microsoft Word window
      wordObj.Visible = false;
      doc = wordObj.Documents.Open("C:\\GuiXT\\Tutorials\\Forum\\DocTemplate.docx");
      
      for(i=0; i<tagsArr.length; i++){
         switch(tagsArr){
            case "[LIQUID~UI~DESC]":
               copytext({"fromscreen":"X[TEXT]", "totext":"z_text"});
               // Call a function to hanlde the word update
               updateTemplate(z_text, tagsArr, wordObj);   
               break;
            case "[LIQUID~UI~NOTIFNUM]":
               set("V[z_notifNum]", "&F[Notification]");
               // Call a function to hanlde the word update
               updateTemplate(z_notifNum, tagsArr, wordObj);
               break;
            case "[LIQUID~UI~NOTIFTYPE]":
               set("V[z_notifType]", "&F[RIWO00-QMARTE]");   // Techname for Notification Type
               // Call a function to hanlde the word update
               updateTemplate(z_notifType, tagsArr, wordObj);
               break;
         }
      }
      
      // Save the document as a new file, therefore not getting rid of the Template
      doc.SaveAs("C:\\GuiXT\\Tutorials\\Forum\\"+z_notifNum+"_"+_user+"_Doc.docx");
      wordObj.Quit();
      
      enter("?");
}

// Recursive function to split the string and then update the Word Document
function updateTemplate(str, tag, wordObj){
   // Base case is when string's length is less than 256
   if(str.length < 256){
      // Update the word document and save
      findObj = wordObj.Selection.Find;
      findObj.Execute(tag,true,false,false,false,false,true,wdFindContinue,false,str,wdReplaceOne,false,false,false,false);
   }else{
      // Split the string and add the tag
      str1 = str.substring(0,255-tag.length) + tag;
      str2 = str.substring(255-tag.length,str.length);
      // Update the word document
      findObj = wordObj.Selection.Find;
      findObj.Execute(tag,true,false,false,false,false,true,wdFindContinue,false,str1,wdReplaceOne,false,false,false,false);
      // Call this function again with the remaining characters in the string
      updateTemplate(str2, tag, wordObj);
   }
}


ESESSION.SJS
load("wsoffice");

3
This forum article will show an example of how we can create a Word document in LiquidUI. We will take some text from a notification in IW22 and create a document with it. In order for this to work, you must load wsoffice.dll in the ESESSIONS.SJS file.

LiquidUI Code:

//SAPLIQS0.E7200.sjs

// Pushbutton that will trigger our function
pushbutton([TOOLBAR],"Create Word Document", "?", {"process":createDoc});

// This function will create a Word document
function createDoc(){
   
   onscreen 'SAPLIQS0.7200'
      set("V[notification_num]", "&F[Notification]");
      copytext({"fromscreen":"X[TEXT]", "totext":"z_text"});

      
      // Create MS Object for Word
      var wordObj = new ActiveXObject('word.application');
      // Do not show the Microsoft Word window
      wordObj.Visible = false;
      
      docx = wordObj.Documents.Add();
      
      objSelection = wordObj.Selection
      // Set the Font
      objSelection.Font.Name ="Arial";
      // Set the Font Size
      objSelection.Font.Size = "18";
      objSelection.TypeText(z_text);
      
      objSelection.TypeParagraph()
      // Create the file as Notification_NotifNumber_User.docx
      docx.SaveAs("C:\\GuiXT\\Tutorials\\Forum\\Notification_"+notification_num+"_"+_user+".docx");
      wordObj.Quit();
      
      enter("?");
   
}

// ESESSION.SJS
load("wsoffice");



See attachments..

4
In a previous forum, a generic search function was created:

•   http://www.guixt.com/forum/index.php?topic=101.0

This feature is now in built since version 1.2.305. This is a very useful option used in the set command. It is most commonly used to help the developer pull out a document number from a message given by SAP. Here is an basic example of the command to illustrate it's functionality and syntax.

LiquidUI Code:


//SAPLSMTR_NAVIGATION.E0100.sjs
save_message = "Material document 312134 has been saved.";
// "document" is the string that is being searched for from V[save_message]
set("V[mat_doc_num]", "&V[save_message]", {"search":"document"});
// V[mat_doc_num] will store the next word after the searching string: "document"
message("S:&V[mat_doc_num] was created!!");

5
WS aka Web Scripts (Attended RPA for SAP) / System Variable: _windowsize
« on: September 27, 2016, 12:51:26 PM »
As of WS Version 1.2.296 and Server Version 3.5.523, a new system variable has been added; _windowsize. The system variable is used to retrieve either the width or the height of your SAP window in pixels. For the width, the variable is as follows: _windowsize_x. For the height, the variable is as follows: _windowsize_y.

LiquidUI Code:

clearscreen();

title("Width: "+_windowsize_x+", Heigth: "+_windowsize_y);

y=_windowsize_x/7.4;
x=(_windowsize_y+280) / 38;

view([0,0], [x,y], "http://www.google.com");



See attachments...

6
WS aka Web Scripts (Attended RPA for SAP) / System Variable: _sessioncount
« on: September 27, 2016, 12:17:06 PM »
As of WS Version 1.2.296 and Server Version 3.5.523, a new system variable has been added; _sessioncount. This system variable returns how many sessions/connections are open in SAP. The number will increment when a new session or connection is opened, regardless of username or system ID.


LiquidUI Code:
title("Session Count: "+_sessioncount);


see attachments..

7
In this example, pushbuttons are used to change the current directory. This means the location of where the LiquidUI will look for the scripts will change when the button is clicked. This is useful for testing and even is used when implementing if the user wants to keep the scripts separate based on scenarios.

LiquidUI Code:

C:\GuiXT\Tutorials\Forum\

clearscreen();

dirMain = 'C:\\GuiXT\\Tutorials\\Forum';
dirSalesOrders = dirMain + '\\SalesOrder\\';
dirNotifications = dirMain + '\\Notifications\\';
dirMaterials = dirMain + '\\Materials\\';

box([0,0], [4,109], "");
pushbutton([1,1],'@2V@Sales Orders','/nsession_manager/d1='+dirSalesOrders,{'size':[2,33]});
pushbutton([1,38],'@2Q@Notifications','/nsession_manager/d1='+dirNotifications,{'size':[2,33]});
pushbutton([1,76],'@2Z@Material Management','/nsession_manager/d1='+dirMaterials,{'size':[2,33]});


C:\GuiXT\Tutorials\Forum\Materials

clearscreen();

title("Material Management");

box([0,0], [5,109], "");
pushbutton([1,1],'Create Material',    '/nmm01',{'size':[2,33]});
pushbutton([1,38],'Change Material', '/nmm02',{'size':[2,33]});
pushbutton([1,76],'Display Material','/nmm03',{'size':[2,33]});

pushbutton([4,38],'BACK','/nsession_manager/d1='+dirMain,{'size':[1,33]});

C:\GuiXT\Tutorials\Forum\SalesOrder

clearscreen();

title("Sales Orders");

box([0,0], [5,109], "");
pushbutton([1,1],'Create Sales Order',   '/nva01',{'size':[2,33]});
pushbutton([1,38],'Change Sales Order',   '/nva02',{'size':[2,33]});
pushbutton([1,76],'Display Sales Order','/nva03',{'size':[2,33]});

pushbutton([4,38],'BACK','/nsession_manager/d1='+dirMain,{'size':[1,33]});

C:\GuiXT\Tutorials\Forum\Notifications

clearscreen();

title("Notificaitons");

box([0,0], [5,109], "");
pushbutton([1,1],'Create Notification','/niw21',{'size':[2,33]});
pushbutton([1,38],'Change Notification','/niw22',{'size':[2,33]});
pushbutton([1,76],'Display Notification','/niw23',{'size':[2,33]});

pushbutton([4,38],'BACK','/nsession_manager/d1='+dirMain,{'size':[1,33]});

8
This example illustrates the noscrollbar command. The noscrollbar command hides any scrollbars in SAP screens.  It can be used to suppress or hide scrollbars within a specified area in a SAP screen. This is very useful if a user has deleted a large number of fields or other elements, making a scrollbar unnecessary. The scrollbar at the right-hand edge of the window is the lone exception to the command - it is not suppressed when using the noscrollbar command.

LiquidUI Code:

del("G[Communication]");
noscrollbar();

9
This example illustrates how to assign values to a GuiXT column when the column is being used by a GuiXT table. This differs from when the GuiXT column is being used in an SAP table. That scenario is explained in another article:
   http://www.guixt.com/forum/index.php?topic=42.0


LiquidUI Code:

clearscreen();

name = ["Chirag", "Rajesh", "Ben"];
age = [24, 31, 30];

table([0,0], [10,25], {"name":"z_table", "title":"LiquidUI Table", "rows":name.length});
column("Name", {"name":"z_column1", "size":10});
column("Age", {"name":"z_column2", "size":5});

for(j=0;j<name.length;j++){
   z_table.z_column1[j] = name[j];
   z_table.z_column2[j] = age[j];
}

10
This example illustrates the use of the "rf_barcode" option. This option is for the inputfield command and is usually used specifically for Android devices. On the LiquidUI app for iOS, any inputfield can have the choice of using a barcode scan instead of typing in a value. As of version 2.0.14.0, the LiquidUI app for Android does not have this supported. The way to work around this is using the "rf_barcode" option. With this option set to true for an inputfield, the same behavior can be achieved.


LiquidUI Code:

del("F[Notification]");

inputfield([2,0],"Notification",[2,25],{"size":12, "rf_barcode":true});



See attachments..

11
In this example, the Insertion algorithm will be used to sort items in a table. This article is based off a previous article, "Creating a Class". A link is provided below:

   http://www.guixt.com/forum/index.php?topic=123.0

Sorting is a common process used in many different scenarios. Insertion is an easy to implement algorithm however is not the most efficient when the data set is very large. The Big O is n2.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Author: Synactive, Inc. [1065 E. Hillsdale Blvd, Foster City, CA, 94404, USA]
// Email: support@guixt.com; sales@guixt.com;
// Contact: 650.341.3310
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

// This function creates a class for Item
function Item(itm,mat,qty,su){
   // Attributes of the class
   this.item = itm;
   this.material = mat;
   this.quantity = qty;
   this.sales_unit = su;
   // Function used to retrieve information on Item
   this.getInfo = function(){
      return "Item:"+this.item+", Material:"+this.material+", Quantity:"+this.quantity+", Sales Unit:"+this.sales_unit;
   }

}


// Only execute the following for VA03
if(_transaction == "VA03"){
   // Pushbutton that will trigger the funciton
   pushbutton("F[Order]+[0,62]", "Display items", "?", {"process":fetchItems});
   
   // If item_array is undefined, intialize it
   if(!item_array){
      item_array = [];
   }
   
   // If the array has data in it
   if(item_array.length>0){
      
      pushbutton([15,0], "&V[item_sel]Sort By Item   ", "?", {"process":changeSort,"using":{"sort_type":"item"}});
      pushbutton([15,30], "&V[mat_sel]Sort By Material", "?", {"process":changeSort,"using":{"sort_type":"material"}});
      pushbutton([15,60], "&V[qty_sel]Sort By Quantity", "?", {"process":changeSort,"using":{"sort_type":"quantity"}});
      
      // Create a table and columns
      table([17,0], [26,50], {"name":"z_table", "title":"Line Items", "rows":item_array.length});
      column("Item", {"size":6,"name":"z_item", "table":"z_table"});
      column("Material", {"size":18,"name":"z_mat", "table":"z_table"});
      column("Quantity", {"size":15,"name":"z_qty", "table":"z_table"});
      column("SU", {"size":3,"name":"z_su", "table":"z_table"});

      switch(sorted){
         // Use insertion sort to sort the array
         case "material":

            // Sort  By Material
            for(i=1; i<item_array.length; i++){
               
               while(i>0 && item_array[i-1].material>item_array[i ].material){
                  temp = item_array[i-1];
                  item_array[i-1] =  item_array;
                  item_array = temp;
                  i--;
               }
               
            }
            break;
            
         case "quantity":

            // Sort  By Quantity
            for(i=1; i<item_array.length; i++){
               
               while(i>0 && parseInt(item_array[i-1].quantity)>parseInt(item_array[i ].quantity)){
                  temp = item_array[i-1];
                  item_array[i-1] =  item_array;
                  item_array = temp;
                  i--;
               }
               
            }
            break;
            
         case "item":
            
            // Sort  By Item
            for(i=1; i<item_array.length; i++){
               
               while(i>0 && parseInt(item_array[i-1].item)>parseInt(item_array[i ].item)){
                  temp = item_array[i-1];
                  item_array[i-1] =  item_array;
                  item_array = temp;
                  i--;
               }
               
            }
            break;
            
         default:
            // Do nothing, the array is already sorted by Item
      }   
      
      // Fill out the table
      for(i=0;i<item_array.length;i++){
         z_table.z_item = item_array.item;
         z_table.z_mat = item_array.material;
         z_table.z_qty = item_array.quantity;
         z_table.z_su = item_array.sales_unit;
      }
   
   }
}



// This function will table scroll through the VA03 transaction and fetch the data from the table
function fetchItems(){
   onscreen 'SAPMV45A.0102'
      enter();
   onerror
      message(_message);
      enter("?");
      goto FUNC_END;
   onscreen 'SAPMV45A.4001'
      // Clear the value of item_array
      item_array = [];
      absrow = 1;
      enter("/ScrollToLine=&V[absrow]", {"table":"T[All items]"});

NEW_SCREEN:;
   onscreen 'SAPMV45A.4001'
      gettableattribute("T[All items]", {"firstvisiblerow":"FVR", "lastvisiblerow":"LVR", "lastrow":"LR"});
      relrow = 1;
NEW_ROW:;   
      println("absrow:"+absrow+", LVR:"+LVR+", LR:"+LR);
      // end of table?
      if(absrow>LR){             
         goto END_OF_TABLE;
      }
      // end of screen?
      if(absrow>LVR) {             
         goto NEW_SCREEN;
      }
      
      set("V[z_temp_item]", "&cell[All items,Item,&V[relrow]]");
      set("V[z_temp_mat]", "&cell[All items,Material,&V[relrow]]");
      set("V[z_temp_qty]", "&cell[All items,Order Quantity,&V[relrow]]");
      set("V[z_temp_su]", "&cell[All items,SU,&V[relrow]]");
      
      // Push a new Item to the array
      item_array.push(new Item(z_temp_item,z_temp_mat,z_temp_qty,z_temp_su));

      absrow++;
      relrow++;
      goto NEW_ROW;

END_OF_TABLE:;

      enter('/ScrollToLine=1', {"table":"T[All items]"});
      
   onscreen 'SAPMV45A.4001'
      enter("/3")

FUNC_END:;
}



function changeSort(param){
   onscreen 'SAPMV45A.0102'
      sorted = param.sort_type;
      if(sorted == "material"){
         item_sel = "";
         mat_sel = "@01@";
         qty_sel = "";
      }
      else if(sorted == "quantity"){
         item_sel = "";
         mat_sel = "";
         qty_sel = "@01@";         
      }
      else if(sorted == "item"){
         item_sel = "@01@";
         mat_sel = "";
         qty_sel = "";         
      }
      enter("?");
}

12
WS aka Web Scripts (Attended RPA for SAP) / LiquidUI: Creating a Class
« on: August 18, 2016, 12:43:16 PM »
In this example, a Class called Item will be created. This class will have attributes like Material and Quantity. Using a class to hold this data helps the code be more modular and makes it easier to access data pertaining to a single item.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Author: Synactive, Inc. [1065 E. Hillsdale Blvd, Foster City, CA, 94404, USA]
// Email: support@guixt.com; sales@guixt.com;
// Contact: 650.341.3310
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

// This function creates a class for Item
function Item(itm,mat,qty,su){
   // Attributes of the class
   this.item = itm;
   this.material = mat;
   this.quantity = qty;
   this.sales_unit = su;
   // Function used to retrieve information on Item
   this.getInfo = function(){
      return "Item:"+this.item+", Material:"+this.material+", Quantity:"+this.quantity+", Sales Unit:"+this.sales_unit;
   }

}


// Only execute the following for VA03
if(_transaction == "VA03"){
   // Pushbutton that will trigger the funciton
   pushbutton("F[Order]+[0,62]", "Display items", "?", {"process":fetchItems});
   
   // If item_array is undefined, intialize it
   if(!item_array){
      item_array = [];
   }
   
   // If the array has data in it
   if(item_array.length>0){
      // Create a table and columns
      table([16,0], [26,50], {"name":"z_table", "title":"Line Items", "rows":item_array.length});
      column("Item", {"size":6,"name":"z_item", "table":"z_table"});
      column("Material", {"size":18,"name":"z_mat", "table":"z_table"});
      column("Quantity", {"size":15,"name":"z_qty", "table":"z_table"});
      column("SU", {"size":3,"name":"z_su", "table":"z_table"});
      
      // Fill out the table
      for(i=0;i<item_array.length;i++){
         println(item_array.getInfo());
         z_table.z_item = item_array.item;
         z_table.z_mat = item_array.material;
         z_table.z_qty = item_array.quantity;
         z_table.z_su = item_array.sales_unit;
      }
   
   }
}



// This function will table scroll through the VA03 transaction and fetch the data from the table
function fetchItems(){
   onscreen 'SAPMV45A.0102'
      enter();
   onerror
      message(_message);
      enter("?");
      goto FUNC_END;
   onscreen 'SAPMV45A.4001'
      // Clear the value of item_array
      item_array = [];
      absrow = 1;
      enter("/ScrollToLine=&V[absrow]", {"table":"T[All items]"});

NEW_SCREEN:;
   onscreen 'SAPMV45A.4001'
      gettableattribute("T[All items]", {"firstvisiblerow":"FVR", "lastvisiblerow":"LVR", "lastrow":"LR"});
      relrow = 1;
NEW_ROW:;   
      println("absrow:"+absrow+", LVR:"+LVR+", LR:"+LR);
      // end of table?
      if(absrow>LR){             
         goto END_OF_TABLE;
      }
      // end of screen?
      if(absrow>LVR) {             
         goto NEW_SCREEN;
      }
      
      set("V[z_temp_item]", "&cell[All items,Item,&V[relrow]]");
      set("V[z_temp_mat]", "&cell[All items,Material,&V[relrow]]");
      set("V[z_temp_qty]", "&cell[All items,Order Quantity,&V[relrow]]");
      set("V[z_temp_su]", "&cell[All items,SU,&V[relrow]]");
      
      // Push a new Item to the array
      item_array.push(new Item(z_temp_item,z_temp_mat,z_temp_qty,z_temp_su));

      absrow++;
      relrow++;
      goto NEW_ROW;

END_OF_TABLE:;

      enter('/ScrollToLine=1', {"table":"T[All items]"});
      
   onscreen 'SAPMV45A.4001'
      enter("/3")

FUNC_END:;
}

13
In this example, the title command is used to track how far a process is. Within each onscreen block in the process, the title command is implemented using an intuitive title. Even though the screens will be changing in the background and not in the user's view, the title will change therefore letting the user know where the process is at.

NOTE: This does not work in LiquidUI Server.


// User Interface
clearscreen();
pushbutton([3,0], "Create a Material", "/nmm01", {"process":navigateTransactions});

/*****************************************************
-    This function will go to MM01 and create a material
-    In each onscreen, we will set the title so that the
   user can track how far the process is.
-    We include a delay of 1 second so the title stays on
   on the screen long enough to be read. This is for
   illustration purposes only
*****************************************************/

function navigateTransactions(){
   onscreen 'SAPLMGMM.0060'
      title("On MM01 Initial Screen");
      set("F[Material Type]", "FERT");
      set("F[Industry Sector]", "M");
      enter('/5',1000);
   // Create Material (Initial Screen)
   onscreen 'SAPLMGMM.0070'
      title("Selecting Views");
      set('Cell[Table,0,1]', 'X');
      set('Cell[Table,0,4]', 'X');
      set('Cell[Table,0,6]', 'X');
      set('Cell[Table,0,12]', 'X');
      set('Cell[Table,0,13]', 'X');
      set('Cell[Table,0,14]', 'X');
      enter('/6',1000);
   
   // Create Material (Initial Screen)
   onscreen 'SAPLMGMM.0080'
      title("In Organizational Levels");
      set('F[Plant]', '1000');
      set('F[Stor. Location]', '0001');
      set('F[Sales Org.]', '1000');
      set('F[Distr. Channel]', '10');
      enter(1000);

   // Create Material 68999 (Finished product)
   onscreen 'SAPLMGMM.4004'
      title("On Basic Data 1 Tab");
      set('F[MAKT-MAKTX]', 'Test Material');
      set('F[Base Unit of Measure]', 'EA');
      set('F[Material Group]', '001');
      enter('=SP04',1000);

   // Create Material 68999 (Finished product)
   onscreen 'SAPLMGMM.4000'
      title("On Sales Org 1 Tab");
      set('cell[TABLE,5,1]', '1');
      set('cell[TABLE,5,2]', '1');
      enter('=SP06',1000);

   // Create Material 68999 (Finished product)
   onscreen 'SAPLMGMM.4000'
      title("On General Plant Tab");
      set('F[Trans. Grp]', '0001');
      set('F[LoadingGrp]', '0001');
      enter('=SP12',1000);

   // Create Material 68999 (Finished product)
   onscreen 'SAPLMGMM.4000'
      title("On MRP 1 Tab");
      set('F[MRP Type]', 'ND');
      enter('=SP13',1000);

   // Create Material 68999 (Finished product)
   onscreen 'SAPLMGMM.4000'
      title("On MRP 2 Tab");
      set('C[Bulk Material]', 'X');
      set('F[SchedMargin key]', '000');
      enter('=SP14',1000);

   // Create Material 68999 (Finished product)
   onscreen 'SAPLMGMM.4000'
      title("On MRP 3 Tab");
      set('F[Availability check]', '01');
      enter('/11',1000);
   
}

14
This example uses a pushbutton to toggle the layout of a screen. Either the LiquidUI modifications will show or the regular SAP layout will show.

1) Navigate to VA02
2) Enter in an order number and hit Enter
3) By default, the LiquidUI modification will show
4) Press "Switch to SAP" to switch the the SAP layout
5) In the SAP layout, press "Switch to LiquidUI" to switch to the LiquidUI layout

See attachments ...

15
This is a very simple example of using the system variable "_database". This system variable holds a string value of what the name of the database or system ID is. This is useful for when you want to conditionalize scripts based on what system they are in. A script might need to run a certain way for the QAS system versus the PRD system.


LiquidUI Code:

// Depending on what databse is being used
// the title should display differently

if(_database == "TR1"){
   title("Welcome to ZEUS");
}
else if(_database == "TRX"){
   title("Welcome to JUNEAU");
}
else if(_database == "ID7"){
   title("Welcome to ORION");
}



Pages: [1] 2 3