在 C# 中生成 Class 继承泛型 class,它使用 Telosys 代码生成工具使用类型参数
Generating Class in c# that inherits a generic class which uses type parameter using Telosys code generation tool
我需要为我的 Country 实体生成 C# 代码,该代码将从基础实体继承 class 提供强类型参数来表示我的 PK (@id) 是 Guid 类型的事实基础 class 上的 ID 属性 具有隐式类型 Guid。
所以我有两个问题:
telosys中没有Guid类型。
如何使用通用基础 class 类型参数定义 PK?
public class Country : Entity<Guid>
{
}
public abstract class Entity<TKey> : Entity, IEntity<TKey>
{
public virtual TKey Id { get; protected set; }
protected Entity(TKey id)
{
Id = id;
}
}
https://www.telosys.org/dsl-syntax.html
. binary
. boolean
. byte
. date
. decimal
. double
. float
. int
. long
. short
. string
. time
. timestamp
https://doc.telosys.org/dsl-model/tags
例如一个特殊的 属性 名称:meta属性 我可以解析以获得 $entity 继承类型参数。我需要其他元数据。
Entity class as Id property.It 可以是string, int, long等
User {
metaproperty: string {#base
@Label("typed_param:Guid;name:Id;form_sections:Info section~1|Contact sec~2;display_layout:rows(n)_cols(12)")}
FirstName : string {@Label("form_section:~1;display_layout:row(1)col(1)colspan(3)")};
LastName: string {@Label("form_section:~1;display_layout:row(1)col(2)colspan(9)")};
Phone: string {@Label("form_section:~2;display_layout:row(1)col(1)colspan(12)")};
}
I need some mechanizam to display the layout of fields in the form for each property I want in view/edit screens
I can certaily generate some .json structure and add metadata there as well. Even have a GUI with drag and drop feature to define rows, cols and row or col spans.
关于 属性类型, 正如您在评论中提到的,最简单的方法是使用 标签 进行管理。
在模型中为具有 GUID 的属性设置“guid”标签:
MyEntity {
myattribute : string { #Guid } ;
}
在模板中可以这样使用:
#if ( $attrib.hasTag("Guid ") )
do something
#end
关于 class,目前在实体级别没有注释(或标签)(很快就会发生)。但是您可以使用一个文件来定义应该扩展另一个 class.
的实体
步骤 1 - 在您的模型文件夹中 在 文件中定义实体列表“variables.txt"
实体“Foo”、“Bar”和“Country”的示例
#set ( $guidEntities = ["Foo", "Bar", "Country" ] )
步骤 2 - 在您的模板中评估此文件的内容以便为列表定义变量并将其用于检查当前实体是否必须扩展 Entity
示例:
## Load content from file "variables.txt" located in current model folder
#set( $file = $fn.fileFromModel("variables.txt") )
#set( $fileContent = $file.loadContent() )
## Use 'evaluate(statement)' to convert the file content in list variable
#evaluate( $fileContent )
## Now the list $guidEntities is defined and we can use it
## to check if it contains the current entity name
#if ( $guidEntities.contains($entity.name) )
public class $entity.name : Entity<Guid>
#else
public class $entity.name
#end
注意:列表在单独的文件中定义,位于模型文件夹中,因为它可以被视为模型定义的一部分(并且可以在多个文件中使用模板)
从 Telosys v 4.0.0 开始,您可以使用 注释 @Extends(SuperClass)
见https://doc.telosys.org/dsl-model/annotations#extends-string
您还可以在实体级别使用“标签”,
例如:#EntityWithGuid 或 #Entity(Guid)
我需要为我的 Country 实体生成 C# 代码,该代码将从基础实体继承 class 提供强类型参数来表示我的 PK (@id) 是 Guid 类型的事实基础 class 上的 ID 属性 具有隐式类型 Guid。 所以我有两个问题:
telosys中没有Guid类型。
如何使用通用基础 class 类型参数定义 PK?
public class Country : Entity<Guid>
{
}
public abstract class Entity<TKey> : Entity, IEntity<TKey>
{
public virtual TKey Id { get; protected set; }
protected Entity(TKey id)
{
Id = id;
}
}
https://www.telosys.org/dsl-syntax.html
. binary
. boolean
. byte
. date
. decimal
. double
. float
. int
. long
. short
. string
. time
. timestamp
https://doc.telosys.org/dsl-model/tags
例如一个特殊的 属性 名称:meta属性 我可以解析以获得 $entity 继承类型参数。我需要其他元数据。 Entity class as Id property.It 可以是string, int, long等
User {
metaproperty: string {#base
@Label("typed_param:Guid;name:Id;form_sections:Info section~1|Contact sec~2;display_layout:rows(n)_cols(12)")}
FirstName : string {@Label("form_section:~1;display_layout:row(1)col(1)colspan(3)")};
LastName: string {@Label("form_section:~1;display_layout:row(1)col(2)colspan(9)")};
Phone: string {@Label("form_section:~2;display_layout:row(1)col(1)colspan(12)")};
}
I need some mechanizam to display the layout of fields in the form for each property I want in view/edit screens
I can certaily generate some .json structure and add metadata there as well. Even have a GUI with drag and drop feature to define rows, cols and row or col spans.
关于 属性类型, 正如您在评论中提到的,最简单的方法是使用 标签 进行管理。
在模型中为具有 GUID 的属性设置“guid”标签:
MyEntity {
myattribute : string { #Guid } ;
}
在模板中可以这样使用:
#if ( $attrib.hasTag("Guid ") )
do something
#end
关于 class,目前在实体级别没有注释(或标签)(很快就会发生)。但是您可以使用一个文件来定义应该扩展另一个 class.
的实体步骤 1 - 在您的模型文件夹中 在 文件中定义实体列表“variables.txt"
实体“Foo”、“Bar”和“Country”的示例
#set ( $guidEntities = ["Foo", "Bar", "Country" ] )
步骤 2 - 在您的模板中评估此文件的内容以便为列表定义变量并将其用于检查当前实体是否必须扩展 Entity
示例:
## Load content from file "variables.txt" located in current model folder
#set( $file = $fn.fileFromModel("variables.txt") )
#set( $fileContent = $file.loadContent() )
## Use 'evaluate(statement)' to convert the file content in list variable
#evaluate( $fileContent )
## Now the list $guidEntities is defined and we can use it
## to check if it contains the current entity name
#if ( $guidEntities.contains($entity.name) )
public class $entity.name : Entity<Guid>
#else
public class $entity.name
#end
注意:列表在单独的文件中定义,位于模型文件夹中,因为它可以被视为模型定义的一部分(并且可以在多个文件中使用模板)
从 Telosys v 4.0.0 开始,您可以使用 注释 @Extends(SuperClass)
见https://doc.telosys.org/dsl-model/annotations#extends-string
您还可以在实体级别使用“标签”, 例如:#EntityWithGuid 或 #Entity(Guid)