Problemas em retornar valor para funções Javascript
Não sei se consigo explicar a dúvida, já que vai ficar difícil enviar todo o CF para vocês, mas vou tentar com o que eu tenho. O problema acontece em uma função JS que tenho. Ela recebe um parâmetro do Code Behind. Tive que alterar a função para ajustar à minha necessidade. Essa alteração, foi um IF que receberia dois parâmetros, ou um ou outro, nunca ambos. Bem, o parâmetro que já funcionava continua funcionando, mas o novo não funciona, ele dá o erro de: Valor is undefined. Valor é a variável que recebe o cara e quando ela não recebe, dá esse erro, que significa que a variável é null, sem nada. Estou postando o CF do JS e do CB. Quando ele chama doACAOMENUNFI é que dá pau. doACAOMENU é semelhante a doACAOMENUNFI, apenas com nomes diferentes, mas é a mesma função e ela funciona. É a mesma coisa, retirei para não ficar um post linguiça. O segredo está em OpenActions.
Aqui está o meu call_back para o cbAcoes.
No page load eu chamo esse cara
ConteudoItens e VisualizarItens são submétodos de um call_back, o principal(mas não é o cbAcoes_Callback)
var actionID = ""; var actionsMenu = ""; var actionElement = null; function OpenActions(s, e) { if (cbAcoes.InCallback()) return; if (actionID != s.uniqueID || actionsMenu == "") { actionElement = s; actionID = s.uniqueID; cbAcoes.PerformCallback(e); } else doACAOMENU(); } function ActionOnCompleteCallBack(s, e) { actionsMenu = e.result; } function ActionOnEndCallBack(s, e) { if (actionsMenu == ''cpItens'') doACAOMENU(); else if(actionsMenu == ''cpItensNFI'') doACAOMENUNFI(); } function doACAOMENUNFI() { if (actionsMenu != "") { for (ix = 0; ix < apmItensNFI.GetItemCount(); ix++) { mni = apmItensNFI.GetItem(ix); mni.SetVisible(false); } if (actionsMenu == ''NOK_rejeitado'') { alert(''Verificar motivo da rejeição no Portal de Serviços da operadora.''); actionsMenu = ""; return; } if (actionsMenu == ''NOK_EmAnalise'') { alert(''A operadora ainda não finalizou a análise dessa conta.''); actionsMenu = ""; return; } str = actionsMenu.split('',''); console.log(str); param = cbAcoes.cpPARAM; console.log(param); var valor = ""; for (ix = 0; ix < str.length; ix++) { console.log(ix); mni = apmItensNFI.GetItemByName(str[ix]); console.log(mni); mni.SetVisible(true); console.log(str[ix]); valor = eval("cbAcoes." + str[ix]); mni.SetNavigateUrl(valor.replace("", param)); } if (actionElement != null) apmItensNFI.ShowAtElement(actionElement); else apmItensNFI.ShowAtElementByID(actionID); } } function oncloseMenu(s, e) { actionElement = null; actionID = ""; } function VisualizarItens(s, e) { param = cbAcoes.cpPARAM; cbpPainelControle.PerformCallback(''VisualizarItens_'' + param); }
Aqui está o meu call_back para o cbAcoes.
protected void cbAcoes_Callback(object source, DevExpress.Web.ASPxCallback.CallbackEventArgs e) { string _tipo = null; string GuiaPrest = null; string _codItemNFI = null; DataTable dtContaGuia = null; if (_filtroSelecionado == enFiltroPesquisa.NotaFiscal) { //Tipo Nota fiscal _tipo = "N"; _codItemNFI = e.Parameter.ToString(); } else { //Tipo outros _tipo = "O"; GuiaPrest = e.Parameter.ToString(); } // Recupera a configuracao do menu inicializado no método InicializaMenuAcoes() if (menus == null && ViewState["menuAcao"] != null) menus = (NameValueCollection)ViewState["menuAcao"]; String[] AcaoMenu = null; string resultado = null; switch (_tipo) { case "N": dtContaGuia = DAL_Pesquisa.getStatusItemNFI_Menu(_codItemNFI); break; case "O": dtContaGuia = DAL_Pesquisa.getStatusGuiaPrestador_Menu(GuiaPrest); break; } if (dtContaGuia != null && dtContaGuia.Rows.Count > 0) { if (dtContaGuia.Rows[0]["COD_STATUS_CONCILIA"].ToString().Equals("6")) resultado = "NOK_EmAnalise"; else if (dtContaGuia.Rows[0]["COD_STATUS_CONCILIA"].ToString().Equals("7")) resultado = "NOK_rejeitado"; else if(_tipo == "O") AcaoMenu = new String[] { "cpItens" }; else if(_tipo == "N") AcaoMenu = new String[] { "cpItensNFI" }; } else throw new ApplicationException("A operadora não finalizou a análise dessa conta."); StringBuilder sbmenu = new StringBuilder(); cbAcoes.JSProperties.Clear(); if (AcaoMenu != null) { foreach (String key in AcaoMenu) { sbmenu.AppendFormat(",", key); cbAcoes.JSProperties.Add(key, menus[key]); } e.Result = sbmenu.ToString().Substring(1); switch (_tipo) { case "N": cbAcoes.JSProperties.Add("cpPARAM", _codItemNFI); break; case "O": cbAcoes.JSProperties.Add("cpPARAM", GuiaPrest); break; } } else { e.Result = resultado; cbAcoes.JSProperties.Add("cpPARAM", null); } }
No page load eu chamo esse cara
private void InicializaMenuAcoes() { menus = new NameValueCollection(); apmContasGuias.Items.Clear(); apmItensNFI.Items.Clear(); AddMenuItemNFIAcoes("cpItensNFI", "Visualizar Itens", "javascript:ConteudoItem();"); AddMenuContasGuiasAcoes("cpItens", "Visualizar Itens", "javascript:VisualizarItens();"); ViewState["menuAcao"] = menus; }
ConteudoItens e VisualizarItens são submétodos de um call_back, o principal(mas não é o cbAcoes_Callback)
protected void cbpPainelControle_Callback(object sender, CallbackEventArgsBase e) { if (e.Parameter.Contains("VisualizarConta")) { string id = e.Parameter.Substring((e.Parameter.LastIndexOf(''_'')) + 1); CarregaContasGuia(Ametista.CodigoStatusConciliacao.ContasPorMotivoGlosa, id); return; } if (e.Parameter.Contains("VisualizarItens")) { pagContas = gvContasGuias.PageIndex; string idGuiaPres = e.Parameter.Substring((e.Parameter.LastIndexOf(''_'')) + 1); ListaDetalhesConta(idGuiaPres, false); return; } if (e.Parameter.Contains("ConteudoItem")) { pagContas = gvItemNotaFiscal.PageIndex; string idItem = e.Parameter.Substring((e.Parameter.LastIndexOf(''_'')) + 1); ListaDetalhesContaNFI(idItem, false); return; } continua mais métodos nesse callback Se precisar mais informações, favor me avisar, senão fica uma linguiça enorme e até ruim de ler
Pjava
Curtidas 0
Respostas
Pjava
07/10/2013
Apenas para ajudar, essa linha está vindo undefined.
param = cbAcoes.cpPARAM;
param = cbAcoes.cpPARAM;
GOSTEI 0
Pjava
07/10/2013
Pessoal, creio(ainda não testei) que o problema esteja em eu querer usar um evento de callback para duas coisas distintas. Creio que se eu criar um evento para cada situação, tipo, um para cpItens e outro para cpItensNFI, resolve. Podem fechar o post que quando eu fizer(não será agora), posto se não deu certo, abrindo outra thread para ajuda. Obrigado.
GOSTEI 0
José
07/10/2013
Já que o problema foi sanada. tópico concluído.
GOSTEI 0