Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method SynchronizeSubscription ( 
 | 
  String participationID_i, 
 | 
  String eventID_i, 
 | 
  String calendarType_i, 
 | 
  String calendarID_i, 
 | 
  Boolean eventIsRecurring_i, 
 | 
  Boolean eventIsAllDay_i, 
 | 
  Duration eventStartTimeOfDay_i, 
 | 
  Duration eventDuration_i, 
 | 
  Date startDate_i, 
 | 
  Boolean hasSpecificPeriod_i, 
 | 
  String periodType_i, 
 | 
  Date periodStartDate_i, 
 | 
  Number periodNrOfOccurrences_i, 
 | 
  Date periodEndDate_i 
 | 
) as LibCal_Subscription 
 | 
{ 
 | 
  Description: 'Synchronize a subscription, typically with the data of an integration object that is imported by the DIF.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Get the subscription that must be synchronized. 
 | 
    subscription := select( this.Subscriptions(), Elements, subscr, true, subscr.ParticipationID() = participationID_i ); 
 | 
     
 | 
    // Get the event that is subscribed to. 
 | 
    event := LibCal_Event::FindByEventID( eventID_i ); 
 | 
     
 | 
    if( not isnull( event ) ) 
 | 
    { 
 | 
      useLeadingPeriod := not hasSpecificPeriod_i;  // HasSpecificPeriod is easier to understand 
 | 
                                                    // in the source (e.g. Excelsheet) from which the data is imported. 
 | 
      if( not isnull( subscription ) ) 
 | 
      { 
 | 
        if( event <> subscription.Event() ) 
 | 
        { 
 | 
          // Change the event to which is subscribed. 
 | 
          // Very unlikely to happen, is not supported in the UI. 
 | 
          // Can happen though if IsAlwaysAvailable is changed from FALSE to TRUE (or vice versa). 
 | 
          subscription.Event().RemoveSubscriber( this ); 
 | 
          subscription := event.AddSubscriber( this, useLeadingPeriod ); 
 | 
          subscription.ParticipationID( participationID_i ); 
 | 
        } 
 | 
      } 
 | 
      else  // Subscription does not exist. 
 | 
      { 
 | 
        // Add the calendar as subcriber to the event from another calendar. 
 | 
        subscription := event.AddSubscriber( this, useLeadingPeriod ); 
 | 
        subscription.ParticipationID( participationID_i ); 
 | 
        subscription.IsCreatedByImport( true ); 
 | 
      } 
 | 
     
 | 
      // Synchronize the data. 
 | 
      subscription.Synchronize( participationID_i, 
 | 
                                calendarType_i, 
 | 
                                calendarID_i, 
 | 
                                eventIsRecurring_i, 
 | 
                                eventIsAllDay_i, 
 | 
                                eventStartTimeOfDay_i, 
 | 
                                eventDuration_i, 
 | 
                                startDate_i, 
 | 
                                hasSpecificPeriod_i, 
 | 
                                periodType_i, 
 | 
                                periodStartDate_i, 
 | 
                                periodNrOfOccurrences_i, 
 | 
                                periodEndDate_i ); 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      LibCal_Util::Warning( "LibCal_Calendar.SynchronizeSubscription() : Event with ID '" + eventID_i + "' not found for IntegrationParticipation with ID '" + participationID_i + "'." ); 
 | 
    } 
 | 
     
 | 
    return subscription; 
 | 
  *] 
 | 
} 
 |