Fórum Chamar parâmetros a partir de uma classe #3156
02/03/2009
Boa tarde,
Desejo chamar os nomes do parâmetros a apartir de uma classe, fiz assim , criei uma camada chamada DataObj (dentro de um projeto) essa camada tem a classe OrderObj e a Ordess que é uma lista da OrderObj. Os dados dela aparece abaixo, desejo chamar essa classe no meu projeto WebService, já adicionei como referência, mas não consigo chamar os dados, portanto, fiz do meio tradicional, conforme código abaixo da classe OrderObj.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DataObj
{
public class Orderss : List<OrderObj>
{
}
public class OrderObj
{
private int _IdOrder;
public int IdOrder
{
get { return _IdOrder; }
set { _IdOrder = value; }
}
private int _UserNum;
public int UserNum
{
get { return _UserNum; }
set { _UserNum = value; }
}
private int _IdD;
public int IdD
{
get { return _IdD; }
set { _IdD = value; }
}
private int _IdI;
public int IdI
{
get { return _IdI; }
set { _IdI = value; }
}
private int _IdProPlan;
public int IdProPlan
{
get { return _IdProPlan; }
set { _IdProPlan = value; }
}
private int _IdNumInvoice;
public int IdNumInvoice
{
get { return _IdNumInvoice; }
set { _IdNumInvoice = value; }
}
private int _Points;
public int Points
{
get { return _Points; }
set { _Points = value; }
}
private decimal _Price;
public decimal Price
{
get { return _Price; }
set { _Price = value; }
}
private decimal _Setup;
public decimal Setup
{
get { return _Setup; }
set { _Setup = value; }
}
private string _DateDue;
public string DateDue
{
get { return _DateDue; }
set { _DateDue = value; }
}
private string _Pay;
public string Pay
{
get { return _Pay; }
set { _Pay = value; }
}
private string _DatePay;
public string DatePay
{
get { return _DatePay; }
set { _DatePay = value; }
}
private string _Identifier;
public string Identifier
{
get { return _Identifier; }
set { _Identifier = value; }
}
private string _License;
public string License
{
get { return _License; }
set { _License = value; }
}
private string _OrderType;
public string OrderType
{
get { return _OrderType; }
set { _OrderType = value; }
}
private string _DateUpdate;
public string DateUpdate
{
get { return _DateUpdate; }
set { _DateUpdate = value; }
}
private string _DateOrder;
public string DateOrder
{
get { return _DateOrder; }
set { _DateOrder = value; }
}
}
}
__________________________________________________________________________________
Código do WebService InsertOrder....
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using DataObj;
using Persistence;
namespace WebService
{
/// <summary>
/// InclusÆo de Order
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class wsInsertOrder : System.Web.Services.WebService
{
[WebMethod]
public DataObj.Orderss InsertOrders(); //Chamei a camada DataObj e a classe Orderss, mas obviamente // não deve ser a assim que se faz, pois quanto instancio abaixo não aparece os parâmetros que eu quero que //são UserNum, IdD, IdI e assim suscessivamente e que vem da classe Orderss .
DataObj.Orderss ordes = new DataObj.Orderss();
Não quero usar os parâmetros dessa forma, quero pegar a partir da classe Orderss, mas tudo que eu tentei não deu certo.
public RetornoWebService InsertOrder(int UserNum, int IdD, int IdI, int IdProPlan, int IdNumInvoice, int Points, decimal Price, decimal Setup, string DateDuo, string Pay, string DatePay, string Identifier, string License, string OrderType, string DateUpdate, DateTime DateOrder)
{
#region Valida‡äes de Campos Obrigat¢rios
if (String.IsNullOrEmpty(Identifier))
return new RetornoWebService(TipoRetornoWebService.Erro, "O campo Identifier ‚ obrigat¢rio.");
if (String.IsNullOrEmpty(DateDuo))
return new RetornoWebService(TipoRetornoWebService.Erro, "O campo DateDuo ‚ obrigat¢rio.");
if (String.IsNullOrEmpty(Pay))
return new RetornoWebService(TipoRetornoWebService.Erro, "O campo Pay ‚ obrigat¢rio.");
if (String.IsNullOrEmpty(DatePay))
return new RetornoWebService(TipoRetornoWebService.Erro, "O campo DatePay ‚ obrigat¢rio.");
if (String.IsNullOrEmpty(License))
return new RetornoWebService(TipoRetornoWebService.Erro, "O campo License ‚ obrigat¢rio.");
if (String.IsNullOrEmpty(OrderType))
return new RetornoWebService(TipoRetornoWebService.Erro, "O campo OrderType ‚ obrigat¢rio.");
#endregion
DBAccess executaProcedure = new DBAccess();
executaProcedure.SetCommandType(CommandType.StoredProcedure);
executaProcedure.CommandText = "SP_INSERT_ORDER";
#region Adiciona parametros
executaProcedure.AddParameter("@UserNum", UserNum); //Eu quero fazer o orders.UserNum vir da DataObj
executaProcedure.AddParameter("@IdD", IdD); //e assim para todos os campos abaixo
executaProcedure.AddParameter("@IdI", IdI);
executaProcedure.AddParameter("@IdProPlan", IdProPlan);
executaProcedure.AddParameter("@IdNumInvoice", IdNumInvoice);
executaProcedure.AddParameter("@Points", Points);
executaProcedure.AddParameter("@Price", Price);
executaProcedure.AddParameter("@Setup", Setup);
executaProcedure.AddParameter("@DateDuo", DateDuo);
executaProcedure.AddParameter("@Pay", Pay);
executaProcedure.AddParameter("@DatePay", DatePay);
executaProcedure.AddParameter("@Identifier", Identifier);
executaProcedure.AddParameter("@License", License);
executaProcedure.AddParameter("@OrderType", OrderType);
executaProcedure.AddParameter("@DateUpdate", DateUpdate);
executaProcedure.AddParameter("@DateOrder", DateOrder);
#endregion
DataSet dsReultado;
//em caso de algum erro inesperado na procedure o sistema informa o erro e mostra a mensagem gerada pela procedure
try
{
dsReultado = executaProcedure.ExecuteDataSet();
}
catch (Exception ex)
{
return new RetornoWebService(TipoRetornoWebService.Erro, String.Format("Ocorreu um erro ao executar o comando de inclusÆo. Mensagem do servidor: ", ex.Message));
}
//se a procedure retornar um resultado usa este resultado senÆo retorna um erro informando que a procedure nÆo retornou resultados
if (dsReultado.Tables.Count > 0 && dsReultado.Tables[0].Rows.Count > 0)
return new RetornoWebService((TipoRetornoWebService)Convert.ToInt32(dsReultado.Tables[0].Rows[0][0]), Convert.ToString(dsReultado.Tables[0].Rows[0][1]));
else
return new RetornoWebService(TipoRetornoWebService.Erro, "A StoredProcedure nÆo retornou resposta de resultado.");
}
}
}
Posts
Olá Regis,
Para usar as propriedades de uma classe (get e set) em seus métodos, estas devem ser publicas. Depois é so fazer a instancia da classe e chamar a propriedade/atributo.
Segue exemplo abaixo:
CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
//atributos
private string cod_teste1;
private int cod_teste2;
public Class1()
{
this.cod_teste1 = null;
this.cod_teste2 = 0;
}
public string Cod_Teste1
{
get { return cod_teste1; }
set { cod_teste1 = value; }
}
public int Cod_Teste2
{
get { return cod_teste2; }
set { cod_teste2 = value; }
}
}
WEB FORM DE ONDE CHAMADO OS ATRIBUTOS DA CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Instancia da classe, necessario pois não é STATIC
Class1 classe = new Class1();
string testeChamada1 = classe.Cod_Teste1;
int testeChamada2 = classe.Cod_Teste2;
}
}
Abraços e
Olá Regis,
Para usar as propriedades de uma classe (get e set) em seus métodos, estas devem ser publicas. Depois é so fazer a instancia da classe e chamar a propriedade/atributo.
Segue exemplo abaixo:
CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
//atributos
private string cod_teste1;
private int cod_teste2;
public Class1()
{
this.cod_teste1 = null;
this.cod_teste2 = 0;
}
public string Cod_Teste1
{
get { return cod_teste1; }
set { cod_teste1 = value; }
}
public int Cod_Teste2
{
get { return cod_teste2; }
set { cod_teste2 = value; }
}
}
WEB FORM DE ONDE CHAMADO OS ATRIBUTOS DA CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Instancia da classe, necessario pois não é STATIC
Class1 classe = new Class1();
string testeChamada1 = classe.Cod_Teste1;
int testeChamada2 = classe.Cod_Teste2;
}
}
Abraços e aguardo s
Olá Regis,
Para usar as propriedades de uma classe (get e set) em seus métodos, estas devem ser publicas. Depois é so fazer a instancia da classe e chamar a propriedade/atributo.
Segue exemplo abaixo:
CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
//atributos
private string cod_teste1;
private int cod_teste2;
public Class1()
{
this.cod_teste1 = null;
this.cod_teste2 = 0;
}
public string Cod_Teste1
{
get { return cod_teste1; }
set { cod_teste1 = value; }
}
public int Cod_Teste2
{
get { return cod_teste2; }
set { cod_teste2 = value; }
}
}
WEB FORM DE ONDE CHAMADO OS ATRIBUTOS DA CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Instancia da classe, necessario pois não é STATIC
Class1 classe = new Class1();
string testeChamada1 = classe.Cod_Teste1;
int testeChamada2 = classe.Cod_Teste2;
}
}
Abraços e aguardo seu
Olá Regis,
Para usar as propriedades de uma classe (get e set) em seus métodos, estas devem ser publicas. Depois é so fazer a instancia da classe e chamar a propriedade/atributo.
Segue exemplo abaixo:
CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
//atributos
private string cod_teste1;
private int cod_teste2;
public Class1()
{
this.cod_teste1 = null;
this.cod_teste2 = 0;
}
public string Cod_Teste1
{
get { return cod_teste1; }
set { cod_teste1 = value; }
}
public int Cod_Teste2
{
get { return cod_teste2; }
set { cod_teste2 = value; }
}
}
WEB FORM DE ONDE CHAMADO OS ATRIBUTOS DA CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Instancia da classe, necessario pois não é STATIC
Class1 classe = new Class1();
string testeChamada1 = classe.Cod_Teste1;
int testeChamada2 = classe.Cod_Teste2;
}
}
Abraços e aguardo seu retorno.
Att
Luiz
Olá Regis,
Para usar as propriedades de uma classe (get e set) em seus métodos, estas devem ser publicas. Depois é so fazer a instancia da classe e chamar a propriedade/atributo.
Segue exemplo abaixo:
CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
//atributos
private string cod_teste1;
private int cod_teste2;
public Class1()
{
this.cod_teste1 = null;
this.cod_teste2 = 0;
}
public string Cod_Teste1
{
get { return cod_teste1; }
set { cod_teste1 = value; }
}
public int Cod_Teste2
{
get { return cod_teste2; }
set { cod_teste2 = value; }
}
}
WEB FORM DE ONDE CHAMADO OS ATRIBUTOS DA CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Instancia da classe, necessario pois não é STATIC
Class1 classe = new Class1();
string testeChamada1 = classe.Cod_Teste1;
int testeChamada2 = classe.Cod_Teste2;
}
}
Abraços e aguardo seu retorno.
Att
Luiz Maia
Olá Regis,
Para usar as propriedades de uma classe (get e set) em seus métodos, estas devem ser publicas. Depois é so fazer a instancia da classe e chamar a propriedade/atributo.
Segue exemplo abaixo:
CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
//atributos
private string cod_teste1;
private int cod_teste2;
public Class1()
{
this.cod_teste1 = null;
this.cod_teste2 = 0;
}
public string Cod_Teste1
{
get { return cod_teste1; }
set { cod_teste1 = value; }
}
public int Cod_Teste2
{
get { return cod_teste2; }
set { cod_teste2 = value; }
}
}
WEB FORM DE ONDE CHAMADO OS ATRIBUTOS DA CLASSE:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Instancia da classe, necessario pois não é STATIC
Class1 classe = new Class1();
string testeChamada1 = classe.Cod_Teste1;
int testeChamada2 = classe.Cod_Teste2;
}
}
Abraços e aguardo seu retorno.
Att
Luiz Maia
Conforme você pode ver abaixo mesmo chamando a classe com using DataObj;
e fazendo o que vc disse para vc , que alias eu já vinha fazendo, sem sucesso, mesmo assim continua não funcionando
OrderObj classe1 = new OrderObj();
string testeChamada1 = classe1.UserNum; // Ele coloca uma linha ondulada de vermelho embaixo de classe1, o que indica erro.
int testeChamada2 = classe1.IdD;
string testeChamada3 = classe1.License;
Regis,
1. Quando vc coloca o ponto depois do nome da classe, o Intellisense te mostra o nome do método?
- classe1.UserNum
2. Quando vc tenta compilar, dá um erro? Tem como me passar o print screen da tela de erro com a mensagem?
Estou no aguardo.
Abraços
Luiz Maia
Estou no aguardo Regis.
Att,
Luiz Maia
Te ntei compilar dá uma mensagem em inglÊS algo como a classe1 não existe no escopo do projeto.
Como eu te envio o arquivo?
Att
Regis
De um printscreen na tela de erro e salva a imagem, depois faça o upload dela aqui.
Abraços
Estou aguardando.
Att
Luiz Maia
Régis,
vc tem a opção "meu disco virtual" na home da consultoria. Caso tenha dificuldades em utilizar existe um video, onde o link do mesmo encontra-se ao lado da opção citada anteriormente.
Lembrando que vc só poderá postar arquivos no formato .rar ou .zip.
No caso de uma imagem, vc pode utilizar o botão "insert image" na própria caixa de texto do chamado.
Segue a imagem para visualizar o erro.
Ola Regis,
Repare que para fazer a instancia da classe, a mesma deve estar dentro do seu metodo, veja um exmplo abaixo:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
Class1 cls = new Class1();
public Service () {
//Uncomment the following line if using designed components
//InitializeComponent();
Class1 cls = new Class1();
string teste = cls.Cod_Teste1;
}
[WebMethod]
public string HelloWorld() {
return "Hello World";
}
}
Fiz um teste aqui e segue os prints das telas, é bem simples, não entendo pq o erro persiste.
Deve ser algum descuido seu na hora de instanciar a classe. Segue os prints da tela do Web service e da classe, repare do Solution Explorer a relação dos arquivos, veja que a classe esta no mesmo projeto, caso contrario, se seu classe for uma Class Library, basta adicionar a referencia para a mesma e fazer seus metodo publicos nela, não tem erro não. Da uma olhada abaixo, tenta fazer uma outra aplicação seguindo os moldes abaixo, se der errado me avise, ok? Aguardo seu retorno para solucionar-mos este problema.
Abraços
Att
Luiz Maia
Sim assim funciona, mas dê um olhadinha no meu código para entender o que eu não consigo fazer....
Olha a declaração das variaveis ( parametros ) estão acima do código, pois manualmente é assim que se declara,
// as declarações das variaveis foram feitas aqui....
public RetornoWebService InsertUser(string UserLicense , string Identifier, int UserIdD, string UserName, string Email, string EmailAdditional, string Password, string DocFormat, string DocNumber, string Language, string AddressMail, string Country, string City, string State, string ZipCode, string Sex, string Birth, string AuthEmail, string ReadTerm, string NameFantasy, string FunctionCompany, string WebSite, string AccountBankName, string AccountBankOffice, string AccountBankNum, string AccountBankType)
{
Mas, o código para pegar os parâmetros a partir da classe UserObj só funciona aqui....
Como posso arrumar isso? Entendeu a minha dúvida?
UserObj cls = new UserObj();
string teste = cls.UserLicense;