O Excel VBA controla a página da Web com Knockout; parece funcionar; mas nada é salvo
Resumo:
Basicamente, tentando editar um site com o Excel VBA. As edições parecem funcionar, mas quando eu uso o botão Salvar, nada é salvo. Eu sei que o botão Salvar funciona, explicado abaixo. Então, por que meus dados atualizados, visíveis na tela, estão sendo salvos?
A história:
Eu tenho esse código no qual trabalho há algum tempo com o Excel VBA. Ele abre uma página da web no Internet Explorer, navega onde eu quero, preenche um monte de dados, todos os que aparecem na tela, usando vários métodos, como:
For Each objElement In objElementColl
ExtractedName = objElement.outerHTML
If InStr(ExtractedName, "NewPermit") > 0 Then
objElement.Checked = True
e
Set DropDown = objHTML.getElementById("ProjectFile-AccreditedCertifierId")
DropDown.selectedIndex = 1
ou
objHTML.getElementsByName(ElementName)(0).Value = ValueCheck
Tudo isso funciona muito bem e muda na tela. Em seguida, clique em salvar usando:
Set objElementColl = objHTML.getElementsByClassName("btn")
For Each objElement In objElementColl
ExtractedName = objElement.outerHTML
If InStr(ExtractedName, "click: save, enable:") > 0 Then
objElement.Click
ExtractedName = 1
Exit For
End If
Next
O que novamente funciona bem. O problema é que ele realmente não salva minhas alterações do código das três peças acima. O que eu tentei é
a) Pause meu código e clique manualmente em Salvar (mesmo problema)
b) Pause meu código, altere manualmente uma caixa de seleção e execute o código para salvar (salva a alteração manual, mas não as codificadas
c) Pause o código e altere manualmente uma caixa e salve manualmente (somente a caixa alterada manualmente é salva)
Então, de cima, parece que meu clique salvo funciona, mas por algum motivo, embora as caixas sejam visivelmente alteradas e preenchidas usando o código, existe um espaço entre o visível e o plano de fundo.
Enfim, algum código fonte HTML. É o que o chrome me mostra ao inspecionar um elemento que estou alterando:
<fieldset>
<legend>Proposal</legend>
<div class="col-xs-12 col-sm-8 col-md-6">
<div class="row">
<div class="col-xs-2 form-group">
<label for="ProjectFile_ProposalLot">Lot</label><input class="form-control" data-bind="textInput: ProjectFile().ProposalLot" maxlength="100" name="ProjectFile-ProposalLot" type="text" />
</div>
<div class="col-xs-2 form-group" data-bind="visible: ProjectFile().StateId() != 7 && ProjectFile().StateId() != 5">
<label data-bind="text: ProjectFile().ProposalDpLabel()"></label>
<input class="form-control" data-bind="textInput: ProjectFile().ProposalDp" maxlength="100" name="ProjectFile-ProposalDp" type="text" />
</div>
Também procurei no código fonte inteiro a página ... Acredito que isso possa ser importante, mas não sou um codificador HTML. Eu diminuí um pouco
var ProjectFileEditViewModel=(function(){__extends(ProjectFileEditViewModel,ViewModel.Model);function ProjectFileEditViewModel(){ProjectFileEditViewModel.__super__.constructor.apply(this,arguments);};ProjectFileEditViewModel.prototype.fields=function(){return {"Id":new ViewModel.NumberField(0),"StateId":new ViewModel.NumberField(0),"DefaultOfficeAddressId":new ViewModel.ObservableField(),"Name":new ViewModel.ObservableField(),"ExistingApprovalDate":new ViewModel.DateField("DD/MM/YYYY"),"ProjectClosed":new ViewModel.ObservableField(),"ProposalAddress":new ViewModel.ObservableChildField(exports.AddressViewModel,this),"Zoning":new ViewModel.ObservableField(),"ProposalLot":new return ProjectFileEditViewModel;})();if(exports.ProjectFileEditViewModel==null)exports.ProjectFileEditViewModel=ProjectFileEditViewModel;
Há também isso ... novamente por muito mais tempo:
Buildaform.model=new Buildaform.ProjectPageViewModel({ ... ,"ProposalLot":null .... }
Acho que este último tem algo a ver com isso, e não sei se posso mudar.
Para as más notícias, não posso divulgar o endereço ou o código-fonte do site publicamente. Mas, por favor, me dê um PM e eu posso resolver algo.