Cancel
Deviation (functional) SKMain-255
1 vote

Klienten kraschar vid osupporterad enhetstyp

Created by Martin Videfors on 11/29/2011 11:51 PM Last Updated by Martin Videfors on 1/26/2012 8:58 PM
%
 hrs
Logged: 2  hrs

 Description

Normalt sett importeras en enhet som Switch King inte stödjer inte till Switch King när den läggs till i Telldus Center (eller när klienten begär synkning).
Om en användare _byter_ typ av enhet i Telldus Center (eller i vissa fall då Telldus Center skickar korrupt information) så kan användaren byta till en enhet som inte stöds av Switch King.
Eftersom enheten redan finns i Switch King kan den inte tas bort automatiskt. Istället sätts den som exkluderad från styrning.

När klienten öppnar en anslutning till server och hämtar dessa enheter fås felet nedan. Orsaken är gissningsvis att det inte finns ngn enhetskod på enheten.
Ett förslag är att lägga in en kontroll på Device.IsUnsupported innan GetFormattedDeviceCode körs.
Om inte enheten syns i klienten har man som användare ingen möjlighet att ta bort enheten.

 

System.NullReferenceException

Level 1) Object reference not set to an instance of an object.

StackTrace for Level 1:
   at SwitchKing.Client.GUI.Server.GetFormattedDeviceCode(Device d) in D:\Tomas\Programmering\VS2008Projects\SwitchKing\Switch King Client Subversion\SwitchKing.Client.GUI\Server.cs:line 1803
   at SwitchKing.Client.GUI.UserControls.DeviceControl.RefreshDevice() in D:\Tomas\Programmering\VS2008Projects\SwitchKing\Switch King Client Subversion\SwitchKing.Client.GUI\UserControls\DeviceControl.cs:line 195
   at SwitchKing.Client.GUI.UserControls.DeviceControl.DeviceControl_Load(Object sender, EventArgs e) in D:\Tomas\Programmering\VS2008Projects\SwitchKing\Switch King Client Subversion\SwitchKing.Client.GUI\UserControls\DeviceControl.cs:line 65
   at System.Windows.Forms.UserControl.OnLoad(EventArgs e)
   at System.Windows.Forms.UserControl.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.ControlCollection.Add(Control value)
   at SwitchKing.Client.GUI.frmMain.AddDeviceToDevicePanel(Device d, List`1 deviceControls) in D:\Tomas\Programmering\VS2008Projects\SwitchKing\Switch King Client Subversion\SwitchKing.Client.GUI\frmMain.cs:line 1318
   at SwitchKing.Client.GUI.frmMain.RefreshDevicePanel(Boolean doRefresh, Boolean& refreshIsRequired) in D:\Tomas\Programmering\VS2008Projects\SwitchKing\Switch King Client Subversion\SwitchKing.Client.GUI\frmMain.cs:line 1233
   at SwitchKing.Client.GUI.frmMain.RefreshDevicePanel() in D:\Tomas\Programmering\VS2008Projects\SwitchKing\Switch King Client Subversion\SwitchKing.Client.GUI\frmMain.cs:line 1071
   at SwitchKing.Client.GUI.frmMain.frmMain_Load(Object sender, EventArgs e) in D:\Tomas\Programmering\VS2008Projects\SwitchKing\Switch King Client Subversion\SwitchKing.Client.GUI\frmMain.cs:line 456

 

 Comments (6)  Attachments (0)  History (11)  Notifications (3)  Sub Issues (0)  Parent Issues (0)  Related Issues (2)  Revisions (0)  Time Tracking (1)

    Martin Videfors (Thursday, January 26, 2012 8:58 PM) #

Har justerat så att enhetens riktiga namn nu sätts för osupporterad enhet. Däremot kommer Device.Description ha "Unsupported" och enhetens egenskaper att vara "DisabledByServer = true" och "Enabled = false".

    Tomas Wennerberg (Sunday, January 15, 2012 11:45 AM) #

2) Kan du göra ett försök att behålla namnet och om det misslyckas sätta namnet till "Unsupported"? Även om vi inför stöd för up/down etc så kan vi råka ut för detta när Telldus implementerar saker vi inte stöder.

    Tomas Wennerberg (Sunday, January 15, 2012 11:43 AM) #

1) Sekvensen ser ut enligt följande i klienten:

GetSchedulesByOwnerDeviceId - returnerar device-schemat

GetDevicesByScheduleId - kolla vilka _enheter_ som är länkade till detta schema

DeleteDeviceScheduleConnection - ta bort kopplingen till den enhet som ska tas bort. Om det finns det fler kopplingar så konverteras schemat istället till ett gruppschema

GetScheduleEntriesByScheduleId och DeleteScheduleEntryById - ta bort entries (om ej konverterat)

DeleteScheduleById - ta bort device-schemat (om ej konverterat)

GetSchedulesByDeviceId - ta reda på om enheten är kopplad till några andra device-scheman. Det är här det går snett. Enheten skulle kunna vara kopplad till någon annan enhets schema. Detta anropet går bra för enheter som stöds i SK, men inte för "Unsupported"

Efter det följer fler anrop:

DeleteDeviceScheduleConnection, GetGroupSchedulesByDeviceId, DeleteDeviceGroupScheduleConnection, DeleteDeviceScenarioConnectionsByDeviceId, DeleteDeviceById - Done :)

 

    Martin Videfors (Sunday, January 15, 2012 11:19 AM) #

1) Är inte riktigt med på denna. Har servern fel information? Om klienten ropar på GetSchedulesByDeviceId och schemat är borttaget så är ju felmeddelandet korrekt?

2) Det finns en orsak till att namnet sätts till Unsupported som jag faktiskt inte kommer ihåg på rak arm. Det kan ha att göra med att namnet inte alltid är tillgängligt i TC. Jag låter detta vara tills vidare. Målet är att en enhet som är unsupported inte ska komma in i Switch King då detta orsakar följdproblem som är problematiska. Först när vi bryter loss beroendet till specifika enhetstyper och implementerar Up/Down/Stop etc så kommer detta att lösas på ett bra sätt.

    Tomas Wennerberg (Sunday, January 15, 2012 10:57 AM) #

Synkning av enheter vid uppstart fungerar nu (behåll/ta bort enheter). Unsupported-enheter kommer inte att visas i listan och klienten försöker inte ta bort dessa. När det stöds i servern så får man gå via File-menyn och ta bort enheten.

    Tomas Wennerberg (Sunday, January 15, 2012 12:03 AM) #

Klienten startar nu upp även om det finns enhet som inte stöds. Se dock kommentarer nedan:

1) Går ej att ta bort enhet "Unsupported" i server
Vid försök att ta bort enhet "Unsupported" så returnerar GetSchedulesByDeviceId ett fel:
Attempted to get schedule with id 1 tied to device with id 1 but the schedule does not exist or is not a ordinary schedule.

Device-schema för "Unsupported" är i detta läget redan raderad av klienten.

När enhet tas bort som inte är "Unsupported" så går det bra att ta bort scheman etc (flödet fungerar då).

2) Strunta i att byta namn på enhet till "Unsupported". Det blir bättre om vi behåller namnet så man kan lista ut vilken enhet det är. När man försöker öppna enheten i klienten så får man istället ett meddelande om att denna enheten inte supportas av Switch King. Som det är nu kan man inte ta bort enheten eftersom databasen blir korrupt då (beroende på ovanstående bugg). Det går heller inte ta bort den i TC eftersom SK då vill lägga till den igen när man synkar...

Enda utvägen som det är nu är att modifiera den i TC till en typ som SK stöder.