Ir para conteúdo
Fórum Script Brasil

pjava

Membros
  • Total de itens

    52
  • Registro em

  • Última visita

Posts postados por pjava

  1. Tenho esse programa. Preciso colocar o método execute em uma Thread, task ou Delegate, ou seja,

    esse método rodará em um serviço e será startado automaticamente em um servidor e terei muitas execuções

    oncorrentes, logo isso deveria ser feito em um desses caras acima. Abaixo todo meu código até agora.

    PesquisaAgenda pag = new PesquisaAgenda();

    public Form1()

    {

    InitializeComponent();

    }

    Lista<Entity.Rotina> listaRotina = new Lista<Entity.Rotina>();

    Lista<Entity.Tarefa> listaTarefa = new Lista<Entity.Tarefa>();

    Lista<Entity.ExportacaoAgendamento> listaAgendamento = new Lista<Entity.ExportacaoAgendamento>();

    Lista<Entity.ExportacaoAgendamento> listaTudo = new Lista<Entity.ExportacaoAgendamento>();

    List<Int64> tarefa;

    Int64 _execTarefa;

    DateTime _diaHoraExcecucao = DateTime.Now;

    t.Timer timer = new t.Timer();

    private static int CompararTarefas(Entity.Tarefa tarefaDe, Entity.Tarefa tarefaPara)

    {

    return tarefaDe.OrdemExecucao.CompareTo(tarefaPara.OrdemExecucao);

    }

    private void BuscaTarefa()

    {

    if (listaTudo.Count == 0)

    {

    listaTudo = Sistema.Infrastructure.Repository.ExportacaoAgendamento.RetornarTodos();

    }

    listaRotina = Sistema.Infrastructure.Repository.Rotina.RetornarTodos();

    dgvAgenda.DataSource = listaTudo.ToArray();

    dgvRotina.DataSource = listaRotina.ToArray();

    foreach (var item in listaRotina)

    {

    if (item.DataInicial < DateTime.Now)

    {

    listaRotina = Sistema.Infrastructure.Repository.Rotina.RetornarPorFiltro(new Finder.Rotina() { IdRotina = item.IdRotina });

    foreach (var item_rotina in listaRotina)

    {

    execute(item_rotina.IdRotina);

    }

    }

    }

    }

    private void execute(Int64 _rotina)

    {

    var lista = Sistema.Infrastructure.Repository.Tarefa.RetornarPorFiltro(new Finder.Tarefa() { IdRotina = _rotina }).ToList();

    lista.Sort(CompararTarefas);

    foreach (var item in lista)

    {

    string path = "";

    path = item.Descricao;

    System.Diagnostics.Process.Start(path);

    }

    }

    private void Form1_Load(object sender, EventArgs e)

    {

    }

    private void button1_Click(object sender, EventArgs e)

    {

    BuscaTarefa();

    }

  2. Tenho uma lista de objetos. Para não ficar um serviço de minuto em minuto buscando no BD as informações e preenchendo a lista, resolvi no start do windows service, preencher essa lista. Então tenho a seguinte relação.

    Lista de Agendamentos ==>> Qua agenda rotinas a serem executadas. Uma Rotina pode ter N agendamentos.

    Lista de Rotinas ==>> Que executa tarefas. Uma rotina pode ter N tarefas a serem executadas. O que eu preciso é, através do agendamento, buscar a rotina agendada para aquela Data/Hora(dateTime). Achando a rotina para aquela datahora, buscar a tarefa específica e chamar o meu método execute() para executar a tarefa. As tarefas são: Executar Aplicativo, já com o path gravado na Entidade, Executar DTSX ou enviar um email. Minha grande dificuldade é exatamente montar essa lógica, pois todas as listas estão preenchida no OnStar do serviço. Abaixo minha classe. Ela não está feita, exatamente pela minha dúvida de como implementar isso. Não busco código, mas sim o caminho de como fazer.

    public partial class ServicoAgendamento : ServiceBase

    {

    Lista<Entity.Rotina> listaRotina = new Lista<Entity.Rotina>();

    Lista<Entity.Tarefa> listaTarefa = new Lista<Entity.Tarefa>();

    Lista<Entity.ExportacaoAgendamento> listaAgendamento = new Lista<Entity.ExportacaoAgendamento>();

    Lista<Entity.ExportacaoAgendamento> listaTudo = new Lista<Entity.ExportacaoAgendamento>();

    List<Int64> tarefa;

    Int64 _execTarefa;

    DateTime _diaHoraExcecucao = DateTime.Now;

    t.Timer timer = new t.Timer();

    public ServicoAgendamento()

    {

    InitializeComponent();

    }

    protected override void OnStart(string[] args)

    {

    Int64? _idexportacaoagendamento;

    Int64? _idrotina;

    Int64? _idcliente;

    Int64? _idprojeto;

    String _descricao;

    Boolean? _ativo;

    Boolean? _habilitado;

    Boolean? _unica;

    Boolean? _diaria;

    Boolean? _semanal;

    Boolean? _mensal;

    Boolean? _interrompergeral;

    DateTime? _dtinclui;

    DateTime? _dtaltera;

    DateTime? _dtinicio;

    DateTime? _dtexpira;

    String _porperiodo;

    String _interrompertarefa;

    String _repetir;

    String _atrasarate;

    //String _programa;

    Boolean _flagexecuta;

    EventLog.WriteEntry("Serviço Inicializado.", EventLogEntryType.Information);

    timer.Elapsed += new t.ElapsedEventHandler(OnElapsedTime);

    timer.Interval = 60000;

    timer.Enabled = true;

    if (listaTudo == null)

    {

    listaTudo = Sistema.Infrastructure.Repository.ExportacaoAgendamento.RetornarTodos();

    }

    listaRotina = Sistema.Infrastructure.Repository.Rotina.RetornarTodos();

    foreach (var item in listaRotina)

    {

    if (item.DataInicial == DateTime.Now)

    {

    listaRotina = Sistema.Infrastructure.Repository.Rotina.RetornarPorFiltro(new Finder.Rotina() { IdRotina = item.IdRotina });

    foreach (var item_rotina in listaRotina)

    {

    execute(item_rotina.IdRotina);

    }

    }

    }

    }

    protected override void OnStop()

    {

    timer.Enabled = false;

    EventLog.WriteEntry("Serviço Parado.", EventLogEntryType.Information);

    }

    private void OnElapsedTime(object source, t.ElapsedEventArgs e)

    {

    EventLog.WriteEntry("Executando serviço: " +

    DateTime.Now.ToShortTimeString(), EventLogEntryType.Information);

    }

    private void execute(Int64 _rotina)

    {

    listaTarefa = Sistema.Infrastructure.Repository.Tarefa.RetornarPorFiltro(new Finder.Tarefa() { IdRotina = _rotina });

    foreach (var item in listaTarefa)

    {

    }

    }

    }

    }

  3. Somente para explicar melhor. Tenho tres tabelas:

    1) Agendamento

    2) Rotinas

    3) Tarefas

    No agendamento eu agendo as rotinas, que podem ser, Excutar um aplicativo, Executar um DTSX. Na tabela tarefa, então eu executo a tarefa, tipo, executar um Aplicativo. nessa tabela tenho o path e o nome do aplicativo. Pego isso, coloco no meu serviço e executo. que eu não estou conseguindo fazer, é montar todo esse processo.

    Agendamento >> recebe chave de rotina >> que recebe chave de tarefa, esses são meus relacionamentos no BD.

    Isso precisa ser executado através de um Windows Service. Ouvi falar de TPL(Tasks paralel library) do FrameWork 4.0, dentro do namespace Threading, mas não sei como usar, ainda que parece ser o ideal para o que eu quero.

  4. Tenho um serviço que ele vai executar programas externos e dtsx. Acontece, que várias pessoas estarão executando esses programas. Então preciso criar Thread(s) para que o serviço execute cada processo(tarefa) agendada previamente em uma entidade de BD para cada usuário. Eu peço ajuda em como iniciar, como proceder. Avduvida não está em criar Threads, mas em como fazer isso. Lógica é a dúvida.

  5. A minha dúvida é simples, mas para mim não está sendo. O que eu não estou conseguindo é como pegar uma lista retornada pelo método, pelo serviço, pois como não tenho uma interface, não sei como fazer. Abaixo meu método e como pegar no OnStart, por exemplo, a lista do método PesquisaTodosAgendamento().

    public partial class Service1 : ServiceBase

    {

    public Service1()

    {

    InitializeComponent();

    }

    protected override void OnStart(string[] args)

    {

    }

    protected override void OnStop()

    {

    }

    private Lista<Entity.ExportacaoAgendamento> PesquisaTodosAgendamento()

    {

    Lista<Entity.ExportacaoAgendamento> listaAgendamento = new Lista<Entity.ExportacaoAgendamento>();

    listaAgendamento = Sistema.Infrastructure.Repository.ExportacaoAgendamento.RetornarTodos();

    return listaAgendamento;

    }

    }

  6. Num campo bit, ele recebe 0 ou 1. Eu tenho uma pesquisa que me traz esses campos. Gostaria de saber como eu faço para atribuir a um checkbox os valores vindos do BD, ou seja, se for 0 ele não checa o checkbox, mas se for 1 ele já checa o chckbox. Como eu faço isso?

  7. Vou dar o exemplo. As propriedades do objeto finder devem ser preenchida pelos parametros do método. Essa é minha dúvida: Como fazer.

    private List<Entity.Skin> PesquisaFiltroSkin(Meus_Parâmetros_Aqui)

    {

    List<Entity.Skin> listaSkin = new List<Entity.Skin>();

    Finder.Skin finder = new Finder.Skin();

    finder.IdSkin = ?;

    finder.IdProjeto = ?;

    finder.Descricao = ?;

    finder.DataInclusao = ?;

    finder.DataAlteracao = ?;

    listaSkin = Infrastructure.Repository.Skin.RetornarPorFiltro(finder);

    return listaSkin;

    }

  8. Resolvi assim:

    private List<Entity.Skin> PesquisaIdSkin(Int32 _idskin)

    {

    List<Entity.Skin> listaSkin = new List<Entity.Skin>();

    Finder.Skin finder = new Finder.Skin();

    finder.IdSkin = _idskin;

    listaSkin = Infrastructure.Repository.Skin.RetornarPorID(finder);

    return listaSkin;

    }

    E a chamada do método, assim:

    dgvPesquisa.DataSource = PesquisaTodosSkin();

    Obrigado e pode encerrar este post.

  9. Preciso criar um método que me retorne uma lista e insira os valores em DataGridView. Bem isso eu já fiz e está funcionando. No meu sistema existe 3 tipos de pesquisa.

    1) Geral

    2) Por Id

    3) Por Filtro

    A terceira(Por filtro) é que está me tirando os cabelos(dos q restam). Assim: O objeto retornado, tem algumas propriedades e na pesquisa elas podem estar null, ou seja, digamos que eu tenha 5 propriedade que são 5 atributos de minha tabela do BD. A dúvida é eu criar um método que eu passe 1 ou 2 ou 3 ou 4 ou 5 ou quaisquer conbinações dessas 5 prop. Se eu faço um méto assim:

    private.... meu_metodo(tipo1 param1,tipo2 param2,tipo3 param3,tipo 4 param4,tipo5 param5)

    {}

    E na pesquisa eu só preciso passar param3 e param 5, por exemplo, esse método estoura. Então, como eu faço isso?

    Não sei se me fiz entender.

  10. Minha dúvida está exatamente aí. Nessa implementação. Fiz isso, mas está errado com certeza.

    private List<Domain.Entity.Skin> PesquisaSkin(int _idskin)

    {

    Domain.Finder.Skin skin = new Domain.Finder.Skin();

    skin.IdSkin = _idskin;

    return GrupoLTM.Sistema.Infrastructure.Repository.Skin.RetornarPorID(skin);

    }

    private void btnGeraTarefa_Click(object sender, EventArgs e)

    {

    List<Domain.Entity.Skin> skb = new List<Domain.Entity.Skin>();

    skb = PesquisaSkin(1);

    }

  11. Seria isso e retorna _tela. Agora, como eu pego do outro lado e jogo num gridview? Jogar no gridview, não é a questã, mas sim, como pegar esse retorno.

    ....

    while (_SqlDataReader.Read())

    {

    Domain.Entity.tela _tela = new Domain.Entity.tela ();

    _tela .Idtela = Convert.ToInt64(_SqlDataReader["Idtela "]);

    _tela .Descricao = Convert.ToString(_SqlDataReader["Descricao"]);

    _tela .IdProjeto = Convert.ToInt64(_SqlDataReader["IdProjeto"]);

    _tela .DataInclusao = _SqlDataReader["Data1"].ToString().ToNullable<DateTime>();

    _tela .DataAlteracao = _SqlDataReader["Data2"].ToString().ToNullable<DateTime>();

    _Listtela .Add(_tela );

  12. Seria isso e retorna _tela. Agora, como eu pego do outro lado e jogo num gridview? Jogar no gridview, não é a questã, mas sim, como pegar esse retorno.

    ....

    while (_SqlDataReader.Read())

    {

    Domain.Entity.tela _tela = new Domain.Entity.tela ();

    _tela .Idtela = Convert.ToInt64(_SqlDataReader["Idtela "]);

    _tela .Descricao = Convert.ToString(_SqlDataReader["Descricao"]);

    _tela .IdProjeto = Convert.ToInt64(_SqlDataReader["IdProjeto"]);

    _tela .DataInclusao = _SqlDataReader["Data1"].ToString().ToNullable<DateTime>();

    _tela .DataAlteracao = _SqlDataReader["Data2"].ToString().ToNullable<DateTime>();

    _Listtela .Add(_tela );

  13. O cara fez uma aplicação e ela tem um form. Acontece que eu coloco um button, ou textbox e não aparece no form. Coloquei um nome no caption do form e também não aparece. Aí então, resolvi criar um outro form como o padrão, mas eu não sei como colocá-lo como o form principal. Como eu faço isso?

  14. Só para exemplificar melhor. Quando estamos instalando um programa, ele sugere uma pasta default ou então, aquele famoso botão Browser, onde você escolhe a pasta. É exatamente isso que eu quero. Só que com OpenFileDialog eu abro o arquivo e não pasta, tanto que se não houver arquivo nele, a opção de escolha fica desabilitada.

  15. Se uso isso, eu preciso de um arquivo pelo menos para trazer apenas o diretorio

    string diretorio = System.IO.Path.GetDirectoryName(@"C:\Diretorio\meu_arquivo.extensão");

    O que eu quero é apenas o diretorio, onde não existe nenhum arquivo, uma pasta nova. Como eu faço?

  16. Na aplicação que eu estou desenvolvendo, existe uma tabela que guarda os endereços dos skins utilizados. Então o usuário entra na aplicação, escolhe o tema e executa em sua aplicação. Não ficou muito definido para mim ainda, mas essa aplicação será desenvolvida em: Back(Windows Form), Front(Web) e alguns serviços(WCF) para fazer a ponte entre o Front e o Back. Então, já estou me adiantando se essa mudança será nos dois ladaos ou somente no lado Cliente(Front), ou seja, mudar o skin.

×
×
  • Criar Novo...