Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Insert excerpt
QEST Platform Documentation 4.81
QEST Platform Documentation 4.81
nopaneltrue

Applies to QESTNet


Info

This article details the configuration for the QESTNet product. 

Contents

Table of Contents
excludeContents

QESTNET.exe.config

QESTNET.exe.config is the primary configuration file for the QESTNet service and resides side-by-side with the service executable, QESTNET.exe. The file is in XML format and can be edited by any standard text or XML editor. The initial config file contains the major sections as shown below. Each section is described in this article. Note that some sections should not generally be modified without the advice of Spectra QEST. Sections that will need to be customised for the specific QESTNet instance are described in the Specific Configuration section below.


Code Block
languagexml
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <configSections>...</configSections>

  <appSettings>...</appSettings>

  <qestnet>...</qestnet>

  <fileSmtpIntegrators>...</fileSmtpIntegrators>

  <castle>...</castle>

  <log4net>...</log4net>

  <entityFramework>...</entityFramework>

  <connectionStrings>...</connectionStrings>

  <system.web>...</system.web>

  <system.net>...</system.net>

  <system.serviceModel>...</system.serviceModel>

  <startup>...</startup>

</configuration>

General Configuration

This section describes the general configuration of the QESTNet service that all instances will have. It is usually not necessary to modify the configuration sections described in this section.

configSections

This section defines the structure of later sections of the QESTNET.exe.config file. Do not change this section unless advised to do so by Spectra QEST.

appSettings

This section contains name-and-value pairs for commonly modified settings.


Code Block
languagexml
<appSettings>
    <add key="verifyDatabase" value="False" />
    <add key="logQueryTiming" value="False" />
    <add key="concurrencyResolution" value="MergeOurs" />
    <add key="numberOfPersistAttempts" value="5" />
    <add key="enableLocking" value="False" />
	<add key="PdfiumOctTreeQuantization" value="true" />
    <add key="PdfiumRenderDpi" value="300" />
    <add key="PdfiumRenderSize" value="1200" />
    <add key="PdfPreviewHeight" value="240" />
    <add key="PdfPreviewWidth" value="176" />
</appSettings>


Setting
Value Type
Default Value
Description
verifyDatabaseTrue/FalseFalseWhen set to "true" the database structure will be fully verified against the structure expected by QESTNet on first access to the database. This will cause a delay of several minutes while the verification runs. Not recommended for production systems.
logQueryTimingTrue/FalseFalseWhen set to "true" the database queries run by QESTNet will be written to the logs along with the execution time of those queries. This has a performance impact and should not be enabled for a production system.
concurrencyResolutiontextMergeOursDefines the resolution strategy used by QESTNET to resolve concurrent database updates for documents. The acceptable values are as follows:
  • Discard: When any of the documents a user is attempting to save have had a concurrent update, the entire set of changes to all loaded documents is discarded, and the current versions are reloaded from the database.
  • MergeTheirs: The concurrent changes are retrieved from the database and combined with the user's changes, then run through the business logic before being committed to the database. Where both the concurrent changes and the user's changes affect the same document values, the concurrent changes are used.
  • MergeOurs: As for MergeTheirs, except the current user's changes are used when clashes between concurrent changes and the user's.
  • Override: Concurrent updates are ignored and the modified documents the user is attempting to save are written to the database, undoing the concurrent changes.

The default, MergeOurs, is recommended for most installations.

numberOfPersistAttemptsint5Specifies the number of times that QESTNet will attempt to resolve a commit to the database when concurrent updates are occurring. When defined, this setting must be set to a number between 1 and 20, inclusive. Changing this setting is not recommended.
enableLockingTrue/FalseFalse

When set to "true" SessionConnection records will be added and removed from the database when users log in and out of QESTNet via any application. Additionally, a document lock will be written for a Work Order whenever it is opened in the View Work Order workflow in QESTField. All locks are removed when returning to the "home" search page in QESTField. These document locks will prevent users within QESTLab and QESTField from working on any documents associated with the same work order at the same time.

emailWarningSizeint (bytes)5242880The threshold in bytes at which emails sent via QESTNet will display a warning to the user. This is currently only applicable to workflows such as the Daily Field Inspection which allow summary emails with test report images to be sent. The default value is 5242880 (5MB).
PdfiumOctTreeQuantizationTrue/FalseTrueEnables fast rendering high quality images to low quality
PdfiumRenderDpifloat300The rendering of pdf pages to images to this dpi (dots per inch)
PdfiumRenderSizeint (px)1200The rendering of pdf pages to images to this size in px (square) 
PdfPreviewHeightint (px)240Scales the rendered image to this height (px). Note; the original aspect ratio is maintained
PdfPreviewWidthint (px)176Scales the rendered image to this width (px). Note; the original aspect ratio is maintained
sqlCommandTimeoutint (seconds)60The default timeout for SQL queries executed by QESTNet. If infrastructure is slow and queries are timing out too soon, this can be increased to avoid errors.
DailyFieldReportFromAddress

text

Must be in a valid format for the .NET MailAddress class. See here for more information.

Null


Info

This setting is available from v.4.81.3688.29043

Specifies the 'from' address to use for Daily Field Inspection summary emails.

When this setting is not provided, the 'from' address will be obtained from the following sources (in descending priority):

  • Email address of the user sending the email
  • Default 'from' address according to the SMTP configuration. See Settings for Email section below.
BatchPlantTicketFromAddress

text

Must be in a valid format for the .NET MailAddress class. See here for more information.

Null


Info

This setting is available from v4v.4.81.3764.40451.

Specifies the 'from' address to use for Batch Plant Inspection Ticket summary emails.

When this setting is not provided, the 'from' address will be obtained from the following sources (in descending priority):

  • Email address of the user sending the email
  • Default 'from' address according to the SMTP configuration. See Settings for Email section below.
ConcreteSummaryFromAddress

text

Must be in a valid format for the .NET MailAddress class. See here for more information.

Null


Info

This setting is available from v4from v.4.81.3764.40451

Specifies the 'from' address to use for AU Concrete Producer customer summary emails.

When this setting is not provided, the 'from' address will be obtained from the following sources (in descending priority):

  • Email address of the user sending the email
  • Default 'from' address according to the SMTP configuration. See Settings for Email section below.

qestnet

This section contains configuration subsections that related specifically to the QESTNet service. Portions of this section will be general and others specific to a given instance of QESTNet. 


Code Block
languagexml
<qestnet>

    <engine>...</engine>

    <services>...</services>

    <modules>...</modules>

    <dataIntegrators>...</dataIntegrators>

    <store fileStorePath="C:\QESTNET\File Store\" />

</qestnet>

engine sessions

This section defines the sessions supported by QESTNet . Sessions hold state information for a given user for a given duration. By default there are two:

  • IntegrationSession: holds the available data integrators ready to be triggered by timers or by user action.
  • LabSession: holds the open documents of a user using the Lab functionality - such as through QESTField.

Code Block
languagexml
<engine>
    <sessions>
        <add name="LabSession" assemblyName="QESTNET.Sessions.Lab" typeName="Spectra.QESTNET.Sessions.Lab.LabSession" lifetime="01:00:00"/>
        <add name="IntegrationSession" assemblyName="QESTNET.Sessions.Integration" typeName="Spectra.QESTNET.Sessions.Integration.IntegrationSession" lifetime="9999.00:00:00" />
    </sessions>
</engine>

Notes:

  • lifetime is a time span value which defines the duration after which a session will be terminated by QESTNet if there has been no activity from the client.
    • The default value for LabSession, which is used for QESTField sessions, is one hour. This value can be set lower to terminate sooner and clear memory faster, however setting it too low can be inconvenient to users who would lose any unsaved work and be forced to log in again.
    • The default value for IntegrationSession, which is used for running data integrators, is 9999 days. This is to ensure the session will not terminate and stop running timed integrators.
    • For information on the TimeSpan string format see: https://msdn.microsoft.com/en-us/library/se73z7b9(v=vs.110).aspx

services

This section defines the services supported by QESTNet. Services define the external contracts of communication with QESTNet. In the default configuration there are two:

  • IntegrationService for data integration with remote systems.
  • LabService for providing QESTLab functionality to clients such as QESTField.
  • APIService for providing QESTNet functionality to QESTField through the Web Api.

Modification of this section is not commonly required.

Code Block
languagexml
<services>
	<add name="IntegrationService" assemblyName="QESTNET.Sessions.Integration" typeName="Spectra.QESTNET.Sessions.Integration.IntegrationSessionService" startAdminSession="True" />
    <add name="LabService" assemblyName="QESTNET.Sessions.Lab" typeName="Spectra.QESTNET.Sessions.Lab.LabSessionService" />
    <add name="ApiService" assemblyName="QESTNET.Api" typeName="Spectra.QESTNET.Api.ApiStartup" webApiAddress="http://*:53535" />
</services>


modules

The list of assemblies from which workflow definitions and data contracts are obtained. The default modules are:

  • Workflow: defines the standard core workflows of the Lab Session (used by QESTField).
  • Contracts.Models: defines the data contracts used for communication with the Lab Session (used by QESTField).
  • API.Concrete: defines the concrete endpoints available through the Web Api.
  • API.Forms: defines the forms endpoints available through the Web Api.

castle

This section defines the installers used to identify service classes used with QESTNet. Do not change this section unless advised to do so by Spectra QEST.

log4net

The popular logging system log4net is used for logging from QESTNet. General QESTNet logging and logging for licensing are configured separately. The default configuration:

  • Writes general logging to rolling files, one file per day, in the location [ProgramData]\Spectra QEST\QESTNET vX.X\Logs. The files are prefixed with qestnet-log.
  • Writes licensing logging to rolling files, one file per day, in the location [ProgramData]\Spectra QEST\QESTNET vX.X\Logs. Licensing files are prefixed with licensing-log.

Code Block
languagexml
<log4net>
    <!-- General QESTNet logging -->
    <appender name="QESTNetRollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="${ALLUSERSPROFILE}\Spectra QEST\QESTNET vX.X\Logs\qestnet-log" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value=".yyyy.MM.dd.\t\x\t" />
        <staticLogFileName value="false" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %level %message%newline" />
        </layout>
    </appender>
    <logger name="Spectra">
        <level value="WARN" />
        <appender-ref ref="QESTNetRollingFile" />
    </logger>

    <!-- Licensing logging -->
    <appender name="LicensingRollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="${ALLUSERSPROFILE}\Spectra QEST\QESTNET vX.X\Logs\licensing-log" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value=".yyyy.MM.dd.\t\x\t" />
        <staticLogFileName value="false" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %level %message%newline" />
        </layout>
    </appender>
    <logger name="LicensingLogger">
        <level value="INFO" />
        <appender-ref ref="LicensingRollingFile" />
    </logger>
</log4net>


For advanced configuration of log4net, the manual is available here: https://logging.apache.org/log4net/release/manual/configuration.html#files

entityFramework

This section defines the core providers used in communication with the database. Do not change this section unless advised to do so by Spectra QEST.

system.Web

This section defines core providers. Do not change this section unless advised to do so by Spectra QEST.

system.serviceModel

This area defines the configuration settings for the WCF services provided by QESTNet. For more information on how to customise any area of system.serviceModel, see: https://msdn.microsoft.com/en-us/library/ms731354(v=vs.110).aspx

bindings

This section defines the binding configurations used to expose the QESTNet services. The default binding configurations included in the config file are as shown:


Code Block
languagexml
<bindings>
    <netTcpBinding>
        <binding name="UnsecuredBindingTcp">
            <security mode="None" />
        </binding>
        <binding name="FileStreamBindingTcp"
                 transferMode="Streamed"
                 maxReceivedMessageSize="2147483647"
                 maxBufferSize="2147483647">
            <readerQuotas maxStringContentLength="2147483647"
                          maxArrayLength="2147483647" />
            <security mode="None" />
        </binding>
    </netTcpBinding>
    <netNamedPipeBinding>
        <binding name="UnsecuredBindingNamedPipe">
            <security mode="None" />
        </binding>
    </netNamedPipeBinding>
</bindings>


  • UnsecuredBindingTcp: a TCP binding with no security enabled, used to expose the LIMS functionality to clients on the same local network (e.g. QESTField).
  • FileStreamBindingTcp: a streaming TCP binding with no security enabled, used to transfer files to and from the QESTNet to clients on the same local network (e.g. QESTField).
  • UnsecuredBindingNamedPipe: a named pipe binding with no security enabled, used to expose Data Integrator management functionality to clients on the same machine (e.g. QESTNet Console)

Binding properties can be adjusted or additional bindings can be added as the situation requires it. For example an HTTP binding can be added to expose QESTNet functionality on the web.

For more information on how to customise service bindings, see: https://msdn.microsoft.com/en-us/library/ms731399(v=vs.110).aspx

behaviors

This section defines the service behaviours. By default there is a single common behaviour used by all QESTNet services defined as shown:


Code Block
languagexml
<behaviors>
    <serviceBehaviors>
        <behavior name="Spectra.QESTNET.Sessions.DefaultBehavior">
            <serviceMetadata httpGetEnabled="false" />
            <serviceDebug includeExceptionDetailInFaults="true" />
            <serviceThrottling
                maxConcurrentCalls="1000"
                maxConcurrentSessions="1000"
                maxConcurrentInstances="1000" />
        </behavior>
    </serviceBehaviors>
</behaviors>


For more information on how to customise service behaviour, see: https://msdn.microsoft.com/en-us/library/aa967282(v=vs.110).aspx

services

This section defines the WCF services exposed by the QESTNet. By default there are two:

  • Lab Service used by clients of LIMS functionality such as QESTField.
  • Integration Service used by clients administering data integrators such as the QESTNet Console.

These services use the endpoints and behaviors defined previously.


Code Block
languagexml
<services>

  <!-- Lab Service -->
    <service behaviorConfiguration="Spectra.QESTNET.Sessions.DefaultBehavior" name="Spectra.QESTNET.Sessions.Lab.LabSessionService">
        ...
    </service>

    <!-- Integration Service -->
    <service behaviorConfiguration="Spectra.QESTNET.Sessions.DefaultBehavior" name="Spectra.QESTNET.Sessions.Integration.IntegrationSessionService">
        ...
    </service>

</services>


Lab Service


Code Block
languagexml
<!-- Lab Service -->
<service behaviorConfiguration="Spectra.QESTNET.Sessions.DefaultBehavior"
         name="Spectra.QESTNET.Sessions.Lab.LabSessionService">
    <endpoint address="" 
              binding="netTcpBinding" 
              bindingConfiguration="UnsecuredBindingTcp"
              name="Lab_Session"
              contract="Spectra.QESTNET.Contracts.ISessionService" />
              
    <endpoint address="query"
              binding="netTcpBinding"
              bindingConfiguration="UnsecuredBindingTcp"
              name="Lab_Query"
              contract="Spectra.QESTLab.Contracts.ILabQueryService" />
              
    <endpoint address="file" 
              binding="netTcpBinding"
              bindingConfiguration="FileStreamBindingTcp"
              name="Lab_File"
              contract="Spectra.QESTLab.Contracts.ILabFileService" />
              
    <endpoint address="mex"
              binding="mexTcpBinding" 
              bindingConfiguration="" 
              name="Lab_MEX" 
              contract="IMetadataExchange" />
              
    <host>
        <baseAddresses>
            <add baseAddress="net.tcp://localhost:52525/Lab" />
        </baseAddresses>
    </host>
</service>


The Lab Service contains four endpoints:

Endpoint NameAddressDefault BindingPurpose
Lab_Session/Unsecured TCPProvides fundamental QESTNet session control functions such as opening and closing sessions and the sending of commands to QESTNet.
Lab_Query/queryUnsecured TCPProvides data structures of information relating to LIMS functionality based on certain request formats.
Lab_File/fileUnsecured Streaming TCPStreams the data content of large files.
Lab_MEX/mexMetadata Exchange TCPProvides information about the service and its endpoints

The Lab Service also specifies a host base address:

<host>
    <baseAddresses>
        <add baseAddress="net.tcp://localhost:52525/Lab" />
    </baseAddresses>
</host>

Only the protocol and the port should be changed when customised binding is used. The host name of localhost and the path of Lab should not be changed. This baseAddress is for convenience of configuration and is simply added to the start of the Address for each endpoint.

Integration Service


Code Block
languagexml
<!-- Integration Service -->
<service behaviorConfiguration="Spectra.QESTNET.Sessions.DefaultBehavior"
         name="Spectra.QESTNET.Sessions.Integration.IntegrationSessionService">
    <endpoint address="" binding="netNamedPipeBinding"
              bindingConfiguration="UnsecuredBindingNamedPipe"
              name="Integration_Session"
              contract="Spectra.QESTNET.Contracts.ISessionService" />
    
    <endpoint address="integration"
              binding="netNamedPipeBinding"
              bindingConfiguration="UnsecuredBindingNamedPipe"
              name="Integration_Integration"
              contract="Spectra.QESTNET.Integration.Contracts.IIntegrationService" />
    
    <endpoint address="mex"
              binding="mexNamedPipeBinding"
              bindingConfiguration=""
              name="Integration_MEX"
              contract="IMetadataExchange" />
              
    <host>
        <baseAddresses>
            <add baseAddress="net.pipe://localhost/Integration" />
        </baseAddresses>
    </host>
</service>


The Integration Service contains three endpoints:

Endpoint NameAddressDefault BindingPurpose
Integration_Session/Unsecured Named PipeProvides fundamental QESTNet session control functions such as opening and closing sessions and the sending of commands to QESTNet.
Integration_Query/integrationUnsecured Named PipeProvides methods for the control of data integration modules.
Integration_MEX/mexMetadata Exchange Named PipeProvides information about the service and its endpoints

The Integration Service also specifies a host base address:


Code Block
languagexml
<host>
    <baseAddresses>
        <add baseAddress="net.pipe://localhost/Integration" />
    </baseAddresses>
</host>


Only the protocol and the port should be changed when customised binding is used. The host name of localhost and the path of Integration should not be changed. This baseAddress is for convenience of configuration and is simply added to the start of the Address for each endpoint.

startup

This section defines the expected version of the .NET Framework. Do not change this section unless advised to do so by Spectra QEST.

Specific Configuration

These sections of QESTNet.exe.config are likely to differ for each organization's instance of QESTNet.

qestnet

This section contains configuration subsections that related specifically to the QESTNet service. Portions of this section will be general and others specific to a given instance of QESTNet. It is usually necessary to modify the configuration sections described in this section to be applicable to the given network and QESTNet instance.


Code Block
languagexml
<qestnet>

    <engine>...</engine>

    <services>...</services>

    <modules>...</modules>

    <dataIntegrators>...</dataIntegrators>

    <store fileStorePath="C:\QESTNET\File Store\" />

</qestnet>

modules

If there are any custom workflows to use, their assemblies for workflows and contracts must also be defined here. The required definitions for known configurations are published in sample configuration files with QESTNet.

Code Block
languagexml
<modules>
    <add name="Contracts.Models" assemblyName="QESTLab.Contracts.Models" />
    <add name="Workflow" assemblyName="QESTLab.Workflow" />
    <add name="Api.Concrete" assemblyName="QESTNET.Api.Concrete" />
    <add name="Api.Forms" assemblyName="QESTNET.Api.Forms" />
</modules>

store

This section defines the file store path used by QESTNet. This setting can be omitted or left with the default path, even if the path is invalid; the file store is deprecated and used only in very specific circumstances.


Code Block
languagexml
<store fileStorePath="C:\QESTNET\File Store\" />


dataIntegrators

This section is where the available data integrators for the deployment are defined. This section is not required it only needs to exist when data integration is being used. The Spectra QEST services team will advise if any data integrators additional to the notification email summarising license use is required.


Code Block
languagexml
<dataIntegrators>
    <add
        name ="Example Data Integrator"
        assemblyName ="QESTNET.Custom.Company"
        pluginType ="Spectra.QESTNET.Custom.Company.ExampleDataIntegrator"
		integratorConfigFile="Z:\path\to\config_file.ext"
        inputName ="InputCS"
        outputName ="OutputCS"
		fileSystemWatchDirectory ="\\someserver\some\directory"
		fileSystemWatchFilter = "apattern_*.ext"
        transferInterval ="01:00:00"
        timeDelay =""
        dateDelayUntil =""
        timeDelayUntil =""
        state ="Stopped"
        isThreadSafe ="False"
		waitForIntegratorNames ="Emample Integrator A,Example Integrator B"
    />
</dataIntegrators>


Each data integrator can have the following properties:

  • name: Required. The identifier for the data integrator. Each integrator must have a unique name.
  • assemblyName Required. The assembly that the custom code class is located in.
  • pluginType: Required. The custom code class which contains the logic for the data integrator.
  • integratorConfigFile: Optional. Only used by integrators which understand it. A config file with integrator-specific configuration.
  • inputName: Optional. Typically required by integrators that don't use an external configuration. The data source from which the integrator will extract data. This value will typically correspond to the name of a connection string in the connectionStrings section. If it does, then that connectionString is used to open the input data source.
  • outputName: Optional. Typically required by integrators that don't use an external configuration. The data source to which the integrator will write data. This value will typically correspond to the name of a connection string in the connectionStrings section. If it does, then that connectionString is used to open the output data source.
  • fileSystemWatchDirectory: Optional. An alternative to timers, executes the integrator when a file is created, modified or renamed in this directory. Can be a local or network path. Requires a fileSystemWatchFilter to be specified. An integrator using this will attempt to open the files it finds for reading, and will ignore any of the timer based options. All integrators using a file system watch are assumed to be threadsafe for handling multiple files that are created, etc. at the same time.
  • fileSystemWatchFilter: Optional. Required with fileSystemWatchDirectory. Restricts which files will be noticed by the file system watcher. Is a pattern using an asterisk (*) for a wildcard that can be any sequence of up to any length.
  • transferInterval: After executing having executed the first time, the period a started data integrator will wait before executing again.
  • timeDelay: The period which a started data integrator will wait before first executing.
  • dateDelayUntil: A list of common delays until which a started data integrator will wait before executing for the first time. Possible values: "NextSunday", "NextMonday", "NextTuesday", "NextWednesday", "NextThursday", "NextFriday", "NextSaturday", "NextMonthFirst", "ThisMonthLast"
  • timeDelayUntil: The time until which a started data integrator will wait before executing for the first time, once the dateDelayUntil has been satisfied.
  • state: Whether or not the timer clock is currently running for this data integrator. Valid values are "Stopped" and "Started". QESTNet will initialise the timer clock for the integrator based on this value such that a running timer clock will restart even if the QESTNet restarts. NOTE: the "Started" state does not mean the data integrator itself is currently executing, simply that the timer clock is. Only data integrators with a value for one or more of transferInterval, timeDelay, dateDelayUntil or timeDelayUntil can be started.
  • waitForIntegratorNames: a comma separated list of names of integrators that this integrator should wait to finish before it begins running. This doesn't trigger the integrator to begin running, it still requires either a timer, or a file system watch to be configured. This must not be configured in a way that causes an integrator to wait for itself, even indirectly - e.g. two integrators that are both configured to wait for each other - this will cause a deadlock where neither integrator will ever run.

Licensing Email Data Integrator

While all integrators are optional it is strongly recommended that all organizations include the Licensing Emailer data integrator and associated fileSmtpIntegrator configuration section (discussed below) in order for QEST Platform administrators to receive notification emails about important license events as described in Checking License Use for QESTField Tests and QESTField Forms.

Use of the licensing email data integrator has the following prerequisites:

  1. Logging for licensing events is configured as described in the log4net section
  2. Email delivery details are configured as described in the Settings for Email section of the System.net section below
  3. The fileSmtpIntegrator configuration is defined as described below
  4. This line appears in the configSections element of the configuration file:
Code Block
languagexml
<configuration>
  <configSections>
    <section name="fileSmtpIntegrators" type="Spectra.QESTNET.Integration.FileSmtp.FileSmtpIntegratorsConfigurationSection, QESTNET.Integration" />
  </configSections>

The standard configuration for this integrator is shown below, it will set the integrator to run daily at 10pm according to the server time on which the QESTNet service is running:

Code Block
languagexml
    <dataIntegrators>
	  <!-- Other integrators defined here (if any)-->
      <!-- Run daily at 10pm -->
      <add
        name="Licensing Emailer"
        assemblyName="QESTNET.Integration"
        pluginType="Spectra.QESTNET.Integration.FileSmtp.LicensingSmtpIntegrator"
        inputName=""
        outputName=""
        transferInterval="1.00:00:00"
        timeDelay=""
        dateDelayUntil=""
        timeDelayUntil="22:00:00"
        state="Started"
        isThreadSafe="False"
      />
    </dataIntegrators>

fileSMTPIntegrator

This configuration is used to provide extra details for the running of the Licensing Emailer data integrator (see data integrators for more information) and is required in order for QEST Platform administrators to receive notification emails about important license events as described in Checking License Use for QESTField Tests and QESTField Forms.


Code Block
languagexml
  <!-- Additional configuration for file integrators -->
  <fileSmtpIntegrators>
    <add
      name="Licensing Emailer"
      fromAddress="mailbot@sqaus.example"
      subject="QEST Platform Licensing Activity Summary"
      body="The following is a summary of logged QEST Platform licensing activity from the previous day."
      sourceDirectory="${ALLUSERSPROFILE}\Spectra QEST\QESTNET vX.X\Logs"
      filePattern="licensing-log*.txt"
      archiveDirectory="${ALLUSERSPROFILE}\Spectra QEST\QESTNET vX.X\Logs\archive"
    >
      <to>
        <add address="recipient01@sqaus.example" />
        <add address="recipient02@sqaus.example" />
      </to>
    </add>
  </fileSmtpIntegrators>

The fileSmtpIntegrator has the following, mandatory, properties:

  • name should be set as "Licensing Emailer"
  • fromAddress should be set as the from address that the generated emails will use. Note that if the emails are ever replied to, this email address will receive the replies
  • subject will be the subject on any notification emails. If left blank, the generated emails will not contain a subject
  • body will be the text preceding the licensing summary
  • sourceDirectory should be the directory where the licensing log files are being generated per the log4net configuration
  • filePattern must match the filename pattern of the licensing log files as set in the log4net configuration
  • archiveDirectory the directory to which the processed log files are moved after processing. This directory will need to be manually created with write permissions granted to the service user running the QESTNet service or an error will appear in the QESTNet log file stating that the directory does not exist every time the integrator runs.

In addition to the above properties, the integrator will expect collection of recipient email addresses to whom the summary email should be sent. It is recommended these are set to be the email addresses of the QEST Platform administrators.

connectionStrings

This section defines the connection strings which QESTNet can use to connect to databases. The three areas which use these are the Lab Session (to provide LIMS functionality via QESTNet), publishing to Construction Hive, and any Data Integrators that directly transfer data between databases.


Code Block
languagexml
<connectionStrings>
    <add name="QESTLab_Data" providerName="..." connectionString="..." />
    <add name="HivePublish_Data" providerName="..." connectionString="..." />
    <add name="Remote_System_1" providerName="..." connectionString="..." />
    <add name="Remote_System_2" providerName="..." connectionString="..." />
</connectionStrings>

Lab Session

The Lab Session uses the connection string with the name QESTLab_Data to connect to the QESTLab database. The default connection string looks like:


Code Block
languagexml
<add 
    name="QESTLab_Data"
    providerName="System.Data.SqlClient" 
    connectionString="
        data source=SQL_INSTANCE;
        initial catalog=DATABASE_NAME;
        integrated security=True;
        multipleactiveresultsets=True;
        App=QESTNET" />


Upon installation the values SQL_INSTANCE and DATABASE_NAME must be replaced with the details of the relevant QESTLab database. Further changes can be made to the connection string as required, such as to change security modes.

Construction Hive Publishing

To be able to publish documents to Construction Hive, a connection string with the name HivePublish_Data is required that connects to the Construction Hive publishing database.

Data Integrators

QESTNET data integrators can connect directly to databases to exchange information. The connection strings to do so are specified here and each is given a name. This name may be referenced in the dataIntegrators configuration in the qestnet section described earlier.

Settings for Email

Publishing through QESTField products via email and the licensing summary emails, described in Checking License Use for QESTField Tests and QESTField Forms both require mail settings to be configured in QESTNET.exe.config. For more information, please refer to Microsoft Docs.

From Address

Emails sent from QESTNet will attempt to obtain a 'from' address from the following sources, in descending priority:

  • A configured address specific to the type of email sent, where applicable. See appSettings section above
  • Email address of the user publishing the mail
  • The 'from' address configured in these mailSettings

Please note that if a "from" address is not configured in these settings, users without a recorded email address will not be able to publish documents via email.

Code Block
languagexml
<system.net> 
  <mailSettings> 
    <smtp deliveryMethod="network" from="qestnet@contoso.com"> 
      <network 
        host="localhost" 
        port="25" 
        defaultCredentials="true" 
      />
    </smtp>
  </mailSettings>
</system.net>

Template Locations

Note: this does not currently need to be set as the default templates are initially sufficient for all customers.

QESTNet publishing includes support for customising the template files used to build email content. QESTNet can be configured to look for template files in specified paths. If this configuration section is not present, QESTNet will use the default templates.

Code Block
languagexml
<qestnet>
  <publishTemplateLocations>
    <email>
      <add path="C:\Templates" />
    </email>
  </publishTemplateLocations>
</qestnet>

QESTNet Api

HTTP URL ACL

The QESTNet service account needs to be able to listen on the QESTNet API address - by default, http://*:53535/

From an admin command prompt:

netsh http add urlacl url=http://*:53535/ user="qestnet.service@domain.example"

https://msdn.microsoft.com/en-us/library/windows/desktop/cc307223(v=vs.85).aspx

Configuration Data

Workflow Location Mappings

The QESTLab database table qestWorkflowLocationMapping stores mappings between the unique identifier of the QESTNet workflows and the unique identifier of the location. This controls workflow availability in QESTNet. If a mapping does not exist for a laboratory or a region it is within, then a workflow will not be visible at that laboratory.

Notes:

  • The WorkflowUUID corresponds to workflows in the QESTNet code and do not relate to any other tables in the QESTLab database.
  • The LocationID relates to Laboratory.QestUniqueID and can be joined to the Laboratory table to see further information about the locations.
  • Workflow availability is inherited through the location hierarchy. If a region is mapped to a workflow then any laboratories or other locations within that region will also have access to the workflow. If the "default" or "root" location is mapped then all laboratories will see that workflow.
  • qestWorkflowLocationMapping is typically populated via a configuration script with a name of the form: QESTField.Enable_Workflows.[COMPANYCODE].sql

Insert excerpt
Trademarks, Terms of Use and Privacy Statement
Trademarks, Terms of Use and Privacy Statement
nopaneltrue