[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# ?
No código C#, coloque o código abaixo, repare que existe metodo fora da classe chamado CreateDocument com 2 parametros que instancia a classe Document, através dele criaremos a instancia quando formos usar a classe Document, mas o Agilityflow também gera um metodo padrão chamado CreateInstanceXXXX sem parametro para gerar a instancia, caso você precise
Importante: 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, no exemplo abaixo, foi gerado manualmente um Document CreateDocument(string title, string description )
//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>();
}
}
CustomPageClass.CreateInstanceXXXXX()
Importante: 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()
public class MinhaClassCustomPage{
public void Metodo()[
var classe2 = CustomPageClass.CreateInstanceOutraClasseNoCustomPage();
}
}
Como usar em outras partes do sistema essa classe C# CustomPage?
Por ser uma classe CustomPage, você pode utilizar em qualquer lugar que possa executar C# no sistema, exemplos: Apis, Forms, Reports, Kanban, etc..
Para Utilizar, por exemplo dentro de um Cshtml de um form, você tem essas opções:
Opção 01: Chamando o metodo que o agilityflow gera automaticamente (recomendado):
Importante: 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()
@{
//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> }