[Custom Page] Como criar uma Classe em C# no Custom Page?
#CustomPage
IMPORTANTE: a class não pode ser instanciada diretamente, ex: new MyClass() utilize CreateInstanceMyClass() que é gerado automaticamente
IMPORTANTE: a class não pode ter construtor definido
Como definir e instanciar uma classe C# ?
Importante: para toda classe criada no agilityflow, o sistema gera automaticamente um metodo de criação da instancia dessa classe com o nome CreateInstanceXXXXX onde o XXXX é o nome da classe, se for uma classe chamada Document, ele cria Document CreateInstanceDocument(), sempre sem parametros de entrada
//crie uma classe
public class Document{
public string Title {get;set;}
public string Description {get;set;}
public async Task<List<UserClass>> ListUserExamplesAsync(){
var userNames = new List<UserClass>();
var dt = await CustomPageContext.GetDataTableAsync("select coalesce(usu_nome,'') as name from tbl_usuario where deletado = false limit 5");
for(var i = 0; i < dt.Rows.Count; i++){
//repare que pra criar a instancia da classe UserClass, eu utilizo o metodo CreateInstance
var userClass = CreateInstance<UserClass>();
userClass.Name = dt.Rows[i]["name"].ToString();
userNames.Add(userClass);
}
return userNames;
}
}
public class UserClass{
public string Name {get;set;}
}
//caso queira, crie um metodo para fazer a instancia dessa classe
public Document CreateDocument(string title, string description ){
var doc = CreateInstance<Document>();
doc.Title = title;
doc.Description = description;
return doc;
}
Como instanciar uma classe do Custom Page entre outras classes do Custom Page?
Suponahmos que você tenha uma classe chamada OutraClasseNoCustomPage no Custom Page
public class OutraClasseNoCustomPage{
public string Nome {get;set;}
}
Para instanciar essa classe OutraClasseNoCustomPage dentro do pŕoprio Custom Page você tem as opções abaixo:
CreateInstance<T>()
public class MinhaClasseCustomPage{
public void Metodo()[
var classe2 = CreateInstance<OutraClasseNoCustomPage>();
}
}
Como usar no CShtml a Classe C# criada?
CreateInstanceXXXXX()
Importante: para toda classe criada no agilityflow, o sistema gera automaticamente um metodo de criação da instancia dessa classe com o nome CreateInstanceXXXXX onde o XXXX é o nome da classe, se for uma classe chamada Document, ele cria Document CreateInstanceDocument()
@{
//instanciando uma class q foi declarada dentro do CustomPage dinamicamente
var documentClass01 = CustomPageClass.CreateInstanceDocument();
var json = JsonConvert.SerializeObject( new { documentClass01 });
}
@json
Opção 02: Chamando o metodo nativo do agiltyflow para instanciar classes:
@{
//instanciando uma class q foi declarada dentro do CustomPage dinamicamente
var documentClass02 = CustomPageClass.CreateInstance("Document");
var json = JsonConvert.SerializeObject( new { documentClass02 });
}
@json
Opção 03: Caso você crie um metodo manualmente que intancie a classe, exemplo o metodo criado no exemplo anterior CreateDocument (que você mesmo criou) :
@{
//instanciando uma class q foi declarada dentro do CustomPage dinamicamente
var documentClass01 = CustomPageClass.CreateDocument("string title", "string description");
var json = JsonConvert.SerializeObject( new { documentClass01 });
}
@json
Regras e Limitações:
- Para toda classe criada no agilityflow, o sistema gera automaticamente um metodo de criação da instancia dessa classe como nome CreateInstanceXXXXX onde o XXXX é o nome da classe, se for uma classe chamada Document, ele cria Document CreateInstanceDocument(), porém sempre sem parametros de entrada, você pode gerar manualmente um metodo com o mesmo nome mas com outros parametros de entrada, exemplo Document CreateDocument(string title, string description )
A classe não deve ter construtor, para instanciar, utilize o metodo CreateInstance<MyClass>() - Fora da área do C# do Custom Page, você não tem acesso ao "Tipo" da classe que você criar. Então fora do seu class c# de Custom Page você nao vai conseguir usar esse "Tipo",ex: como ToList<MyClass>() ou por exemplo em uma referencia implicita no foreach,:
-
//forma ERRADA se estiver FORA e consumindo o CustomPage, (se estiver dentro do CustomPage, você pode referenciar normalmente) //referenciar explicitamente o UserClass no foreach var userExamples = await CustomPageClass.ListUserExamplesAsync(); foreach(UserClass user in userExamples){ <text> @user.Name </text> } //forma CORRETA se estiver FORA e consumindo o CustomPage, (se estiver dentro do CustomPage, você pode referenciar normalmente) //referenciar implicitamente o UserClass no foreach, usando var ou dynamic var userExamples = await CustomPageClass.ListUserExamplesAsync(); foreach(var user in userExamples){ <text> @user.Name </text> }