Inquiridor
Problema em retornar valor para função javascript

Pergunta
-
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("{0}", 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(",{0}", 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
Existe alguma forma de colocarmos em uma tag code o nosso código e já inserir arrumado, porque quando eu faço isso, vem tudo na mesma linha, sem alinhamento, há como ou tenho que fazer sempre assim, vir arrumando linha a linha e fica feio.