Problemas em retornar valor para funções Javascript

.NET

07/10/2013

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

Curtidas 0

Respostas

Pjava

Pjava

07/10/2013

Apenas para ajudar, essa linha está vindo undefined.

param = cbAcoes.cpPARAM;
GOSTEI 0
Pjava

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é

José

07/10/2013

Já que o problema foi sanada. tópico concluído.
GOSTEI 0
POSTAR