Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn eine BAM-Definitionsdatei bereitgestellt wird, werden fünf Tabellen in der PRIMÄREN BAM-Importdatenbank für jede aktivität erstellt, die in der Definitionsdatei definiert ist. Diese Tabellen sind:
ActivityName
bam__Activebam_
ActivityName
_AbgeschlossenActivityName
bam_AktiveBeziehungenActivityName
bam__AbgeschlosseneBeziehungenbam_
ActivityName
_ContinuationsDabei
ActivityName
handelt es sich um den Namen der Aktivität, die der Benutzer definiert hat.Während der normalen Ausführung verbleiben unvollständige Daten in der bam_
ActivityName
Aktiven Tabelle. Wenn die Daten Beziehungen und Bezüge haben, gibt es Daten in der Tabelle "bam\ActivityName
_ActiveRelationships".Während der Nachverfolgung von Aktivitäten, die Fortsetzungen verwenden, kann es Vorkommen geben, in denen eine Aktivität in einem unvollständigen Zustand in den BAM-Datenbanken verbleibt. Sie können das Skript zum Erstellen gespeicherter Prozeduren am Ende dieses Themas verwenden, um eine gespeicherte Prozedur zu erstellen, die die unvollständigen Datensätze löscht.
Um die gespeicherte Prozedur zu erstellen, kopieren Sie das Skript, und führen Sie es mithilfe der SQL Server-Verwaltung für die primäre BAM-Importdatenbank aus. Das Skript generiert eine gespeicherte Prozedur namens RemoveDanglingInstances in der Datenbank.
Erstellen Sie die gespeicherte Prozedur "RemoveDanglingInstances"
Öffnen Sie SQL Server Management Studio, und stellen Sie eine Verbindung mit dem SQL Server her.
Erweitern Sie den Servernamen, erweitern Sie Datenbanken, und wählen Sie dann die PRIMÄRE BAM-Importdatenbank aus.
Klicken Sie auf "Neue Abfrage".
Kopieren Sie das Skript zum Erstellen gespeicherter Prozeduren, und fügen Sie es in den Abfragebereich ein.
Führen Sie das Skript aus. Die resultierende gespeicherte Prozedur kann in der Liste der gespeicherten Prozeduren als dbo.RemoveDanglingInstances angezeigt werden.
Unvollständige Aktivitätsinstanzen entfernen
Öffnen Sie SQL Server Management Studio, und stellen Sie eine Verbindung mit dem SQL Server her.
Erweitern Sie den Servernamen, erweitern Sie Datenbanken, und wählen Sie dann die PRIMÄRE BAM-Importdatenbank aus.
Klicken Sie auf "Neue Abfrage".
Geben Sie im Abfragebereich
exec RemoveDanglingInstances
und die entsprechenden Parameter für die Entfernen-Operation ein, die Sie ausführen. Wenn Sie z. B. alle unvollständigen Instanzen der Bestellaktivität entfernen möchten, geben Sie folgendes einexec RemoveDanglingInstances @ActivityName = 'PurchaseOrder'
.Führen Sie das Skript aus.
RemoveDanglingInstances-Verwendungsbeispiele
Die gespeicherte Prozedur kann vier Parameter empfangen:
Parameter | BESCHREIBUNG |
---|---|
@ActivityName nvarchar(128) | Gibt den Namen der zu entfernenden unvollständigen Aktivitätsinstanz an. |
@ActivityId nvarchar(128) | (Optional) Gibt an, dass die gespeicherte Prozedur nur die verwaiste Instanz mit dem angegebenen Instanzbezeichner entfernt. |
@DateThreshold Datum und Uhrzeit | (Optional) Gibt an, dass alle aktiven Instanzen in der aktiven Tabelle, die älter sind (nicht gleich und älter, nur älter) als das angegebene Datum entfernt werden. |
@NewTableExtension nvarchar(30) | (Optional) Gibt an, dass die gespeicherte Prozedur drei neue Tabellen erstellt, indem die angegebene Erweiterung mit den vorhandenen Aktivitätstabellen verkettet wird. Die resultierenden Tabellen sind: <bam_ActivityName_Active_<Erweiterung> <bam_ActivityName_ActiveRelationships_Extension> <bam_ActivityName_Continuations_<Erweiterung> Die unvollständigen Instanzen werden in die neuen Tabellen verschoben, anstatt aus der Datenbank gelöscht zu werden. Wenn die Tabellen bereits vorhanden sind, werden sie von der gespeicherten Prozedur wiederverwendet; andernfalls werden sie erstellt. Wichtig: Wenn die Tabellen bereits vorhanden sind, geht die gespeicherte Prozedur davon aus, dass ihre Schemas den Schemas entsprechen, die verwendet werden würden, wenn sie erstellt wurden. Wenn ein Schema nicht übereinstimmt, schlägt die gespeicherte Prozedur die Datensätze nicht ein, und der Vorgang zum Entfernen schlägt fehl. |
exec RemoveDanglingInstances @ActivityName = 'PurchaseOrder'
Entfernt alle aktiven Instanzen der Aktivität "PurchaseOrder" in den aktiven, aktiven Beziehungen und Fortsetzungstabellen.
exec RemoveDanglingInstances @ActivityName = 'PurchaseOrder', @ActivityId = 'PO220567'
Entfernt nur die Aktivitätsinstanz mit der Aktivitäts-ID 'PO220567' aus den Tabellen für aktive, aktive Beziehungen und Fortsetzungen der Aktivität "PurchaseOrder".
exec RemoveDanglingInstances @ActivityName = 'PurchaseOrder', @DateThreshold='2005-02-02 19:27:03:533'
Entfernt alle Aktivitätsinstanzen mit einer LastModified-Zeit, die älter ist als der 2. Februar 2005, 19:27:03.533 Uhr, aus den Tabellen für aktive Aktivitäten, Beziehungen und Fortsetzungen der Aktivität "PurchaseOrder".
exec RemoveDanglingInstances @ActivityName = 'PurchaseOrder', @ActivityId = 'PO220567', @DateThreshold='2005-02-02 19:27:03:533'
Entfernt die Aktivitätsinstanz mit der Aktivitäts-ID PO220567 nur dann, wenn die LastModified-Spalte älter als der 2. Februar 2005 um 19:27:03.533 ist.
exec RemoveDanglingInstances @ActivityName = 'PurchaseOrder', @DateThreshold='2005-02-02 19:27:03:533', @NewTableExtension=N'Dangling'
Erstellt die folgenden Tabellen in der Datenbank:
bam_Bestellung_Aktiv_Schwebend
bam_PurchaseOrder_ActiveRelationships_Dangling
bam_Bestellung_Fortsetzungen_Unsicher
Die gespeicherte Prozedur kopiert alle unvollständigen Aktivitätsinstanzen, die älter als der 2. Februar 2005 17:27:03.533 Pm sind, aus den Tabellen für aktive, aktive Beziehungen und Fortsetzungen für die Aktivität "PurchaseOrder" und fügt sie in die neu erstellten Tabellen ein. Die kopierten Aktivitätsinstanzen werden dann aus den aktiven, den aktiven Beziehungen und den Fortsetzungstabellen entfernt.
Skript zum Erstellen gespeicherter Prozeduren
EXEC sp_stored_procedures @sp_name = 'RemoveDanglingInstances'
IF @@ROWCOUNT > 0 DROP PROCEDURE RemoveDanglingInstances
GO
CREATE PROCEDURE RemoveDanglingInstances
@ActivityName nvarchar(128),
@ActivityId nvarchar(128) = NULL,
@DateThreshold datetime = NULL,
@NewTableExtension nvarchar(30) = NULL
AS
DECLARE @QueryString nvarchar(4000)
DECLARE @ActiveTableName sysname
DECLARE @ActiveRelationshipsTableName sysname
DECLARE @ContinuationsTableName sysname
DECLARE @DanglingActiveTableName sysname
DECLARE @DanglingActiveRelationshipsTableName sysname
DECLARE @DanglingContinuationsTableName sysname
SET @ActiveTableName = 'bam_' + @ActivityName + '_Active'
SET @ActiveRelationshipsTableName = 'bam_' + @ActivityName + '_ActiveRelationships'
SET @ContinuationsTableName = 'bam_' + @ActivityName + '_Continuations'
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRAN
DECLARE @LockActivity nvarchar(128)
SELECT @LockActivity = ActivityName
FROM bam_Metadata_Activities WITH (XLOCK)
WHERE ActivityName = @ActivityName
EXEC sp_tables @table_name = #DanglingActivities
IF @@ROWCOUNT > 0 DROP TABLE #DanglingActivities
CREATE TABLE #DanglingActivities(ActivityID nvarchar(128) PRIMARY KEY)
SET @QueryString = N'INSERT INTO #DanglingActivities (ActivityID) SELECT ActivityID FROM [bam_' + @ActivityName + '_Active]'
IF (@DateThreshold is not NULL) OR (@ActivityId is not NULL)
BEGIN
SET @QueryString = @QueryString + ' WHERE'
END
IF (@DateThreshold is not NULL)
BEGIN
SET @QueryString = @QueryString + ' LastModified < N''' + CONVERT(nvarchar(50), @DateThreshold, 109) + ''''
IF (@ActivityId is not NULL)
BEGIN
SET @QueryString = @QueryString + ' AND'
END
END
IF (@ActivityId is not NULL)
BEGIN
SET @QueryString = @QueryString + ' ActivityID = N''' + @ActivityId + ''''
END
EXEC sp_executesql @QueryString
SELECT * FROM #DanglingActivities
SET @QueryString = N''
-- If the user gave a table extension, the dangling instances will be inserted
-- into that table.
IF (isnull(@NewTableExtension, '') <> '')
BEGIN
SET @DanglingActiveTableName = @ActiveTableName + '_' + @NewTableExtension
SET @DanglingActiveRelationshipsTableName = @ActiveRelationshipsTableName + '_' + @NewTableExtension
SET @DanglingContinuationsTableName = @ContinuationsTableName + '_' + @NewTableExtension
-- If the table for the dangling instances exists then insert into it
-- If the table does not exist, then create the dangling instances table
-- and then insert into it. SELECT INTO will do that.
EXEC sp_tables @table_name = @DanglingActiveTableName
IF @@ROWCOUNT > 0
BEGIN
SET @QueryString = N'INSERT INTO ' + '[' + @DanglingActiveTableName + '] SELECT active.* FROM [' + @ActiveTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ActivityID = dangling.ActivityID'
EXEC sp_executesql @QueryString
END
ELSE
BEGIN
SET @QueryString = N'SELECT active.* INTO [' + @DanglingActiveTableName + '] FROM [' + @ActiveTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ActivityID = dangling.ActivityID'
EXEC sp_executesql @QueryString
END
-- Now do what you did for the Active Instances table for the
-- ActiveRelationships table
EXEC sp_tables @table_name = @DanglingActiveRelationshipsTableName
IF @@ROWCOUNT > 0
BEGIN
SET @QueryString = N'INSERT INTO ' + '[' + @DanglingActiveRelationshipsTableName + '] SELECT active.* FROM [' + @ActiveRelationshipsTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ActivityID = dangling.ActivityID'
EXEC sp_executesql @QueryString
END
ELSE
BEGIN
SET @QueryString = N'SELECT active.* INTO [' + @DanglingActiveRelationshipsTableName + '] FROM [' + @ActiveRelationshipsTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ActivityID = dangling.ActivityID'
EXEC sp_executesql @QueryString
END
-- And finally for the continuations table
EXEC sp_tables @table_name = @DanglingContinuationsTableName
IF @@ROWCOUNT > 0
BEGIN
SET @QueryString = N'INSERT INTO ' + '[' + @DanglingContinuationsTableName + '] SELECT active.* FROM [' + @ContinuationsTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ParentActivityID = dangling.ActivityID'
EXEC sp_executesql @QueryString
END
ELSE
BEGIN
SET @QueryString = N'SELECT active.* INTO [' + @DanglingContinuationsTableName + '] FROM [' + @ContinuationsTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ParentActivityID = dangling.ActivityID'
EXEC sp_executesql @QueryString
END
END
-- Remove the dangling instances from the Active Instances Table
SET @QueryString = 'DELETE FROM [' + @ActiveTableName + '] FROM [' + @ActiveTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ActivityID = dangling.ActivityID '
EXEC sp_executesql @QueryString
SET @QueryString = 'DELETE FROM [' + @ActiveRelationshipsTableName + '] FROM [' + @ActiveRelationshipsTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ActivityID = dangling.ActivityID '
EXEC sp_executesql @QueryString
SET @QueryString = 'DELETE FROM [' + @ContinuationsTableName + '] FROM [' + @ContinuationsTableName + '] active INNER JOIN #DanglingActivities dangling ON active.ParentActivityID = dangling.ActivityID '
EXEC sp_executesql @QueryString
DROP TABLE #DanglingActivities
COMMIT TRAN
GO
Eine weitere Methode zum Auflösen unvollständiger Instanzen
Sie können auch unvollständige Aktivitätsinstanzen aus der BAMPrimaryImport-Datenbank mithilfe einer SQL-Abfrage auflösen. Siehe "Auflösen unvollständiger Aktivitätsinstanzen".