HaloENGINE API
Secude’s HaloENGINE API architecture aims to streamline underlying MPIP functionalities such as file protection and audit log export. The HaloENGINE API enables MPIP capabilities by seamlessly integrating with existing business applications.
What can be expected when using the API
It streamlines web-based application interaction via HTTP methods.
The end consumer can protect files with their own rule engine or business logic.
This will extend to any existing or customized data portal within the organization that must be scrutinized and protected against data leaks.
The usage of this information, as well as the implementation of any of these APIs, is the responsibility of the customer and is dependent on their abilities to evaluate and incorporate them into their place of business.
This document demonstrates how to successfully call the HaloENGINE API from your application and use it for your business needs. It assumes you are familiar with REST API calls. It provides a clear and comprehensive background to the REST SDK, including endpoints, parameters, response types, and any other information that developers should be aware of. It also explains how the resources work and provides examples that should help you get started.
Please be aware that the examples in this document are meant only as guidance and should not be applied in a production environment.
To demonstrate a real-world example, OpenDocMan and HaloENGINE API are used, and requests and responses are shown in the API method section. In this manual, each method is outlined briefly, and its requests and responses are captured using the Postman tool.
OpenDocMan, an open-source document management system (DMS), communicates with the HaloENGINE API using a reverse proxy. However, depending on the business requirements, you can integrate your Document Management System using an intermediate reverse proxy, customization, or middleware application (such as MuleSoft). Using the HaloENGINE API methods, a file is encrypted when downloaded from OpenDocMan and decrypted when uploaded to OpenDocMan.
HaloENGINE API
The following high-level steps describe how to get started with HaloENGINE and expose the APIs.
Step 1: Install and configure the HaloENGINE and HaloENGINE Service as described in the following chapters “Installing the HaloENGINE Service” and “Installing the HaloENGINE”.
Step 2: Import the license with the HaloENGINE API enabled in the admin portal.
Step 3: Server Certificate Authentication. Select one of the following approaches for authentication.
Self-signed Certificate: A minor configuration change is necessary on the client side. Download the server certificate (HalocoreServer.cer) from the admin portal and manually install it in Trusted Root Certification Authorities.
Company Owned Signed Certificate: If you already have a certificate, you can import it into the admin portal. Make sure your company's Root CA is installed in Trusted Root Certification Authorities. In this case, there is no need to install the server certificate on your client server. For more details, please refer to the section “Phase 1. Certificate Configuration”.
Step 4: Set classification engine. This step comprises creating profiles, schema, and action rules based on the needs of your business. Please refer to the chapter “Setting Up Classification Engine”.
Any chapter or section mentioned on the API page does not have a direct link to the manual, thus we recommend reading the HaloENGINE Installation and Configuration Manual for a more complete explanation, which comes along with the product package.
HaloENGINE API
The HaloENGINE requirements are listed in the table below.
HaloENGINE API
Using the above URL, the "halosdk" API is accessible.
The following variables should be replaced with values for your system.
1. {server} corresponds to the server's name or IP address of your server.
2. {port} is the port number on which the server runs.
Resource Methods Description
Typically, an API will have multiple endpoints associated with the same resource. Every resource is exposed via a URL. You can obtain the URL of every resource by obtaining access to the API Root Endpoint.
The following example is demonstrated using Postman tool and the HaloENGINE API to obtain data.
GET https://10.41.14.69:8746/halocore-central-server/halosdk/GetVersion
A successful request returns the following information: Status code: 200. The response body is in plain text format containing the version number of the HaloENGINE.
6.7.0.0
The response indicates that the HaloENGINE is alive and its version is 6.7.0.0.
The following example is demonstrated using OpenDocMan through a reverse proxy with the HaloENGINE API, with the results displayed in Postman tool.
GET https://10.41.14.69:8746/halocore-central-server/halosdk/GetVersion
6.7.0.0
The response indicates that the HaloENGINE is alive and its version is 6.7.0.0.
The following example is demonstrated using Postman tool and the HaloENGINE API to obtain data.
Prerequisite: The HaloENGINE API system type does not currently have any built-in metadata; hence, new metadata can be created using Custom metadata. Please refer to the section “Custom metadata”.
The request is sent in the Body-XML format with the following parameters:
1. customer_id - Indicates which customer ID the HaloENGINE is using.
2. system_id - Indicates the unique system ID of a client system.
3. system_type - Indicates the client system type.
<id>
<customer_id>halo_customer</customer_id>
<system_id>HaloengineClient</system_id>
<system_type>HaloENGINE_API</system_type>
</id>
A successful request returns the following information: Status code: 200
Response to this request:
In the response, the metadata added in the HaloENGINE admin portal will be displayed.
[user_group, work_in_progress, folder, review, release, project]
The following example is demonstrated using OpenDocMan through a reverse proxy with the HaloENGINE API, with the results displayed in Postman tool.
The request is sent in the Body-XML format with the following parameters:
<id>
<customer_id>halo_customer</customer_id>
<system_id>HaloengineClient</system_id>
<system_type>HaloENGINE_API</system_type>
</id>
A successful request returns the following information: Status code: 200
Response to this request:
[file_type, folder_name, lifecycle_name]
There are three options in "Owner Configuration": Service (default), Static email, and User. You can set it up on the HaloENGINE admin portal. Note: In the case of static email, enter the user's email address in the admin portal. To learn how to configure Owner Configuration, refer to the section “OwnerConfiguration”.
Owner Configuration - User option
When you choose User in the HaloENGINE admin portal, the request results in true (<user_email_needed>true</user_email_needed>), therefore when executing ExecuteActionForm, you must enter the author's email ID.
The following example is demonstrated using Postman tool and the HaloENGINE API to obtain data.
A multipart/form-data request is sent with the following parameters:
Key: customerIdentification (Text as Type)
Description: Indicates the customer's details (customer_id, system_id, and system_type) that HaloENGINE uses.
Value: The value should look similar to the following:
<id>
<customer_id>halo_customer</customer_id>
<system_id>HaloengineClient</system_id>
<system_type>HaloENGINE_API</system_type>
</id>
Key: metadata (Text as Type)
Description: Indicates the metadata provided to decide the appropriate action.
Value: The value should look similar to the following.
<metadata>
<!--Optional:-->
<general_metadata>
<!--Optional:-->
<simple_value>
<!--Zero or more repetitions:-->
<entry>
<!--Optional:-->
<key>user_name</key>
<!--Zero or more repetitions:-->
<value>john</value>
</entry>
</simple_value>
<!--Optional:-->
<complex_value>
<!--Zero or more repetitions:-->
<entry>
<type>data</type>
<key>project</key>
<!--1 or more repetitions:-->
<values>?</values>
</entry>
</complex_value>
</general_metadata>
</metadata>
A successful request returns the following information: Status code: 200
Response to this request:
--uuid:3c3e23eb-0225-4b65-893c-677e8ff8b10d
Content-Type: text/plain
Content-Transfer-Encoding: binary
Content-ID: <simMode>
Content-Disposition: form-data; name="simMode"
false
--uuid:3c3e23eb-0225-4b65-893c-677e8ff8b10d
Content-Type: text/plain
Content-Transfer-Encoding: binary
Content-ID: <labelVendor>
Content-Disposition: form-data; name="labelVendor"
NONE
--uuid:3c3e23eb-0225-4b65-893c-677e8ff8b10d
Content-Type: application/xml
Content-Transfer-Encoding: binary
Content-ID: <action>
Content-Disposition: form-data; name="action"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:action xmlns:ns2="http://interfaces.central.halocore.secude.com">
<value>LABEL</value>
<value>AUDIT</value>
</ns2:action>
--uuid:3c3e23eb-0225-4b65-893c-677e8ff8b10d
Content-Type: application/xml
Content-Transfer-Encoding: binary
Content-ID: <authorMode>
Content-Disposition: form-data; name="authorMode"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:author_mode xmlns:ns2="http://interfaces.central.halocore.secude.com">
<user_email_needed>false</user_email_needed>
<static_email></static_email>
</ns2:author_mode>
--uuid:3c3e23eb-0225-4b65-893c-677e8ff8b10d
Content-Type: text/xml
Content-Transfer-Encoding: binary
Content-ID: <classification>
Content-Disposition: form-data; name="classification"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<classification version="1.0">
<class name="Default">
<displayNames>
<displayName locale="en_US" name="Default"/>
</displayNames>
<properties>
<property name="Sensitivity" dataType="listValue">
<displayNames>
<displayName locale="en_US" name="Sensitivity"/>
</displayNames>
<values>
<listValue name="Secret">
<displayNames>
<displayName locale="en_US" name="Secret"/>
</displayNames>
</listValue>
</values>
</property>
</properties>
</class>
</classification>
--uuid:3c3e23eb-0225-4b65-893c-677e8ff8b10d
Content-Type: application/xml
Content-Transfer-Encoding: binary
Content-ID: <template>
Content-Disposition: form-data; name="template"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:template xmlns:ns2="http://interfaces.central.halocore.secude.com">
<guid>99f1473d-74f4-47ca-9843-e735f94fa797</guid>
<template_name>HCAD Secret</template_name>
</ns2:template>
--uuid:3c3e23eb-0225-4b65-893c-677e8ff8b10d--
The following example is demonstrated using OpenDocMan through a reverse proxy with the HaloENGINE API, with the results displayed in Postman tool.
A multipart/form-data request is sent with the following parameters:
Key: customerIdentification
Description: Indicates the customer's details (customer_id, system_id, and system_type) that HaloENGINE uses.
Value: The value should look similar to the following:
<id>
<customer_id>halo_customer</customer_id>
<system_id>HaloengineClient</system_id>
<system_type>HaloENGINE_API</system_type>
</id>
Key: metadata
Description: Indicates the metadata provided to decide the appropriate action.
Value: The value should look similar to the following.
<metadata>
<general_metadata>
<simple_value
<entry>
<key>user_name</key>
<value>john</value
</entry>
</simple_value>
<complex_value>
<entry
<type>data</type>
<key>project</key>
<values>?</values>
</entry>
</complex_value>
</general_metadata>
</metadata>
A successful request returns the following information: Status code: 200
Response to this request:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:template xmlns:ns2="http://interfaces.central.halocore.secude.com">
<guid>d7e95033-e7f1-4218-8941-7d60d8e9cf69</guid>
<template_name>CADSecured</template_name>
</ns2:template>
The following example is demonstrated using Postman tool and the HaloENGINE API to obtain data.
Prerequisite: When you select the User option in "Owner Configuration", you must input an email address in the author field.
A multipart/form-data request is sent with the following parameters:
Key: customerIdentification (Text as Type)
Description: Indicates the customer's details (customer_id, system_id, and system_type) that HaloENGINE uses.
Value: The value should look similar to the following.
<id>
<customer_id>halo_customer</customer_id>
<system_id>HaloengineClient</system_id>
<system_type>HaloENGINE_API</system_type>
</id>
Key: action (Text as Type)
Description: Indicates what action should be taken on the file (LABEL/UNPROTECT/AUDIT).
Value
<action>
<!--Zero or more repetitions:-->
<value>LABEL</value>
</action>
Key: template (Text as Type)
Description: If the action is to label, it indicates the template to use.
Value: The value should look similar to the following.
<template>
<!--Optional:-->
<guid>99f1473d-74f4-47ca-9843-e735f94fa797</guid>
<template_name>HCAD Secret</template_name>
</template>
Key: extendedTags (Text as Type)
Description: Indicates additional metadata that can be included while downloading a file.
Value: The value should look similar to the following.
<extended_tags>
<!--Zero or more repetitions:-->
<extended_tags>
<key></key>
<!--Optional:-->
<value>username</value>
</extended_tags>
</extended_tags>
Key: author (Text as Type)
Description: This indicates who owns the exported document. This field is applicable only when the User option is selected in the admin portal. Note: If you selected User in the admin portal, please provide the author's email address. The following is an example of the default Service option. Thus, no author is added.
Value: The value should look similar to the following.
<author>?</author>
Key: file_size (Text as Type)
Description: Indicates the file size in bytes.
Value: The value should look similar to the following.
5462
Key: file (File as Type). Browse and choose a file.
Description: Indicates which file is currently being used.
Value: The value should look similar to the following.
BOM.txt
Key: classification (Text as Type)
Description: Indicates the sensitivity setting.
Value: The value should look similar to the following.
<classification>?<classification>
A successful request returns the following information: Status code: 200
Response to this request:
--uuid:08109eb0-5ee0-4051-b05f-e22c18d67773
Content-Type: application/xml
Content-Transfer-Encoding: binary
Content-ID: <appliedAction>
Content-Disposition: form-data; name="appliedAction"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:applied_action xmlns:ns2="http://interfaces.central.halocore.secude.com">
<fileProtected>true</fileProtected>
<fileLabeled>true</fileLabeled>
<fileDecrypted>false</fileDecrypted>
<already_protected>false</already_protected>
</ns2:applied_action>
--uuid:08109eb0-5ee0-4051-b05f-e22c18d67773
Content-Type: text/plain
Content-Transfer-Encoding: binary
Content-ID: <file_size>
Content-Disposition: form-data; name="file_size"
27969
--uuid:08109eb0-5ee0-4051-b05f-e22c18d67773
Content-Type: text/plain
Content-Transfer-Encoding: binary
Content-ID: <identified_file_type>
Content-Disposition: form-data; name="identified_file_type"
text/plain
--uuid:08109eb0-5ee0-4051-b05f-e22c18d67773
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <file>
Content-Disposition: form-data; name="file"; filename="BOM.ptxt"; size=27969
.pfile
The .pfile extension shows that the action was successfully performed on the file.
To decrypt a file, use the same parameters as in the Request for Encryption, with the exception that the “action key” must be "Unprotect" and the “file key” must be a protected file, as shown below.
Key: action (Text as Type)
Description: If the action is to unprotect, it specifies which template should be used.
Value: The value should look similar to the following.
<action>
<!--Zero or more repetitions:-->
<value>UNPROTECT</value>
</action>
Key: file (File as Type). Browse and choose a protected file.
Description: Indicates which file is currently being used.
Value: The value should look similar to the following.
BOM.ptxt
Response to this request:
--uuid:8136e61f-6380-4976-b6cd-c7b4ca0cdc6d
Content-Type: application/xml
Content-Transfer-Encoding: binary
Content-ID: <appliedAction>
Content-Disposition: form-data; name="appliedAction"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:applied_action xmlns:ns2="http://interfaces.central.halocore.secude.com">
<fileProtected>false</fileProtected>
<fileLabeled>false</fileLabeled>
<fileDecrypted>true</fileDecrypted>
<already_protected>true</already_protected>
</ns2:applied_action>
--uuid:8136e61f-6380-4976-b6cd-c7b4ca0cdc6d
Content-Type: text/plain
Content-Transfer-Encoding: binary
Content-ID: <file_size>
Content-Disposition: form-data; name="file_size"
11964
--uuid:8136e61f-6380-4976-b6cd-c7b4ca0cdc6d
Content-Type: text/plain
Content-Transfer-Encoding: binary
Content-ID: <identified_file_type>
Content-Disposition: form-data; name="identified_file_type"
application/rtf
--uuid:8136e61f-6380-4976-b6cd-c7b4ca0cdc6d
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <file>
Content-Disposition: form-data; name="file"; filename="BOM.rtf"; size=11964
\cell
}
\row
}
--uuid:8136e61f-6380-4976-b6cd-c7b4ca0cdc6d--
The protected file has been decrypted successfully in the above example.
The following example is demonstrated using OpenDocMan through a reverse proxy with the HaloENGINE API, with the results displayed in Postman tool.
A multipart/form-data request is sent with the following parameters:
Key: customerIdentification
Description: Indicates the customer's details (customer_id, system_id, and system_type) that HaloENGINE uses.
Value: The value should look similar to the following:
<id>
<customer_id>halo_customer</customer_id>
<system_id>HaloengineClient</system_id>
<system_type>HaloENGINE_API</system_type>
</id>
Key: action
Description: Indicates what action should be taken on the file (LABEL/UNPROTECT/AUDIT).
Value: The value should look similar to the following.
<action>
<!--Zero or more repetitions:-->
<value>LABEL</value>
</action>
Key: template
Description: If the action is to label, it indicates the template to use.
Value: The value should look similar to the following
<template>
<!--Optional:-->
<guid>d7e95033-e7f1-4218-8941-7d60d8e9cf69</guid>
<template_name>CADSecured</template_name>
</template>
Key: extendedTags
Description: Indicates additional metadata that can be included while downloading a file.
Value: The value should look similar to the following.
<extended_tags>
<key/>
<value>""</value>
</extended_tags>
Key: author
Description: The following is an example of the default Service option. Thus, no author is added.
Value: The value should look similar to the following.
<author>?</author>
Key: file_size
Description: Indicates the file size in bytes.
Value: The value should look similar to the following.
9521
Key: file
Description: Indicates which file is currently being used.
Value: The value should look similar to the following.
Checklist.txt
Key: classification
Description: Indicates the sensitivity setting.
Value: The value should look similar to the following.
<classification>?<classification>
A successful request returns the following information: Status code: 200
Response to this request: Protected content will also be included in the response body.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:applied_action
xmlns:ns2="http://interfaces.central.halocore.secude.com">
<fileProtected>true</fileProtected>
<fileLabeled>true</fileLabeled>
<fileDecrypted>false</fileDecrypted>
<already_protected>false</already_protected>
</ns2:applied_action>
The .pfile extension shows that the action was successfully performed on the file.
To decrypt a file, use the same parameters as in the Request for Encryption, with the exception that the “action key” must be "Unprotect" and the “file key” must be a protected file, as shown below.
Key: action
Description: If the action is to unprotect, it specifies which template should be used.
Value: The value should look similar to the following.
<action>
<!--Zero or more repetitions:-->
<value>UNPROTECT</value>
</action>
Key: file
Description: Indicates which file is currently being used.
Value: The value should look similar to the following.
Checklist.ptxt
Response to this request: Unprotected content will also be included in the response body.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:applied_action
xmlns:ns2="http://interfaces.central.halocore.secude.com">
<fileProtected>false</fileProtected>
<fileLabeled>false</fileLabeled>
<fileDecrypted>true</fileDecrypted>
<already_protected>true</already_protected>
</ns2:applied_action>
The protected file has been decrypted successfully in the above example.
The following example is demonstrated using Postman and the HaloENGINE API to obtain data.
A multipart/form-data request is sent with the following parameters:
Key: customerIdentification (Text as Type)
Description: Indicates the customer's details (customer_id, system_id, and system_type) that HaloENGINE uses.
Value: The value should look similar to the following.
<id>
<customer_id>halo_customer</customer_id>
<system_id>HaloengineClient</system_id>
<system_type>HaloENGINE_API</system_type>
</id>
Key: logInfo (Text as Type)
Description: Indicates the timestamp when the event occurred.
Value: The value should look similar to the following.
<log_info>
<utc_time_stamp>2021-02-23T23:01:00+05:00</utc_time_stamp>
<!--Optional:-->
<time_zone>-1</time_zone>
<!--Optional:-->
<logID>loginID1</logID>
</log_info>
Key: userInfo (Text as Type)
Description: Indicates the user details.
Value: The value should look similar to the following.
<user_info>
<user_name>john</user_name>
<!--Optional:-->
<user_type>john</user_type>
<user_email>john@halosecude.onmicrosoft.com</user_email>
</user_info>
Key: fileInfo (Text as Type)
Description: Indicates the file details.
Value: The value should look similar to the following.
<file_info>
<!--Optional:-->
<file_name></file_name>
<!--Optional:-->
<file_path>C:\</file_path>
<!--Optional:-->
<file_type>txt</file_type>
<file_protected_before>false</file_protected_before>
<size_original>4445</size_original>
<size_download>444448</size_download>
</file_info>
Key: resultedDecision (Text as Type)
Description: Indicates the action that was taken on the file.
Value: The value should look similar to the following.
<resulted_decision>
<fileBlocked>false</fileBlocked>
<fileLabeled>true</fileLabeled>
<fileProtected>true</fileProtected>
<unprotected>false</unprotected>
<unlabeled>false</unlabeled>
<!--Optional:-->
<policy_name>HCAD Secret</policy_name>
<!--Optional:-->
<policy_id>99f1473d-74f4-47ca-9843-e735f94fa797</policy_id>
<!--Optional:-->
<classification>
<by_user>
<?xml version="1.0" encoding="UTF-8"?>
<classification version="1.0">
<class name="DB">
<displayNames>
<displayName locale="en_US" name="Local Configuration"/>
</displayNames>
<properties>
<property name="C_IPADDR" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="IP Address"/>
</displayNames>
<values></values>
</property>
<property name="C_LOGID" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Log ID"/>
</displayNames>
<values></values>
</property>
<property name="C_TABS" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Table/View Names"/>
</displayNames>
<values></values>
</property>
<property name="C_TSTMP" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Time Stamp"/>
</displayNames>
<values></values>
</property>
<property name="C_TCODE" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Transaction Code"/>
</displayNames>
<values></values>
</property>
<property name="C_UNAME" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="User Name"/>
</displayNames>
<values></values>
</property>
<property name="C_WDAPPL" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="WD Application"/>
</displayNames>
<values></values>
</property>
<property name="SENS" dataType="listValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Sensitivity_1"/>
</displayNames>
<values>
<listValue name="CONF">
<displayNames>
<displayName locale="en_US" name="Confidential"/>
</displayNames>
</listValue>
</values>
</property>
<property name="DOM" dataType="listValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Domain"/>
</displayNames>
<values>
<listValue name="LOG">
<displayNames>
<displayName locale="en_US" name="Logistics"/>
</displayNames>
</listValue>
</values>
</property>
</properties>
</class>
</classification>
</by_user>
<by_system>
<?xml version="1.0" encoding="UTF-8"?>
<classification version="1.0">
<class name="DB">
<displayNames>
<displayName locale="en_US" name="Local Configuration"/>
</displayNames>
<properties>
<property name="C_IPADDR" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="IP Address"/>
</displayNames>
<values></values>
</property>
<property name="C_LOGID" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Log ID"/>
</displayNames>
<values></values>
</property>
<property name="C_TABS" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Table/View Names"/>
</displayNames>
<values></values>
</property>
<property name="C_TSTMP" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Time Stamp"/>
</displayNames>
<values></values>
</property>
<property name="C_TCODE" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Transaction Code"/>
</displayNames>
<values></values>
</property>
<property name="C_UNAME" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="User Name"/>
</displayNames>
<values></values>
</property>
<property name="C_WDAPPL" dataType="stringValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="WD Application"/>
</displayNames>
<values></values>
</property>
<property name="SENS" dataType="listValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Sensitivity_1"/>
</displayNames>
<values>
<listValue name="CONF">
<displayNames>
<displayName locale="en_US" name="Confidential"/>
</displayNames>
</listValue>
</values>
</property>
<property name="DOM" dataType="listValue" valueType="simple">
<displayNames>
<displayName locale="en_US" name="Domain"/>
</displayNames>
<values>
<listValue name="LOG">
<displayNames>
<displayName locale="en_US" name="Logistics"/>
</displayNames>
</listValue>
</values>
</property>
</properties>
</class>
</classification>
</by_system>
</classification>
<aborted_by_system>false</aborted_by_system>
<aborted_by_user>false</aborted_by_user>
<error>false</error>
<!--Optional:-->
<sim_mode>false</sim_mode>
<!--Zero or more repetitions:-->
<extended_tags>
<key>Key1</key>
<!--Optional:-->
<value>Value1</value>
</extended_tags>
</resulted_decision>
Key: plmContextInfo (Text as Type)
Description: Indicates the PLM server information (source).
Value: The value should look similar to the following.
<plm_context_info>
<!--Optional:-->
<event_type>user download</event_type>
<!--Zero or more repetitions:-->
<pre_process_info>
<!--Optional:-->
<type>sample</type>
<key>ABC</key>
<value>12345</value>
</pre_process_info>
<!--Zero or more repetitions:-->
<attributes>
<!--Optional:-->
<type>Attr1</type>
<key>project_name</key>
<value>CMS_Turbo_Engine</value>
</attributes>
<!--Optional:-->
<document_id>1222</document_id>
<!--Optional:-->
<document_number>222</document_number>
<!--Optional:-->
<document_type>1</document_type>
<!--Optional:-->
<document_part>j</document_part>
<!--Optional:-->
<document_version>00</document_version>
<!--Optional:-->
<view_only>false</view_only>
<!--Optional:-->
<dms_process>false</dms_process>
</plm_context_info>
Key: plmDestInfo (Text as Type)
Description: Indicates the destination, such as which client the data was downloaded from.
Value: The value should look similar to the following.
<plm_destination_info>
<!--Zero or more repetitions:-->
<destination_attributes>
<!--Optional:-->
<type>Dest</type>
<key>client_ip</key>
<value>10.41.14.69</value>
</destination_attributes>
<!--Optional:-->
<browser>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36</browser>
<!--Optional:-->
<hostname>ABC</hostname>
<!--Optional:-->
<ipaddress>10.41.14.69</ipaddress>
<!--Optional:-->
<operating_system>WIN10</operating_system>
</plm_destination_info>
A successful request returns the following information: Status code: 200
Response to this request: In boolean value
true
The log is sent to the server.
HaloENGINE API
An unsuccessful request returns a response code other than 200. If you receive a null response, you may need to review the input.