Sette ArcGIS lisensnivå i FME

Noen ganger kan det være nødvendig å overstyre ArcGIS lisensnivået i FME fra hva det er satt til på maskinen. Dette kan typisk være i situasjoner der FME prosjektene brukes til batchprosesser og det er få lisenser tilgjengelig.

Hva må gjøres for å få dette til?

FME vil, som ArcGIS, normalt hente lisensieringsnivå fra registry – altså det som er satt i Desktop Administrator. I ArcGIS kan man overstyre dette ved å sette en miljøvariabel, ESRI_SOFTWARE_CLASS, til en av tre mulige verdier:
Viewer - setter lisensieringsnivå til ArcGIS for Desktop Basic
Editor - setter lisensieringsnivå til ArcGIS for Desktop Standard
Professional – setter lisensieringsnivå til ArcGIS for Desktop Advanced

Dersom miljøvariabelen ESRI_SOFTWARE_CLASS er satt, vil ArcGIS for Desktop starte med lisensieringsnivået spesifisert i miljøvariabelen i stedet for verdien som er satt i Desktop Administrator. Dette gjør det, for eksempel, mulig å sette lisensieringsnivå i virtuelle miljøer basert på brukers påloggingsscript. Problemet når FME brukes, er at FME i utgangspunktet IKKE bryr seg om at miljøvariabelen er satt, men likevel henter lisensieringsnivå fra registry, altså det som er spesifisert i Desktop Administrator.

Det finnes en mulighet for å omgå dette problemet. Det vi må gjøre er å bruke et Python oppstartscript som setter ArcGIS lisensieringsnivå basert på miljøvariabelen ESRI_SOFTWARE_CLASS. SAFE Software har lagt ut en Knowledge Base artikkel om akkurat dette, 000002531. Det er ikke like rett frem som artikkelen sier – det er noe vi må ta høyde for:

• Dersom scriptet lages slik det er beskrevet i dokumentet, vil likevel ikke lisensen endres. Det skyldes at FME, i utgangspunktet, bruker den Python versjonen som følger FME. Den Python versjonen aner dessverre ingen ting om ArcPy. Vi må bytte til en Python versjon som kjenner ArcPy, ellers får vi ikke satt ArcGIS lisensnivå. Dette er beskrevet i FME Knowledge Base artikkel 000002014. Merk: Denne settingen gjelder pr bruker. Hvis FME prosjektet skal brukes i en batchjobb, for eksempel ved å kjøre det gjennom Scheduled Task på maskinen, må vi gjøre denne endringen for den brukeren den oppsatte Scheduled Task logger seg på maskinen med! • Litt avhengig av hva som er installert på maskinen FME og ArcGIS er installert på, kan vi få problemer med at Python ikke klarer å hente inn rett Runtime Library for C. Det finnes en måte å omgå dette, beskrevet i FME Knowledge Base artikkel 000002458.

I tillegg til dette, kan det være fornuftig å få skrevet noe til loggfilen. Dette gjelder spesielt dersom FME prosjektene kjøres i batchjobber. Hvordan dette gjøres, er beskrevet i FME Knowledge Base artikkel 000001052.

Hvordan gjøres dette så i praksis?

Vi må nå inn i FME Workbench å gjøre de tilpasningene vi trenger for å få FME til å bruke rett ArcGIS lisensnivå. En del av dette må gjøres i hvert enkelt FME prosjekt, mens noe gjelder for FME Workbench generelt.

Sette FME til å bruke rett Python versjon

Det første vi gjør er å spesifisere hvilken Python versjon vi skal bruke. Start FME Workbench og velg Tools > FME Options… I skjermbildet som kommer opp velger vi Runtime.

For å få til å endre Python versjon, må vi markere i feltet Use Custom Python Interpreter:, og så må vi finne tak i rett Python versjon basert på hva som står i FME Knowledge base artikkel 000002014. Dette gjør vi med Browse… knappen. Vi bekrefter valget med å trykke på OK knappen. Når vi har gjort dette, vil denne endringen gjelde for all videre bruk av FME for den innloggete brukeren.

Spesifisere Python oppstartscript

Vi må nå spesifisere et oppstartscript for FME prosjektet. Dette er en innstilling som gjelder per prosjekt, og vi må derfor legge inn dette oppstartscriptet for alle FME prosjekter som skal ta høyde for miljøvariabelen ESRI_SOFTWARE_CLASS. Vi spesifiserer dette ved å bruke Navigator i FME Workbench og gå til Advanced under Workspace Parameters, slik bildet viser.

Vi høyreklikker på parameteren Startup Python Script og velger Edit Parameter Value… Vi får nå opp en dialogboks, hvor vi kan legge inn et Python script:

Vi er nå klar for å legge inn Python scriptet som brukes ved oppstart av FME prosjektet.

Innholdet i Python scriptet for å sette ArcGIS lisensnivå

Vi legger nå inn koden for Python scriptet. Den kan se slik ut:

#
# Startup script to force FME to use ArcGIS license supplied in the
# ESRI_SOFTWARE_CLASS environment variable. The basics for the script is # specified in FME Article Number: 000002531
# This script has local alterations.
#
# To make the script work as expected, we need to modify the Python interpreter
# referenced by FME to be compatible with the version ArcGIS uses. This is set
# in: Tools > FME Options > Runtime > Use Custom Python Interpreter:
# Set this value to: C:\Windows\System32\python27.dll
# Specified in FME Article Number: 000002014 # MARK: This is a personal setting, not a global setting!
# Must be set for every user using the script.
#
#
# Import necessary objects into the script
# import sys,os,fmeobjects try:
#
# There may be mismatches with the Visual Studio settings so FME may be crashing.
# Specified in FME Article Number: 000002458
# we remove the environment variable PATH altogether for the script. This modifies
# the environment for this script only.
# os.environ["PATH"] = ""
#
# We attach the process to the FME log file
# Specified in FME Article Number: 000001052
# logger = fmeobjects.FMELogFile()
#
# We search for the environment variable ESRI_SOFTWARE_CLASS:
# SWClass=os.environ['ESRI_SOFTWARE_CLASS']
#
# If it has been set, we print a message to the log file
# logger.logMessageString("Environment variable ESRI_SOFTWARE_CLASS has value: "+SWClass) try:
#
# If it has been set to "Viewer" we prepare the ArcGIS Basic license (formerly: ArcView)
# if SWClass=="Viewer": import arcview
#
# If it has been set to "Editor" we prepare the ArcGIS Standard license (formerly: ArcEditor)
# elif SWClass=="Editor": import arceditor
#
# If it has been set to "Professional" we prepare the ArcGIS Advanced license (formerly: ArcInfo)
# elif SWClass=="Professional": import arcinfo
#
# If it has not been set to neither "Viewer", "Editor" nor "Professional", we issue an error message
# else: logger.logMessageString("Invalid value found for environment variable ESRI_SOFTWARE_CLASS") logger.logMessageString("Try changing to \"Viewer\", \"Editor\", or \"Professional\"")
#
# If we, for any reason, are not able to set the correct licensing level, we issue an error
# except: logger.logMessageString("Error setting correct licensing level: "+SWClass)
#
# If the correct lcensing level has been set, we write the correct licensing level to the log file
# import arcpy logger.logMessageString("Esri Edition set to "+ arcpy.ProductInfo())
#
# If we do not find the ESRI_SOFTWARE_CLASS variable, we print a message to the log
# except: logger.logMessageString("Environment variable ESRI_SOFTWARE_CLASS is not set") logger.logMessageString("Using ESRI licensing level from registry (Desktop Administrator)")