Guten Morgen,
wahrscheinlich mach ichs wieder zu kompliziert ;-} aber
Wie füge ich ein Layout in eine existierende ODB-Datei mit bereits darin gespeicherten Layouts hinzu ?
Klaus
wahrscheinlich mach ichs wieder zu kompliziert ;-} aber
Wie füge ich ein Layout in eine existierende ODB-Datei mit bereits darin gespeicherten Layouts hinzu ?
Klaus
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Maxilla am Do., 23.03.2006 - 09:38
Permalinkoder
per TextEditor
oder
per "Ich lade das existierende ODB und speicher den Inhalt zusammen mit dem neuen Layout in ein Gesamt-ODB"
???
Gespeichert von Gast am Do., 23.03.2006 - 09:51
Permalinkper Avenue und etwa so: ich öffne die bestehende ODB-Datei, schiebe mein neues Layout hinein, mach sie wieder zu und speicher sie ab
Klaus
Gespeichert von Gast am Fr., 24.03.2006 - 08:25
Permalink(weils mich auch interessiert und ich sowas auch brauche):
Ich habe die Memo-Tools durchstöbert aber keine Möglichkeit in den Scripten gefunden, die einer vorhandenen ODB ein zusätzlich Objekt hinzufügen. Soweit ich rausgefunden habe, wird die vorhandene ODB immer überschrieben und das will ja der Kollege Klaus genausowenig wie ich. Hast Du eine Lösung parat ?
NochnKlaus
Gespeichert von Maxilla am Fr., 24.03.2006 - 09:14
PermalinkAlso, wahrscheinlich ist das ganz einfach. Man müsste das vorhandene ODB per
theODBFile = ODB.Open(aFileName)
öffnen, das neue Layout mittels
theODBFile.Add(av.FindDoc("Layout1"))
hinten dran packen und über
theODBFile.Commit
speichern... Hab' aber gerade keine Zeit, das auszuformulieren. Vielleicht nachher ;)
Schön wäre ja auch, wenn der Klaus Engelbert da gerade Lust zu hätte - dann wäre nebenbei auch die Konfrontationstherapie gegen Klaustrophobie in diesem Thread perfekt.
Gespeichert von Gast am Fr., 24.03.2006 - 09:24
Permalinkich glaub mit diesen Angaben komme ich weiter ich habe auch in den Memos rumgefummelgebastelt und denke mit Deinen Angaben sollte es auch per mir klappen.
(Soll ich mich etwa umbenennen ? Klaustrophobie : Ich laufe schon seit Jahren mit dem Namen rum...)
NochnKlaus (grad drummm!
Gespeichert von Gast am Mo., 27.03.2006 - 09:22
Permalinkwas macht denn der (Klaus-)Fehler, der vorm Bildschirm sitzt,
da schon wieder verkehrt ??
ich habe aus den Memo-Tolls das ODB.Add abgekupfert und
es sieht bei mir so aus:
theLayout = av.getactivedoc
aName = theLayout . GetName
MsgBox. Info ( aName . AsString ,"")
If (aName <> "") then
aPrompt="Save"++aName++"to a New File"
else
aPrompt="Save Object to a New File"
end
theFile=aName+".odb"
myODBFile=filedialog.Put(theFile.AsFilename,"*.odb","Open File")
If (File.Exists(myODBFile)) then
aPrompt="Add Document"++aName++"to"++myODBFile.AsString++"?"
myAnswer = MsgBox.YesNo( aPrompt, "Add to Existing", true )
If (myAnswer) then
myOdb=ODB.Open(myOdbFile)
else
return Nil end
else
myOdb=Odb.Open(myODBFile)
end
myOdb.Add(theLayout)
myOdb.Commit
Das scheint auch zu klappen. Wenn ich mir
die ODB-Datei anschaue, erscheint das "geaddate"
Layout.
Will ich aber mit:
ODB_Datei = ODB.Open(FileDialog.Show("*.odb","ODB File","ODB Import komplett"))
If (ODB_Datei = Nil) then exit end
ODB_Liste = ODB_Datei.Get(0)
For each i in ODB_Liste
av.GetProject.AddDoc(i)
end
dieses neue Layout laden, dann erscheints nicht
in der Liste. WARUM ????
NochnKlaus
Gespeichert von Maxilla am Mo., 27.03.2006 - 10:09
PermalinkWenn du hiermit dein "Basis-ODB" erzeugst...
' ODB_Create
theLayout1 = av.GetActiveDoc
aName = theLayout1.GetName
aPrompt="Save"++aName++"to a New File"
theFile=aName+".odb"
myODBFile = FileDialog.Put(theFile.AsFilename,"*.odb","Create File")
theODBFile = ODB.Make(myODBFile)
theODBFile.Add(theLayout1)
theODBFile.Commit
...und hiermit ein Dokument hinzufügst...
' ODB_Add
theLayout2 = av.GetActiveDoc
aName = theLayout2.GetName
aPrompt="Save"++aName++"to a New File"
theFile=aName+".odb"
myODBFile = FileDialog.ReturnFiles ({"*.odb"},{"ODB-Files"},"Select ODB",0).Get(0)
aPrompt="Add Document"++aName++"to"++myODBFile.AsString++"?"
myAnswer = MsgBox.YesNo( aPrompt, "Add to Existing", true )
If (myAnswer) then
myOdb=ODB.Open(myOdbFile)
myOdb.Add(theLayout2)
myOdb.Commit
end
...dann sollte das wohl funktionieren.
Ein für diesen Fall passendes "Basis-ODB" wird auch von der Memo-Tools ODB-Funktion erzeugt, auf die man vom Projektfenster aus zugreift (mit der man mehrere Dokumente in ein einzelnes ODB exportieren kann). Die andere Funktion - auf die man von einem aktiven Dockument aus zugreift - arbeitet dagegen mit Dictionaries.
Gespeichert von Gast am Mo., 27.03.2006 - 13:09
PermalinkLayouts in eine ODB-Datei mit dem Namen ;-) UpperJawBone ;-)
geladen. Früher konnt ich die einfach mit:
ODB_Datei = ODB.Open(FileDialog.Show("*.odb","ODB File","ODB Import komplett"))
If (ODB_Datei = Nil) then exit end
ODB_Liste = ODB_Datei.Get(0)
For each i in ODB_Liste
av.GetProject.AddDoc(i)
end
wieder rausholen. Wieso sagt er mir jetzt
"Objekt Layout kann die Anforderung DoWithEach nicht erkennen"
NochnKlaus
Gespeichert von Gast am Di., 28.03.2006 - 08:20
Permalinkum das ganze Hin und Her zu vereinfachen - man muß ja
nicht immer mit El Woms(m.H.) arbeiten - wenn ich nun
schlicht und ergreifend mit den Layout-Schablonen arbeiten
will: Kann ich beim laden von Schablonen vorgeben, Wo
die zugehörige Template.def steht ? Meine Anwender arbeiten
nicht nur auf C:\ und immer in anderen Verzeichnissen.
Genügt es dann, wenn ich die Template.def in
C:\ESRI ....\ETC überschreibe ????
(Das würde die ganze Geschichte vereinfachen und man
soll's den Anwendern ja nicht ZU einfach machen ;-)
NochnKlaus
Gespeichert von Gast am Di., 28.03.2006 - 08:41
PermalinkIch habe das Systemscript, das die Schablonen aufruft verändert und stelle das WorkDir auf den Pfad, der unverändert bleibt (!) zum neuen Template ein. Und jetzt klappts - man soll einfach bestimmte Sachen überschlafen ;-)
NochnKlaus
Gespeichert von Gast am Di., 28.03.2006 - 15:15
Permalink(offTopic :
hope I didnt bother you)
NochnKlaus
Gespeichert von Maxilla am Di., 28.03.2006 - 16:33
PermalinkODB_Datei = ODB.Open(FileDialog.Show("*.odb","ODB File",""))
If (ODB_Datei = Nil) then exit end
theCount = ODB_Datei.count
for each i in 0..(theCount - 1)
d = ODB_Datei.Get(i)
if (d.is(Doc)) then
av.GetProject.AddDoc(d)
end
end
but as you are so kind to find an acceptable solution by yourself, I consider it unnecessary to answer again, sorry. At least I should have asked what "El" ..what.. "El Woms" was supposed to be :)
Gespeichert von Maxilla am Mi., 29.03.2006 - 10:12
Permalink(offTopic :
hope I didnt bother you)
Maxilla
Gespeichert von Gast am Mi., 29.03.2006 - 10:53
PermalinkNÖ und außerdem
never bother a bothering team
El Woms, naja son milder In-Joke hier: die "EierlegendeWollmilchsau" for short
jetzt ham wir allen bewiesen, daß wir englisch können und wenns nicht
bald wieder zurück zum Topic geht, bekomm wir noch Lokalverbot ;-)
NochnKlaus