function ConfiguracoesPerspectiva(vm, data) {
    var mSelf = this;

    mSelf.Data = data;
    
    mSelf.Titulo = "Configurações";

    mSelf.FiltroConfiguracoes = ko.observable(null);

    mSelf.ListaModulosCarregar = ko.observableArray([
         //{ url: urlGlobal + "DemandaTarefa/Demanda/CarregarGridDemanda", data: {} },
    ]);

    mSelf.ListaFerramentasCarregar = ko.observableArray([
        //{ url: urlGlobal + "DemandaTarefa/Demanda/CarregarCamadas", data: {} },
    ]);        

    mSelf.Init = function () {
        $(".loading-div").fadeIn("fast");
        mSelf.CarregarModulos();
    };

    mSelf.CarregarModulos = function () {
        vm.CarregarFuncionalidades(mSelf.ListaModulosCarregar, function (data) {
            if (data) {
                var kojs = ko.mapping.fromJS(data);

                // Iniciar VIEWMODEL Knockout js pelo JSon;
                var vmInit = new window[kojs.ViewModelKnockout()](kojs, mSelf.Data);

                vm.Modulos.push(vmInit);

                vmInit.Init();

                mSelf.ReconfiguarModulos(vmInit.ModuloId()); //Aplicar enumerador para os módulos.

                vm.Modulos(vm.Modulos().sort(function (left, right) {
                    return left.Ordem == right.Ordem ? 0 : (left.Ordem < right.Ordem ? -1 : 1)
                }));

                mSelf.CarregarFerramentas();
            } else {
                $(".loading-div").hide();
                vm.ShowMensagemErro("A consulta não retornou resultados!");
            }
        });
    };

    mSelf.ReconfiguarModulos = function (idModulo) {
            
    };
    
    mSelf.CarregarFerramentas = function () {
        var countFerramentas = 0;
        vm.CarregarFuncionalidades(mSelf.ListaFerramentasCarregar, function (data) {
            if (data) {
                var kojs = ko.mapping.fromJS(data);

                // Iniciar VIEWMODEL Knockout js pelo JSon;
                var vmInit = new window[kojs.ViewModelKnockout()](kojs);

                vm.Ferramentas.push(vmInit);

                if (countFerramentas == mSelf.ListaFerramentasCarregar().length - 1) {
                    HabilitaFuncoes();
                    HabilitaCamadas();
                    //    vm.ConsultaUsuarioLogado();
                }

                countFerramentas++;

                vmInit.Init();

                mSelf.ReconfigurarFerramentas(vmInit.FerramentaId());

                //vm.Ferramentas(vm.Ferramentas().sort(function (left, right) {
                //    return left.Ordem == right.Ordem ? 0 : (left.Ordem < right.Ordem ? -1 : 1)
                //}));    
            }
        });
    };

    mSelf.ReconfigurarFerramentas = function (idFerramenta) {

    }; 
   
    mSelf.NovaAplicacao = ko.observable(new NovaAplicacao());
    mSelf.Configuracoes = ko.observable(new Configuracoes());

}