UpdateEmployee
Organisation service 1.9: Changes an employee's user name, initials, names, number, e-mail, title, phones, working-time / calendar / allowance / type and cost-price / hourly-rate references.
| Service | Organisation 1.9 |
| Endpoint | POST https://app{server-number}.timelog.com/{account}/WebServices/Organisation/V1_9/OrganisationServiceSecure.svc |
| SOAPAction | http://www.timelog.com/api/tlp/v1_9/OrganisationService/UpdateEmployee |
| Content-Type | text/xml; charset=utf-8 |
| Authentication | A token from GetToken |
| Changes data | Yes |
| Safe to retry | Yes |
How it works
References are matched BY NAME, as in CreateEmployee: normal working time, holiday calendar, allowance legislation, employee type; the cost price within the employee's legal entity; the hourly rate resolved for the employee's legal entity. The first failing look-up stops the call. Changing the user name changes the LOGIN name. The e-mail is checked for format only - no confirmation is sent to the old or new address. The title is limited to 50 characters. User name / initials must stay unique; a clash with an INACTIVE user is tolerated only when the call leaves both unchanged.
Parameters
Each parameter has one label: Required, Conditional (required depending on other values) or Optional. Send them in the order shown.
GUID of the employee.
Optional. Default unchanged. New LOGIN user name. Blank = unchanged. Must be unique among users.
Optional. Default unchanged. New initials. Blank = unchanged. Must be unique among users.
Optional. Default unchanged. Blank = unchanged.
Optional. Default unchanged. Blank = unchanged.
Optional. Default unchanged. Employee number. Blank = unchanged.
Optional. Default unchanged. New e-mail - where set-password mails go. Format-checked only; no confirmation. Blank = unchanged.
Optional. Default unchanged. Blank = unchanged.
Optional. Default unchanged. Work telephone. Blank = unchanged.
Optional. Default unchanged. Mobile telephone. Blank = unchanged.
Optional. Default unchanged. Name of a normal working time. Not found -> 'The normal working week was not found'.
Optional. Default unchanged. Name of a holiday calendar.
Optional.
Optional. Default unchanged. Name of an employee type.
Optional. Default unchanged. Name of an hourly rate, resolved for the employee's legal entity.
Optional. Default unchanged. Name of a cost price in the employee's legal entity.
Optional. Default unchanged. Identifier from your system. Not checked for uniqueness. Blank = unchanged.
The token from GetToken: Initials, Expires and Hash, sent back unchanged.
Request
POST /{account}/WebServices/Organisation/V1_9/OrganisationServiceSecure.svc HTTP/1.1
Host: app{server-number}.timelog.com
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.timelog.com/api/tlp/v1_9/OrganisationService/UpdateEmployee"
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:org="http://www.timelog.com/api/tlp/v1_9"
xmlns:tok="http://www.timelog.com/api/tlp/v1_3">
<soapenv:Body>
<org:UpdateEmployee>
<org:employeeGuid>{employeeGuid}</org:employeeGuid>
<org:username>unchanged</org:username>
<org:initials>unchanged</org:initials>
<org:firstname>unchanged</org:firstname>
<org:lastname>unchanged</org:lastname>
<org:employeeNo>unchanged</org:employeeNo>
<org:email>unchanged</org:email>
<org:title>unchanged</org:title>
<org:telephone>unchanged</org:telephone>
<org:mobile>unchanged</org:mobile>
<org:normalWorkingTimeName>unchanged</org:normalWorkingTimeName>
<org:holidayCalendarName>unchanged</org:holidayCalendarName>
<org:allowanceLegislationName>{allowanceLegislationName}</org:allowanceLegislationName>
<org:employeeTypeName>unchanged</org:employeeTypeName>
<org:hourlyRateName>unchanged</org:hourlyRateName>
<org:costPriceName>unchanged</org:costPriceName>
<org:externalIdentifier>unchanged</org:externalIdentifier>
<org:token>
<tok:Initials>{Initials from GetToken}</tok:Initials>
<tok:Expires>{Expires from GetToken, unchanged}</tok:Expires>
<tok:Hash>{Hash from GetToken}</tok:Hash>
</org:token>
</org:UpdateEmployee>
</soapenv:Body>
</soapenv:Envelope>
curl -X POST "https://app{server-number}.timelog.com/{account}/WebServices/Organisation/V1_9/OrganisationServiceSecure.svc" \
-H "Content-Type: text/xml; charset=utf-8" \
-H 'SOAPAction: "http://www.timelog.com/api/tlp/v1_9/OrganisationService/UpdateEmployee"' \
--data-binary @request.xml
import requests
URL = "https://app{server-number}.timelog.com/{account}/WebServices/Organisation/V1_9/OrganisationServiceSecure.svc"
SOAP_ACTION = '"http://www.timelog.com/api/tlp/v1_9/OrganisationService/UpdateEmployee"'
envelope = """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:org="http://www.timelog.com/api/tlp/v1_9"
xmlns:tok="http://www.timelog.com/api/tlp/v1_3">
<soapenv:Body>
<org:UpdateEmployee>
<org:employeeGuid>{employeeGuid}</org:employeeGuid>
<org:username>unchanged</org:username>
<org:initials>unchanged</org:initials>
<org:firstname>unchanged</org:firstname>
<org:lastname>unchanged</org:lastname>
<org:employeeNo>unchanged</org:employeeNo>
<org:email>unchanged</org:email>
<org:title>unchanged</org:title>
<org:telephone>unchanged</org:telephone>
<org:mobile>unchanged</org:mobile>
<org:normalWorkingTimeName>unchanged</org:normalWorkingTimeName>
<org:holidayCalendarName>unchanged</org:holidayCalendarName>
<org:allowanceLegislationName>{allowanceLegislationName}</org:allowanceLegislationName>
<org:employeeTypeName>unchanged</org:employeeTypeName>
<org:hourlyRateName>unchanged</org:hourlyRateName>
<org:costPriceName>unchanged</org:costPriceName>
<org:externalIdentifier>unchanged</org:externalIdentifier>
<org:token>
<tok:Initials>{Initials from GetToken}</tok:Initials>
<tok:Expires>{Expires from GetToken, unchanged}</tok:Expires>
<tok:Hash>{Hash from GetToken}</tok:Hash>
</org:token>
</org:UpdateEmployee>
</soapenv:Body>
</soapenv:Envelope>"""
response = requests.post(
URL,
data=envelope.encode("utf-8"),
headers={"Content-Type": "text/xml; charset=utf-8", "SOAPAction": SOAP_ACTION},
timeout=60,
)
result = parse_result(response) # see "Responses and errors"
{…} placeholder with your own value.Response
The call returns the standard response envelope. Check ResponseState first: a failed call still returns HTTP 200.
Success, Invalid or Error.
0 on success, otherwise the error code. See Errors.
Response<EmployeeHeader> of the employee after the update and a 'Successfully called' message. Never - failure is an Error envelope with an empty Return.
Example response
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<UpdateEmployeeResponse xmlns="http://www.timelog.com/api/tlp/v1_9">
<UpdateEmployeeResult xmlns:a="http://api.timelog.com"
xmlns:b="http://www.timelog.com/api/tlp/v1_9"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Return>
<b:EmployeeHeader>
<b:ID>3f2504e0-4f89-41d3-9a0c-305000000001</b:ID>
<b:EmployeeID>1001</b:EmployeeID>
<b:UserName>Example user</b:UserName>
<b:Initials>ABC</b:Initials>
<b:FirstName>Example first</b:FirstName>
<b:LastName>Example last</b:LastName>
<b:EmployeeNo>1001</b:EmployeeNo>
<b:Fullname>Example</b:Fullname>
</b:EmployeeHeader>
</a:Return>
<a:ReturnTypeDescription>EmployeeHeader</a:ReturnTypeDescription>
<a:Request>…</a:Request>
<a:ResponseState>Success</a:ResponseState>
<a:Messages>
<a:APIMessage>
<a:Message>Duration of call was 0,0421337 sec.</a:Message>
<a:Severity>Message</a:Severity>
<a:ErrorCode>0</a:ErrorCode>
</a:APIMessage>
</a:Messages>
<a:ErrorCode>0</a:ErrorCode>
<a:IsReturnPaged>false</a:IsReturnPaged>
<a:TotalPageCount>0</a:TotalPageCount>
</UpdateEmployeeResult>
</UpdateEmployeeResponse>
</s:Body>
</s:Envelope>
Request block is shortened.Errors
All errors come back with HTTP 200: check ResponseState, ErrorCode and Messages. The errors every operation can return (expired or invalid token, API not enabled, HTTPS required, general errors) are listed once in Responses and errors.
Errors specific to this operation:
| ResponseState | ErrorCode | Message | What it means | What to do |
|---|---|---|---|---|
| Error | 40001 | Error during call on TimeLog.API, Message 'Object reference not set to an instance of an object.' | employeeGuid unknown. | Take the GUID from EmployeeHeader.ID. Do not retry. |
| Error | 40001 | Error during call on TimeLog.API, Message 'The {normal working week | holiday calendar | allowance settings | employee type | cost price | hourly rate} was not found' / 'The department is not found' | A working time / holiday calendar / allowance / employee type / cost price / hourly rate name was not found. | — |
| Error | 40001 | Error during call on TimeLog.API, Message '{The email address is mandatory | No first name was provided | No last name was provided | No initials was provided | No user name was provided}' | 'No user name was provided' - assigning the user name threw. | Send the value. |
| Error | 40001 | Error during call on TimeLog.API, Message 'The title exceeds the maximum length of 50 characters' | title longer than 50 characters. | Shorten the title to 50 characters. |
| Error | 40001 | Error during call on TimeLog.API, Message 'The user violates the Business Rules for users' | Save refused: no employee-edit privilege for this employee, user name / initials already used, invalid e-mail, invalid employee number, or a reference rule. V1_9 lists the rule messages instead of the generic text. | Check the integration user's employee privileges first; then uniqueness of initials / user name; then the referenced data. |
| Error | 40001 | Error during call on TimeLog.API, Message 'System.Collections.Generic.List`1[TimeLog.TLP.Error.IViolation]' | The save returned violations without throwing, and the operation printed the LIST'S TYPE NAME instead of the messages. The caller cannot tell which rule failed. | DeactivateEmployee: use a termination date on or after the last registration. |
| Error | — | — | — | Always send the string parameter, even as an empty string. |