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; .
 .