Technisch Rapport. i-bridge Liveviewer. Versie 1.0. Datum 02 December 2010



Vergelijkbare documenten
Rapport. i-bridge FleetBroker en LocationBroker. Versie 1.0. Datum 22 December 2010

Technisch Rapport. BAG Extract in i-bridge2.0. Versie 1.0. Datum 9 December 2010

Definitiestudie. Crisiscommunicatie. Versie 1.0. Datum 2 december 2010

Technische nota AbiFire5 Rapporten maken via ODBC

Installatie SQL: Server 2008R2

Technische nota AbiFire Rapporten maken via ODBC

Met een LightSwitch applicatie een OData service uit de Windows Azure Marketplace consumeren

Technisch Ontwerp. Integratie Tekst-Plot. Versie 1.0. Datum 02 december 2010

Handleiding GisWest Extensie 10.2 met Geolocator en downloadfunctionaliteit voor ArcGis for desktop

uziconnect Installatiehandleiding

uziconnect Installatiehandleiding

Gebruik van raadpleeg- en downloadservices in GIS desktop software

Een ASP.NET applicatie opzetten. Beginsituatie:

Installatie van sqlserver

Installatie SQL Server 2014

MA!N Rapportages en Analyses

Orbis Software. Portal4U. Installatie Handleiding. Dit document bevat de Installatie Handleiding voor Portal4U

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

INSTALLATIE EXCHANGE CONNECTOR

Installatiehandleiding. Facto minifmis

Installatie SQL Server 2012

ArcGIS Mobile ADF. Smart Client Applicaties voor ArcGIS Server Eva Dienske, Wim Ligtendag

Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet.

Gebruikershandleiding Beeldmateriaal

Handleiding Microsoft SQL Server configuratie

Installatie SQL Server 2008R2

NetPay Desktop Reporting. Rapportage voor Xafax NetPay

Handleiding Job voor gebruikers

Handleiding Reinder.NET.Tasks.SQL versie 2

Coligo conne ct. Gebruikershandleiding

Handleiding Coligo Connect installatie en gebruik

Gebruikershandleiding Beeldmateriaal

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

Website van het openbaar ministerie Korte gebruikershandleiding voor Content Managers

INHOUDSOPGAVE Het Boekenwinkeltje Registreer.aspx Opgaven... 97

Handleiding GisWest Extensie 10.0 met Geolocator voor ArcMap

Installatie Avalanche Webview

HANDLEIDING INFOGRAPHIC SOFTWARE Versie 2.3 / jan 2014

Handleiding. Act! SnelStart Connect Pro. handleiding. Act! SnelStartConnect Pro. Versie

Installatie Avalanche Windows

Inrichting Systeem: Locaties & Toegang

HANDLEIDING DMS Plugin Installatie, configuratie & werking

IBIS-TRAD Handleiding installatie IBIS-TRAD databases (MS-SQL)

MyMediasite Handleiding V1.0

Technisch Ontwerp W e b s i t e W O S I

Koppeling met een database

Handleiding. Act! SnelStart Connect. handleiding. Act! SnelStart Connect. Versie

Installatie en configuratie documentatie

SNEL HANDLEIDING KIT-2BNVR2W

Auteur Arjaan den Ouden Datum 4 december 2013 Status Definitief Versie 1.0

GeoKey en Catalog Services

Naam project Lost And Found Animals Lokaal gehost Percentage van het totaal geleverde werk 1 Cindy Jansen 50% 2 Eline Steyvers 50%

HANDLEIDING DIENSTEN IN GIS DESKTOP

Handleiding. Opslag Online voor Windows Phone 8. Versie augustus 2014

Temperatuur logger synchronisatie

Upgrade Web Client met ESS naar 3.5.0

Stappenplan bij het gebruik van SQL Express 2005 Versie 2.0,

DataFlex 19.0 SQL Server

15 July Betaalopdrachten web applicatie beheerders handleiding

Outlook koppeling ChainWise

Installatie Groeps Login app

Viewer MapGuide Open Source/Enterprise

XIMEx handleiding Gebruiker. Uw XIMEx Portal URL:

Installatiehandleiding Business Assistent

AFO 142 Titel Aanwinsten Geschiedenis

Installatie MicroSoft SQL server 2012 Express

Bitrix Site Manager gebruikershandleiding BureauZuid

Installatie Solid Edge ST5

Portal4U 1.4 Installatie

Rotekst 1.4. Upgrade RoTekst en RoTekstbeheer. Versie: 1.3.x naar 1.4. Dé specialist in ruimtelijke informatievoorziening

Koppelingen met proffice (versie 2.0.1)

Installatie King Task Centre

Installatie en configuratie documentatie

Knowledgeable Referenceable Personable Accountable Scalable

Installatie King Task Centre

Intramed OnLine instellen en gebruiken. Voor Mac OSX

Document informatie Revisie: 3 Datum: GrassHopper Installatie en gebruik

Standard Parts Installatie Solid Edge ST3

Werken op afstand via internet

BASIS HANDLEIDING CLOUD ASSISTENT

Versie : Releasedatum : Geschikt voor Synergy Enterprise : v.a. batch 249

Handleiding. CardAccess Database Utility CA4000. Aanvullende informatie. Versie: 1.0

Inhoudsopgave. versie 0.8

15 July Betaalopdrachten web applicatie gebruikers handleiding

Mach3Framework 5.0 / Website

Installatie Handleiding voor: TiC Narrow Casting Certified. System Integrators

Technische documentatie Klankie 2010 voor systeembeheerders/installateurs

Handleiding Koppeling met AFAS Profit Versie 0.6

Installatiehandleiding Business Assistent

Handleiding koppeling Afas Profit Versie 0.4

Gebruikershandleiding MobiDM

Tips & Tricks: Tip van de maand November Office Integratie

Installatie handleiding Microsoft SQL Server Express Edition

App Integraal Crisisplan Help

Intramed OnLine instellen en gebruiken. Voor Android tablet of telefoon

Gebruikers Toevoegen. EasySecure International B.V. +31(0) Support.EasySecure.nl. v

Handleiding Telewerken met Windows. Inleiding. Systeemvereisten. Inhoudsopgave

Handleiding installatie Rental Dynamics

Transcriptie:

Technisch Rapport i-bridge Liveviewer Versie 1.0 Datum 02 December 2010 Status Definitief

Colofon IVENT A&A CDC Madame Curielaan 4-6 Postbus 20703 2289 CA Rijswijk Contactpersoon Patrick Brooijmans Teamleider functionele integratie M +31 6 51313575 P.Brooijmans@mindef.nl Versie 1.0 Opdrachtgever R. van Bladel Auteur(s) P. Brooijmans; Geodan; ESRI Nederland; Microsoft Projecten i-bridge2.0 Pagina 2 van 22

Inhoud Colofon...2 1 Inleiding...4 2 Architectuur...5 3 Software en hardware...7 3.1 Software... 7 3.2 Deployment... 7 3.3 Ondersteunende producten, componenten en tools... 7 4 Technische documentatie...8 4.1 Overzicht LiveViewer... 8 4.2 Logbook control... 14 Pagina 3 van 22

1 Inleiding Dit document bevat de technische beschrijving van de implementatie van de LiveViewer applicatie met functionele eisen zoals beschreven in Definitiestudie crisiscommunicatie versie 1.0. De technische implementatie wordt beschreven op hoofdlijnen. Voor technische details wordt verwezen naar de applicatie code. De technische beschrijving is gesplitst in twee delen: - Architectuur o Systeem o Database - Applicatie o Structuur o Classes Afbakening: - Slechts enkele onderdelen uit het gehele i-bridge systeem worden hier behandeld: o Database views als databron voor ArcMap documenten o Map services als databron voor de LiveViewer webapplicatie o De LiveViewer webapplicatie in meer detail. - Buiten scope vallen: o i-bridge Desktop applicaties zoals Plot en Tekst o Werking en implementatie van Groove en Ping o Het aanmaken van een i-bridge database in SQLServer met alle daarin benodigde objecten (users, rollen, tabellen, views, programmatische toevoegingen, etc.) o Het toevoegen van het historie mechanisme in de database. o Het toevoegen van het security mechanisme Row Level Security (RLS) in de database. Pagina 4 van 22

2 Architectuur LiveViewer (Silverlight) Webserver ArcGIS Server MapServices Autenticatie Service ArcMap QueryLayers CmsEntities Service Database server EagleDB ArcGIS views Eagle views (RLS) Eagle tabellen Ping Groove Beschrijving van architectuur plaatje: - Groove en Ping o De Ping converter vangt de incident wijzigingen op vanuit Groove en stuurt de updates naar de database. Detail beschrijving over Groove en Ping vallen de scope van dit document. - Database o In de database zijn 3 schema s aanwezig: Het i-bridge schema bevat de i-bridge tabellen (Cms objecten) die door Ping worden bijgewerkt. De i-bridge tabellen zijn voorzien van een security mechanisme: Row Level Security (RLS). Afhankelijk van de gebruikers rol waarmee verbinding wordt gemaakt met de database krijgt de gebruiker meer of minder incidenten of incident details te zien. Ping is een bijzondere gebruiker die wel rechten heeft om direct in de i- Bridge tabellen te schrijven. Pagina 5 van 22

o - ArcGIS o o o Het i-bridgeviews schema bestaat uit views op de i-bridge tabellen. De i-bridge views implementeren de RLS functionaliteit. Database gebruikers hebben alleen toegang tot deze views. Toegang tot i-bridge tabellen is afgesloten. Hiermee wordt bereikt dat iedere gebruiker alleen via het RLS systeem toegang heeft tot de database. Het Arcgis schema bevat views op de i-bridge views. In de views worden attribuutwaarden uit het genormaliseerde i-bridge schema plat gemaakt. De arcgis views zijn zo ingericht dat ze perfect aansluiten op de ESRI ArcGIS componenten daar bovenop. Conclusie: gebruikers vanuit de liveviewer bereiken de database via de ESRI ArcGIS component via een 3-laags toegangs systeem. ArcgisViews I- BridgeViews I-BridgeTabellen. Alleen gebruikers die in het RLS systeem zijn geautoriseerd om bepaalde data te mogen zien kunnen die data zien in de LiveViewer. De ESRI ArcGIS component bestaat uit 2 delen ArcMAP Vanuit een ArcMAP document worden zgn. querylayers gemaakt. Een querylayer heeft een directe verbinding met de SQLServer database views in het arcgis schema. Er wordt geen gebruik gemaakt van een ArcSDE tussenlaag zoals in eerdere versies van ArcGIS wel noodzakelijk was. Dit maakt de architectuur een heel stuk lichter en eenvoudiger te beheren (n.l geen beheer). Er wordt een map document aangemaakt voor iedere te verwachten gebruikers rol. In eerste instantie zijn dat de rollen: Beheerder Deelnemer Publiek ArcGIS Server Voor ieder mapdocument (gebruikers rol) wordt in ArcGIS Server een mapservice gepubliceerd. In eerste instantie zijn er dus 3 mapservices: beheerder, deelnemer en publiek. De mapservices dienen als databron voor de LiveViewer webapplicatie. Belangrijk om te beseffen is dat de toegang tot de database via de arcgis views alleen maar raadplegen toestaat. Via deze verbinding kan dus niet worden gemuteerd. - Autenticatie service o De LiveViewer applicatie vereist dat de gebruiker inlogt. De Autenticatie service op de webserver wordt hiervoor gebruikt. o In eerste instantie wordt nog gebruik gemaakt van een lokale userstore op de webserver (forms autenticatie). Op termijn zou die userstore kunnen worden vervangen door een Active Directory structuur. - CmsEntities service o Voor het beheren van toegangsrechten voor de verschillende gebruikers rollen is voorzien in een beheerfunctie in de LiveViewer. De beheerfunctie kan toegangsrechten van incidenten en incident detail objecten aanpassen in de database. Omdat de verbinding via ArcGIS niet toestaat om te muteren in de database (querylayers zijn readonly) wordt gebruik gemaakt van een aparte service die dat wel ondersteunt. o Het gebruik van de LiveViewer is alleen toegestaan na autenticatie van de gebruiker. Bij het opstarten vande applicatie wordt automatisch ingelogd met gebruiker publiek. o De gebruikers rol beheerder is de enige die toegang heeft tot de beheerfunctie in de LiveViewer en ook direct toegang heeft tot de i-bridge tabellen in de database. Pagina 6 van 22

3 Software en hardware 3.1 Software Voor de ontwikkeling zijn de volgende versies van software pakketten gebruikt: - ArcGIS 10 Prerelease (Desktop en Server) o Deze versie van ArcGIS is vereist om gebruik te kunnen maken van zgn Query Layers in ArcGIS Desktop en Feature Layers in de Silverlight webclient. - ArcGIS Web API voor Silverlight versie 2.0 o Deze laatste versie van de SIlverlight API ondersteunt de nieuwe functionaliteiten in SIlverlight 4. - Visual Studio 2010, Silverlight 4 o Silverlight 4 heeft standaard voorzieningen voor: WCF/RIA services (authentication, eenvoudig data beheer in SQL Server) Richt Text Boxt control - Microsoft SQLServer 2008 SP1 o Nodig voor de ondersteuning van Geometry en Geography in de database. 3.2 Deployment De LiveViewer is een webapplicatie en moet dus worden geïnstalleerd op een webserver. Het installeren van de LiveViewer gaat het makkelijkst op Windows Server 2008 R2. Eerdere versie (Windows Server 2003) is ook mogelijk maar dat vereist extra configuratie en installatie werk. Details over installeren zijn te vinden in de Installatie Handleiding voor de LiveViewer. 3.3 Ondersteunende producten, componenten en tools De applicatie is gebouwd met Silverlight 4.0 final edition en de ArcGIS API for Microsoft Silverlight versie 2.0 beta. Verder worden er twee controls van de Silverlight toolkit gebruikt (BusyIndicator en GridSplitter). Om met Silverlight versie 4.0 te kunnen werken is VisualStudio 2010 vereist. 3.3.1 Microsoft SQL Server 2008 R2 http://www.microsoft.com/everybodysbusiness/nl/nl/products/sql-server- 2008.aspx?WT.mc_id=SEARCH&WT.srch=1 3.3.2 ArcGIS 10 http://resources.arcgis.com/ 3.3.3 Silverlight 4.0 http://www.silverlight.net/getstarted/silverlight-4/ 3.3.4 Silverlight toolkit http://silverlight.codeplex.com/ http://www.silverlight.net/content/samples/sl4/toolkitcontrolsamples/run/default.html 3.3.5 ArcGIS API voor Microsoft Silverlight http://help.arcgis.com/en/webapi/silverlight/apiref/api_start.htm 3.3.6 Silverlight 4.0 WCF/RIA services http://www.silverlight.net/getstarted/riaservices/ Pagina 7 van 22

4 Technische documentatie 4.1 Overzicht LiveViewer De LiveViewer layout ziet er zo uit: EagleIncidentSelecto r: Selecteer hier het gewenste incident uit de lijst EagleText: Toont de tekstbeelden van een incident EagleLogViewer: Hier verschijnen de logbook regels van het geselecteerde incident EagleMap: Dit is de map waarin incident objecten van het geselecteerde incident in worden getekend De indeling van de webpagina: De hoofdcontainer is een MainPage met daarin o De titelbalk met tekst en/of logo o Uitlog/inlog knop voor wisselen van gebruiker De MainPage is opgedeeld in 3 delen: EagleIncidentSelector, EagleLogViewer en EagleMap. De afmetingen van de 3 onderdelen zijn dynamisch aan te passen m.b.v. gridsplitter lijnen. Linksboven: EagleIncidentSelector o Voor het selecteren van een incident uit de lijst met incidenten die voor de huidig ingelogde gebruiker zichtbaar zijn. Linksmidden: EagleText o Voor het tonen van tekstbeelden. o Opgedeeld per type en datum Linksonder: EagleLogViewer o Voor het tonen van logboekregels van geselecteerd incident Rechtsmidden: EagleMap o Map object: bevat map layers (bing, movida en featurelayers uit de mapservices) o EagleMap bevat naast het Map object zelf ook nog een aantal andere componenten: Navigator (zoom, pan, rotate, etc.) Schaalbalk linksonder Knoppenbalk links vertical Knoppenbalk linksboven horizontal IncidentTree control rechtsboven (toont incident objecten in lijst vorm) Pagina 8 van 22

4.1.1 Layers LiveViewer: Esri MAP Bing: CustomBingLayer Movida: CustomKmlLayer Maps: FeatureLayers Bing service Movida service Map services De Map bevat 3 typen layers: Een custombinglayer (afgeleid van een ArcGisTiledMapServiceLayer). De databron van deze layer wordt geleverd door een Geodan bing service. Optioneel kan iedere willekeurige bing service hiervoor worden gebruikt. Een customkmllayer (afgeleid van ArcGisGraphicsLayer). Deze layer wordt gevoed door een Movida KML service. Een aantal FeatureLayers. Voor iedere view in het arcgis database schema wordt automatisch, bij opstarten van de liveviewer, een featurelayer aangemaakt. FeatureLayers Een featurelayer is een afgeleide van een graphicslayer. D.w.z. zo n layer wordt niet gerenderd op de arcgis server maar alleen de features uit zo n layer worden naar de web client gestuurd. De web client applicatie is verantwoordelijk voor het renderen van de features. Het voordeel van lokale graphics (uit bijv. een featurelayer) op de client is dat er maptips aan gekoppeld kunnen worden waardoor de gebruiker op heel simpele wijze de attributen van incident objecten kan raadplegen. Bovendien is het zelf renderen van de graphics bijzonder handig bij: Het selecteren van graphics in de map waarbij ze een aparte selectie kleur krijgen De transparantie van de graphics door de gebruiiker laten regelen. Bij het opstarten van de liveviewer wordt eerst de metadata van alle beschikbare mapservices opgehaald. Van iedere service wordt vastgelegd welke layers en tabellen er in zitten. Van iedere layer en tabel worden ook de details bewaard. Bijv. Naam LayerID of tabelid GeometryType (punt, lijn, vlak) De attribuut velden o Naam o DataType Pagina 9 van 22

Nadat deze gegevens zijn ontvangen van de mapservices worden de featurelayers aangemaakt en gerenderd in de applicatie. De featurelayers worden alleen opnieuw aangemaakt na het inloggen van een gebruiker. Als een gebruiker eenmaal is ingelogd worden bestaande featurelayers alleen nog maar ververst. 4.1.2 Klassen Een compleet overzicht van alle klassen en usercontrols in de liveviewer applicatie. 4.1.3 Login sequence Main page Bevat klassen en functies voor logout en login. Bij logout worden een aantal objecten gereset: o EagleMap, de featurelayers worden verwijderd o EagleText, de inhoud wordt gewist o EagleLogViewer, de inhoud wordt gewist o Merk op: bing- en movida-layer blijven zichtbaar Na iedere succesvolle login wordt de volgende sequence doorlopen: o Gebruik de mapservice behorend bij de ingelogde gebruiker o Bevraag de incidenten en toon keuze lijst in EagleIncidentSelector o Nadat gebruiker een incident heeft gekozen: De volgende stappen vinden plaats in EagleMap: Maak nieuwe featurelayers voor de actieve mapservice In de where-clause voor de featurelayers staat vermeld om welk incident het gaat De featurelayers worden automatisch ververst zodra ze aan de EagleMap.Map worden toegevoegd. Pagina 10 van 22

RefreshTimer o o o Iedere verversing veroorzaakt een FeatureLayer.UpdateCompleted event. De featurelayers worden gerenderd in EagleRenderer Na afloop van het renderen worden de incident objecten getoond in een treeview: IncidentTreeControl Als alle featurelayers zijn gerenderd dan worden de tekstbeelden opgevraagd met de EagleText klasse. Na selectie van een incident worden ook de bijbehorende logboekregels opgevraagd met EagleLogViewer. Na afloop van bovenstaande sequence wordt een RefreshTimer gestart. De timer geeft timerticks na een periode die is in te stellen in de configuratie. Bij een timertick wordt bovenstaande sequence weer doorlopen. De featurelayers worden nu niet opnieuw aangemaakt maar worden alleen ververst. Renderen Het renderen van de incident objecten gebeurt met de EagleRenderer klasse. Als een feature uit een featurelayer is ververst doordat de featurelayer initieel is toegevoegd aan de Map of als een featurelayer expliciet in de code wordt geupdated dan hebben de features nog geen symbol. Het symbol is nodig om een feature in de map zichtbaar te maken. Alle gegevens voor het aanmaken en toekennen van symbols aan features bevinden zich in de EagleRenderer. Het toekennen van symbolen gebeurt op basis van: De waarde van een attribuut in een feature. Doorgaans is dat het attribuut Type. Een symbol definitie in de EagleRenderer die op basis van de waarde van het renderattribuut wordt toegekend aan een feature. De symbol definities zijn gedefinieerd in XAML. <ImageBrush x:name="brush_incident" ImageSource="../Resources/Images/Incident.png" /> <esrisymbols:markersymbol x:name="symbol_incident" OffsetX="15" OffsetY="15"> <esrisymbols:markersymbol.controltemplate> <ControlTemplate> <Rectangle Fill="{StaticResource Brush_Incident}" Opacity="0.75" Width="30" Height="30" /> </ControlTemplate> </esrisymbols:markersymbol.controltemplate> </esrisymbols:markersymbol> Bovenstaand voorbeeld toont de definitie van een ImageBrush. De imagebrush wordt vervoilgens gebruikt in een esri MarkerSymbol. Door de symbol definities op deze manier op te nemen wordt een goede performance gegarandeerd. De imagesource van de brush wordt op deze manier niet steeds opnieuw geëvalueerd bij het renderen van een feature. Op dezelfde manier als hierboven zijn ook de symbolen voor lijnen en vlakken opgenomen in de XAML van de EagleRenderer. Het is belangrijk om te realiseren dat alle render informatie hiermee hardcoded is opgenomen. Er is geen mogelijkheid voor de gebruiker om symbolen aan te passen. 4.1.4 Configuratie De configuratie voor de applicatie bestaat uit een beperkt aantal items. In de web.config file in de Pagina 11 van 22

folder van de webapplicatie zijn een aantal app-settings opgenomen. <appsettings> <add key="apptitle" value="eagle LiveViewer" /> <add key="servername" value="live.dpos.eu" /> <add key="mapbeheerder" value="http://servername/arcgis/rest/services/liveviewer/beheerder/mapserve r" /> <add key="mapdeelnemer" value="http://servername/arcgis/rest/services/liveviewer/deelnemer/mapserve r" /> <add key="mappubliek" value="http://servername/arcgis/rest/services/liveviewer/publiek/mapserver" /> <add key="urlgeometryservice" value="http://servername/arcgis/rest/services/geometry/geometryserver" /> <add key="mapextent" value="300000 6550000 915000 7080000" /> <add key="userpubliek" value="publiek" /> <add key="passwordpubliek" value="pub_123" /> <add key="urlbing" value="http://ve.geodan.nl/tiles/" /> <add key="movidalayervisible" value="true" /> <add key="urlmovida" value="http://80.113.1.146/xmlfeed/xmlfeed?alllocationparameters=true&a lldeviceownerparameters=true&deviceownerfilter=type>1&type=kml22 " /> <add key="refreshtime" value="30" /> </appsettings> De appsettings worden bij opstarten van de applicatie ingelezen. De mapservice die wordt gebruikt wordt bepaald door de gebruiker die is ingelogd. Voor iedere gebruikers rol (beheerder, deelnemer, publiek) is een mapservice url gespecificeerd. RefreshTime De waarde van RefreshTime bepaalt het interval (in seconden) waarop de applicatie een aantal objecten in de applicatie gaat verversen: - Ophalen van nieuwe incidenten uit de database - Verversen van featurelayers voor een geselecteerd incident - Verversen van tekstbeelden van een geselecteerd incident - Verversen van logboek regels van geselecteerd incident. ConnectieStrings <!-- #####################################################################--> <!--#### ConnectionStrings ####--> <!-- #####################################################################--> <connectionstrings><add name="cmsentities" connectionstring="metadata=res://*/models.cmsmodel.csdl res://*/models.cmsm odel.ssdl res://*/models.cmsmodel.msl;provider=system.data.sqlclient;provid er connection string="data Source=10.10.20.85;Initial Catalog=ibridgedb3;Persist Security Info=True;User Pagina 12 van 22

ID=beheerder;Password=Beh_123;MultipleActiveResultSets=True"" providername="system.data.entityclient" /><add name="rlsentities" connectionstring="metadata=res://*/models.rlsmodel.csdl res://*/models.rlsm odel.ssdl res://*/models.rlsmodel.msl;provider=system.data.sqlclient;provid er connection string="data Source=ESRIBX0166;Initial Catalog=eagledb3;Persist Security Info=True;User ID=beheerder;Password=beheerderPassword;MultipleActiveResultSets=True" " providername="system.data.entityclient" /></connectionstrings> <!-- #####################################################################--> Een speciale config regel is die voor ConnectionStrings. Hierin staan de connectie gegevens die nodig zijn voor de functie waarmee de RLS security rechten worden beheerd. Belangrijke onderdelen zijn: - Source: sqlserver instance naam voor de eagle database - Catalog: de naam van de eagle database - ID: de usernaam van de gebruiker met beheerders rol - Password: het password van de gebruiker met de beheerders rol. 4.1.5 Beheren toegangsrechten Het toekennen en ontnemen van toegangsrechten aan incident objecten gebeurt met de klasse EagleAccessControl. De userinterface ziet er zo uit: Alleen een gebruiker met de rol beheerder kan dit scherm activeren en volgt dan deze stappen: Kies bij Niveau een gebruikers rol waarvoor de incident objecten worden toegekend. Mogelijke waarden zijn nu: beheerder, deelnemer, publiek. Indien alle objecten van een incident in een keer mogen worden toegewezen aan de gekozen rol dan klikt de gebruiker op Selecteer alles. In dat geval worden in de kaart alle zichtbare features geselecteerd en verandert hun symbool naar een vooraf ingesteld selectie symbool. De kleur van die symbolen is voor alle objecten gelijk: Cyan. Na klik op Selecteer alles worden ook alle tekstbeeldtypen van het incident geselecteerd in de listbox naast Tekst: Indien niet alle objecten hoeven worden toegekend dan kan de gebruiker individuele objecten in de kaart selecteren. Gebruik hiervoor de knoppen o Nieuwe selectie o Toevoegen aan selectie o Verwijderen uit selectie o Selcties verwijderen Tekstbeeldtypen kunnen ook handmatig worden geselecteerd in de listbox naast Tekst:. Pagina 13 van 22

Na klik op de knop Opslaan worden alle geselecteerde objecten verzameld en daarvan worden de ID s in lijsten gezet. Vervolgens wordt op basis van de id s van de objecten via de CmsEntities service (WCF/RIA) de bijbehorende objecten in de eagle tabellen aangepast. Van die objecten wordt RLSMAppingID gezet op de waarde die eerder was gekozen bij Niveau. 4.2 Logbook control Deze control is bedoeld voor het weergeven van logboekregels in de EagleLiveViewer op een vergelijkbare manier zoals dit gebeurt in EagleText. De gegevens worden opgehaald van een SQL Server 2008 database via MapServices van ArcGIS Server 10.0. 4.2.1 Datamodel De benodigde entiteiten voor deze control zijn: Questions (Vragen), Answers (Antwoorden), Actors (Actoren) and Recipients (Ontvangers). De verschillende attributen zijn te vinden in de volgende SQLServer tabellen: CmsActorAssignment CmsAction CmsActorAssignmentFor CmsActor CmsEventType CmsGrooveIdentityActor 4.2.1.1 SQL Server views Omdat de benodigde entiteiten attributen hebben die verspreid zijn over verschillende SQL tabellen zijn er views aangemaakt waar al die attributen bij elkaar zijn gebracht. De views heten: VwCmsQuestion VwCmsAnswer VwCmsRecipients VwCmsActors De sql code om deze views aan te maken is te vinden op: CreateArcGISViews.sql (https://svn.geodan.nl/repos/it/commandcontrolsystem/trunk/src/sql) Deze views worden toegevoegd in ArcMap als QueryLayers om die via MapServices te kunnen benaderen. Het is belangrijk dat de advanced options zijn gekozen om te voorkomen dat ArcMap een eigen primary key (ESRI_OID) toevoegt: Pagina 14 van 22

Resultaat in ArcMap: Dit is niet van toepassing voor de VmsActorsView, want deze view heeft geen eigen primary key. Pagina 15 van 22

De namen van de QueryLayers in de MXD zijn: Question, Answer, Recipients en Actors. 4.2.2 Records opvragen Om te beginnen te werken heeft de control een incidentid nodig om de bijbehorende records op te kunnen vragen. De eerste methode die moet worden aangeroepen op de logbookcontrol class is: public void InitializeNewIncident De records worden opgevraagd via QueryTask objecten (een QueryTask voor elke entiteittype). Omdat de requests asynchroon worden uitgevoerd moeten we een volgorde toepassen: Voordat de Antwoorden en de Ontvangers worden opgevraagd moeten eerst de Actoren en de Vragen binnen zijn De functie waarmee de request voor nieuwe records wordt gestart is: LoadLogbookRecords() De Url s voor de QueryTasks (verwijzing naar de bijbehorende REST interfaces) worden opgehaald via de mapserviceurl en de mylayerinfos parameters. Pagina 16 van 22

mylayerinfos bevat informatie over de verschillende lagen in een bepaalde MapService. Opgelet! De MapService moet dus entries hebben voor de Actors,Question, Answer en Recipients lagen: Voorbeeld QueryTask url: querytaskquestionid.url = "http://82.204.47.77/arcgis/rest/services/eagle/beheerder/mapserver/21" Pagina 17 van 22

4.2.2.1 ObservableCollections en PagedCollectionViews De logbookcontrol houdt een ObservableCollection van vragen (questionsincident) en een van Actors (actorsincident). Een ObservableCollection is nodig zodat de UI elementen zich automatisch verversen als er nieuwe elementen in de Collections terechtkomen. De observablecollections worden gewrapt in een zgn. PagedCollectionViews. Deze voegen twee belangrijke mogelijkheden: sorteren en filtreren van de ObservableCollection. Elk vraag object (Question.cs) bevat ook een observablecollection van Antwoorden en een van Ontvangers. De antwoorden worden ook in een PagedCollectionView gewrapt om deze in aflopend volgorde weer te kunnen geven. 4.2.2.2 ItemsControl Om de parent-child relatie van Vragen en antwoorden weer te kunnen geven op de gewenste manier werden er ItemsControls met ItemTemplates gebruikt. Vragen: <ItemsControl x:name="logboekregels" Margin="0" ItemTemplate="{StaticResource DataTemplateQuestion}" /> Deze LogboekRegels ItemsControl is de hoogste niveau control. Vanaf de code wordt deze control gekoppeld aan de collectie van Vragen: LogboekRegels.ItemsSource = pcvquestions; In DataTemplateQuestion worden properties van de Question class gekoppeld aan UI controls (en de lijst van antwoorden wordt aan een nieuwe ItemsControl gekoppeld): Pagina 18 van 22

<DataTemplate x:key="datatemplatequestion"> <TextBlock x:name="qcreated" Margin="2,2,2,2" Grid.Column="1" Text="{Binding Path=Created, Mode=OneWay, StringFormat='dd-MM-yyyy HH:mm'}" TextWrapping="Wrap" /> <TextBlock x:name="qcreatedby" Margin="2,2,2,2" Grid.Column="2" Text="{Binding Path=CreatedBy, Mode=OneWay}" TextWrapping="Wrap"/> <TextBlock x:name="qprocess" Margin="2,2,2,2" Grid.Column="3" Text="{Binding Path=Process, Mode=OneWay}" TextWrapping="Wrap"/> <TextBlock x:name="qbeschrijving" Margin="2,2,2,2" Grid.Column="4" Text="{Binding Path=DescriptionPlain}" TextWrapping="Wrap" /> <ItemsControl x:name="answers" Grid.Column="1" Grid.ColumnSpan="5" Grid.Row="1" Margin="0" ItemsSource="{Binding Path=AnswersPaged, Mode=OneWay}" ItemTemplate="{StaticResource DataTemplateAnswer}" /> </DataTemplate> Antwoorden: <DataTemplate x:key="datatemplateanswer"> <TextBlock x:name="acreated" Margin="2,2,2,2" Text="{Binding Path=Created, Mode=OneWay, StringFormat='dd-MM-yyyy HH:mm'}" TextWrapping="Wrap"/> <TextBlock x:name="acreatedby" Margin="2,2,2,2" Grid.Column="1" Text="{Binding Path=CreatedBy, Mode=OneWay}" TextWrapping="Wrap"/> <TextBlock x:name="aprocess" Margin="2,2,2,2" Grid.Column="2" Text="{Binding Path=Process, Mode=OneWay}" TextWrapping="Wrap"/> <TextBlock x:name="abeschrijving" Margin="2,2,2,2" Grid.Column="3" Text="{Binding Path=DescriptionPlain, Mode=OneWay}" TextWrapping="Wrap"/> </DataTemplate> 4.2.3 Rich Text voorlopig niet mogelijk Het was helaas niet mogelijk om een RichTextBox control via Binding te koppelen aan een property van het Question object. Dit leverde steeds Silverlight fouten op. Hierdoor moet de rtf beschrijving worden omgezet naar eenvoudige tekst. Deze eenvoudige tekst wordt in de DescriptionPlain property van Question bijgehouden. Het verwijderen van de RTF tags gebeurt via zgn. Regular Expressions in de CleanRTF functie. Opgelet: Deze functie is beperkt getest, het kan zijn dat niet alle RTF tags worden verwijderd. 4.2.4 Filteren per actor Als een actor geselecteerd wordt moeten alleen de regels getoond worden die gericht zijn aan die actor. D.w.z. de geselecteerde actor moet in de lijst van Ontvangers zijn. Hiervoor wordt de volgende Lambda expression gebruikt: pcvquestions.filter = (q => ((Question)q).Recipients.Count(r => r.idactor == actor) > 0); 4.2.5 Timer Om nieuwe logboekregels weer te kunnen geven moeten er regelmatig nieuwe requests aan de server worden gedaan. Hiervoor wordt een Timer object bijgehouden. Zie: private void OnTimerTick Pagina 19 van 22

Opgelet! Als de netwerkverbinding wordt verbroken en als de gebruiker op Next records drukt wordt de timer even gestopt. 4.2.5.1 Identificeren van nieuwe records Om de server zo min mogelijk te belasten wordt er maximaal geprobeerd om in volgende aanvragen alleen de benodigde (nieuwe) records aan te vragen. Dit gebeurt door gebruikt te maken van het ID veld van vragen en antwoorden. private int maxquestionid; private int maxanswerid; Vragen (incidentid en maxquestionid): string datumwhere = string.format("id>{0}", maxquestionid); string incidentwhere = string.format("incident={0}", incidentid); queryquestionsdatumincident.where = string.format("{0} AND {1}", incidentwhere, datumwhere); Antwoorden (Lijst van huidige QuestionID s en maxanswerid): string datumwhere = string.format("id>{0}", maxanswerid); string questionidwhere = string.format("idquestion in ({0})", commasep); queryanswersdatum.where = string.format("{0} AND {1}", datumwhere, questionidwhere); 4.2.6 Paging AGS 10 heeft een beperking betrekking het aantal records die aangevraagd kunnen worden in een single request. De server geeft maximaal 1000 records per request terug: Als een nieuw incident geopend wordt kan het zijn dat er zoveel bijbehorende Antwoorden en Ontvangers zijn dat dit getal wordt overschreden. Om dit te voorkomen zullen er maximaal 50 vragen (en zijn bijbehorende antwoorden en ontvangers) per keer aangevraagd. private int maxquestions = 50; Pagina 20 van 22

De eerste request voor vragen aan de server is dus een ReturnIdsOnly request (querytaskquestionid). queryquestionsdatumincident.returnidsonly = true; ReturnIdsOnly is een nieuwe mogelijkheid van de ArcGIS API voor Silverlight 2.0 die gebaseerd is op de nieuwe ArcGIS Server REST API 10.0 Als deze request klaar is wordt er gecontroleerd of het totale aantal vragen hoger is dan maxquestions. Zo wel, wordt er een lijst van ongevraagdevragen id s bijgehouden (pendingquestionids) en de Volgende records knop wordt ge-enabled zodat de gebruiker de ontbrekende records nog op kan halen. if (count < maxquestions) { questionidtoquery.add(oid); } else { if (!pendingquestionids.contains(oid)) pendingquestionids.add(oid); } Als de gebruiker op Volgende records drukt dan wordt een aangepaste opvraag aan de server gemaakt. De volgende batch vragen wordt aan de server opgevraagd: questionidtoquery = pendingquestionids.take(maxquestions).tolist(); Pagina 21 van 22

4.2.7 Network disconnected De logbookcontrol heeft ook functionaliteit om te reageren op het event dat de netwerkverbinding verbroken wordt. Als dit gebeurt wordt simpelweg de timer gestopt. Deze timer wordt weer gestart als de verwinding weer hersteld is. Zie: private void NetworkChange_NetworkAddressChanged Pagina 22 van 22