• 允许更新数据的动态事务
  • 使用动态交易的有趣案例
  • 西班牙语视频' target='_blank'>6930' target='_blank'>基本交易 in对于Web面板和SD面板中的每个命令,数据提供程序和网格。 除此之外,它们的属性可以以透明的方式用作打印块,条件等中的常规属性,而不用既不具有与这些事务相关联的物理表或物理字段。

    我们通过设置其对象属性将事务设置为动态:

    当然,由于设置了数据提供程序属性 = True,因此我们必须完成自动创建的数据提供程序,以便定义 所需数据将被加载到动态事务属性中。

    通过上述配置,GeneXus了解到交易是动态的。 因此,它不会创建与所述事务相关联的物理表。 相反,GeneXus将在数据库中创建一个视图。

    使用实例来理解这个概念

    我们假设我们有一个GeneXus KB用于跟踪体重,并进行以下交易:

    Person
    {
       PersonId*
       PersonName
       GenderId
       GenderName 
    }
    
    Gender
    {
       GenderId*
       GenderName
       GenderMembers = count(PersonName)
    }
    
    WeightLog
    {
       PersonId*
       WeightLogDate*
       WeightLogKilos
    }

    可以向开发者请求的一些查询将是:

    1. 给定一个时间段,每天输入多少个权重?
    2. 给定具体日期,当天输入了多少
    3. 今年最活跃的一天是哪一天?

    可以编写数据提供程序(或程序)来解决上述每个查询,但是有一个更强大的方式来解决上述请求 ,并且它包括使用以下内容定义新的事务:

    - Data Provider property = Yes
    Used To = Retrieve Data

    换句话说:建议是定义动态事务,并在几种情况下执行它来解决上述查询。

    下图显示了动态事务及其相关数据提供者的定义:

    29608.png


    除了能够执行DailyStatistics动态事务表单之外,我们还可以应用模式,以及在定义列表,Web面板,SD面板等时使用其属性。

    所以,我们来解决每一个请愿书:

    //1.给定一个时期,每天输入多少重量测量?
    
    For each DailyStatistics  
        where DailyStatisticsDate >= &InitialDay
        where DailyStatisticsDate <= &FinalDay
              Print Printblock1 {DailyStatisticsDate, DailyStatisticsNumberOfWeights}
    Endfor    
      
    //2. 在给定的一天输入多少重量测量?
    
    For each DailyStatistics
        where DailyStatisticsDate = &Day
              Print Printblock1 {DailyStatisticsDate, DailyStatisticsNumberOfWeights}
    Endfor
    
    
    //3. 哪一个是今年最活跃的一天?
    
    &BestDay = max(DailyStatisticsNumberOfWeights, DailyStatisticsDate.Year = &Today.Year(),,DailyStatisticsDate)


    可以向开发者请求的另一个查询可能是:

    4. “活动”列表 系统有人? 我们假设活跃人物是 测量过去30天。

    我们通过定义动态事务来解决这个查询。 看下面的图片:

    如前所述,可以执行ActivePerson动态交易表单以便浏览活跃的人员,我们也可以将模式应用于交易,它可以是引用为基础事务,而其属性可以随处随地使用。

    考虑

    将事务定义为Dynamic的必要条件是它的p 边框键必须与其他事务主键不同。 换句话说,动态事务不能在KB中具有并行事务。


    性能

    GeneXus为这些事务创建了一个SQL View,通常,DBMS能够部署各种优化策略,以确保良好的性能。


    限制

    并非所有事务都可以定义为动态事务。 一些限制适用:

    • 数据提供者查询可以表示为视图。 如果不是这种情况,规格将报告错误。