Problemas em retornar valor para funções Javascript

07/10/2013

0

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.
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

Pjava

Responder

Posts

07/10/2013

Pjava

Apenas para ajudar, essa linha está vindo undefined.

param = cbAcoes.cpPARAM;
Responder

11/10/2013

Pjava

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.
Responder

11/10/2013

José

Já que o problema foi sanada. tópico concluído.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar