14. Mai 2015 17:14
14. Mai 2015 21:00
15. Mai 2015 09:08
Kowa hat geschrieben:Die notwendigen Killerobjekte sollte man beim Lieferant dieser Objekte anfordern können...
15. Mai 2015 13:11
15. Mai 2015 13:36
=CONCATENATE("INSERT INTO [Object] (Type,ID,Name,[Company Name],[Locked By],Modified,Compiled,[BLOB Size],[DBM Table No_],[Date],[Time],[Version List],Locked) VALUES (1,";A1;",'KILL Table ";A1;"','','',0,0,0,0,'1753-01-01 00:00:00.000','1753-01-01 00:00:00.000','',0);")
15. Mai 2015 15:12
SilverX hat geschrieben:Ich mache mir für solche Fälle eine Excel-Tabelle...
15. Mai 2015 15:13
Kowa hat geschrieben:Eine Alternativlösung wäre auch, alle lizenzierten Objekte in eine frisch aufgesetzte NAV 2009 R2 Basisdatenbank zu importieren...
15. Mai 2015 15:18
Was mir nicht klar ist: Was mache ich mit der Excel-Tabelle genau, damit ich Kill-Objekte erhalte?
15. Mai 2015 16:09
Korrekt. Per Excel wird das ein SQL Script, natürlich können auch andere Objekttypen enthalten sein (Table=1; Form=2; Report=3; Dataport=4; Codeunit=5; XMLport=6; MenuSuite=7; Page=8; Query=9).fiddi hat geschrieben:Was mir nicht klar ist: Was mache ich mit der Excel-Tabelle genau, damit ich Kill-Objekte erhalte?
Nun das ganze wird eigentlich auch ein SQL-Skript. Dieses Skript führst du wahrscheinlich auf einer Cronus oder sogar leeren DB aus. Du bekommst dadurch deine "Killer"- Objekte, die du exportieren und in deine Kunden-DB importieren kannst.
Gruß Fiddi
15. Mai 2015 19:02
rotsch hat geschrieben:Das funktioniert mit allen Objekten, ausser mit Tabellen, die kommen mit einem FBK ja auch mit.
15. Mai 2015 19:17
Kowa hat geschrieben:Sicher, in deinem ersten Beitrag ging es aber um Forms und Dataports, die gelöscht werden sollen.
15. Mai 2015 23:06
fiddi hat geschrieben:Nun das ganze wird eigentlich auch ein SQL-Skript. Dieses Skript führst du wahrscheinlich auf einer Cronus oder sogar leeren DB aus. Du bekommst dadurch deine "Killer"- Objekte, die du exportieren und in deine Kunden-DB importieren kannst.
SilverX hat geschrieben:Korrekt. Per Excel wird das ein SQL Script, natürlich können auch andere Objekttypen enthalten sein (Table=1; Form=2; Report=3; Dataport=4; Codeunit=5; XMLport=6; MenuSuite=7; Page=8; Query=9).
16. Mai 2015 10:24
INSERT INTO [Object]
([Type],
[ID],
[Name],
[Company Name],
[Locked By],
[Modified],
[Compiled],
[BLOB Size],
[DBM Table No_],
[Date],
[Time],
[Version List],
[Locked])
VALUES
(5,
6109813,
'KILL Codeunit13',
'',
'',
0,
0,
0,
0,
'1753-01-01 00:00:00.000',
'1753-01-01 00:00:00.000',
'',
0);
16. Mai 2015 10:34
Import-Module 'C:\Program Files\Microsoft Dynamics NAV\80\Service\Microsoft.Dynamics.Nav.Management.psm1';
Import-Module 'C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client\Microsoft.Dynamics.Nav.Ide.psm1';
$ObjectType = [PSCustomObject] @{ Table=1; Form=2; Report=3; Dataport=4; Codeunit=5; XMLport=6; MenuSuite=7; Page=8; Query=9 }
Add-Type -TypeDefinition @"
public enum ObjectType
{
Table=1,
Form=2,
Report=3,
Dataport=4,
Codeunit=5,
XMLport=6,
MenuSuite=7,
Page=8,
Query=9
}
"@
function Remove-Database()
{
[CmdletBinding()]
Param(
[Parameter(Mandatory = $true, Position = 0)]
[ValidateNotNullOrEmpty()]
[string]$DatabaseServer,
[Parameter(Mandatory = $true, Position = 1)]
[ValidateNotNullOrEmpty()]
[string]$DatabaseName
)
PROCESS
{
Import-Module 'sqlps' -DisableNameChecking
Push-Location;
$smoServer = New-Object Microsoft.SqlServer.Management.Smo.Server $DatabaseServer;
if ($smoServer.Databases.Contains($DatabaseName))
{
Write-Verbose "Removing database $DatabaseServer/$DatabaseName.";
$smoServer.KillAllProcesses($DatabaseName);
$smoServer.Databases[$DatabaseName].Drop();
}
Pop-Location;
}
}
function New-NavObjectArrayFromFilter()
{
Param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Filter
)
Process
{
$filterArray = $filter.Split('|');
$objectIdArray = @();
ForEach($f in $filterArray)
{
if ($f.Contains('..'))
{
$f2 = $f.Split(@('..'), [System.StringSplitOptions]::RemoveEmptyEntries);
$from = [int]$f2[0];
$to = [int]$f2[1];
For ($i = $from; $i -le $to; $i++)
{
$objectIdArray += $i;
}
}
else
{
$objectIdArray += [int]$f;
}
}
return $objectIdArray;
}
}
function New-NavApplicationKillObject()
{
[CmdletBinding()]
Param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$DatabaseServer,
[Parameter(Mandatory = $true, Position = 1)]
[ValidateSet('Table', 'Form', 'Report', 'Dataport', 'Codeunit', 'XMLport', 'MenuSuite', 'Page', 'Query')]
[string]$Type,
[Parameter(Mandatory = $true, Position = 2)]
[string]$IdFilter,
[Parameter(Mandatory = $true, Position = 3)]
[string]$Path
)
Process
{
$databaseName = ('NavKillObjects_{0}' -f [System.Guid]::NewGuid().ToString().Replace('-', ''));
$killObjectType = ([ObjectType] $Type) -as [int];
$objectIdArray = New-NavObjectArrayFromFilter -Filter $IdFilter;
Import-Module 'sqlps' -DisableNameChecking
Push-Location;
Create-NAVDatabase `
-DatabaseServer $DatabaseServer `
-DatabaseName $databaseName;
$query = '';
ForEach($objectId in $objectIdArray)
{
$query += "INSERT INTO [Object] ([Type],[ID],[Name],[Company Name],[Locked By],[Modified],[Compiled],[BLOB Size],[DBM Table No_],[Date],[Time],[Version List],[Locked]) VALUES ($killObjectType,$objectId,'Kill $Type $objectId','','',0,0,0,0,'1753-01-01 00:00:00.000','1753-01-01 00:00:00.000','',0);`r`n";
}
Invoke-Sqlcmd `
-ServerInstance $DatabaseServer `
-Database $databaseName `
-Query $query;
Export-NAVApplicationObject `
-DatabaseServer $DatabaseServer `
-DatabaseName $databaseName `
-Path $Path `
-Filter 'ID=1..2000000000' `
-Force;
Remove-Database `
-DatabaseServer $databaseServer `
-DatabaseName $databaseName;
Pop-Location;
}
}
New-NavApplicationKillObject -DatabaseServer '<Sql Server>' -Type Table -IdFilter '5157800..5158000' -Path 'C:\Temp\TableKillObjects.fob';
16. Mai 2015 12:56
DECLARE @MyObjectID int;
DECLARE @MyObjectDateTime datetime;
DECLARE @MyObjectName nchar(30);
SET @MyObjectID = 123456;
SET @MyObjectDateTime = '1753-01-01 00:00:00.000';
WHILE (@MyObjectID < 123466)
BEGIN;
SET @MyObjectName = CONCAT('KILL Table :',@MyObjectID)
INSERT INTO dbo.Object
(Type,
ID,
Name,
[Company Name],
[Locked By],
Modified,
Compiled,
[BLOB Size],
[DBM Table No_],
[Date],
[Time],
[Version List]
,Locked)
VALUES (1,@MyObjectID,@MyObjectName,'','',0,0,0,0,@MyObjectDateTime,@MyObjectDateTime,'',0)
SET @MyObjectID = @MyObjectID + 1;
END;