[Global Code] Como criar uma Classe Global em C#
#GlobalCode
IMPORTANTE: a class não pode ser instanciada diretamente, utilize o metodo CreateInstance<MyClass>()
IMPORTANTE: a class não pode ter construtor definido
Como definir e instanciar uma classe C# que está definida no Global Code?
Entre em Global Code na área de configuração, na aba C# GlobalClass e clique em Novo C#.
Crie um C# chamado "Document"
No código C#, coloque o código abaixo, repare que existe metodo fora da classe chamado CreateDocumentInstance que instancia a classe Document, através dele criaremos a instancia quando formos usar a classe Document
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 CreateDocumentInstance(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 GlobalContext.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;}
}
//crie um metodo para fazer a instancia dessa classe
public Document CreateDocumentInstance(string title, string description ){
var doc = CreateInstance<Document>();
doc.Title = title;
doc.Description = description;
return doc;
}
Como usar no sistema essa classe C# Global?
Por ser uma classe Global, 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 2 opções:
Opção 01: Chamando o metodo CreateDocumentInstance que você mesmo criou (recomendado):
@{
//instanciando uma class q foi declarada dentro do Global dinamicamente
var documentClass01 = GlobalClass.CreateDocumentInstance("string title", "string description");
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 Global dinamicamente
var documentClass02 = GlobalClass.CreateInstanceForClass("Document");
var json = JsonConvert.SerializeObject( new { documentClass02 });
}
@json
Limitações:
- A classe não deve ter construtor, para instanciar, utilize o metodo CreateInstance<MyClass>()
- Fora da área do C# do Global Code, você não tem acesso ao "Tipo" da classe que você criar. Então fora do seu class c# de Global Code 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 GlobalCode, (se estiver dentro do GlobalCode, você pode referenciar normalmente) //referenciar explicitamente o UserClass no foreach var userExamples = await GlobalClass.ListUserExamplesAsync(); foreach(UserClass user in userExamples){ <text> @user.Name </text> } //forma CORRETA se estiver FORA e consumindo o GlobalCode, (se estiver dentro do GlobalCode, você pode referenciar normalmente) //referenciar implicitamente o UserClass no foreach, usando var ou dynamic var userExamples = await GlobalClass.ListUserExamplesAsync(); foreach(var user in userExamples){ <text> @user.Name </text> }