Thursday 24 April 2014

Map API - MapButton

I tried to use a MapButton but Map crashed after clicking on it. MapButton allows the user to click or draw a rectangle in the drawing area and returns the coordinates for further processing. See developer sample #30.

As alternative one can use the following call:

Autodesk.Map.IM.Graphic.Polygon poly = this.Application.Documents.Active.Map.GetRectangle("first point:", "second point:");

further details Map API Doc: MapLogic.GetRectangle Method

Map 2103, SP2

Map API - MapButton

In Map 2013 SP2 funktioniert der MappButton nicht - es kommt zum Absturz. Über den MapButton kann man dem Benutzer ermöglichen z.B. ein Punkt oder ein Rechteck im Zeichenbereich aufzuziehen und dann die entsprechende Koordinaten auszuwerten (siehe Developer Sample 30_MapButton).

Als Alternative kann man folgenden Aufruf verwenden (Beispiel Rechteck):

Autodesk.Map.IM.Graphic.Polygon poly = this.Application.Documents.Active.Map.GetRectangle("Erster Eckpunkt:", "Zweiter Eckpunkt:");

siehe Map API Doc: MapLogic.GetRectangle Method

Map 2013, SP2

Thursday 17 April 2014

Username / Benutzername speichern

Namen des aktuellen Benutzers über Trigger abspeichern / save name of current user via trigger:

create or replace TRIGGER wfe_sk_strassenkarte_I  BEFORE INSERT ON wfe_sk_strassenkarte
FOR EACH ROW

DECLARE
begin   
     SELECT USER_MGMT.GETVALUE('LOGIN_NAME') INTO :new.visum FROM dual;
END;


Map 2103, SP2

Wednesday 16 April 2014

Start external application from form

From a waste water industry model form we want to launch an external application with certain parameters. In Map form designer you can add a button with VB.net script. Map API provides a function called OpenURL which seemed to be a good starting point. 

Map API Industry Model Docs

 The following script will open Notepad++:

Public Overrides Sub Button_Click()
      Me.Application.OpenUrl("C:\Program Files (x86)\Notepad++\notepad++.exe")
End Sub


It doesn't just open Notepad++. Notepad++ also tries to open a file C:\0:


Notepad++ message when called from Map form
It seems Map adds a parameter to the call which Notepad++ interprets as a reference to a file to be opened. Unfortunately I was not able to call Notepad++ with further parameters - such as a specific file name.

I couldn't figure out whether OpenURL is a suitable function for calling external apps or not. Instead of using Map API one can use the .Net Framework functionality as well. The following VB.net script launches the external app including certain startup parameters:

Public Overrides Sub Button_Click()   

 'Haltung auslesen
 dim d as Autodesk.Map.IM.Forms.DialogControls.TextBox
 dim name_number as String
 d = Me.Dialog.Controls.Item("NAME_NUMBER")
 name_number = d.Value
 dim parameter as String =  " /p Q:\KINS\Daten\öffKanal/h " + name_number

 'Msgbox( "Aufruf von:C:\Program Files (x86)\KINS\KINS.EXE " + parameter)
 'Aufruf
   
 Dim startInfo As New System.Diagnostics.ProcessStartInfo
 startInfo.FileName = "C:\Program Files (x86)\KINS\KINS.EXE"
 startInfo.Arguments = parameter
 Dim pro As New System.Diagnostics.Process
 pro.Start(startInfo)

End Sub

 
Map 2013 SP2


Externes Programm aus Formular starten

Wir müssen aus dem Abwasser-Haltungsformular eine Applikation mit Parametern - unter anderem die aktuelle Haltungsnummer - aufrufen. Im Formular kann man einen "Button" einbinden und mit VB.Net Script hinterlegen. In der Map API gibt es eine Funktion, die für einen Aufruf vom Namen her "passen"  könnte - OpenURL.

Map API Dokumentation

Damit lässt sich tatsächlich ein Programm starten, z.B. so:

Public Overrides Sub Button_Click()
      Me.Application.OpenUrl("C:\Program Files (x86)\Notepad++\notepad++.exe")
End Sub


Beim Aufruf von Notepad++ erscheint jedoch folgende Meldung:




Meldung in Notepad++ nach Aufruf aus Map
Es scheint, dass beim Aufruf schon ein Parameter angehängt wird den Notepad++ als Verweis auf eine bestimmte Datei interpretiert. Legt man eine Datei mit dem Namen "0" im Root Verzeichnis von C: an, öffnet Notepad++ die Datei auch beim Aufruf.

Es hat nicht funktioniert, das Programm mit eigenen Parametern aufzurufen - z.B. mit einem bestimmten Dateinamen.

Eine Datei - die mit einem Programm verknüpft ist - liess sich nicht öffnen:

Public Overrides Sub Button_Click()
      Me.Application.OpenUrl(" C:\Temp\testdatei.txt")
End Sub


Um ein Programm zu starten kann man die Funktionalität des .Net Frameworks nutzen:

Public Overrides Sub Button_Click()   

 'Haltung auslesen
 dim d as Autodesk.Map.IM.Forms.DialogControls.TextBox
 dim name_number as String
 d = Me.Dialog.Controls.Item("NAME_NUMBER")
 name_number = d.Value
 dim parameter as String =  " /p Q:\KINS\Daten\öffKanal/h " + name_number

 'Msgbox( "Aufruf von:C:\Program Files (x86)\KINS\KINS.EXE " + parameter)
 'Aufruf
   
 Dim startInfo As New System.Diagnostics.ProcessStartInfo
 startInfo.FileName = "C:\Program Files (x86)\KINS\KINS.EXE"
 startInfo.Arguments = parameter
 Dim pro As New System.Diagnostics.Process
 pro.Start(startInfo)

End Sub


Map 2013, SP2

Thursday 3 April 2014

Master-Detail forms and form designer

When you open a master-detail form in form designer and then close the designer without saving alle settings for the detail forms are lost. Either you have a copy of your forms (you can save form definitions as XML) you can re-import or you need to set up the detail forms again.

Map 2013, SP2

Master-Detail Formulare - Formulardesigner

Öffnet man ein Master-Detail Formular im Formular Designer und schliesst den Designer ohne zu speichern gehen die Einstellungen für die Detailformulare verloren.
Entweder man kann eine Sicherungskopie einspielen (Formulare lassen sich als XML exportieren) oder man muss die Detailformulare wieder neu einrichten.

Map 2013, SP2