Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod CreateUpdateFromUI ( 
 | 
  LibCal_Calendar owner_i, 
 | 
  LibCal_LeadingParticipation participation_i, 
 | 
  String subject_i, 
 | 
  String description_i, 
 | 
  String type_i, 
 | 
  LibCal_EventType eventtype_i, 
 | 
  Real capacity_i, 
 | 
  LibCal_EventCategory category_i, 
 | 
  Boolean isDefault_i, 
 | 
  Date startDate_i, 
 | 
  Duration startTimeOfDay_i, 
 | 
  Date endDate_i, 
 | 
  Duration endTimeOfDay_i, 
 | 
  Boolean isAllDay_i, 
 | 
  Boolean isRecurring_i, 
 | 
  Number recurrenceInterval_i, 
 | 
  String patternType_i, 
 | 
  Boolean patternDaily_IsEveryWeekday_i, 
 | 
  String patternWeekly_Weekdays_i, 
 | 
  Boolean patternMonthly_IsDay_i, 
 | 
  Number patternMonthly_Day_i, 
 | 
  String patternMonthly_WeekOfMonth_i, 
 | 
  String patternMonthly_DayOfWeek_i, 
 | 
  Boolean patternYearly_IsDate_i, 
 | 
  Number patternYearly_Month_i, 
 | 
  Number patternYearly_Day_i, 
 | 
  String patternYearly_WeekOfMonth_i, 
 | 
  String patternYearly_DayOfWeek_i, 
 | 
  String periodType_i, 
 | 
  Date periodStartDate_i, 
 | 
  Number nrOfOccurrences_i, 
 | 
  Date periodEndDate_i, 
 | 
  LibCal_Calendars subscribers_i, 
 | 
  Boolean ismultiple 
 | 
) as LibCal_Event 
 | 
{ 
 | 
  Description: 'Create and/or update an Event and its LeadingParticipation, based on information from the UI.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    //事件创建二开方法 
 | 
    //查询是否已有同名在批量界面创建的事件s 
 | 
    event := selectobject( owner_i, Event, event, event.Subject() = subject_i  
 | 
                           and event.EventType() = eventtype_i ); 
 | 
     
 | 
    //只有通过批量创建界面且已有同名事件进入下面操作 
 | 
    if( ismultiple and not isnull( event ) ){ 
 | 
      event.IsMultiple( true ); 
 | 
      lp        := event.LeadingParticipation(); 
 | 
      timezone  := lp.Calendar().GetTimeZone(); 
 | 
      starttime := startDate_i.DateTime( timezone ).AddAsPeriod( timezone, startTimeOfDay_i ); 
 | 
      endtime   := endDate_i.DateTime( timezone ).AddAsPeriod( timezone, endTimeOfDay_i ); 
 | 
      etis      := selectset( lp, Subscription.ExplicitTimeInterval, eti, true ); 
 | 
    //  startDate := starttime.Date( timezone ); 
 | 
    //  endDate   := endtime.Date( timezone ) - ifexpr( endtime = endtime.StartOfDay( timezone ), 1, 0 ); 
 | 
      leadingETI := selectobject( lp, ExplicitTimeInterval, eti, eti.Start() = starttime and eti.End() = endtime ); 
 | 
     
 | 
      if( isnull( leadingETI ) ){ 
 | 
        leadingETI := lp.CreateTimeInterval( starttime, endtime, event.Capacity() ); 
 | 
      } 
 | 
      lp.AddSubscribers( subscribers_i, true ); 
 | 
     
 | 
      if( not isnull( leadingETI ) ){ 
 | 
        traverse( lp, Subscription, subscription, subscribers_i.Find( subscription.Calendar() ) >= 0 ){ 
 | 
     
 | 
          traverse( subscription, ExplicitTimeInterval, eti, etis.Find( eti ) < 0 ){ 
 | 
            eti.Delete(); 
 | 
          } 
 | 
          subscribingETI := subscription.CreateTimeInterval( starttime, endtime, event.Capacity() ); 
 | 
          if( not isnull( subscribingETI ) ){ 
 | 
            subscribingETI.LeadingETI( relset, leadingETI ); 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } else { 
 | 
      event := LibCal_Event::CreateUpdateFromUI( owner_i, participation_i, subject_i, description_i, type_i, capacity_i, category_i, isDefault_i,  
 | 
                                      startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i,  
 | 
                                      isRecurring_i, recurrenceInterval_i, 
 | 
                                      patternType_i, patternDaily_IsEveryWeekday_i, patternWeekly_Weekdays_i,  
 | 
                                      patternMonthly_IsDay_i, patternMonthly_Day_i, patternMonthly_WeekOfMonth_i, patternMonthly_DayOfWeek_i, 
 | 
                                      patternYearly_IsDate_i, patternYearly_Month_i, patternYearly_Day_i, patternYearly_WeekOfMonth_i, patternYearly_DayOfWeek_i, 
 | 
                                      periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i, subscribers_i, ismultiple ); 
 | 
    } 
 | 
     
 | 
    if( not isnull( event ) ){ 
 | 
      event.EventType( relset, eventtype_i ); 
 | 
    } 
 | 
     
 | 
    return event; 
 | 
  *] 
 | 
} 
 |