Prozeduren Previous topic Chapter index Next topic

SE_COPY_TO_TIME

 

Eingabeparameter

Parameter

Typ

Beschreibung

SRCSNID

INTEGER

Ein Primary Key Wert von der SENDUNGEN Tabelle

SRCSEPOSITION

INTEGER

Damit wird das Sendeelement in der Sendestunde über die Position angegeben.

DESTSNID

INTEGER

Ein Primary Key Wert von der SENDUNGEN Tabelle.

DESTSEPOSITION

INTEGER

Gibt die Ziel Position an, wohin kopiert werden soll.

DESTSEZEIT

INTEGER

Damit wird die Ziel Sendeelement Zeit übergeben.

COPYGROUP

INTEGER

Damit wird angegeben, ob nur ein Element oder eine ganze Gruppe kopiert werden soll.

BEFOREDEST

INTEGER

Damit wird angegeben ob vor oder nach der angegebenen DestSePosition hin kopiert werden soll.

AVOIDGROUPBREAK

INTEGER

Damit kann bestimmt werden, ob ein Gruppenunterbruch verhindert werden soll.

 

Ausgabeparameter

Parameter

Typ

Beschreibung

NEWDESTSEID

INTEGER

Ein neuer Primary Key Wert von der SENDEELEMENTE Tabelle wird zurückgegeben.

NEWDESTSEPOSITION

INTEGER

Die neue Position vom kopierten Sendeelement wird zurückgegeben.

 

Beschreibung

Kopiert ein Sendeelement (mit Klammer) oder auch ganze Blöcke. (Ruft SE_COPY_BLOCK auf)

 

Definition

CREATE PROCEDURE SE_COPY_TO_TIME(
    SRCSNID INTEGER,
    SRCSEPOSITION INTEGER,
    DESTSNID INTEGER,
    DESTSEPOSITION INTEGER,
    DESTSEZEIT INTEGER,
    COPYGROUP INTEGER,
    BEFOREDEST INTEGER,
    AVOIDGROUPBREAK INTEGER)
RETURNS (
    NEWDESTSEID INTEGER,
    NEWDESTSEPOSITION INTEGER)
AS
  declare variable NEWSEID integer;
  declare variable NEWSESNID integer;
  declare variable NEWSEDATUM date;
  declare variable NEWSEZEIT integer;
  declare variable NEWSESPPOSITION integer;
  declare variable NEWSESNPOSITION integer;
  declare variable NEWSEPOSITION integer;
  declare variable NEXTSEPOSITION integer;
  declare variable NUMBEROFSEINDESTSN integer;
  declare variable DESTSEGRUPPE char(1);
  DECLARE VARIABLE SeIdList1    VARCHAR(8190);
  DECLARE VARIABLE SeIdList2    VARCHAR(8190);
  DECLARE VARIABLE RefSeIdList1 VARCHAR(8190);
  DECLARE VARIABLE RefSeIdList2 VARCHAR(8190);
BEGIN

  /* Genaue Ziel-Position festlegen (Vor/Nach Klammerung) */
  SELECT
    COUNT (SEID)
    FROM sendeelemente
    WHERE SESNID = :destsnid
    INTO :NUMBEROFSEINDESTSN;

  if (NUMBEROFSEINDESTSN>0) then begin
      EXECUTE PROCEDURE SE_GETBLOCKPOS (DestSnId, DestSePosition, BeforeDest)
              RETURNING_VALUES (NewSeId,
                                NewSeSnId,
                                NewSeDatum,
                                NewSeZeit,
                                NewSeSpPosition,
                                NewSeSnPosition,
                                NewSePosition,
                                NextSePosition);
      NewDestSeId       = NewSeId;
      NewDestSePosition = NewSePosition;

      /* Klammerung wurde beruecksichtigt, jetzt auch 
         noch beachten, dass Gruppen nicht zerstoert werden */

      SELECT SEGRUPPE 
      FROM Sendeelemente 
      WHERE SEID = :NewDestSeId 
      INTO :DESTSEGRUPPE;
      
      if (AVOIDGROUPBREAK=1) then begin
        if (BeforeDest = 1) then begin
          EXECUTE PROCEDURE SE_GETGROUPSTART (DestSnId, NewDestSePosition, DestSeGruppe)
          RETURNING_VALUES (NewSePosition);
          NewDestSePosition = NewSePosition;
          NextSePosition = NewDestSePosition - 249;
        end else begin
          EXECUTE PROCEDURE SE_GETGROUPEND (DestSnId, NewDestSePosition, DestSeGruppe)
          RETURNING_VALUES (NewSePosition);
          NewDestSePosition = NewSePosition;
          NextSePosition = NewDestSePosition + 249;
        end    
      end
      
      if (BeforeDest = 1) then begin
        if (NewSeZeit>DestSeZeit and DestSeZeit>=0) then begin
          NewSeZeit = DestSeZeit;
        end
      end else begin
        if (NewSeZeit<DestSeZeit and DestSeZeit>=0) then begin
          NewSeZeit = DestSeZeit;
        end
      end
  end else begin
    /* Es gibt noch keine Elemente in der Sendung, Sendungseigenschaften
       muessen anders ermittelt werden */
    NewDestSePosition = DestSePosition;
    NewSeSnId = DestSnId;
    NextSePosition = NewDestSePosition + 249;

    SELECT SPDATUM, SNPOSITION
      FROM SENDUNGEN INNER JOIN SENDEPLAENE ON SNSPID = SPID
      WHERE SNID=:destsnid
      INTO :NewSeDatum, :NewSeSnPosition;

    if (DestSeZeit>=0) then begin
      NewSeZeit = DestSeZeit;
    end else begin
      NewSeZeit = NewSeSnPosition * 36 * 1000;
    end
    NewSeSpPosition = 0;
  end

  /* Ab aktueller Positon + 1 vorwaerts Elemente kopieren */
  EXECUTE PROCEDURE SE_COPY_BLOCK (SrcSnId,
                                   SrcSePosition,
                                   NewSeSnId,
                                   NewSeDatum,
                                   NewSeZeit,
                                   NewSeSpPosition,
                                   NewSeSnPosition,
                                   NextSePosition,
                                   CopyGroup,
                                   0)
          RETURNING_VALUES (NewDestSeId,
                            NewDestSePosition,
                            SeIdList1, 
                            RefSeIdList1);

  /* Ab aktueller Positon reuckwaerts Elemente kopieren */
  EXECUTE PROCEDURE SE_COPY_BLOCK (SrcSnId,
                                   SrcSePosition,
                                   NewSeSnId,
                                   NewSeDatum,
                                   NewSeZeit,
                                   NewSeSpPosition,
                                   NewSeSnPosition,
                                   NextSePosition,
                                   CopyGroup,
                                   1)
          RETURNING_VALUES (NewDestSeId,
                            NewDestSePosition,
                            SeIdList2, 
                            RefSeIdList2);

  /* TriggerEvents auch noch kopieren */
  IF (SeIdList1 != '') THEN
    SeIdList1 = SeIdList1 || ',';
  SeIdList1 = SeIdList1 || SeIdList2;
  RefSeIdList1 = RefSeIdList1 || RefSeIdList2;
  EXECUTE PROCEDURE TE_SE_COPY(SeIdList1, RefSeIdList1);

  /* Positionsnummern der Sendung neu durchnumerieren */
  EXECUTE PROCEDURE SE_RENUMPOSITION (NewSeSnId);

END

 

     Previous topic Chapter index Next topic