Como posso comunicar com a API de Kronos?
Tenho um Kronos Ponto de entrada http://kronos../wfc / XmlService que eu deveria ser capaz de Acessar no entanto quando eu abri-lo no brower a resposta é:
<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>
O Que devo fazer para usar os serviços web?
A propósito, estou a usar C# para comunicar com o servidor.4 answers
A forma de aceder à API XML do Kronos, é fazer um WebRequest para o URL que tem com o método definido para publicar desta forma:
HttpWebRequest reqFp = (HttpWebRequest)HttpWebRequest.Create(KronosServerUrl);
reqFp.Method = "POST";
reqFp.ContentType = "text/xml";
Note como o ContentType também é definido como text / xml.
Além disso, tem de ter a certeza que tem acesso à API XML no perfil de acesso à função em Kronos.
Como Nick apontou, você pode se comunicar com a API de Kronos usando pedidos de XML POST.
Embora o seu método de envio dos pedidos possa variar, o formato do pedido e o ponto de entrada da API (wfc/XmlService
) devem aplicar-se a todas as línguas.
Capítulo 1: Compreender a API XML
O Guia do programador de ferramentas do programador do WFC v5.01 fornece um guia geral para a comunicação com o Kronos API em vários idiomas. O primeiro capítulo cobre a API XML, que é como todos os pedidos de API serão enviados.
Pedido De Registo
Um pedido padrão de logon XML para a Kronos WFC. Isto deve ser enviado antes de quaisquer outros pedidos.
<Kronos_WFC version = "1.0">
<Request
Object = "System"
Action = "Logon"
Username = "ValidUsername"
Password = "ValidPassword"
/>
</Kronos_WFC>
Resposta da amostra:
<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>
Pedido De Cancelamento
Este pedido de encerramento terminará a sessão activa de Kronos.<Kronos_WFC version="1.0">
<Request Object="System" Action="Logoff"/>
</Kronos_WFC>
Período De Pagamento Pedido Total
Este pedido carrega o período de pagamento Total do trabalhador12345
entre 20 de outubro de 2017 e 27 de outubro de 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>
Capítulo 2: utilização da API XML
Este capítulo cobre exemplos específicos da linguagem sobre como enviar pedidos XML para Kronos. Ele inclui exemplos paraJava e Visual Basic . (para Python, veja kronos-wfc-login.py
)
Note que estes exemplos são bastante simplificados. Eu recomendo olhar para um XML mais atualizado ou HTTP solicita biblioteca específica para qualquer idioma que você está usando.
Implementação baseada em Java2
Existem oito passos usando a linguagem Java:
Abra uma ligação HTTP ao servidor usando o seguinte texto de URL:
URL url = new URL("http://localhost/wfc/XmlService"); HttpURLConnection conn = (HttpURLConnection)url.openConnection();
lembre-se de substituir
http://localhost
pelo URL do seu servidorConfigure a ligação definindo o método HTTP para "POST" e o tipo de conteúdo em "texto / xml" como mostrado:
conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "text/xml");
A ligação de HTTP que estabelece é usada tanto para a entrada (enviar o XML
<Request>
) como para a saída (ler o XML<Response>
). Você também deve garantir que qualquer servidor proxy ou gateway intermediária não tenta cache o<Request>
ou o<Response>
.conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false);
Defina os cookies para a ligação. Inicialmente, na primeira ligação ao servidor, o conjunto de cookies estará vazio. Entanto, o
<Response>
para o Logon<Request>
irá devolver um conjunto de cookies isso deve ser salvo e enviado de volta em solicitações HTTP subsequentes.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); }
Escreva o texto XML como parte do pedido HTTP.
String xml_send = "<?xml version='1.0'?> … </Kronos_WFC>" PrintWriter out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream())); out.println(xml_send); out.close();
- Liga-te ao servidor.
conn.connect();
Abra a resposta do servidor.
InputStream is = conn.getInputStream();
- Leia a resposta. A resposta HTTP do servidor irá conter a resposta da API XML. No caso do pedido de Logon, o texto
xml_recv
contém a resposta.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();
Leia os cookies da resposta e armazene-os para os pedidos HTTP subsequentes.
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++; }
Implementação Visual Básica
Nesta Secção, os mesmos passos básicos implementados em Java na última a seção é implementada no Visual Basic. Esta comparação revela que: Visual Basic simplifica o processo através da gestão interna dos cookies e muito do HTTP tratamento de ligações.
O seguinte
Inet1 COM object
lida com a invocação do HTTP pedido apresentado: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
Recursos Úteis
- Guia do programador de ferramentas do programador WFC v5. 0
- Documentação e pacotes de serviços para os produtos Kronos (necessita de autenticação)
- WFC-API.js-JavaScript para enviar pedidos XML para a API do WFC
- TimeCardView - interface web de código aberto para a API de Kronos
- Fóruns Comunitários Kronos
Notas de rodapé:
1: a documentação citada foi originalmente escrita para Kronos WFC 5.0 (API 1.0). Enquanto as versões até 6.3 devem usar a mesma API, eu não posso garantir precisão para outras versões. (Ver API XML versão 6. 3 a actualização de 8. 0)
2: As amostras de código abaixo são de 2004. A implementação Java poderia ser muito simplificado usando uma biblioteca HTTP.
Não só o acesso XML, mas também o utilizador tem de ter acesso à api remota activo