Struktur während der Bibliotheksaktualisierung aktualisieren - TIAPortal

TIA Portal Openness: API für die Automatisierung von Engineering-Workflows

ft:publication_title
TIA Portal Openness: API für die Automatisierung von Engineering-Workflows
Product
TIAPortal
Version
V20
Publication date
01/2025
Language
de-DE
Struktur während der Bibliotheksaktualisierung aktualisieren

Voraussetzung

Einleitung

Sie können mit TIA Portal Openness das Projekt und die Struktur der globalen Bibliothek aktualisieren oder beibehalten, auch wenn Konflikte bestehen. Sie können auch mit TIA Portal Openness unbenutzte Versionen aus der Zielbibliothek

beibehalten oder löschen.

Die UpdateLibrary() wird mit der folgenden Signatur für die Projektbibliothek und die globale Bibliothek definiert:

public void UpdateLibrary(IEnumerable<ILibraryTypeOrFolderSelection> sourceTypesAndFolders, ILibrary targetLibrary, ForceUpdateMode forceUpdateMode, DeleteUnusedVersionsMode updateMode, StructureConflictResolutionMode structureConflictResolutionMode);

Die UpdateLibrary() wird für Einzeltypen mit einer anderen Definition und folgender Signatur überladen:

public void UpdateLibrary(ILibrary targetLibrary, DeleteUnusedVersionsMode updateMode, StructureConflictResolutionMode structureConflictResolutionMode,ForceUpdateMode forceUpdateMode);

Die UpdateLibrary() akzeptiert folgende Parameterdefinition für die Ausführung verschiedener Vorgänge:

Parameter

Definition

DeleteUnusedVersionsMode

Dient zur Bestimmung, ob unbenutzte Versionen in der Zielbibliothek gelöscht/beibehalten werden sollen.

DeleteUnusedVersionMode führt Vorgänge anhand des als Eingabe bereitgestellten ENUM-Werts aus:

  • DeleteUnusedVersionsMode.AutomaticallyDelete : Unbenutzte Versionen werden in der Zielbibliothek gelöscht, wenn in Zielbibliotheken unbenutzte Versionen vorhanden sind

  • DeleteUnusedVersionsMode.DoNotDelete: Unbenutzte Versionen werden in der Zielbibliothek nicht gelöscht, wenn in Zielbibliotheken unbenutzte Versionen vorhanden sind

StructureConflictResolutionMode

Dient zur Bestimmung, ob bei einem Strukturkonflikt die Struktur der Zielbibliothek aktualisiert, die vorhandene Struktur beibehalten oder der Vorgang abgebrochen werden soll.

StructureConflictResolutionMode führt Vorgänge anhand des als Eingabe bereitgestellten ENUM-Werts aus:

  • StructureConflictResolutionMode.UpdateStructure: Die Struktur der Quellbibliothek wird anhand der Zielbibliothek aktualisiert, wenn es zwischen Quell- und Zielbibliothek strukturelle Unterschiede gibt

  • StructureConflictResolutionMode.RetainStructure: Die Struktur der Quellbibliothek wird in der Zielbibliothek beibehalten, wenn es zwischen Quell- und Zielbibliothek strukturelle Unterschiede gibt

  • StructureConflictResolutionMode.CancelIfStructureConflicts: Löst bei Auftreten eines Strukturkonflikts eine EngineeringTargetInvocationException aus und bricht den Vorgang ab.

ForceUpdateMode

Dient zur Bestimmung, ob die aktualisierte Version in der Zielbibliothek als Standard-/neueste Version eingestellt werden soll.

Der ForceUpdateMode führt Vorgänge anhand des als Eingabe bereitgestellten ENUM-Werts aus:

  • ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault: Die Standardversion in der Quellbibliothek wird im Ziel aktualisiert und die aktualisierte Version wird in der Zielbibliothek nur als Standardversion markiert, wenn die Versionsnummer in der Quelle höher als die Versionsnummer im Ziel ist

  • ForceUpdateMode.ForceSetAnyUpdatedVersionAsDefault: Die Standardversion in der Quellbibliothek wird unabhängig von der Versionsnummer im Ziel als Standard- oder neueste Version aktualisiert.

  • ForceUpdateMode.NoDefaultVersionChange : Dieser Enum-Wert sollte bei der Aktualisierung von der Projektbibliothek im Projekt verwendet werden, wenn die Option ForceUpdate nicht anwendbar ist

Programmcode: UpdateLibrary für einen Einzeltyp

Die UpdateLibrary API ist Teil der Siemens.Engineering.Library.Types.LibraryType-Schnittstelle und akzeptiert eine "Einfachauswahl" für Typen.

Ändern Sie den folgenden Programmcode, um UpdateLibrary für einen Einzeltyp aus der Projektbibliothek in der globalen Bibliothek auszuführen (unbenutzte Version löschen, vorhandene Struktur der Zielbibliothek aktualisieren und Aktualisierung der Version im Ziel standardmäßig unabhängig von der Versionsnummer erzwingen)

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary myProjectLibrary = Project.ProjectLibrary;

LibraryTypeUserFolder singleFolderContainingTypes = myProjectLibrary.TypeFolder.Folders.Find("folder1");

ILibraryType typeA = singleFolderContainingTypes.Types.Find("block1");

// block1 has lower version.

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.AutomaticallyDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.UpdateStructure;

ForceUpdateMode forceUpdateMode = ForceUpdateMode.ForceSetAnyUpdatedVersionAsDefault;

ILibrary globalLibrary = ...;

typeA.UpdateLibrary(globalLibrary, deleteUnusedVersionsMode, structureConflictResolutionMode, forceUpdateMode);

...

Ändern Sie den folgenden Programmcode, um UpdateLibrary für einen Einzeltyp aus der Projektbibliothek in der globalen Bibliothek auszuführen (unbenutzte Version nicht löschen, vorhandene Struktur der Zielbibliothek beibehalten und keine Aktualisierung erzwingen):

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary globalLibrary = ...;

LibraryTypeUserFolder singleFolderContainingTypes = globalLibrary.TypeFolder.Folders.Find("folder1");

ILibraryType typeA = singleFolderContainingTypes.Types.Find("block1");// block1 has lower version.

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.DoNotDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.RetainStructure;

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

ILibrary myProjectLibrary = Project.ProjectLibrary;

typeA.UpdateLibrary(myProjectLibrary, deleteUnusedVersionsMode, structureConflictResolutionMode, forceUpdateMode);

...

Ändern Sie den folgenden Programmcode, um UpdateLibrary für einen Einzeltyp aus der globalen Bibliothek in der Projektbibliothek auszuführen (unbenutzte Version nicht löschen, vorhandene Struktur der Zielbibliothek beibehalten und keine Aktualisierung erzwingen):

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary globalLibrary = ...;

LibraryTypeUserFolder singleFolderContainingTypes = globalLibrary.TypeFolder.Folders.Find("folder1");

ILibraryType typeA = singleFolderContainingTypes.Types.Find("block1"); // block1 has lower version.

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.DoNotDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.RetainStructure;

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

ILibrary myProjectLibrary = Project.ProjectLibrary;

typeA.UpdateLibrary(myProjectLibrary, deleteUnusedVersionsMode, structureConflictResolutionMode, forceUpdateMode);

...

Ändern Sie den folgenden Programmcode, um UpdateLibrary für einen Einzeltyp aus der globalen Bibliothek in der Projektbibliothek auszuführen (unbenutzte Version löschen, vorhandene Struktur der Zielbibliothek aktualisieren und keine Aktualisierung erzwingen):

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary globalLibrary = ...;

LibraryTypeUserFolder singleFolderContainingTypes = globalLibrary.TypeFolder.Folders.Find("folder1");

ILibraryType typeA = singleFolderContainingTypes.Types.Find("block1"); // block1 has lower version.

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.AutomaticallyDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.UpdateStructure;

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

ILibrary myProjectLibrary = Project.ProjectLibrary;

typeA.UpdateLibrary(myProjectLibrary, deleteUnusedVersionsMode, structureConflictResolutionMode);

...

Programmcode: UpdateLibrary für mehrere Typen

Die UpdateLibrary API ist Teil der Siemens.Engineering.Library.ILibrary-Schnittstelle und akzeptiert eine "Mehrfachauswahl" für Typen und Typordner.

Ändern Sie den folgenden Programmcode, um UpdateLibrary für einen Typ aus der Projektbibliothek in der globalen Bibliothek auszuführen:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...ILibrary myProjectLibrary = Project.ProjectLibrary;

LibraryTypeUserFolder singleFolderContainingTypes = myProjectLibrary.TypeFolder.Folders.Find("folder1");

ILibraryType typeA = singleFolderContainingTypes.Types.Find("block1"); // block1 has lower version.

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.DoNotDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.UpdateStructure;

ILibrary globalLibrary;

myProjectLibrary.UpdateLibrary(new[] { typeA }, globalLibrary, forceUpdateMode, deleteUnusedVersionsMode, structureConflictResolutionMode);

...

Ändern Sie den folgenden Programmcode, um UpdateLibrary für mehrere Typen aus der Projektbibliothek in der globalen Bibliothek auszuführen:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary myProjectLibrary = Project.ProjectLibrary;

LibraryTypeUserFolder singleFolderContainingTypes = myProjectLibrary.TypeFolder.Folders.Find("folder1");

ILibraryType typeA = singleFolderContainingTypes.Types.Find("block1"); // block1 has lower version.

ILibraryType typeB = ...;

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.DoNotDelete;

StructureConflictResolutionMode structureConflictResolutionMode= StructureConflictResolutionMode.UpdateStructure;

ILibrary globalLibrary;myProjectLibrary.UpdateLibrary(new[] { typeA, typeB }, globalLibrary, forceUpdateMode, deleteUnusedVersionsMode, structureConflictResolutionMode);

...

Ändern Sie den folgenden Programmcode, um UpdateLibrary für einen Ordner, der Typen enthält, aus der Projektbibliothek in der globalen Bibliothek auszuführen:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary myProjectLibrary = Project.ProjectLibrary;

LibraryTypeUserFolder singleFolderContainingTypes = myProjectLibrary.TypeFolder.Folders.Find("folder1");

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.DoNotDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.UpdateStructure;

ILibrary globalLibrary;

myProjectLibrary.UpdateLibrary(new[] { (ILibraryTypeOrFolderSelection)singleFolderContainingTypes }, globalLibrary, forceUpdateMode, deleteUnusedVersionsMode, structureConflictResolutionMode);

...

Ändern Sie den folgenden Programmcode, um UpdateLibrary für den Systemordner "Types" aus der Projektbibliothek in der globalen Bibliothek auszuführen:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary myProjectLibrary = Project.ProjectLibrary;

LibraryTypeSystemFolder typeFolder = myProjectLibrary.TypeFolder;

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.DoNotDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.RetainStructure;

ILibrary globalLibrary;

myProjectLibrary.UpdateLibrary(new[] { (ILibraryTypeOrFolderSelection)typeFolder }, globalLibrary, forceUpdateMode, deleteUnusedVersionsMode, structureConflictResolutionMode);

...

Ändern Sie den folgenden Programmcode, um UpdateLibrary für einen Typ aus der globalen Bibliothek in der Projektbibliothek auszuführen:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary globalLibrary = ...;

LibraryTypeUserFolder singleFolderContainingTypes = globalLibrary.TypeFolder.Folders.Find("folder1");

ILibraryType typeA = singleFolderContainingTypes.Types.Find("block1"); // block1 has lower version.

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.DoNotDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.UpdateStructure;

ILibrary myProjectLibrary = Project.ProjectLibrary;

globalLibrary.UpdateLibrary(new[] { typeA }, myProjectLibrary, forceUpdateMode, deleteUnusedVersionsMode, structureConflictResolutionMode);

...

Ändern Sie den folgenden Programmcode, um UpdateLibrary für einen Typ aus der globalen Bibliothek in der globalen Bibliothek auszuführen:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

...

ILibrary globalLibrarySource = ...;

LibraryTypeUserFolder singleFolderContainingTypes = globalLibrarySource.TypeFolder.Folders.Find("folder1");

ILibraryType typeA = singleFolderContainingTypes.Types.Find("block1"); // block1 has lower version.

ForceUpdateMode forceUpdateMode = ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault;

DeleteUnusedVersionsMode deleteUnusedVersionsMode = DeleteUnusedVersionsMode.DoNotDelete;

StructureConflictResolutionMode structureConflictResolutionMode = StructureConflictResolutionMode.UpdateStructure;

ILibrary globalLibraryTarget = ...;

globalLibrarySource.UpdateLibrary(new[] { typeA }, globalLibraryTarget, forceUpdateMode, deleteUnusedVersionsMode, structureConflictResolutionMode);

...

Ausnahmebehandlung für Einzeltyp-Ausnahmebehandlung

Einige der Ausnahmeszenarien sind nachstehend beschrieben:

StructureConflictResolutionMode ist CancelIfStructureConflicts

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

var myProjectLibrary = Project.ProjectLibrary;

LibraryTypeSystemFolder typeFolder = myProjectLibrary.TypeFolder.Folders.Find("folder1"); //from myProjectLibrary

var type1 = typeFolder.Types.FindType("Type1"); // if this structure is not available in Global Library

type1.UpdateLibrary(globalLibrary, DeleteUnusedVersionsMode.DoNotDeleteUnusedVersions, StructureConflictResolutionMode.CancelIfStructureConflicts, ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault); // throws EngineeringTargetInvocationException

Zielbibliothek ist NULL

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

var myProjectLibrary = Project.ProjectLibrary;

var type1 = projectLibrary.Types.FindType("Type1");

ILibrary globalLibrary = Null;

type1.UpdateLibrary(globalLibrary, DeleteUnusedVersionsMode.DoNotDeleteUnusedVersions, StructureConflictResolutionMode.RetainStructure, ForceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault); // throws EngineeringTargetInvocationException

Bei falschen Enum-Werten wird eine EngineeringTargetInvocationException ausgelöst:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

var myProjectLibrary = Project.ProjectLibrary;

LibraryTypeSystemFolder typeFolder = myProjectLibrary.TypeFolder.Folders.Find("folder1");//from myProjectLibrary

var type1 = typeFolder.Types.FindType("Type1"); // if this structure is not available in Global Library

type1 .UpdateLibrary(globalLibrary, (DeleteUnusedVersionsMode)42, StructureConflictResolutionMode.RetainStructure, (ForceUpdateMode)22); // throws EngineeringTargetInvocationException

Ausnahmebehandlung für Mehrfachtyp-Ausnahmebehandlung

Einige der Ausnahmeszenarien sind nachstehend beschrieben:

NULL in sourceTypesAndFolder-Sammlung

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

var myProjectLibrary = Project.ProjectLibrary;

var type1 = projectLibrary.Types.FindType("Type1"); // if this statement yields NULL

myProjectLibrary.UpdateLibrary(new[] { type1 }, globalLibrary, forceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault, DeleteUnusedVersionsMode.DoNotDeleteUnusedVersions, StructureConflictResolutionMode.RetainStructure); // throws EngineeringTargetInvocationException

StructureConflictResolutionMode ist CancelIfStructureConflicts

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

var myProjectLibrary = Project.ProjectLibrary;

LibraryTypeSystemFolder typeFolder = myProjectLibrary.TypeFolder.Folders.Find("folder1"); //from myProjectLibrary

var type1 = typeFolder.Types.FindType("Type1"); // if this structure is not available in Global Library

myProjectLibrary.UpdateLibrary(new[] { type1 }, globalLibrary, forceUpdateMode.SetOnlyHigherUpdatedVersionAsDefault, DeleteUnusedVersionsMode.DoNotDeleteUnusedVersions, StructureConflictResolutionMode.CancelIfStructureConflicts); // throws EngineeringTargetInvocationException

Bei falschen Enumerationswerten wird EngineeringTargetInvocationException zurückgegeben

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

var myProjectLibrary = Project.ProjectLibrary;

LibraryTypeSystemFolder typeFolder = myProjectLibrary.TypeFolder.Folders.Find("folder1"); //from myProjectLibrary

var type1 = typeFolder.Types.FindType("Type1"); // if this structure is not available in Global Library

myProjectLibrary.UpdateLibrary(new[] { type1 }, globalLibrary, (ForceUpdateMode)22, (DeleteUnusedVersionsMode)42, StructureConflictResolutionMode.RetainStructure); // throws EngineeringTargetInvocationException

Hinweis

Weitere Fälle, in denen EngineeringTargetInvocationException ausgelöst wird, sind nachfolgend beschrieben:

  • Wird versucht, eine Aktualisierung einer schreibgeschützten globalen Bibliothek durchzuführen, wird eine Ausnahme ausgelöst.

  • Ist einer der ausgewählten Typen oder Ordner Null oder nicht Teil der Quellbibliothek, wird eine Ausnahme ausgelöst.

Siehe auch

Projekt öffnen