Dados coletados no mobile (ActivityHistory (Histórico de Execução de Atividades))

A API de ActivityHistory é responsável por retornar os dados de execução das tarefas de campo. Ela é a forma como o sistema integrado ao uMov.me consegue saber o que aconteceu em campo e poder assim dar prosseguimento aos processos de negócio envolvidos.

Descrição de Histórico

image.png

Busca por Lista de Históricos

GET /CenterWeb/api/{$apiKey}/activityHistory.xml

Este recurso permite fazer a busca de históricos de um determinado ambiente.

IMPORTANTE: Utilizando dessa forma, sem utilizar parâmetros de início e fim do histórico, serão mostrados os últimos 7 dias de históricos.

É permitido que você adicione alguns parâmetros na requisição. Os parâmetros são os seguintes:

GET /CenterWeb/api/{$apiKey}/activityHistory.xml?schedule=002

  • schedule: pesquisar por uma determinada tarefa

GET /CenterWeb/api/{$apiKey}/activityHistory.xml?initialStartTimeOnSystem=2011-10-01%2008:00:00&endStartTimeOnSystem=2011-10-01%2023:59:00:00

  • Identificar históricos de execução de atividades iniciados entre 2011-10-01 00:00:00 e 2011-10-01 23:59:59

GET /CenterWeb/api/{$apiKey}/activityHistory.xml?initialFinishTimeOnSystem=2011-11-01%2008:00:00&endFinishTimeOnSystem=2011-11-01%2023:59:00:00

  • Identificar históricos de execução de atividades finalizadas entre 2011-11-01 00:00:00 e 2011-11-01 23:59:59

GET /CenterWeb/api/{$apiKey}/activityHistory.xml?initialStartTimeOnSystem=2011-10-01%2008:00:00&endFinishTimeOnSystem=2011-11-01%2023:59:00:00

  • Identificar históricos de execução de atividades executadas entre 2011-10-01 00:00:00 e 2011-11-01 23:59:59

GET /CenterWeb/api/{$apiKey}/activityHistory.xml?activity.captureGPS=true&schedule.alternativeIdentifier=teste

  • Identificar históricos de execução de atividades filtrando os históricos através de atributos das entidades vinculadas

Realizar pesquisas de histórico de execução de atividades utilizando parâmetros pela API uMov.me é simples assim.

Veja um exemplo, do resultado de uma requisição que foi feita em XML:

<result>

<resourceName>activityHistory</resourceName>

<size>1</size>

<entries>

<entry id="100" link="/activityHistory/100.xml"/>

</entries>

</result>

A resposta da requisição será uma mensagem contendo o total de registro retornados e uma lista simples, sem detalhes de cada registro retornado, contendo para cada entrada, Id do registro no uMov.me e o link, que pode ser usado para recuperar os dados específicos deste registro.

Busca de um histórico completo específico (com todos os dados do histórico)

GET /CenterWeb/api/{$apiKey}/activityHistoryHierarchical/{$id}.xml

Esta operação serve para puxar informações de um histórico de execução de atividade do sistema de forma completa. Todos os dados da tarefa e dados coletados são retornadas nessa requisição. Veja o exemplo de retorno de uma entidade abaixo (considerando uma requisição feita em XML):

<activityHistory>

<id>445</id>

<startTimeOnSystem>2010-10-05 19:30:16</startTimeOnSystem>

<finishTimeOnSystem>2010-10-05 19:30:36</finishTimeOnSystem>

<dataSource>0</dataSource>

<status>true</status>

<executionExportStatus>false</executionExportStatus>

<biExportStatus>false</biExportStatus>

<numberPicturesTaken>2</numberPicturesTaken>

<numberPicturesReceived>1</numberPicturesReceived>

<activity>

<id>9</id>

<description>Entrega Total Realizada</description>

<alternativeIdentifier />

<displayOrder>1</displayOrder>

<minimumAmountPics>0</minimumAmountPics>

<maximumAmountPics>2</maximumAmountPics>

<active>true</active>

<comunicationType>0</comunicationType>

<executionType>1</executionType>

<loopExecution>false</loopExecution>

<takePictures>true</takePictures>

<showsSessionWebForm>false</showsSessionWebForm>

<confirmClose>2</confirmClose>

</activity>

<schedule>

<id>566</id>

<situation>

<id>50</id>

<description>Returned</description>

</situation>

<agent>

<id>38</id>

<name>Entregador 5</name>

<active>false</active>

<login>e5</login>

<centerwebUser>false</centerwebUser>

<mobileUser>true</mobileUser>

<biUser>false</biUser>

<biUserRole>0</biUserRole>

<inputWebAsAnotherUser>false</inputWebAsAnotherUser>

<centerwebUserRole>D</centerwebUserRole>

<validateClient>0</validateClient>

<exportStatus>false</exportStatus>

</agent>

<origin>1</origin>

<hour>16:29</hour>

<date>2010-10-05</date>

<priority>1</priority>

<executionDate>2010-10-05</executionDate>

<alternativeIdentifier />

<executionHour>19:30</executionHour>

<serviceLocal>

<id>6</id>

<alternativeIdentifier />

<description>Trevisan Sao Paulo</description>

<geoCoordinate>-23.566675, -46.6499364</geoCoordinate>

<corporateName>Trevisan Tecnologia Ltda</corporateName>

<streetType>Av.</streetType>

<street>Paulista</street>

<streetNumber>726</streetNumber>

<streetComplement>sala 1707</streetComplement>

<zipCode>99999999</zipCode>

<state>SP</state>

<observation />

<active>true</active>

<origin>1</origin>

<insertDateTime>2010-07-07 20:25:15</insertDateTime>

<lastUpdateDateTime>2010-12-24 14:14:49</lastUpdateDateTime>

</serviceLocal>

<exportSituation>0</exportSituation>

<observation />

<active>true</active>

<activitiesOrigin>1</activitiesOrigin>

<recreateTaskOnPda>false</recreateTaskOnPda>

<urlPublic>

http://center.umov.me/CenterWeb/report/schedule/655521303/1527515806508

</urlPublic>

<scheduleSituationHistories>

<scheduleSituationHistory>

<situation>

<description>Retornada de Campo</description>

</situation>

<lastUpdateDateTime>2016-12-19 11:56:35</lastUpdateDateTime>

</scheduleSituationHistory>

<scheduleSituationHistory>

<situation>

<description>Em Campo</description>

</situation>

<lastUpdateDateTime>2016-12-19 11:56:35</lastUpdateDateTime>

</scheduleSituationHistory>

<scheduleSituationHistory>

<situation>

<description>Pendente de Envio para Campo</description>

</situation>

<lastUpdateDateTime>2016-12-19 11:56:35</lastUpdateDateTime>

</scheduleSituationHistory>

</scheduleSituationHistories>

</schedule>

<sections>

<section>

<id>9</id>

<description>Unica</description>

<order>0</order>

<alternativeIdentifier />

<active>true</active>

<mandatory>1</mandatory>

<useItem>false</useItem>

<findItemsByIdentifier>false</findItemsByIdentifier>

<itemFillMode>0</itemFillMode>

<groupingItemsTypeOnMobile>1</groupingItemsTypeOnMobile>

<items>

<item>

<id>6</id>

<description>Padrão Item</description>

<active>true</active>

<fields>

<field>

<id>23</id>

<mobilePageNumber>1</mobilePageNumber>

<order>0</order>

<nullable>true</nullable>

<unique>false</unique>

<description>Nome Recebedor:</description>

<updatable>true</updatable>

<visible>true</visible>

<tip />

<type>A</type>

<size>25</size>

<active>true</active>

<sourceValue>0</sourceValue>

<showValueInMobile>false</showValueInMobile>

<fieldHistory>

<id>2645</id>

<value>yyyy</value>

<valueForExhibition>yyyy</valueForExhibition>

<status>true</status>

</fieldHistory>

</field>

<field>

<id>24</id>

<mobilePageNumber>1</mobilePageNumber>

<order>1</order>

<nullable>true</nullable>

<unique>false</unique>

<description>Documento Recebedor:</description>

<updatable>true</updatable>

<visible>true</visible>

<tip />

<type>N</type>

<size>15</size>

<active>true</active>

<sourceValue>0</sourceValue>

<showValueInMobile>false</showValueInMobile>

<fieldHistory>

<id>2646</id>

<value>9999</value>

<valueForExhibition>9999</valueForExhibition>

<status>true</status>

</fieldHistory>

</field>

<field>

<id>25</id>

<mobilePageNumber>1</mobilePageNumber>

<order>2</order>

<nullable>true</nullable>

<unique>false</unique>

<description>Tipo Recebedor:</description>

<updatable>true</updatable>

<visible>true</visible>

<tip />

<type>L</type>

<active>true</active>

<listType>U</listType>

<sourceValue>0</sourceValue>

<showValueInMobile>false</showValueInMobile>

<fieldHistory>

<id>2647</id>

<value>1</value>

<valueForExhibition>O Mesmo</valueForExhibition>

<status>true</status>

</fieldHistory>

</field>

</fields>

</item>

</items>

</section>

</sections>

<geoCoordinates>

<geoCoordinate>

<id>1031046</id>

<date>2012-12-27</date>

<hour>161027</hour>

<latitude>0.0</latitude>

<longitude>0.0</longitude>

<type>ON_START_ACTIVITY</type>

<observation>Não foi possível capturar as coordenadas. A pessoa desistiu após tentar novamente 0 vezes.</observation>

<provider/>

<withGps>true</withGps>

<gpsEnabled>true</gpsEnabled>

<networkEnabled>false</networkEnabled>

</geoCoordinate>

<geoCoordinate>

<id>1031045</id>

<date>2012-12-27</date>

<hour>160808</hour>

<latitude>0.0</latitude>

<longitude>0.0</longitude>

<type>ON_START_ACTIVITY</type>

<observation>Não foi possível capturar as coordenadas. A pessoa desistiu após tentar novamente 0 vezes.</observation>

<provider/>

<withGps>true</withGps>

<gpsEnabled>true</gpsEnabled>

<networkEnabled>false</networkEnabled>

</geoCoordinate>

</geoCoordinates>

</activityHistory>

Busca de um histórico específico

GET /CenterWeb/api/{$apiKey}/activityHistory/{$id}.xml

Esta operação serve para puxar informações de um histórico de execução de atividade do sistema. Veja o exemplo de retorno de uma entidade abaixo (considerando uma requisição feita em XML):

<activityHistory>

<id>563486</id>

<activity>

<id>3146</id>

<description>Atividade</description>

<active>true</active>

<loopExecution>false</loopExecution>

<takePictures>false</takePictures>

</activity>

<schedule>

<id>394748</id>

<origin>4</origin>

<hour>23:31</hour>

<executionHour>23:31</executionHour>

<active>true</active>

<activitiesOrigin>3</activitiesOrigin>

</schedule>

<startTimeOnSystem>2011-10-18 23:31:37</startTimeOnSystem>

<finishTimeOnSystem>2011-10-18 23:31:42</finishTimeOnSystem>

<items>

<activityHistoryItem id="11204373" link="/activityHistoryItem/11204373.xml"/>

</items>

</activityHistory>

Note que ao requisitar as informações de um determinado histórico buscando pelo Id, um conjunto de informações que compõe o histórico de execução são resgatos juntos. Entre as informações estão, dados sobre a atividade, tarefa e uma lista de items que armazenam os valores de execução para os campo da atividade.

Busca de um item de histórico específico

GET /CenterWeb/api/{$apiKey}/activityHistoryItem/{$id}.xml

Através desta operação é possivel obter os dados informados para os campos de uma atividade no momento da execução pelo sistema. Veja o exemplo de retorno de uma entidade abaixo (considerando uma requisição feita em XML):

<activityHistoryItem>

<id>11204373</id>

<section>

<id>10475</id>

<description>Entrega Realizada</description>

<active>true</active>

<mandatory>true</mandatory>

</section>

<item>

<id>38096</id>

<description>Padrão</description>

<active>true</active>

</item>

<sectionField>

<id>38037</id>

<nullable>true</nullable>

<unique>false</unique>

<description>Nota</description>

<updatable>true</updatable>

<visible>true</visible>

<type>N</type>

<size>2</size>

<active>true</active>

</sectionField>

<value>10</value>

</activityHistoryItem>

As informações que compõe um item de histórico de execução são:

image.png

Atualização de histórico (Marcar como Exportado)

POST /CenterWeb/api/{$apiKey}/activityHistory/{$id}.xml

Esta operação faz com que o histórico da tarefa seja marcado como exportado. É possível também informar o nome do arquivo ou

lote gerado.

<activityHistory>

<executionExportStatus>true</executionExportStatus>

<exportFileName>Arquivo 12345</exportFileName>

</activityHistory>

Esta operação faz com que o histórico da tarefa seja marcado como não exportado.

<activityHistory>

<executionExportStatus>false</executionExportStatus>

</activityHistory>

Atualização de histórico (Alterar Status de Aprovação)

POST /CenterWeb/api/{$apiKey}/activityHistory/{$id}.xml

Esta operação faz com que o status de aprovação da tarefa seja alterado para APROVADO:

<activityHistory>

<statusApproval>3</statusApproval>

</activityHistory>

Esta operação faz com que o status de aprovação da tarefa seja alterado para REPROVADO:

<activityHistory>

<statusApproval>4</statusApproval>

</activityHistory>

IMPORTANTE:

  • Só permite gravar histórico com aprovado (statusApproval = 3) ou reprovado (statusApproval = 4) se histórico estiver pendente de aprovação;

  • Se o histórico estiver como sem necessidade de aprovação, o sistema não permite mudar o status.

Inclusão de histórico

POST /CenterWeb/api/{$apiKey}/schedule/{scheduleId}/activityHistory.xml

ou

POST /CenterWeb/api/{$apiKey}/schedule/alternativeIdentifier/{scheduleIdentifier}/activityHistory.xml

Esta operação permite fazer a criação de um histórico pela API.

O histórico pela api, segue uma estrutura similar ao utilizado pela busca de histórico completo (hierárquico). Nele é informada toda a estrutura do histórico de forma hierárquica (Tarefa > Atividade > Seção > Item > Campo) para que o sistema consiga mapear este registro de forma correta.

A criação do histórico obriga a existência de uma tarefa. Esta tarefa por sua vez tem suas atividades vinculadas, seguidas de seções e campos. Sendo assim para que um histórico seja criado, é necessário que toda a hierarquia de uma execução seja pré-existente no sistema.

Para criação do histórico começamos pela tarefa. Esta tarefa é identificada pela api através das chaves {scheduleId} ou {scheduleIdentifier}, identificada acima na URL de exemplo. Isso demonstra que é possível identificar uma tarefa através de seu id interno do sistema ou pelo identificador alternativo cadastrado.

A tarefa informada na URL deve estar na situação pendente de envio ou em campo. Somente é permitida a inclusão de históricos para atividades que mantem a tarefa em campo. Após a inclusão do histórico, a tarefa passa para a situação Em Campo.

Existem dois tipos de histórico. Um relacionado a algum item ou aqueles utilizados em seções sem items. Para cada caso, existe uma pequena alteração na estrutura do XML que deve ser enviado para a API.

Exemplo de histórico SEM itens:

POST /CenterWeb/api/{$apiKey}/schedule/alternativeIdentifier/tarefa1/activityHistory.xml

<activityHistory>

<activity>

<alternativeIdentifier>atividade1</alternativeIdentifier>

</activity>

<sections>

<section>

<alternativeIdentifier>secao1</alternativeIdentifier>

<fields>

<field>

<alternativeIdentifier>campo1</alternativeIdentifier>

<fieldHistory>

<value>yyyy</value>

<valueForExhibition>yyyy</valueForExhibition>

</fieldHistory>

</field>

<field>

<alternativeIdentifier>campo2</alternativeIdentifier>

<fieldHistory>

<value>9999</value>

<valueForExhibition>9999</valueForExhibition>

</fieldHistory>

</field>

</fields>

</section>

</sections>

</activityHistory>

No exemplo acima está sendo criado um histórico para a tarefa identificada como "tarefa1". Estão sendo preenchidos os campos "campo1" e "campo2" da seção "secao1" na atividade "atividade1". Todos as referências são identificadas utilizando o identificador alternativo.

Exemplo de histórico COM itens:

POST /CenterWeb/api/{$apiKey}/schedule/alternativeIdentifier/tarefa2/activityHistory.xml

<activityHistory>

<activity>

<alternativeIdentifier>atividade2</alternativeIdentifier>

</activity>

<sections>

<section>

<alternativeIdentifier>secao1</alternativeIdentifier>

<items>

<item>

<alternativeIdentifier>item1</alternativeIdentifier>

<fields>

<field>

<alternativeIdentifier>campo1</alternativeIdentifier>

<fieldHistory>

<value>yyyy</value>

<valueForExhibition>yyyy</valueForExhibition>

</fieldHistory>

</field>

<field>

<alternativeIdentifier>campo2</alternativeIdentifier>

<fieldHistory>

<value>9999</value>

<valueForExhibition>9999</valueForExhibition>

</fieldHistory>

</field>

</fields>

</item>

</items>

</section>

</sections>

</activityHistory>

No exemplo acima está sendo criado um histórico para a tarefa identificada como "tarefa2". Estão sendo preenchidos os campos "campo1" e "campo2" do item "item1" da seção "secao1" na atividade "atividade2". Todos as referências são identificadas utilizando o identificador alternativo.

Callback para históricos retornados

O sistema conta com um serviço de callback para notificar automaticamente um histórico recebido na retaguarda para um outro sistema. Isso torna o processo mais ágil, sem a necessidade de fazer requisições de API para consultar se a informação já chegou ou ainda está sendo processada.

Para que o callback funcione de forma adequada, ainda deve ser solicitada a ativação do recurso ao time de suporte. Em breve, estaremos disponibilizando uma interface para que seja possível a ativação do recurso via uMov.Center.

Com o processo ativo, deve ser criado um campo customizável alfanumérico na tarefa. Esse campo deve possuir identificador altenativo = "callback". Dessa forma, ao criar uma tarefa, deve ser informado nesse campo (callback) a URL do seu sistema que irá receber os dados do histórico que estão no uMov.me.

Quando um histórico da tarefa for recebido na retaguarda, com o processo de callback ativo, e com uma URL de callback cadastrada na tarefa, será disparada uma requisição POST para a URL informada contendo uma variável com nome "data" contendo as informações dos históricos recebidos na retaguarda, conforme exemplo listado abaixo:

<schedule>

<alternativeIdentifier>Tarefa XXX</alternativeIdentifier>

<activityHistories>

<activityHistory id="8988776655445393"/>

</activityHistories>

</schedule>

Note que nesse exemplo, é enviado o identificador alternativo da tarefa (Tarefa XXX) e o histórico recebido para a tarefa abaixo com o id="8988776655445393".

Para que a requisição obtenha sucesso, é necessário retornar o status code 200 (OK). Caso o retorno da requisição obtenha um status code diferente de 200(OK), a requisição identificará a chamada com erro.

Importante: O sistema somente irá considerar os históricos recebidos após a data e hora de ativação do recurso e para tarefas que possuem uma URL de callback válida. Além disso, ao disparar a requisição do callback, o sistema marca o histórico como já integrado. Dessa forma, a chamada da API de callback é executada uma única vez por histórico.

Buscando Históricos

Para buscar os dados do histórico, podem ser usados os métodos GET /CenterWeb/api/{$apiKey}/activityHistoryHierarchical/{$id}.xml ou GET /CenterWeb/api/{$apiKey}/activityHistory/{$id}.xml, conforme listado acima.

Observações importantes:

  • Os valores informados deverão sempre respeitar as informações de tipo, tamanho, etc. dos campos criados pelo sistema. (Ex. apenas números para campos numéricos, etc.);

  • No caso de campo data o formato esperado do valor deverá ser AAAA-MM-DD;

  • Não é possível fazer a criação de histórico para campos do tipo foto e multimidia pela API;

  • Os campos value e valueForExhibition são principalmente usados para casos onde temos campo do tipo lista, nos demais casos (Alfanumérico, Numérico, etc.) você deverá apenas repetir o valor esperado nos dois campos.

  • As fórmulas de valor e validação para campos, seções e atividades não são executadas na inclusão de histórico via API.

  • Sistema não valida de itens estão vinculados a seção. Somente valida se item está cadastrado no ambiente.

  • Não são validados campos ou itens obrigatórios na inclusão via API.

  • Não é feita a validação de seção e atividades antecessoras.

  • As coordenadas GPS de execução não podem ser incluídas via API.

  • Os valores preenchidos em campo lista não são validados para verificar se são válidos conforme o cadastro do campo.

Operações usando HTTP POST

Ao atualizar um histórico você precisa em sua requisição POST identificar os dados do histórico utilizando um parâmetro com o nome data.

Segue um exemplo disparando a requisição a partir de um formulário HTML, onde você precisa trocar {$apiKey} pela chave da sua API e {$id} pelo código do objeto que está sendo modificado. Neste exemplo estamos modificando o status do histórico para exportado. Veja a base do form HTML.

<html>

<form method="POST" action="http://api.umov.me/CenterWeb/api/{$apiKey}/activityHistory/{$id}.xml">

<input type="text" name="data" value="<activityHistory><executionExportStatus>true</executionExportStatus></activityHistory>" />

<input type="submit" />

</form>

</html>