Uma das grandes vantagens do Infopath é a capacidade de trabalhar em offline com um determinado formulário. No entanto, e caso não sejam tomadas determinadas precauções, essa mesma vantagem pode desaparecer. Uma situação muito comum nos formulários é ter "Drop Down Lists" que são alimentadas por "Secondary Data Connections", as quais se podem encontrar associadas a um web service, a uma base de dados, ou a um ficheiro de resources. A solução do ficheiro de resource é aquela que se coaduna com a capacidade de trabalhar em offline, pois o mesmo encontra-se no cab do formulário. Mas por outro lado, ficamos restringidos a dados estáticos. O ideal é trabalhar com o ficheiro de resources, mas na abertura do form, tentar sincronizar com os dados que por exemplo são oriundos de um web service.
Para tal, basta que o binding da Drop Down List esteja associado ao ficheiro de resource. Para facilitar, o ficheiro de xml deverá ter o mesmo schema que a mensagem de resposta do web service. Seguidamente, deve ser criada uma "Secondary data Connection" associada ao web service em causa (não esquecer desactivar o carregamento automático na abertura do form).
No evento OnLoad do formulário, será feito uma chamada ao web service, e caso a mesma seja sucedida, o conteúdo do web service é copiado para a Data Connection associado ao ficheiro de resource.
function XDocument::OnLoad(eventObj) {
var wsAdapter = XDocument.DataObjects("GetPayerList");
try {
//Call the web service
wsAdapter.QueryAdapter.Query();
wsAdapter.DOM.setProperty("SelectionNamespaces","xmlns:s0='http://schemas.agilior.pt/agfis/v1'");
var xmlNodeToCopy = wsAdapter.DOM.selectSingleNode("//s0:GetPayerListResponseMsg");
if (xmlNodeToCopy != null)
{
XDocument.DataObjects("Payer").DOM.documentElement = xmlNodeToCopy;
}
}
catch (ex) {
XDocument.UI.Alert("Error updating 'Payer' resources. Your resources may be out of date.\nError: " + ex.description);
}
}
Quando o utlizador não tem conectividade, a cópia não é sucedida e é lançada uma mensagem de alerta. Claro está que de tempos a tempos deverá ser feito um novo deploy do formulário, com as resources mais actualizadas. Os ficheiros de resources reflectem os dados à data do deploy.
Infelizmente não descobri maneira de esmagar os ficheiros de resources, de forma a q estes reflictam a última chamada ao web service.
BTW: Tenho alguma dificuldade em perceber como é que um produto tão potente como o Infopath ainda não ganhou momento. Será apenas o problema do licenciamento?
BFC