Business-level introduction
This document is designed for anyone who is involved with implementing a technical interface for transferring vacancies to Teamio from an external system. Business-level information is provided in this article:
Description of the interface
- External application sends the HTTP request to upload interface the import file (authentication data sent by POST method is included)
- After successful authentication, the loaded file will be converted and Teamio “Drafts” folder
- In case of failed authentication an error message will be sent to your external application
- Information about the status for the imported vacancies is sent to the main user by e-mail
- Only HTTPS protocol is supported
Syntax of HTTP request
- Url: https://g2.lmc.cz/import/custompath/import (custompath will vary)
- Method: POST
- Content-type: application/x-www-form-urlencoded
- Login credentials – username, password
Sample
1 2 3 4 5 |
POST /import/custompath/import HTTP/1.0 Host: g2.lmc.cz Content-type: application/x-www-form-urlencoded Accept: */* username=importlogin1&password=123456&xmlString=... |
cURL command line example for testing/debuging:
1 2 3 4 5 6 |
curl --location --request POST 'https://g2.lmc.cz/import/custompath/import' \ --header 'cache-control: no-cache' \ --header 'content-type: application/x-www-form-urlencoded' \ --data-urlencode 'username=importlogin1' \ --data-urlencode 'password=123456' \ --data-urlencode 'xmlString=<content of import XML>' |
Demonstration PHP script for uploading XML of vacancy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<?php /** * LMC Demonstration PHP script for uploading XML imports to LMC's ATS Teamio * * @version $Id: 1.0.1 $ * @package lmc_sys * @subpackage upload * @access public */ /** * Settings part, modify as necessary... */ $auth = array('login' => 'importlogin1', 'password' => '123456', 'url' => 'custompath'); $lXmlFile = "./test.xml"; $lUrl = 'https://g2.lmc.cz/import/' . $auth['url'] . '/import'; /** * Working part, do not modify it... */ $lHttpPost = array('username' => $auth['login'], 'password' => $auth['password'], 'url' => [$lUrl], 'xmlString' => ""); if ($lHttpPost['xmlString'] = file_get_contents($lXmlFile)) { if (!$lReq = curl_init($lUrl)) die("Not able to connect to: " . $lUrl); curl_setopt($lReq, CURLOPT_POST, TRUE); curl_setopt($lReq, CURLOPT_SSL_VERIFYPEER, 0); $lPostStr = http_build_query($lHttpPost); curl_setopt($lReq, CURLOPT_POSTFIELDS, $lPostStr); curl_setopt($lReq, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($lReq, CURLOPT_FAILONERROR, TRUE); $lResult = curl_exec($lReq); if ($lResult) die("Successfuly uploaded!\n " . $lResult); else die("server error: Not able to send data to: " . $lUrl . " , error message: " . curl_error($lReq)); curl_close($lReq); } else { die("Not able to read input XML file!\n " . $lXmlFile); } ?> |
Validation of your xml
You should validate your xml file using the following XSD:
- http://schema.lmc.cz/ei_std/xsd/ei_std_jd_2006-10-19.xsd
- http://schema.lmc.cz/ei_std/xsd/enumerationType.xsd
For example use xmllint in command line:
-
- Download libxml2 for your operationg system and install or unpack from: http://xmlsoft.org/downloads.html
- Download both xsd in web browser or in Linux command line:
1 2 |
curl -o http://schema.lmc.cz/ei_std/xsd/ei_std_jd_2006-10-19.xsd curl -o http://schema.lmc.cz/ei_std/xsd/enumerationType.xsd |
-
- Run xmllint from libxml2 (import.xml is validated XML file):
1 |
bin/xmllint.exe --schema ei_std_jd_2006-10-19.xsd import.xml --noout |
-
-
When see this output then is XML valid:
-
1 |
import.xml validates |
See another tools and value lists section.
XML examples of vacancies
XML of ordinary vacancy with HTML tags in Job Description
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
<?xml version="1.0" encoding="utf-8"?> <positionList xsi:schemaLocation="http://www.onrea.net/ei_std_jd/2006-10-19 http://schema.lmc.cz/ei_std/xsd/ei_std_jd_2006-10-19.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.onrea.net/ei_std_jd/2006-10-19"> <position> <lang id="25" svlId="1000000"/> <parameterList> <parameter name="clientID_0">123456LMCTEST1</parameter> </parameterList> <organization> <organizationalUnit> <contactInformation> <name> <firstName>Tester</firstName> <surname>Testerovič</surname> </name> <email>tester.testerovic@lmc.eu</email> </contactInformation> </organizationalUnit> </organization> <jobDescription> <positionName>Test Position</positionName> <employmentDuration> <workTimeSpecificationList id="202700001" svlId="2027000">Permanent</workTimeSpecificationList> </employmentDuration> <occupationFieldList> <occupationField id="200900013" svlId="2009000">IS/IT: Application and system development</occupationField> </occupationFieldList> <professionList> <profession id="201100006" svlId="2011000">IT Analyst</profession> </professionList> <employmentTypeList> <employmentType id="201300001" svlId="2013000">Full-time work</employmentType> <employmentType id="201300002" svlId="2013000">Part-time work</employmentType> <!--employmentType id="201300003" svlId="2013000">Contract work (work performed under Identification No.)</employmentType--> <!--employmentType id="201300005" svlId="2013000">Practical training and short-term placement</employmentType--> <!--employmentType id="201300007" svlId="2013000">Trainee programs</employmentType--> </employmentTypeList> <jobMarketStatusList> <jobMarketStatus id="203000001" svlId="2030000">Graduate</jobMarketStatus> </jobMarketStatusList> <healthState id="201900001" svlId="2019000">None</healthState> <educationType id="203400001" svlId="2034000">Basic</educationType> <remunerationPackage> <salary hidden="true"> <minSalary>25000</minSalary> <maxSalary>30000</maxSalary> <currencyCode id="201400001" svlId="2014000">CZK</currencyCode> <baseInterval id="209800002" svlId="2098000">month</baseInterval> </salary> <benefitList> <benefit id="202800001" svlId="2028000">Bonuses</benefit> <benefit id="202800005" svlId="2028000">Contribution holiday</benefit> </benefitList> </remunerationPackage> <jobLocalityList> <jobLocality> <territory id="1" svlId="1006000">Europe</territory> <country id="56" svlId="1002000">Czech Republic</country> <region id="200000" svlId="1008000">Hlavní město Praha</region> <district id="23009999" svlId="1009000">území Hlavního města Prahy</district> <city id="200002" svlId="1010000">Prague</city> <zip xsi:nil="true"/> <number xsi:nil="true"/> <orientationNumber xsi:nil="true"/> </jobLocality> <jobLocality> <territory id="1" svlId="1006000">Europe</territory> <country id="56" svlId="1002000">Czech Republic</country> <region id="245749" svlId="1008000">Liberecký kraj</region> <district id="247497" svlId="1009000">Liberec</district> </jobLocality> </jobLocalityList> </jobDescription> <richtext><![CDATA[ <h2>Jobs.cz</h2> <p><em>Jobs.cz & Prace.cz jsou jedny z našich nejnašlápnutějších služeb, která má backend v PHP a frontend v Reactu - právě ten by byl tvojí parketou. Jobs.cz vyvíjí celkem 3 týmy a tvým útočištěm by se stal tým Relevance, který má na starost to, aby se správné nabídky dostaly ke správným uživatelům. V týmu se potkáš s dalšími třemi vývojáři, UXákem, Produkťákem a Delivery managerem, kteří se na tebe už teď těší.</em></p> <p><strong>5 hlavních důvodů, proč to zvážit</strong></p> <ol> <li>Důraz na vzdělávání - děláme výměny zkušeností mezi týmy, interní kurzy a workshopy (např. se SensioLabs - autory Symfony), kurzy soft-skills, a když to doba dovolí, tak chodíme i na české a zahraniční konference</li> <li>Testování a code review bereme vážně - unit testy i funkční testy v Seleniu jsou pro nás samozřejmostí. Mrkni na náš testovací opensource Steward https://github.com/lmc-eu/steward.</li> <li>Máme už téměř > 10 let zkušeností s agilním vývojem.</li> <li>Máme < než 2 produkťáky</li> <li>Rádi ti to ukážeme trochu víc zblízka. V rámci náboru totiž organizujeme i tzv. "den na zkoušku", kdy se víc seznámíš nejen s týmem, ale i s kódem.</li> </ol> <p><strong>Jaké technologie budeš používat?</strong></p> <ul> <li>PHP 7.2 / Symfony 3/4 (implementace větší aplikace pro tebe určitě nebude problém)</li> <li>JavaScript / TypeScript / ReactJS</li> <li>PostgreSQL/Doctrine (stačí základy), ActiveMQ</li> <li>Jenkins, Linux, Git</li> <li>Docker na lokálu i v produkci</li> </ul> ]]></richtext> </position> </positionList> |
Simple minimal example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?xml version="1.0" encoding="utf-8"?> <positionList xsi:schemaLocation="http://www.onrea.net/ei_std_jd/2006-10-19 http://schema.lmc.cz/ei_std/xsd/ei_std_jd_2006-10-19.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.onrea.net/ei_std_jd/2006-10-19"> <position> <lang id="25" svlId="1000000">en</lang> <parameterList> <parameter name="clientID_0">123456LMCTEST1</parameter> </parameterList> <organization> <organizationalUnit> <contactInformation> <name> <firstName>Tester</firstName> <surname>Testerovič</surname> </name> <email>tester.testerovic@lmc.eu</email> </contactInformation> </organizationalUnit> </organization> <jobDescription> <positionName>Injector Pressure Controller</positionName> <occupationFieldList> <occupationField id="200900045" svlId="2009000">Manufacturing and industry</occupationField> </occupationFieldList> <jobLocalityList> <jobLocality> <territory id="1" svlId="1006000">Europe</territory> <country id="56" svlId="1002000">Czech Republic</country> <region id="245749" svlId="1008000">Liberecký kraj</region> <district id="247497" svlId="1009000">Liberec</district> </jobLocality> </jobLocalityList> </jobDescription> <richtext><![CDATA[ <h2>Jobs.cz</h2> <p><em>Jobs.cz & Prace.cz jsou jedny z našich nejnašlápnutějších služeb, která má backend v PHP a frontend v Reactu - právě ten by byl tvojí parketou. Jobs.cz vyvíjí celkem 3 týmy a tvým útočištěm by se stal tým Relevance, který má na starost to, aby se správné nabídky dostaly ke správným uživatelům. V týmu se potkáš s dalšími třemi vývojáři, UXákem, Produkťákem a Delivery managerem, kteří se na tebe už teď těší.</em></p> <p><strong>5 hlavních důvodů, proč to zvážit</strong></p> <ol> <li>Důraz na vzdělávání - děláme výměny zkušeností mezi týmy, interní kurzy a workshopy (např. se SensioLabs - autory Symfony), kurzy soft-skills, a když to doba dovolí, tak chodíme i na české a zahraniční konference</li> <li>Testování a code review bereme vážně - unit testy i funkční testy v Seleniu jsou pro nás samozřejmostí. Mrkni na náš testovací opensource Steward https://github.com/lmc-eu/steward.</li> <li>Máme už téměř > 10 let zkušeností s agilním vývojem.</li> <li>Máme < než 2 produkťáky</li> <li>Rádi ti to ukážeme trochu víc zblízka. V rámci náboru totiž organizujeme i tzv. "den na zkoušku", kdy se víc seznámíš nejen s týmem, ale i s kódem.</li> </ol> <p><strong>Jaké technologie budeš používat?</strong></p> <ul> <li>PHP 7.2 / Symfony 3/4 (implementace větší aplikace pro tebe určitě nebude problém)</li> <li>JavaScript / TypeScript / ReactJS</li> <li>PostgreSQL/Doctrine (stačí základy), ActiveMQ</li> <li>Jenkins, Linux, Git</li> <li>Docker na lokálu i v produkci</li> </ul> ]]></richtext> </position> </positionList> |
Each client can have an individual custom field in the import file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<customFieldList> <customField type="select" name="banner" label="Obrázek v banneru"> <customFieldValue name="neutral" label="Výchozí obrázek"/> <customFieldValue name="bara" label="Bára_ZC B2B"/> <customFieldValue name="dominika" label="Dominka_trainee"/> <customFieldValue name="honza" label="Honza_ICT"/> <customFieldValue name="linda" label="Linda_HR/support_matky"/> <customFieldValue name="nicol" label="Nikol_ZC B2C"/> <customFieldValue name="peter" label="Petr_digital"/> <customFieldValue name="radim" label="Radim_technology"/> <customFieldValue name="veronika" label="Veronika_"/> <customFieldValue name="vlastimil" label="Vlastimil_shop"/> <customFieldValue name="d2d" label="D2D"/> <customFieldValue name="d2d-breghamm" label="D2D kanál - bregHamm"/> <customFieldValue name="d2d-manuvia" label="D2D kanál - manuvia"/> <customFieldValue name="go-digital" label="Go Digital!"/> </customField> </customFieldList> |
Therefore, we will generate a sample import-xml file for each client separately.
XML of vacancy advertised as given presentation unit
Please use <presentationUnit>. We will provide you with the ID of your company’s presentation unit on request.
1 2 3 4 5 6 7 8 9 10 |
<organizationalUnit> <contactInformation> <name> <firstName>Tester</firstName> <surname>Testerovič</surname> </name> <email>tester.testerovic@lmc.eu</email> </contactInformation> <presentationUnit id="123456789"/> </organizationalUnit> |
XML of Temporary job
Importing a temporary job is possible. Please use employmentType 201300004.
1 2 3 |
<employmentTypeList> <employmentType id="201300004" svlId="2013000">Brigada</employmentType> </employmentTypeList> |
A company that wants to import a temporary job must have an active Temporary Jobs Service.
Importing external reply form link
- requires special active service
- put following code in your import XML as child of <position> element
1 |
<assessmentExternalLink>http://www.assessment-external.link</assessmentExternalLink> |
Supported HMTL tags in job description – richtext element:
The HTML code must be placed in the CDATA section inside the richtext element!
- paragraph <p>…</p>
- a new line <br/>
- bold <strong>…</strong>
- italic <em>…</em>
- title <h2>…</h2>
- lists <ul>…</ul>, <ol>…</ol>,<li>…</li>
Supported value lists and tools
– Job description XSD
– Value lists (completed, zipped)
– Value lists online
– Field mapping – professions to branches
– Work locations mapping
– Import test tool
See value list section.