Fehler bei SQL-Filter für Container

Feedback und Verbesserungsvorschläge zu ACMP
Antworten
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

Hallo Aagon Support,

mir ist heute aufgefallen, dass es scheinbar mehrere Probleme mit den SQL-Filtern für Container zu geben scheint; Ich bin momentan dabei, unser Updatemanagement zumindest teilweise zu automatisieren, wofür eine globale Variable im CCC existiert, die u.A. die aktuelle Version der Software beinhaltet (in diesem Fall der Adobe Acrobat Reader DC), die dann zusammen mit dem Rest des Namens der Software mit den Einträgen in der Liste installierter Software abgeglichen wird.
Hierzu habe ich im folgende Query erstellt, die das erwartete Ergebnis zurückliefert (ja, zwischen dem Softwarenamen und der Version ist momentan noch ein CR/LF, den ich nicht loswerde):

(keine Code-Tags, da die die Formatierung komplett zerstören und es noch unleserlicher erscheinen lassen)

declare @version nvarchar(max) = (select DEFAULTVALUE from SYS_SCRIPT_GLOBALVARS where name = N'ADOBE')
set @version = (select top (1) value from string_split(@version, ','))
set @version = (select value from string_split(@version, '=') where value != N'VERSION')

declare @swid nvarchar(max) = (select SWID from SYS_SW_CLIENTCOMMANDS where swname like (N'Adobe Acrobat Reader DC' + '
' + @version + N'%'))

select clientid from CLT_CLIENTS_TABLE
where
clientid not in (
select ClientID from CLT_SW_CLIENTCOMMANDS_RESULTS where swid = @swid -- All clients without current version
)
and
clientid in (
select ClientID from CLT_SW_CLIENTCOMMANDS_RESULTS where swid in (
select swid from SYS_SW_CLIENTCOMMANDS where SWName like N'Adobe Acrobat Reader DC%' -- All clients with at least one version installed
)
)

Beim Versuch, diese im ACMP für einen Container zu verwenden, kam es leider immer zu Ausführungsfehlern beim Versuch, den Container anzulegen, obwohl die Abfrage eigentlich OK ist. Dies ist Fehler #1.
Nachdem ich dann zu Lasten der Lesbarkeit sämtliche Kommentare entfernt und Variablen durch die eigentlichen Werte ersetzt hatte, konnte ich mit folgender Abfrage ein Ergebnis erhalten:

select clientid from CLT_CLIENTS_TABLE
where
clientid not in (
select ClientID from CLT_SW_CLIENTCOMMANDS_RESULTS
where swid = (
select SWID from SYS_SW_CLIENTCOMMANDS
where swname like (N'Adobe Acrobat Reader DC' + '
' + (
select value from string_split( (select top (1) value from string_split((select DEFAULTVALUE from SYS_SCRIPT_GLOBALVARS where name = N'ADOBE'), ',')), '=')
where value != N'VERSION') + N'%'))
)
and
clientid in (
select ClientID from CLT_SW_CLIENTCOMMANDS_RESULTS where swid in (
select swid from SYS_SW_CLIENTCOMMANDS where SWName like N'Adobe Acrobat Reader DC%'
)
)

Problem ist hierbei aber nun, dass die Abfrage im ACMP ein anderes Ergebnis zurückliefert als die Ausführung direkt via SQL (145 Ergebnisse in ACMP, 143 (korrekte) Ergebnisse in SQL direkt), auch nach mehreren Recalcs ändert sich hieran Nichts; Im Eventlog sind überdies keinerlei Fehler bzgl. defekter Filter protokolliert. Dies ist der deutlich größere Fehler, da ACMP etwas am SQL so zu verändern scheint (ich gehe vom Zeilenumbruch aus), dass die Ergebnisse divergieren.
Was kann hiergegen gemacht werden?

PS: Ich warte auch immernoch auf Feedback bzgl. der JSON-Commands (viewtopic.php?f=95&t=2422)

EDIT: FYI, es geht hier um einen generellen Workaround in solchen Situationen (oder Indikatoren, dass etwas an der Query geändert wurde), das eigentliche Problem in diesem Fall habe ich über Wildcards gelöst.
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Benutzeravatar
JDoering
Beiträge: 89
Registriert: Mo Dez 15, 2008 3:45 pm

Hallo Niklas,

zu dem 1. Punkt: Als Erweiterter SQL Filter kann kein Statement genutzt werden, welches mit etwas anderem als "Select" anfängt.
zu dem 2. Punkt: In dem Statement werden die Clients von dir aus der CLT_CLIENTS_TABLE genommen, in welcher auch Retired Clients vorkommen, das wird über dein Statement nicht mit abgefangen, über die (weitere, hardcoded) Logik des Containers jedoch schon.
Gibt es hier zufällig 2 Retired Clientt, auf die das Kriterium zutrifft?

MfG
Jens Döring
Senior IT Support Engineer

support@aagon.com
http://www.aagon.de

Aagon GmbH
Lange Wende 33
D-59494 Soest
fon: +49-2921-789-200
fax: +49-2921-789-244
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

Hi Jens,

nein, wir haben keine Retired Clients und der Unterschied wurde durch den Zeilenumbruch hervorgerufen. Werden die Statements ggf. irgendwie zeilenweise konkateniert oder getrimmt, bevor sie in die DB geschrieben werden? Das würde den Wegfall des Umbruchs erklären.
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Benutzeravatar
JDoering
Beiträge: 89
Registriert: Mo Dez 15, 2008 3:45 pm

Hallo Niklas,

um die Ursache genau zu ermitteln werden wir nicht um Nutzdaten herumkommen.
Bitte hierzu einmal an support@aagon.com wenden, so dass sich dem Thema über den Support angenommen werden kann.

MfG
Jens Döring
Senior IT Support Engineer

support@aagon.com
http://www.aagon.de

Aagon GmbH
Lange Wende 33
D-59494 Soest
fon: +49-2921-789-200
fax: +49-2921-789-244
Antworten