CRIAR MAIS ROTAS DE PESQUISAS UTILIZANDO JSON

MORCELI 14/09/2016 20:34:19
#466932
Boa noite pessoal,
Preciso de um caminho ou exemplo de como pode ser feito isso, não achai nada muito claro na internet sobre o assunto ou pode ser que não compreendi muito bem, preciso saber como passar mais de um parâmetro GET para realizar um filtro mais detalhado no meu projeto.
Exemplo: Tenho dois textbox vamos dizer que é DataInicial e DataFinal e uma caixa de listagem onde que seria mais ou menos uma ChackboxList onde eu seleciono os itens que juntando tudo realizarei um filtro no meu banco de dados teste srsr trazendo o resultado assim por diante, até ai eu sei, o problema que estou utlizando WebApi e aprendendo aos poucos, só que travei agora nessa parte que são os filtros utilizando mais de um parâmetro de pesquisas.
Eu até consegui retornar os dados fazendo o basicão do basicão que é esse:

Eu fazendo isso ai ele retornar o resultado normal o basico da pesquisa Json que ensina na internet

[Ô]http://localhost:49433/api/RelatTop/[Ô] + id

Public Function GetValue(ByVal Id As intenger) As IEnumerable(Of TopPerdas)

Agora colocar mais parâmetros de pesquisas como eu gostaria mesmo não sei por onde começar
Meu Código parou assim srsrsrs, não sei como inserir mais rotas de pesquisas

   [ô] GET: api/RelatTop/5
Public Function GetValue(ByVal Inicial As String, ByVal Final As String) As IEnumerable(Of TopPerdas)



Dim JsSerializer As New JavaScriptSerializer()


Dim constr As String = [Ô]Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\BANCO\BancoTop10.mdb[Ô]
Dim con As New OleDb.OleDbConnection(constr)
Dim cmd As New OleDb.OleDbCommand([Ô]select N, Produto, PLU, Qtd, Valor, Loja, Sequencia from TbTop where Data >= [ô][Ô] & Inicial & [Ô][ô] and Data <= [ô][Ô] & Final & [Ô][ô] Order by Sequencia Asc[Ô])
cmd.Connection = con

Dim customers As New List(Of TopPerdas)()


con.Open()
Dim sdr As OleDb.OleDbDataReader = cmd.ExecuteReader()
While sdr.Read()
customers.Add(New TopPerdas() With { _
.Produto = sdr([Ô]Produto[Ô]).ToString(), _
.PLU = sdr([Ô]PLU[Ô]).ToString(), _
.Qtd = sdr([Ô]Qtd[Ô]).ToString(), _
.Valor = sdr([Ô]Valor[Ô]).ToString(), _
.Loja = sdr([Ô]Loja[Ô]).ToString() _
})



End While

con.Close()
Dim js As JavaScriptSerializer = New JavaScriptSerializer()

js.MaxJsonLength = Integer.MaxValue
js.Serialize(customers)
[ô]Context.Response.Write(js.Serialize(customers))
Return customers

End Function


   <script type = [Ô]text/javascript[Ô]>
function RelatioTop() {
var id = $([ô]#Inicial[ô]).val()
var idd = $([ô]#Final[ô]).val()

var xmlhttp = new XMLHttpRequest();
var url = [Ô]http://localhost:49433/api/RelatTop/[Ô] + id + [Ô]/[Ô] + idd;

xmlhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {

myFunction(this.responseText);

}
}
xmlhttp.open([Ô]GET[Ô], url, true);
xmlhttp.send();

function myFunction(response) {
var arr = JSON.parse(response);
var i;
var out = [Ô]<table>[Ô];

for (i = 0; i < arr.length; i++) {
out += [Ô]<tr><td>[Ô] +
arr[i].Produto +
[Ô]</td><td>[Ô] +
arr[i].PLU +
[Ô]</td><td>[Ô] +
arr[i].Qtd +
[Ô]</td><td>[Ô] +
arr[i].Valor +
[Ô]</td><td>[Ô] +
arr[i].Loja +
[Ô]</td></tr>[Ô];
}
out += [Ô]</table>[Ô];
document.getElementById([Ô]id01[Ô]).innerHTML = out;
}
}

</script>
MORCELI 14/09/2016 20:45:30
#466934
Postei na categoria errada era asp.net , foi sem querer , não tenho permissão para mudar ....
KERPLUNK 14/09/2016 21:08:36
#466937
Resposta escolhida
Bem, vamos lá:
Em primeiro lugar, parabéns por estar investindo seu tempo em algo que pode ser muito rentável tanto financeiramente quanto tecnicamente. Mas você está tendo alguns problemas em conceitos mais complexos que vão te dar muita dor de cabeça no futuro:
1 - Em hipótese alguma use concatenação de queries como está fazendo. Se for só para aprendizado tudo bem, mas quando for desenvolver algo que será utilizado em produção e exposto, isso NUNCA, JAMAIS, EM HIPÓTESE ALGUMA deve existir.
2 - Você não precisa serializar para passar o retorno, o método já retorna um tipo [Ô]IEnumerable(Of TopPerdas)[Ô] então basta passar um List<T> desse tipo, que é o que você está fazendo.
3 - No client(HTML) você já está usando JQuery, porque não usar o AJAX que já está disponível nele ao invés de HttpRequest?

Agora a parte conceitual, mais complexa:
Você deve estar digitando datas nos inputs [Ô]inicial[Ô] e [Ô]final[Ô], datas estas que devem conter barra, mais ou menos assim: [Ô]22/10/2015[Ô], certo? Pois é, esse é o seu problema. Veja que no método RalatioTop, você simplesmente está concatenando o que vier desses textbox criando uma URL assim:
http://localhost:49433/api/RelatTop/22/10/2015/05/05/2016

Isso nunca daria certo. O mais usual é que essas datas tenha a [Ô]barra[Ô] substituídas por traço no client e então concatenadas e enviadas, para no server ter novamente o traço substituído por barra. Mas isso tudo, supondo que você não use AJAX. Tenho um exemplo disso em vídeo onde mostro como executar uma chamada AJAX, basta entender que no exemplo, a parte que roda no server(o WebMethod) é o equivalente à sua WebAPI.
MORCELI 14/09/2016 22:11:10
#466943
Eu tentei utilizar o Ajax só que meu sistema que hoje é desktop ele tem um conjunto de relatórios grande com muita informações, oque pretendo é futuramente passar ele para um sistema Web por isso estou estudando o conceita da web. Voltando no ajax eu gostei de utilizar fiz uns relatório utilizando ajax etc, só que meus relatórios gera muitos registros tipo dependendo da pesquisa que pode ser 10 linhas até 50mil, depende do critério utilizado pelo usuário , no meu caso passou de 1200 linhas ajax trava da erro andei pesquisando sobre isso e vi que alguns usuários tiveram mesmo problema e o ajax foi hostilizado porque não é adequado pra esse tipo de quantidade de registros vamos dizer que é para coisas mais pequenas que não utiliza um leke de registros tão grandes, eu to usando o ajax é alguns controles meus agora, só que não funcionou em alguns relatórios que são monstros srsrsr, poderia colocar um limitador para controlar a quantidade de registros só que como eu estou aprendendo quero ver onde posso chegar e conseguir trabalhar utilizando o máximo de registros possível é qual melhor método para isso. Voltando também na questão das datas lá que ficam concatenado e não vai retornar o resultado que espero eu também sabia que tava errada é que postei o código só pra você saber mais ou menos onde quero chegar etc..Por fim conforme oque postei a respeito do WebApi fiz uns teste com ele e tive os resultados esperados só que estou engatinhando e agora estou travado de como turbina essa pesquisa e HttpRequest não me gera erro como ajax.
KERPLUNK 14/09/2016 23:47:29
#466945
1 - AJAX não é [Ô]lento[Ô]. A coisa funciona assim: AJAX é só uma metodologia de buscar dados no servidor. Aquele [Ô]HttpRequest[Ô] que você faz, em essência é o que o AJAX faz, mas de modo mais facilitado. Se
2 - Aplicações Web devem ser projetadas para ser o mais enxuta possível. Não se usa isso de passar 10 mil registros de uma vez, ainda mais no caso de relatórios. Quando se tem algum método em que se retorna muitos registros, usa-se paginação sincronizada na UI, ou seja, você apresenta para o usuário apenas uns 20 ou 30 registros, conforme ele vai avançando, os demais registros são buscados. No seu caso, quando você buscou 1200 linhas, não foi o AJAX que travou, o mais provável é que aquele for que você tem seja a causa da [Ô]travada[Ô].
3 - Esse conceito de [Ô]erro[Ô] você precisa aprimorar. Todo o erro tem uma mensagem, leia-a e entenda o que está acontecendo de errado.
4 - Por ver alguns usuários hostilizando algo, não é motivo para parar de usar. Não saber usar direito também não. Pesquise e vai ver que uma parcela enorme da Web como funciona hoje, é totalmente dependente de AJAX. Google, Facebook, Twitter, LinkedIn, enfim, praticamente todas as aplicações web hoje em dia fazem uso ostensivo do AJAX. é um framework maduro, testado exaustivamente por bilhões de usuários mundo afora.
MORCELI 15/09/2016 19:11:53
#466981
Obrigado pela explicação Kerplunk, vou seguir sua dica..
Abraço!!
Tópico encerrado , respostas não são mais permitidas