F
L
E
I
S
C
H
M
A
N
N


MicroFocus / HPE / HP Service Manager

Table of contents

A tesztkörnyezet

SM elindítása

 1. Oracle DB

 2. Service Manager / SM indítása

 3. Az alkalmazás szerver elindítása

 4. Bejelentkező képernyő

Service Manager

Alap dolgok

Session TimeOut átállítása

Kontextus-érzékeny segítség bekapcsolása

Ikonok

Parancsrövidítések

Új power user létrehozása

Jelszóváltoztatás

Új menük készítése + hozzá parancsok

 Hogyan kell megtalálni egy menüt

 Hogyan kell létrezhoni a fában

 Egy megadott form megnyitása

 Menü jogosultság

Általános szöveg keresése (fs)

$file használata

Variables

Forms Designer

Globális lista nevének megkeresése

Datadict-ből a mezőnevek kikeresése

Process Designer

Fázisok ás átmenetek létrehozásának trükkjei

Alapértékek és kitöltések ellenőrzése [Rule Sets]

Lista ellenőrzése egy globális lista alapján

Globális szabályok egy munkafolyamatra

Mentés előtti mező kitöltöttség ellenőrzése

Dátum összehasonlítása és ellenőrzése

Időzített fázisátmenetek és ellenőrzésük

Backend transition

Más tábla alapján történő ellenőrzés

Operátor rekord email címe alapján ellenőrzés, javascript, debug

Jóváhagyások

Értesítések

Új változáskezelési kategória felvétele

Workflow export

Workflow import


Fussunk neki az alapoknak!

A tesztkörnyezet

A tesztrendszer SM verziója: v9.60, operációs rendszerei:

Linux hpsm 3.10.0-862.11.6.el7.x86_64 #1 SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Linux oracle01.eg.office 4.1.12-124.18.6.el7uek.x86_64 #2 SMP Wed Aug 15 19:12:26 PDT 2018 x86_64 x86_64 x86_64 GNU/Linux

A tesztrendszer WEB felületét itt lehet elérni: http://mysmdev:8080/sm/index.do?lang=en (természetesen ez a cím csak nálunk házon belül működik!, de a lényeg a link vége.)

SM elindítása

1. Oracle DB

[root@oracle01 ~]$ su - oracle

[oracle@oracle01 ~]$ lsnrctl start

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 08-OCT-2018 10:30:05

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/12.1.0/dbhome_1//bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.1.0.2.0 - Production
System parameter file is /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/oracle01/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle01)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                08-OCT-2018 10:30:07
Uptime                    0 days 0 hr. 0 min. 1 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/oracle01/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
[oracle@oracle01 ~]$ dbstart
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
Usage: /u01/app/oracle/product/12.1.0/dbhome_1//bin/dbstart ORACLE_HOME
Processing Database instance "hpsm": log file /u01/app/oracle/product/12.1.0/dbhome_1/startup.log

2. Service Manager / SM indítása

[root@hpsm ~]# su - hpsm
Last login: Fri Oct  5 10:52:34 CEST 2018 on pts/0
[hpsm@hpsm ~]$ cd /opt/MicroFocus/ServiceManager9.60/Server/RUN/
[hpsm@hpsm RUN]$ ./smstart
Starting sm
Starting sm system.start

Az SM logja az: /opt/MicroFocus/ServiceManager9.60/Server/logs/ könyvtárban található sm.log néven UN*X-okon és a “C:\Program Files (x86)\HP\Service Manager 9.40\Server\logs” könyvtárban Microsoft Windows-on.

Service Manager Runtime commands (sm)

link

3. Az alkalmazás szerver elindítása

Ha nem indulna magától, akkor:

[root@hpsm ~]# systemctl start tomcat
[root@hpsm ~]# systemctl status tomcat
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-10-08 10:15:38 CEST; 1 day 23h ago
  Process: 1045 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 1091 (java)
   CGroup: /system.slice/tomcat.service
           └─1091 /usr/java/jdk1.8.0_181-amd64//bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manage...

Oct 08 10:15:38 hpsm systemd[1]: Starting Apache Tomcat Web Application Container...
Oct 08 10:15:38 hpsm startup.sh[1045]: Existing PID file found during start.
Oct 08 10:15:38 hpsm startup.sh[1045]: Removing/clearing stale PID file.
Oct 08 10:15:38 hpsm startup.sh[1045]: Tomcat started.
Oct 08 10:15:38 hpsm systemd[1]: Started Apache Tomcat Web Application Container.

4. Bejelentkező képernyő

Ha minden jól ment és minden rendben el tudott indulni, akkor a következő képernyő fogad majd, ahol már be tudunk jelentkezni a Service Manager-be. (falcon/”No password!”)

Service Manager

Alap dolgok

Session TimeOut átállítása

Menu Navigation: System Administration - Ongoing Maintenance - System - Start Inactivity Timer

Kontextus-érzékeny segítség bekapcsolása

Ezzel az opcióval Ctrl-h-t nyomva egy beviteli mezőn, megkajuk az aktuális form, tábla és mező nevét.

Ikonok

A munkafolyamatokhoz felhasználható ikonok a /opt/tomcat/webapps/sm/images/obj16 könyvtárban találhatóak.

Parancsrövidítések

Ide már korábban összeszedtem az összes gyári command-ot: link Ebből a listából én ezeket használom:

  • db - Database Manager
  • fd - Forms Designer
  • fc - Format Control
  • do - Display Application Option Definition
  • ds - Display Application Screen Definition
  • sl - Script Library
  • gl - Global List Definitaion
  • fs - Find String Utility
  • unload - Unload Utility
  • schedule - Schedule Records
  • operator - Operator
  • contacts - Contacts

Új power user létrehozása

Menu Navigation: System Administration - Ongoing Maintenance - User Quick Add Utility menüpont segítségével készíthetünk:

Jelszóváltoztatás

command( operator ) majd meg kell keresni a felhasználót és a második fülün lehet a jelszavát megváltoztatni:

Új menük készítése + hozzá parancsok

Az ikonok itt találhatóak: link

Hogyan kell megtalálni egy menüt

command( db, menu )

Menu Navigation: System Administration - Tailoring - Tailoring Tools - Menus

Hogyan kell létrezhoni a fában

Egy megadott form megnyitása

Menü jogosultság

  • ha a SysAdmin-oknak szeretnék csak elérést: index(“SysAdmin”, $lo.ucapex)>0
  • ha egy szerepkörhöz(ROLE): $lo.user.role=”FLEX”
  • vagy ha mindenkinek: true

Általános szöveg keresése (fs)

$file használata

  • $file - Format Control
  • $File - Links
  • $L.file - minden más
  • $L.filed - Display App.

Részletek találhatóak a következő link-en.

Variables

  • $G. $lo Globális változók
  • $L. lokális változók
  • minden más thread változó

Forms Designer

Hogyan készítsünk olyan Form-okat, amivel meg lehet könnyen találni a globalists neveket vagy a mezőneveket?

Globális lista nevének megkeresése

Amit tudni fog az az, hogy meg lehet keresni egy globális lista változója vagy a változó megjelenítési változója alapján a lista nevét, illetve ezek összes kombinációja megadása esetén a hiányzókat. Ez jó segítség lesz a Process Designer-ben készített Workflow-khoz.

Ehhez kell majd nekünk:

  • egy form command( fd, _flex.global.list.entry ), ez lesz végül majd a kereső és a megjelenítő form is, amikor ilyet keresünk: _flex.global.list.entry

  • egy qbe form command( fd, _flex.globallist.qbe.g ) (ennek most sok jelentősége még nincs, mert csak a PopUp részeken van/lesz egyelőre szerepe)

majd ezeken kívül kell még:

  • egy format control command( fc, _flex.global.list.entry ) is, ami a form-unkon ki fog tölteni egy “mezőt” ($flex.hidden thread változó), és ha az én form-omat hasznájuk a kereséskor akkor, egy display option (Object Definition - Default State Definition - Display Application Screen Definition, global.view) végül ki fogja majd értékelni és az alapján a keresési eredményt majd ugyanebben form-ban megjeleníteni a gyári helyett.

Web-es felületen:

if (nullsub($flex.hidden, "X")~="OK") then ($L.format="apm.global.list.entry") else ($L.format="_flex.global.list.entry")

és talán ez a téma összességében ennyi is.

Datadict-ből a mezőnevek kikeresése

Ezt már egy kicsit tovább sikerült csavarni. Ehhez kelleni fog majd egy segédtábla (types) is, amibe felvittem a Service Manager-es típusokat is és a keresés után így ki tudja írni nem csak a nevét, de még a mező típusát is.

Menu Navigation: System Definition - Tables

És itt lesz egy gomb, ami a lekérdezett tömbökben és a típusok között is tud majd keresni. A gomb egy Display Option mögött van és ott hívódik hozzá egy a Script Library-ben lévő JavaScript function: “lib._flex.searchCaption();” A lényeg a következő:

function searchCaption () {
	for ( var i = 0; i < vars["$L.file"].fields.length(); i++ ) {
	
		if ( vars["$L.file"].fields[i] == vars.$flex_field ) {
			vars.$flex_caption = vars["$L.file"].captions[i];
			vars.$type = getTypeName( vars["$L.file"].types[i] ); 
			break;
		}
		else {
			vars.$flex_caption = "NOT FOUND!!!";
		}
	}
}

function getTypeName( typex ) {
	var types = new SCFile( "types" );
	
	print ( "Ok" );
	
	var rc = types.doSelect( "representation="+ typex );

	if ( rc == RC_SUCCESS ) {
	  print( "Success. found." );
	  return types.name;
	}
	else {
		print( "Could not find type!" + RCtoString( rc ) );
		return null;
	}
}

Próbáltam még erre a form-ra feltenni egy olyan gombot is, ami az SM licenceit mutatja meg egy Text Box-ban.

function getLicenseInfo() {
	var license = system.functions.get_module_license();

 	for ( var i in license ) {
 		var module = system.functions.strraw( license[i], "," );
 		var module1 = module.split( "," );

		 if ( module1[0] == "Self Service Ticketing" ) {
		 	print( module1[0] + " " + module1[2] + "(Unlimited)" );
		 }
		 else {
		 	print( module1[0] + " Named License " + module1[1] + "(" + module1[3] + ")" + " Float License " + module1[2] + "(" + module1[4] + ")" );
		 	vars.$flexdebug += module1[0] + " Named License " + module1[1] + "(" + module1[3] + ")" + " Float License " + module1[2] + "(" + module1[4] + ")" + String.fromCharCode(13);
		 }
 	}
}

Process Designer

Best practice link.

Menu Navigation: Tailoring - Process Designer

Fázisok ás átmenetek létrehozásának trükkjei

Menu Navigation: Tailoring - Process Designer - Workflows

  1. érdemes a fázisokat egyből létrehozni és azonnal elnevezni
  2. figyelni kell, hogy a átmenet parancs nevének megadásánál felül fogja írni a mögötte lévő scmessage rekordot is! Tehát, ha ezt megváltoztatjuk, akkor újra meg kell adni a nevét!!!

Alapértékek és kitöltések ellenőrzése [Rule Sets]

Menu Navigation: Tailoring - Process Designer - Rule Sets

Ezekhez lehet hasznos a fentebb említett két Forms Designer-ben készített Form-b=l az egyik: link mert a mezők nevénél nem magát a mezőnek a nevét kell megadni (amit a vastag kliensben a mezőt kijelölve és Ctrl-h nyomva tudunk megkapni, ha a Window - Preferences menüpontban a Service Manager almenü Appearance részében a “Show context-sensitive help debug information” opció bekapcsoltuk a kliensben.), hanem a Data Policy-ben lévő Caption nevét kell megadni a mezőhivatkozásoknál!

value=”Unplanned Change Detection”

value=”Rrrrisk ass”

Lista ellenőrzése egy globális lista alapján

A globálislista kiválasztásánal nem magát a globális lista változóját kell megadni, hanem a nevét. Ezt a legkönnyebben a Globális lista változójának kinyerése (vastag kliens, Forms Designer) után a Globallist táblából lehet kinyerni vagy a fent kszített másik Form segítségével: link

Globális szabályok egy munkafolyamatra

Mentés / kilépés (on Exit) előtti mező kitöltöttség ellenőrzése

Dátum összehasonlítása és ellenőrzése

Időzített fázisátmenetek és ellenőrzésük

Ezekre azért lehet szükség, mert előfordulhat olyan helyzet, amikor úgy akarunk módosítást végezni egy tábla egy rekordján, hogy nem tudjuk nem lock-olta e már valaki a rekordot.

var start           = new Date();
actionExecutionTime = new Date( start.getFullYear(), start.getMonth(), start.getDate(), start.getHours(), start.getMinutes() + 2, start.getSeconds() );

Az ilyen scheduled action-öket a command( scheulde ) vagy command( db, schedule, schedule ) parancs segítségével lehet a legkönyebben nyomonkövetni:

Backend transition

Ennek a segítségével lehet egy munkafolyamatot egy a munkafolyamattól teljesen független fázisba mozgatni:

Más tábla alapján történő ellenőrzés

Operátor rekord email címe alapján ellenőrzés, javascript, debug

email in $L.file~=null

DEBUG javascript:

var f = new SCFile( "operator", SCFILE_READONLY );
var query = "name=\"" + vars['$L.file']['coordinator'] + "\"";
var rc = f.doSelect( query );

if ( rc==RC_SUCCESS ) {
    print( f.email );
}
else { 
    print( "Email Not found!" ); 
}

Jóváhagyások

Ha azt szeretnénk, hogy egy fázisátmenet csak akkor történhessem meg, ha már egy állapotban bizonyos feltételek mellett jóvá lett hagyva a folyamat, akkor abban a fázisban definiálni kell a megkövetelt jöváhagyásokat és még egy feltételhez is kell kötnünk az új fázisba történő lépést, hogy addig amig nem történik meg a teljes jóváhagyás, addig a gomb ne is jelenjen meg! Itt egy egyszerű példa erre a fázisátmenet feltételre:

All must approve All members of the group must approve the request. (A csoport minden tagjának jóvá kell hagynia a kérelmet.) One must approve Only one member must approve the request. (Csak egy tagnak kell jóváhagynia a kérelmet.) Quorum A majority of the approval group must approve the request. (A jóváhagyó csoport többségének kell jóváhagynia a kérelmet.) All must approve - immediate denial All approvers must approve the request. The first denial causes the status to change to Deny. Other approvers do not need to take any action. (Minden jóváhagyónak jóvá kell hagynia a kérelmet. Az első visszautasítás után az állapot megszakad. Az egyéb jóváhagyóknak nem kell már intézkedniük.) One must approve by sequence approval level When this option is selected, the following behavior applies (Ha ezt az opciót választjuk, akkor a következő viselkedés lesz érvényes):

  • When a sequence is defined with a group of approvers, if one approver approves the request, the entire sequence is approved and the request is passed to the next sequence for approval. Only when all sequences are approved, the request is approved. (Ha egy szekvenciát jóváhagyók csoportjával definiálnak és ha egy jóváhagyó jóváhagyja a kérést, akkor a teljes sorozatot jóváhagyták, és a kérést a következő sorrendre továbbítja jóváhagyásra. Csak akkor lesz a kérelmet teljesen jóváhagyva, ha az összes szekvenciát jóváhagyták már.)
  • Only when all approvers for a sequence have denied the request, the entire sequence is denied. If one sequence is denied, the request is denied. (A kérés csak akkor lesz visszautasítva, ha egy szekvencia minden jóváhagyója megtagadta a kérést. Így ha egy szekvenciát elutasítanak, a kérés jóváhagyása meg lesz tagadva.)

(forrás)

command( db, Approval, Approval )

Értesítések

command( db, notification )

command( db, htmltemplates )

Új változáskezelési kategória felvétele

Menu Navigation: Change management - Configuration - Change Categories

Workflow export

Workflow import


Nincs jog fenntartva -= FLEISCHMANN =- No rights reserved