65.9K
CodeProject 正在变化。 阅读更多。
Home

YACGEN 属性和布局自定义

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (2投票s)

2008年12月28日

CPOL

5分钟阅读

viewsIcon

17995

如何填充属性和自定义布局。

引言

这是 Yet Another Code Generator (YACGEN) 系列的第三篇文章。本文将介绍如何使用用户定义的代码填充架构属性以及自定义字段属性布局。

属性填充

正如我在之前的文章(此处此处)中提到的,YACGEN 的核心能力是能够盘点和存储数据库架构,然后通过用户定义的模板生成输出。它存储了许多标准的数据库属性,例如字段名称、大小和数据类型。除此之外,所有其他属性都不是必需的或未填充的。

以下图所示,所有粗体显示的字段属性均由数据库提供程序(目前仅支持 SQL Server 2000 至 2008 版本)填充。

YACGENFieldPropT1.jpg

如果您使用 YACGEN 填充过数据库,您会注意到许多非粗体属性也被填充了。例如,“Alt Field Name”(备用字段名)属性包含字段名,并在适当的位置添加了空格(ProductID 变为 Product ID)。“Fixed”(固定)属性包含字段名,并移除了所有空白字符或非字母数字字符。

表字段包含表名称的复数和单数形式(例如,Territory 和 Territories)。那么,这些是如何填充的呢?

YACGEN 可以在架构填充期间对任何表或字段属性执行 Python 代码。此功能由 Microsoft 的 IronPython 引擎提供。此代码由用户定义,可以随时修改。要查看与给定属性关联的代码,请转到“DB Layout Settings”(数据库布局设置)选项卡,然后选择“Code”(代码)选项卡。

Article.jpg

在这里,您将看到一个四列的网格和一个大的文本框,其中包含代码。第一列代表要填充的属性。第二列包含要评估的 Python 表达式。第三列标识它是字段属性还是表属性。最后一列标识表达式的评估时机。可以是新项(首次填充时)、现有字段(仅后续架构更新时)或新项和更新。网格下方的文本框包含 Python 代码。

该表达式可以是任何有效的 IronPython 表达式,它可以对任何 YACGEN 属性执行操作。这些属性的列表可以在上一篇文章中看到。例如,当字段首次被盘点时,CharWidth2CharWidth3 属性将使用字段的 Width 属性进行填充。还有更复杂的表达式,例如 PixelWidth,当字符宽度小于 100 时,其值将等于字符宽度乘以 8;否则,其值为 400。

Width>100 and 400  or Width * 8

这是 C# 三元运算符的 Python 等价形式,或者 VB 中的 iif。但是,如果您再仔细看,您会看到一个 iif 表达式。

iif(tableLayout.Properties["IsView"] == "True" ,"",GetSQL())

对于了解 Python 的人来说,他们知道 iif 不是一个 Python 表达式。该函数在代码文本框中定义,如下所示:

def iif(expression,truecon, falsecon):
    if expression == True :

        return truecon
    else:
        return falsecon

因此,您可以创建自己的函数,在架构填充期间调用它们。

您还可以执行代码来填充表属性。例如,表属性会填充表名称的复数和单数形式。这在生成单个对象实例(例如,Product)、集合或操作(Products 或 GetAllProducts)的名称时非常有用。直到最近,我遇到了一个以 Address 结尾的表,这个功能一直运行良好。原始函数假设如果名称以“s”结尾,它已经是复数形式。因此,对逻辑进行了更改以反映这一点。新代码如下:

def makePlural(fieldName):
    if fieldName[-1] == "y":
        fieldName = fieldName[:-1] + "ies"
    elif fieldName[-1] != "s":
        fieldName = fieldName + "s"
    elif fieldName[-2:] == "ss":
        fieldName = fieldName + "es"
            
    return fieldName

如果您输入一个不存在的属性,它将把该属性添加到架构中。这允许您添加自定义属性。您可以根据需要添加任意数量的自定义属性。一旦添加了属性,就可以在模板中通过在模板中引用 <#propertyname#> 来使用它。如果您定义了一个新的字段属性,它将出现在字段属性的第二个选项卡中。

例如,您可能希望创建一个存储字段名大写形式的属性。因此,向网格添加新行,然后输入 UpperCaseFieldName 作为属性名。输入表达式 FieldName.upper()。确保将属性类型标记为字段。选择更新所有字段(新建和现有)。结果应如下所示:

YACGENFieldPropT3.jpg

现在,处理现有数据库架构或导入新数据库架构。这将对每个字段执行表达式。选择任何字段,然后转到第二个选项卡。您应该看到与下图类似的内容:

YACGENFieldPropT4.jpg

属性 UpperCaseFieldName 已添加到每个字段属性中。您可以通过输入 <#UpperCaseFieldName#> 在模板中引用该属性。您也可以在任何 Python 表达式中引用该属性。

属性布局

虽然您可以通过“Properties”(属性)框访问新的字段属性,但您可能希望将其显示在自己的文本框中或自定义显示。您可以更改属性标签并分配不同的属性。为此,请移至“DB Layout Settings”(数据库布局设置)选项卡,然后选择“Property Settings”(属性设置)子选项卡。

从下拉列表中选择现有属性。这是将显示新属性和标签的位置。输入新标签和要显示的属性名。新属性名没有下拉列表,因为它可能是自定义属性。使用前面的示例,输入自定义属性 UpperCaseFieldName

YACGENFieldPropT5.jpg

保存配置并重新启动 YACGEN。现在,您将在指定属性的位置看到新标签和属性的显示。

您可能只想更改标签而不更改显示的属性。在“New ID”(新 ID)列中输入与“Name”(名称)列相同的属性。

结论

希望本文能让您对更新自定义属性和布局有更好的了解。未来的文章可能会包含更多关于如何访问 YACGEN 架构对象模型的信息。任何反馈都受欢迎,包括(建设性的)批评。如果您要评分低于 3,我将不胜感激。

历史

  • 2008 年 12 月 28 日 - 首次发布。
© . All rights reserved.