Mit KC_CHANGE_APPLICATION können Sie während des Anwendungslaufs den Austausch des gesamten Anwendungsprogramms einleiten. Damit können ohne Beendigung der Anwendung Teilprogramme ersetzt und neue Teilprogramme zum Anwendungsprogramm hinzugefügt werden. Zum Programmaustausch siehe auch openUTM-Handbuch „Einsatz von UTM-Anwendungen“.
Mit KC_CHANGE_APPLICATION können Sie folgende Aktionen durchführen:
- Eine UTM-Anwendung auf einem BS2000-System, die mit Lademodulen generiert ist, in allen Prozessen beenden und neu laden. - Diese Funktion benötigen Sie, um Lademodule in einem Common Memory Pool auszutauschen. Beim Neuladen wird die jeweils aktuelle Version der Lademodule geladen, die zuvor mit einem KC_MODIFY_OBJECT-Aufruf für den Objekttyp KC_LOAD_MODULE vorgemerkt wurde. - Das Beenden des Anwendungsprogramms in allen Prozessen mit anschließendem Neuladen bewirkt außerdem, dass alle Lademodule entladen werden, die mit Lademodus ONCALL generiert sind. - Es sind nur subopcode1=KC_NEW und KC_SAME möglich. KC_SAME hat die gleiche Wirkung wie KC_NEW. 
- Das gesamte Anwendungsprogramm einer UTM-Anwendung auf Unix-, Linux- und Windows-Systemen kann durch das Anwendungsprogramm der nächsthöheren Dateigeneration ersetzt werden (subopcode1=KC_NEW), die im Dateigenerationsverzeichnis PROG (im Basisverzeichnis filebase der Anwendung) steht. - Sie können mit KC_CHANGE_APPLICATION den Programmaustausch auch rückgängig machen, d.h. wieder auf das zuvor geladene Anwendungsprogramm zurückschalten (subopcode1=KC_OLD), oder das Anwendungsprogramm neu laden (subopcode1=KC_SAME), ohne auf eine andere Dateigeneration umzuschalten. 
Folgende Voraussetzungen müssen erfüllt sein:
- Ist eine UTM-Anwendung auf einem BS2000-System mit Lademodulen generiert, müssen Sie die Teile der Anwendung, die in einem Common Memory Pool liegen und ausgetauscht werden sollen, zuvor mit KC_MODIFY_OBJECT-Aufrufen Objekttyp KC_LOAD_MODULE (siehe "obj_type=KC_LOAD_MODULE") zum Austausch vormerken lassen. 
- Für den Austausch eines UTM-Anwendungsprogramms auf Unix-, Linux- und Windows-Systemen sollten die verschiedenen Versionen des Anwendungsprogramms (auch das aktuell geladene) mit Hilfe des UTM-Tools KDCPROG im Dateigenerationsverzeichnis filebase/PROG bzw. filebase\PROG verwaltet werden. Das Dateigenerationsverzeichnis muss mit Hilfe von KDCPROG erstellt worden sein (KDCPROG CREATE).
 Falls das Dateigenerationsverzeichnis nicht existiert, lädt UTM das Anwendungsprogramm filebase/utmwork(auf Unix- und Linux-Systemen) bzw. filebase\utmwork(auf Windows-Systemen) neu.
Der Programmaustausch ist im openUTM-Handbuch „Einsatz von UTM-Anwendungen“ beschrieben.
Beim Austausch des Anwendungsprogramms ist Folgendes zu beachten:
- Im neuen Anwendungsprogramm hinzugefügte Teilprogramme müssen bei der KDCDEF-Generierung definiert oder durch die Administration dynamisch konfiguriert worden sein. 
- Im neuen Anwendungsprogramm sollten keine Teilprogramme fehlen, die vorher vorhanden waren. Aufträge, die für einen Transaktionscode angenommen wurden, für den nach einem Programmaustausch kein Teilprogramm mehr da ist, werden von UTM bei der Ausführung abnormal beendet (PEND ER). 
Ablauf / Wirkungsdauer / Transaktionssicherung / Cluster
Durch den Aufruf wird der Programmaustausch angestoßen, d.h. ein Auftrag zum Programmaustausch erzeugt. Bei Rückkehr in das Teilprogramm ist der Austausch noch nicht durchgeführt. Der Programmaustausch unterliegt nicht der Transaktionssicherung. Er kann nicht durch einen in derselben Transaktion folgenden RSET-Aufruf zurückgesetzt werden.
Der Austausch des Anwendungsprogramms wird für jeden Prozess der Anwendung einzeln durchgeführt, indem das laufende Anwendungsprogramm für diesen Prozess beendet und das neue Anwendungsprogramm geladen wird. Zu einem Zeitpunkt wird das Anwendungsprogramm nur in einem Prozess ausgetauscht, um zu vermeiden, dass der laufende Betrieb durch den Programmaustausch erheblich gestört wird. In der Zeit, in der das Anwendungsprogramm in einem Prozess ausgetauscht wird, werden Aufträge von den anderen Prozessen bearbeitet. Diese Aufträge können dann auch Prozesse erhalten, in denen noch das alte Anwendungsprogramm abläuft. Dadurch werden in der Austauschphase Aufträge entweder noch vom alten oder schon vom neuen Anwendungsprogramm bearbeitet.
In UTM-Cluster-Anwendungen gilt (Unix-, Linux- und Windows-Systeme): 
Der Aufruf wirkt Cluster-global, d.h. ein Anwendungsaustausch wird in jeder laufenden Knoten-Anwendung angestoßen.
Nach der Bearbeitung des Auftrags informiert UTM Sie mit einer Meldung über Erfolg bzw. Misserfolg des Programmaustausches. UTM erzeugt die Meldung K074, wenn der Programmaustausch erfolgreich durchgeführt werden konnte. Konnte UTM den Programmaustausch nicht durchführen, wird die Meldung K075 erzeugt. Treten Fehler auf, dann wird zusätzlich zu K074 bzw. K075 die Meldung K078 ausgegeben, die als Insert die Fehlerursache enthält.
| KDCAPPL ("KDCAPPL - Eigenschaften und Grenzwerte für den Betrieb ändern"), Operand PROG | 
Versorgung der zu übergebenden Bereiche
| Funktion des Aufrufs | Angabe im | |||
| Parameterbereich1 | Identifikations- | Selektions- | Datenbereich | |
| In UTM-Anwendungen auf Unix-, Linux- und Windows-Systemen mit Shared Objects/DLLs: | subopcode1: 
 | —— | —— | —— (Beim Aufruf muss der Zeiger auf einen Datenbereich für die Rückgaben von UTM übergeben werden.) | 
| In UTM-Anwendungen auf Unix-, Linux- und Windows-Systemen mit Shared Objects/DLLs: | subopcode1: | —— | —— | |
| In UTM-Anwendungen auf Unix-, Linux- und Windows-Systemen mit Shared Objects/DLLs: | subopcode1: | —— | —— | |
| In UTM-Anwendungen auf BS2000-Systemen mit Lademodulen: Das Anwendungsprogramm in allen Prozessen beenden und neu starten, um Anwendungsteile im Common Memory Pool auszutauschen. Statische Anwendungsteile lassen sich damit auch austauschen, wenn man die Anwendung zuvor neu bindet. | subopcode1:  | —— | —— | —— | 
| 1 | In allen Fällen muss im Parameterbereich der Operationscode KC_CHANGE_APPLICATION angegeben werden. | 
| Versorgung der Parameter | |
| Parameterbereich | |
| Feldname | Inhalt | 
| version | KC_ADMI_VERSION_1 | 
| retcode | KC_RC_NIL | 
| version_data | KC_VERSION_DATA_11 | 
| opcode | KC_CHANGE_APPLICATION | 
| KC_NEW / KC_SAME / KC_OLD (Unix-, Linux- und Windows-Systeme) | |
| id_lth | 0 | 
| select_lth | 0 | 
| Länge | |
| Identifikationsbereich | |
| — | |
| Selektionsbereich | |
| — | |
| Datenbereich | |
| — | |
| KDCADMI-Aufruf | 
| KDCADMI (¶meter_area, NULL, NULL, &data_area) | 
| Rückgaben von UTM | |
| Parameterbereich | |
| Feldname | Inhalt | 
| Returncodes | |
| tatsächliche Länge der Daten im Datenbereich | |
| Datenstruktur kc_change_application_str / — | |
subopcode1
Mit subopcode1 legen Sie fest, welche Art des Programmaustauschs durchgeführt werden soll. Folgende Angaben sind möglich:
| KC_NEW | Beim Programmaustausch einer UTM-Anwendung auf Unix-, Linux- oder Windows-Systemen lädt UTM das Anwendungsprogramm aus der nächsthöheren Dateigeneration. Bei einer UTM-Anwendung auf einem BS2000-System, die mit Lademodulen generiert ist, beendet UTM das Anwendungsprogramm nacheinander in allen Prozessen und lädt es sofort wieder. Dabei wird die jeweils aktuelle Version der Lademodule geladen, d.h. die durch KC_MODIFY_OBJECT-Aufrufe vorgemerkten Lademodule im Common Memory Pool werden ausgetauscht. Statische Anwendungsteile lassen sich damit auch austauschen, wenn man die Anwendung zuvor neu bindet. | 
| KC_OLD | Beim Programmaustausch einer UTM-Anwendung auf Unix-, Linux- oder Windows-Systemen lädt UTM das Anwendungsprogramm aus der nächstniedrigeren Dateigeneration. Damit kann wieder das alte Anwendungsprogramm geladen werden, wenn nach Umschalten auf eine neue Dateigeneration Fehler im Anwendungsprogramm entdeckt werden. | 
| KC_SAME | Auf Unix-, Linux- und Windows-Systemen lädt openUTM das Anwendungsprogramm aus der derselben Dateigeneration. Auf BS2000-Systemen wirkt KC_SAME wie KC_NEW. | 
data_lth
Im Feld data_lth geben Sie die Länge des Datenbereichs an, der für die Rückgaben von UTM zur Verfügung stehen soll.
Beim Programmaustausch einer UTM-Anwendung auf Unix-, Linux- oder Windows-Systemen müssen Sie data_lth >= sizeof (kc_change_application_str) setzen.
Beim Aufruf der Funktion müssen Sie den Zeiger auf den Datenbereich übergeben.
Beim Programmaustausch einer UTM-Anwendung auf einem BS2000-System, die mit Lademodulen generiert ist, können Sie data_lth=0 angeben. UTM liefert dann keine Daten zurück.
retcode
Im Feld retcode liefert UTM den Returncode des Aufrufs zurück. Neben den im Abschnitt „Returncodes" aufgelisteten Returncodes können beim Austausch des Anwendungsprogramms zusätzlich folgende Returncodes auftreten:
| Maincode = KC_MC_REJECTED Der Aufruf wurde von UTM abgewiesen. Subcodes: | 
| KC_SC_NOT_CHANGEABLE Die Anwendung wurde im Dialog gestartet. Ein Programmaustausch ist nicht möglich. | 
| KC_SC_FILE_ERROR (nur auf Unix-, Linux- und Windows-Systemen) Beim Zugriff auf die Dateigeneration des zu ladenden Anwendungsprogramms ist ein Fehler aufgetreten. UTM hat die Meldung K043 mit dem DMS-Returncode erzeugt. | 
| KC_SC_NOT_GEN (nur auf BS2000-Systemen) Die UTM-Anwendung ist ohne Lademodule generiert. | 
| KC_SC_NO_GLOB_CHANG_POSSIBLE Nur bei UTM-Cluster-Anwendungen: | 
| KC_SC_JFCT_RT_CODE_NOT_OK Nur bei UTM-Cluster-Anwendungen: | 
| Maincode = KC_MC_REJECTED_CURR Der Aufruf kann zur Zeit nicht bearbeitet werden. Subcode: | 
| KC_SC_CHANGE_RUNNING Es läuft gerade ein Programmaustausch, d.h. ein zuvor gestarteter Programmaustausch ist noch nicht abgeschlossen. | 
| KC_SC_INVDEF_RUNNING Nur bei UTM-Cluster-Anwendungen: | 
| Maincode = KC_MC_RECBUF_FULL Nur bei UTM-Cluster-Anwendungen. Subcode: | 
| KC_SC_NO_INFO Der Puffer mit Wiederanlauf-Information ist voll. (Siehe openUTM-Handbuch „Anwendungen generieren“, KDCDEF-Steueranweisung MAX, Parameter RECBUF). | 
data_lth_ret
Im Feld data_lth_ret des Parameterbereichs liefert UTM die tatsächliche Länge der Daten im Datenbereich zurück.
Datenbereich
Beim Programmaustausch einer UTM-Anwendung auf Unix-, Linux- oder Windows-Systemen liefert UTM im Datenbereich die Datenstruktur kc_change_application_str zurück, sofern beim Aufruf von KDCADMI der Zeiger auf einen Datenbereich übergeben wurde.
| struct | 
| 
 
 | 
program_fgg_new
In diesem Feld liefert UTM die Dateigenerationsnummer des Anwendungsprogrammes zurück, das durch den Programmaustausch geladen wird.
program_fgg_old
In diesem Feld liefert UTM die Dateigenerationsnummer des Anwendungsprogrammes zurück, das vor dem Programmaustausch geladen war.
