[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
//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>()
VocêFora da área do C# do Global Code, você não tem acesso ao "Tipo" daclasse, aclasseretornaqueapenasvocêcomocriar.dynamic,entãEntão fora do seu class c# de Global Code você nao vai conseguir usarumessecast"Tipo",ex:/ convert,como ToList<MyClass>() ou por exemplo em uma referenciaimplicita,implicitanaonoé permitido:foreach,:-
//forma
ERRADA,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> } //formaCORRETA,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> }