Как я могу связаться с API Kronos?
У меня есть Кронос точка входа http://kronos../wfc / XmlService что я должен иметь доступ, однако, когда я открываю его в brower, ответ:
<Kronos_WFC>
<Response Status="Failure" ErrorCode="1332" Message="WFP-01110 The MIME type of the request is invalid. Type Found: . Valid types: text/xml, application/xml."></Response>
</Kronos_WFC>
что мне делать, чтобы использовать веб-службы?
кстати, я использую C# для связи с сервером.
4 ответов
вы получаете это с помощью brower, потому что сервер Kronos поддерживает только запросы POST, и браузер выдает запрос GET. Причина этого заключается в том, что Kronos требует XML в теле, и POST является наиболее подходящим методом для этого.
способ доступа к XML API Kronos, делает WebRequest на URL-адрес с помощью метода POST и такой:
HttpWebRequest reqFp = (HttpWebRequest)HttpWebRequest.Create(KronosServerUrl);
reqFp.Method = "POST";
reqFp.ContentType = "text/xml";
обратите внимание, как ContentType также установлен в text / xml.
кроме того, вам нужно убедиться, что у вас есть XML API access check в профиле доступа к функциям в Kronos.
As Ник указал, вы можете общаться с API Kronos, используя запросы XML POST.
хотя ваш метод отправки запросов может отличаться, формат запроса и точка входа API (wfc/XmlService
) должно применяться ко всем языкам.
Глава 1: понимание XML API
на WFC v5.0 инструментарий разработчика программиста Руководство1 предоставляет общее руководство для общения с API Kronos на разных языках. В первой главе рассматривается XML API, как будут отправляться все запросы API.
Запрос На Вход
стандартный запрос входа в систему XML для Kronos WFC. Это должно быть отправлено первым перед любыми другими запросами.
<Kronos_WFC version = "1.0">
<Request
Object = "System"
Action = "Logon"
Username = "ValidUsername"
Password = "ValidPassword"
/>
</Kronos_WFC>
пример ответа:
<Kronos_WFC version="1.0" TimeStamp="11/15/2017 3:35PM GMT-05:00">
<Response Status="Success" Timeout="1800" PersonKey="123456" Object="System"
Username="ValidUsername" Action="Logon" PersonNumber="112233">
</Response>
</Kronos_WFC>
Запрос На Выход
этот запрос выхода завершит активную сессию Kronos.
<Kronos_WFC version="1.0">
<Request Object="System" Action="Logoff"/>
</Kronos_WFC>
Общий Запрос Периода Оплаты
этот запрос загружает общую сумму периода оплаты для сотрудника 12345
С 20 октября 2017 года и 27 октября 2017 года.
<Kronos_WFC version="1.0">
<Request Action="Load">
<Timesheet>
<Employee>
<PersonIdentity PersonNumber = "12345"/>
</Employee>
<Period>
<TimeFramePeriod PeriodDateSpan = "10/20/2017 - 10/27/2017"/>
</Period>
</Timesheet>
</Request>
</Kronos_WFC>
Глава 2: Использование XML API
в этой главе рассматриваются языковые примеры отправки XML-запросов в Kronos. Он включает примеры для Java и Visual Basic. (для Python, см. kronos-wfc-login.py
)
обратите внимание, что эти примеры носят достаточно упрощенный. Я рекомендую изучить более современную библиотеку XML или HTTP-запросов, специфичную для любого языка, который вы используете.
реализация на основе Java2
существует восемь шагов с использованием языка Java:
открыть HTTP подключение к серверу с помощью следующей строки URL:
URL url = new URL("http://localhost/wfc/XmlService"); HttpURLConnection conn = (HttpURLConnection)url.openConnection();
не забудьте заменить
http://localhost
С URL вашего серверанастройте соединение, установив метод HTTP в " POST "и тип содержимого в" text/xml", как показано:
conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "text/xml");
HTTP-соединение, которое вы устанавливаете, используется для обоих входных данных (отправка XML
<Request>
) и вывод (чтение XML<Response>
). Необходимо также убедиться, что любой прокси-сервер или промежуточный шлюз не пытается кэшировать<Request>
или<Response>
.conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false);
установите cookies для подключения. Изначально при первом подключении к серверу набор cookies будет пустым. Однако, the
<Response>
для входа<Request>
вернет набор cookies это должно быть сохранено и отправлено обратно в последующих HTTP-запросах.Vector cookies = new Vector(); … //set the cookie values - if available for (int i=0; i <cookies.size(); i++) { String cookie = (String)cookies.elementAt(i); conn.setRequestProperty("Cookie", cookie); }
пишите XML-текст как часть HTTP-запроса.
String xml_send = "<?xml version='1.0'?> … </Kronos_WFC>" PrintWriter out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream())); out.println(xml_send); out.close();
подключиться к серверу.
conn.connect();
откройте ответ от сервера.
InputStream is = conn.getInputStream();
читать ответ. Ответ HTTP от сервера будет содержать ответ XML API. В случае запроса на вход в систему строка
xml_recv
содержит ответ.int size = conn.getContentLength(); byte[] dataBytes = new byte[size]; int bytesRead = 0; int pos = 0; //read stream into byte array while ( (bytesRead >= 0) && (pos < size)) { if ((bytesRead = is.read(dataBytes, pos, size-pos)) >= 0) { pos = pos + bytesRead; } } String xml_recv = new String(dataBytes, 0, size); is.close();
читать куки от ответ и хранить их для последующих HTTP-запросов.
int j = 1;// while (true) { String key = conn.getHeaderFieldKey(j); if (key==null) break; else if (key.equals("Set-Cookie")) { String value = conn.getHeaderField(j); cookies.addElement(value); } j++; }
Реализация Visual Basic
в этом разделе те же основные шаги, реализованные в Java в последнее разделы реализованы в Visual Basic. Это сравнение показывает, что Визуальный основной упрощает процесс внутренне управление куки и большая часть обработки HTTP-соединений.
следующее
Inet1 COM object
обрабатывает вызов HTTP запрос, как показано ниже:Dim sPost As String Dim sAction As String Dim sXMLData As String Dim sHTTPHeaders As String sPost = "POST" sAction = "http://localhost/wfc/XmlService" sXMLData = "<xml ..> <request …….. /></xml>" sHTTPHeaders = "Content-type: text/xml" ' Inet1 object is an instance ' of the msinet.ocx control ' placed on the current form Inet1.Execute sAction, sPost, sXMLData, sHTTPHeaders
Полезные Ресурсы
- WFC v5.0 инструментарий разработчика руководство программиста
- документация и пакеты обновления для продуктов Kronos (требует логин)
- WFC-API.JS-JavaScript для отправки XML-запросов в WFC API
- TimeCardView-Открыть исходный веб-интерфейс для API Kronos
- Форумы Сообщества Kronos
Примечания:
1: первоначально указанная документация была написана для Kronos WFC 5.0 (API 1.0). Хотя версиях до 6.3 должны использовать тот же API, я не могу гарантировать точность для других версий. (См. XML API версии 6.3-8.0 обновление)
2: приведенные ниже примеры кода относятся к 2004 году. Реализация Java может быть значительно упрощена с помощью библиотеки HTTP.