/// <summary> /// Obtém os superiores de um usuário para uma determinada cadeia /// </summary> /// <param name="IdCadeia">Id da cadeia</param> /// <param name="IdUsuario">Id da cadeia</param> /// <param name="parametrosFuncaoHierarquia">Parâmetros para executar a store procedure para a hierarquia</param> /// <returns>Superiores do usuário, onde a última linha será o súperior de mais alto nível e responsável pela cadeia</returns> private static DataTable ObterSuperioresUsuario(int IdCadeia, int IdUsuario, CadeiaAutorizacaoDataSet.ParemetroFuncaoHierarquiaDataTable parametrosFuncaoHierarquia) { DataTable superiores = null; // Identificando o mecanismo para obter a hierarquia // Casdo seja através da função armazenada if (parametrosFuncaoHierarquia != null) { superiores = ObterSuperioresPorFuncao(IdCadeia, IdUsuario, parametrosFuncaoHierarquia); } else { // Caso seja através das tabelas de hierarquia superiores = ObterSuperioresPorTabelas(IdCadeia, IdUsuario); } return superiores; }
/// <summary> /// Obtém os superiores do usuário executando a stored function de hierarquia /// </summary> /// <param name="IdCadeia">Id da cadeia</param> /// <param name="IdUsuario">Id do usuário</param> /// <param name="parametrosFuncaoHierarquia">Parâmetros para executar a stored function de hierarquia</param> /// <returns></returns> private static DataTable ObterSuperioresPorFuncao(int IdCadeia, int IdUsuario, CadeiaAutorizacaoDataSet.ParemetroFuncaoHierarquiaDataTable parametrosFuncaoHierarquia) { // Obtendo o nome da funcao para a hierarquia da cadeia string nomeFuncao = ObterNomeFuncaHierarquia(IdCadeia); if (string.IsNullOrEmpty(nomeFuncao)) { throw new SecvException("Função de hirarquia não encontrada"); } BdUtil bd = new BdUtil(nomeFuncao); //bd.Command.CommandType = CommandType.Text;// StoredProcedure; // Preparando os parâmetros foreach (DataRow parametro in parametrosFuncaoHierarquia) { string nome = parametro["nome"].ToString(); DbType tipo = (DbType)Enum.Parse(typeof(DbType), parametro["tipo"].ToString(), true); object valor = parametro["valor"]; bd.AdicionarParametro(nome, tipo, valor); } return bd.ObterDataTable(); }
public static System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(System.Xml.Schema.XmlSchemaSet xs) { System.Xml.Schema.XmlSchemaComplexType type = new System.Xml.Schema.XmlSchemaComplexType(); System.Xml.Schema.XmlSchemaSequence sequence = new System.Xml.Schema.XmlSchemaSequence(); CadeiaAutorizacaoDataSet ds = new CadeiaAutorizacaoDataSet(); xs.Add(ds.GetSchemaSerializable()); System.Xml.Schema.XmlSchemaAny any1 = new System.Xml.Schema.XmlSchemaAny(); any1.Namespace = "http://www.w3.org/2001/XMLSchema"; any1.MinOccurs = new decimal(0); any1.MaxOccurs = decimal.MaxValue; any1.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax; sequence.Items.Add(any1); System.Xml.Schema.XmlSchemaAny any2 = new System.Xml.Schema.XmlSchemaAny(); any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; any2.MinOccurs = new decimal(1); any2.ProcessContents = System.Xml.Schema.XmlSchemaContentProcessing.Lax; sequence.Items.Add(any2); System.Xml.Schema.XmlSchemaAttribute attribute1 = new System.Xml.Schema.XmlSchemaAttribute(); attribute1.Name = "namespace"; attribute1.FixedValue = ds.Namespace; type.Attributes.Add(attribute1); System.Xml.Schema.XmlSchemaAttribute attribute2 = new System.Xml.Schema.XmlSchemaAttribute(); attribute2.Name = "tableTypeName"; attribute2.FixedValue = "ParemetroFuncaoHierarquiaDataTable"; type.Attributes.Add(attribute2); type.Particle = sequence; return type; }
/// <summary> /// Cria uma nova instância de cadeia de autorização (tabela: CadeiaAutorizacaoInstancia) /// Adicionando também as paticipações dos superiores hierárquicos do usuário participante /// </summary> /// <param name="IdCadeia">Id da cadeia de autorização</param> /// <param name="IdProprietario">Id do usuário proprietário da instância da cadeia</param> /// <param name="valor">valor</param> /// <param name="descricao">descrição (título)</param> /// <param name="conteudo">conteúdo da instância</param> /// <param name="parametrosFuncaoHierarquia">Coleção com os parâmetros para executar a função de hierarquia. /// deverá ser null quando a cadeia não possuir função armazenada de hierarquia</param> /// <returns>Id da instância cadeia. O sistema deverá armazenar este valor, pois quando /// esta instância de cadeia for finalizada este valor será fornecido /// ao método do sistema especificado em CadeiaAutorizacao.Cau_MetodoSistema /// </returns> public static int Incluir(int IdCadeia, int IdProprietario, float? valor, string descricao, string conteudo, CadeiaAutorizacaoDataSet.ParemetroFuncaoHierarquiaDataTable parametrosFuncaoHierarquia) { int IdInstancia = 0; using (Escopo escopo = new Escopo(OpcaoTransacao.Requerido)) { IdInstancia = IncluirInstancia(descricao, DateTime.Now, StatusCadeia.Aberta, valor, conteudo, IdCadeia, IdProprietario); // Recuperar os superiores do usuário (através da funções ou tabelas de hierarquia) e // para cada superior inserir uma linha na tabela UsuarioParticipante, // onde o usuário de maior hierarquia será o Responsável DataTable superiores = ObterSuperioresUsuario(IdCadeia, IdProprietario, parametrosFuncaoHierarquia); // Incluíndo a participação de cada superior for (int i = 0; i < superiores.Rows.Count; i++) { DataRow superior = superiores.Rows[i]; // Se a hierarquia for descoberta através das tabelas if (parametrosFuncaoHierarquia == null) { // A participação padrão é 2 = Colaborador TipoParticipacao participacao = TipoParticipacao.Colaborador; // O úlimo será o superior de mais alto nível, sendo o responsável if (i == superiores.Rows.Count - 1) { participacao = TipoParticipacao.Responsavel; } // Adicionando a participação do superior IncluirParticipante(IdInstancia, Convert.ToInt32(superior["IdSuperior"]), DateTime.Now, participacao); } else // Se a hierarquia for descoberta através de stored function { IncluirParticipante(IdInstancia, Convert.ToInt32(superior["IdSuperior"]), DateTime.Now, (TipoParticipacao) superior["Participacao"]); } } escopo.Terminar(); } return IdInstancia; }
public static System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(System.Xml.Schema.XmlSchemaSet xs) { CadeiaAutorizacaoDataSet ds = new CadeiaAutorizacaoDataSet(); System.Xml.Schema.XmlSchemaComplexType type = new System.Xml.Schema.XmlSchemaComplexType(); System.Xml.Schema.XmlSchemaSequence sequence = new System.Xml.Schema.XmlSchemaSequence(); xs.Add(ds.GetSchemaSerializable()); System.Xml.Schema.XmlSchemaAny any = new System.Xml.Schema.XmlSchemaAny(); any.Namespace = ds.Namespace; sequence.Items.Add(any); type.Particle = sequence; return type; }