metafresh logo and link to homepage

How to setup the standalone printing client with webui?

Intro

A standalone printing client is useful in differnt scenarios. For example, if you use a hosted metasfresh instance, that instance which runs on our server has no access to your local printers. Still, your processes might require that at certain stages, documents are automatically printed by your local servers.

To address this and other scenarios, the standalone printing client can run locally, with access to your local printers. It can retrieve print jobs from metasfresh and perform them using your printers.

0. Get the printing client software

1. Set up a dedicated printing-client-user in metasfresh

Background: metasfresh allows to configure one user to print on behalf of another user. The standalone printing client will connect to metasfresh a the user which we configure in this step. It can then receive those other users’ print jobs to print all of the on your local printers.

2. Create the printing client config file

#
# Settings that you certainly need to adapt
#
# The URL where the printing endpoint is listening for requests
de.metas.printing.client.endpoint.RestHttpPrintConnectionEndpoint.ServerUrl=http://<your-metasfresh-server>:<port>/api/printing

# Authorization token, to be used when the printing client connects to metasfresh's rest API
# The correct token needs to be generated for the respective user in metasfresh
de.metas.printing.client.login.apiToken=<the token you generated further up>

# The hostKey is an identifier under which the client will register its local printer(s) etc on metasfresh.
# Please pick a value that makes sense for you. For example, if you only have one printing client you can simply go with `PrintingHostService`
de.metas.printing.client.login.hostkey=<host-key-for-this-printing-client>

#
# Settings that you might want to tweak
#
# The poll interval in milliseconds. Default: 1000ms
# Sets at which intervals the printing client shall query metasfresh for new print jobs (yes, we know that polling sucks..).
de.metas.printing.client.PrintingClientDaemon.PollIntervalMs=10000

# If the client receives a printing error from the underlying printer API, 
# then these two parameters can be used to specify how often the client shall retry and how long it shall wait between each retry. 
# Two retries mean that the client will attempt the print three times max. 
# Defaults: retry 3 times and wait 5 seconds between each retry
de.metas.printing.client.engine.retryCount=3
de.metas.printing.client.engine.retryIntervalMs=5000

#
# TESTING: these properties can be used to simulate problems with the printing client
#
# Uncomment if the printing client shall return an error status even when the print was successful
#de.metas.printing.client.testing.alwaysReportError=true
#
# Error message to be send by the client *if* allwaysReturnError=true is enabled
# thx to http://stackoverflow.com/questions/11838674/how-to-read-property-name-with-spaces-in-java
#de.metas.printing.client.testing.errorMessage="TESTING\:\ The\ client\ returned\ 'ERROR'\ for\ testing\ purposes"
#
# Uncomment if the printing client shall *not* return *any* response after printing
#de.metas.printing.client.testing.dontSendResponse=true

#
# Settings that you most probably don't want to touch
#
# The enpoint component to use for the connection. Can be changed e.e for testing
de.metas.printing.client.IPrintConnectionEndpoint=de.metas.printing.client.endpoint.RestHttpPrintConnectionEndpoint

# Possible values are base64 (when getting data from the ESB) and binary (when getting data directly from metasfresh)
# The default is "base64" to ensure that new client binaries still work with the old ESB infrastructure, 
# without changing the config file
de.metas.printing.client.endpoint.RestHttpPrintConnectionEndpoint.dataEncoding=binary

Additional notes

3. Start the printing client

You can now open a command line and start the printing client like this:

java -Xmx200m -Dconfig="<printing-client-config-file>" -jar <printing-client.jar>

Example: java -Xmx200m -Dconfig="metasfresh-printing-client-config.properties" -jar my-downloaded-standalone-printing-client.jar

Note: as a windows user, you can open a command line by entering cmd.exe into the start menu search field.

The console output should look like this:

Jun 18, 2017 7:03:14 AM de.metas.printing.client.PrintingClientStandaloneService
 logVersionInfo
INFO: Resource jar:file:<printing-client.jar>!/META-INF/MANIFEST.MF has version <printing-client-build-version>
Jun 18, 2017 7:03:15 AM de.metas.printing.client.engine.PrintingClientDaemon loginIfNeeded
INFO: Successfully logged in as user metasfresh-printing-client-test-IT. Received sessionId=1097453

When the printing client starts up, it does the following

4. Configure the printing client in metasfresh

5. Associate the printing client’s config with the user(s) that need to print

Here the important part is to find out that user’s hostkey.

The hostkey is stored in the user’s session, so if you just logged in as “myLoginName”, you can select

SELECT updated, LoginUserName, hostkey FROM AD_Session
WHERE LoginUserName='myLoginName'
ORDER BY AD_Session_ID DESC LIMIT 1

Notes:

Once you have the host key, create a new record in “Drucker-Zuordnung” (AD_Printer_Config)

Now you are done..e.g. go to Wareneingangsdispo and press invoke the “Drucken Produktanlieferung” action.


Zur Quelldatei auf github.com