[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt XMLAttribute setzen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

XMLAttribute setzen

netsrik
Beiträge gesamt: 93

27. Okt 2010, 14:30
Beitrag # 1 von 18
Bewertung:
(5587 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe folgendes Problem: Ein fertig gestaltetes Dokument soll per Script als XML-Datei exportiert werden. Das Script dazu (früher für CS 1) versuche ich jetzt mit kleinen Änderungen für CS4 umzuwandeln. Unter Root sollen die Attribute "ausgabe", "objekt", "rubrik" und "autor" hinzugefügt werden, die von dem Benutzer in einem Dialogfenster ausgefüllt werden.
Jetzt bekomme ich folgende Fehlermeldung
Fehlernr. 30477
Ungültier WErt für Parameter "value" von Ereignis "add". String erwartet, aber nothing erhalten. Zeile 917

Hier die fehlerhafte Funktion dazu:
Code
function setXmlAttributeByName (myXmlElement, findName, newValue) 
{
var l = myXmlElement.xmlAttributes.length;
for (var i = 0; i < l; i++)
{
var myXmlAttribute = myXmlElement.xmlAttributes[i];
if (myXmlAttribute.name == findName)
{
myXmlAttribute.value = newValue;
return myXmlAttribute;
}
}
// CS 3:
// myXmlAttribute = myXmlElement.xmlAttributes.add({name: findName, value:newValue});
// CS 1:
myXmlAttribute = myXmlElement.xmlAttributes.add(findName, newValue);

return myXmlAttribute;
}

Muss ich diese Funktion entsprechend für CS4 ändern, oder habe ich wahrscheinlich im Vorfeld einen Fehler begangen. Wer kennt sich aus und kann mir weiterhelfen?

Danke schon im voraus und liebe Grüße,

Kirsten

(Dieser Beitrag wurde von Martin Fischer am 27. Okt 2010, 14:47 geändert)
X

XMLAttribute setzen

Martin Fischer
  
Beiträge gesamt: 12732

27. Okt 2010, 14:50
Beitrag # 2 von 18
Beitrag ID: #455366
Bewertung:
(5579 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kirsten,

ich habe Deinen Beitrag editiert und die Funktion in Code-Tags gesteckt, damit sie besser lesbar ist.

Vermutlich steckt der Fehler nicht in der dargestellten Funktion, sondern irgendwo im Vorfeld bei der Befüllung bzw. Übergabe der Variable newValue.

Prüfe, wo die Funktion setXmlAttributeByName() aufgerufen wird, ob ein passender Wert übergeben wird.
Oder prüfe den Inhalt der Variable newValue (am besten beim Debuggen in ExtendScript Toolkit).


als Antwort auf: [#455359]

XMLAttribute setzen

netsrik
Beiträge gesamt: 93

27. Okt 2010, 16:17
Beitrag # 3 von 18
Beitrag ID: #455376
Bewertung:
(5554 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für die schnelle Antwort. Da scheint noch einiges im Argen zu sein. Das muss ich mir noch mal genau anschauen. Falls ich nicht weiter weiß, melde ich mich noch mal.

Danke, Kirsten


als Antwort auf: [#455366]

XMLAttribute setzen

zaphodbeeblebroxx
Beiträge gesamt: 408

27. Okt 2010, 23:16
Beitrag # 4 von 18
Beitrag ID: #455410
Bewertung:
(5522 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo Kirsten,

vermutlich wird in newValue kein String an die Funktion übergeben. Ich würde die Variable newValue mittels newValue.toString() in einen String umwandeln, bevor die Variable an die Funktion übergeben wird.


als Antwort auf: [#455376]

XMLAttribute setzen

netsrik
Beiträge gesamt: 93

28. Okt 2010, 15:51
Beitrag # 5 von 18
Beitrag ID: #455495
Bewertung:
(5483 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

danke für die Mithilfe, das eine Problem habe ich noch nicht ganz gelöst, da taucht schon das nächste auf. Bei folgender Funktion:

Code
function getXmlElementByName(myXmlElements, findName) 
{
var l = myXmlElements.length;
for (var i = 0; i < l; i++)
{
var myXmlElement = myXmlElements[i];
var myMarkupTag = myXmlElement.markupTag;
if (myMarkupTag.name == findName)
{
return myXmlElement;
}
}
return null;
}


Bekomme ich die Fehlermeldung: "Objekt unterstützt Eigenschaft oder Methode length nicht". Ich brauch ein Tipp, was ich ändern muss, wer kann helfen?

Viele Grüße,

Kirsten


als Antwort auf: [#455410]
(Dieser Beitrag wurde von Martin Fischer am 28. Okt 2010, 15:52 geändert)

XMLAttribute setzen

Martin Fischer
  
Beiträge gesamt: 12732

28. Okt 2010, 15:55
Beitrag # 6 von 18
Beitrag ID: #455497
Bewertung:
(5480 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kirsten,

und abermals wissen wir nicht, was in myXmlElements steckt.
Die Funktion erwartet einen Array. Aber offensichtlich kommt etwas anderes an.
Vermutlich nothing oder null.

Die Ursache des Problems liegt außerhalb der gezeigten Funktion.


als Antwort auf: [#455495]

XMLAttribute setzen

netsrik
Beiträge gesamt: 93

28. Okt 2010, 16:47
Beitrag # 7 von 18
Beitrag ID: #455511
Bewertung:
(5462 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

das habe ich mir schon fast gedacht ;-). Da werde ich mal weiter forschen.
Vielen Dank.

Vielleicht finde ich ja den Fehler, dann melde ich mich noch mal.

Liebe Grüße,

Kirsten


als Antwort auf: [#455497]

XMLAttribute setzen

netsrik
Beiträge gesamt: 93

2. Nov 2010, 15:54
Beitrag # 8 von 18
Beitrag ID: #455791
Bewertung:
(5365 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

dieses Script hat es in sich. ich habe hier wieder eine Stelle, wo ich nicht weiterkomme. Hier der Ausschnitt aus dem Script:

Code
//var myXmlTextrahmen = myDocument.stories; 
for (var i = 0; i < myDocument.stories.length; i++)
{
var myTextrahmen = myDocument.stories[i];
if (myAddedTextrahmen.contains(myTextrahmen))
{
// ok

}
else
{
// masterpage Textrahmen? or outside of page in pasteboard

var myFirstTextFrame = myTextrahmen.textFrames[0];
var myParentPage = myFirstTextFrame.parent;
var myPageName = myParentPage.name;
if (myParentPage.parent != null)
{
var myParentPageParentConstructorName = myParentPage.parent.constructor.name;
if (myParentPageParentConstructorName == "MasterSpread")
{
myPageName = myParentPage.parent.name;
}
}


Die Fehlermeldung hierzu lautet in der Zeile "var myParentPage = myFirstTextFrame.parent;" – Objekt ist ungültig

Warum ist es ungültig?

Viele Grüße,

Kirsten


als Antwort auf: [#455511]

XMLAttribute setzen

SamiSalami
Beiträge gesamt: 66

2. Nov 2010, 16:23
Beitrag # 9 von 18
Beitrag ID: #455795
Bewertung:
(5355 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo :-)

Was bei deinen Problemen eine sehr hilfreiche methode ist, einfach "alerts" zu werfen. Gerade bei Unsicherheiten mit Variablen und Objekten, hilft es dir dem Problem auf die Spur zu kommen.
Kommentier einfach mal alles was danach kommt aus und alerte myFirstTextFrame.parent, anstatt der Zuweisung.
So kannst du dich gut durch deine Objekte arbeiten.
Auch hilfreich ist ein kleines Skript mit dem du dir einfach immer deine Selection und womöglich auch den Parent deiner Selection ausgeben lässt - das ist jedoch dafür dann im geöffneten Dokument besser zurecht zu kommen.

Ich hoffe dieser Ansatz hilft dir!
Allerdings sollte trozdem nicht unerwähnt bleiben, dass die angewandte Methode augenscheinlich etwas ungewöhnlich und auch umständlich ist (Kein klarer Weg zu deinem "gewünschten" Objekt).
Vielleicht wäre es gut, wenn du nochmal beschreibst, was du hier erreichen willst.
Möchtest du einfach nur den Namen jeder Seite haben?


als Antwort auf: [#455791]

XMLAttribute setzen

Martin Fischer
  
Beiträge gesamt: 12732

2. Nov 2010, 16:51
Beitrag # 10 von 18
Beitrag ID: #455801
Bewertung:
(5346 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kirsten,

arbeitest Du mit CS5?
Da steigt man von einem PageItem nicht mehr per parent hoch zur Seite sondern per parentPage.

Für CS5 musst Du die Zeile var myParentPage = myFirstTextFrame.parent; ersetzen durch

Code
var myParentPage = myFirstTextFrame.parentPage; 


Es ist aber auch möglich, dass der Hund wo anders begraben liegt.


als Antwort auf: [#455791]
(Dieser Beitrag wurde von Martin Fischer am 2. Nov 2010, 16:52 geändert)

XMLAttribute setzen

Martin Fischer
  
Beiträge gesamt: 12732

2. Nov 2010, 16:56
Beitrag # 11 von 18
Beitrag ID: #455803
Bewertung:
(5341 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ah, ich sehe.
Da gilt es noch ein Änderung von CS3 auf CS4 zu berücksichtigen:

Zitat var myFirstTextFrame = myTextrahmen.textFrames[0];


In CS4 unterscheidet man zwischen textFrames (das sind die verankerten Textrahmen in einem Textrahmen) und den textContainers (das sind die Textrahmen eines Textabschnitts).

Der erste Textrahmen einer Story _s wird mit _s.textContainers[0] adressiert.

Im Skript werden unter var myTextrahmen = myDocument.stories[i]; nicht textFrames, wie der Name der Variablen vermuten lässt, adressiert, sondern stories (Textabschnitte). Das ist tückisch.
Würde ich durchgehend ändern.
Sonst stolpert man leicht über ein falsches Objekt.

Da hilft auch SamiSalamis Tipp mit dem alert()-Befehl.


als Antwort auf: [#455801]
(Dieser Beitrag wurde von Martin Fischer am 2. Nov 2010, 17:00 geändert)

XMLAttribute setzen

netsrik
Beiträge gesamt: 93

3. Nov 2010, 10:41
Beitrag # 12 von 18
Beitrag ID: #455863
Bewertung:
(5296 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ihr beiden,

vielen Dank. Dieses Script habe ich nicht geschrieben, sondern versuche es nur für InDesign CS4 aufzubereiten, leider habe ich nicht allzuviel Ahnung von JavaScript.

Dieser Teil ist aus der Funktion eine XML-Struktur (Parameter) aufzubauen. Und an dieser Stelle möchte der Programmierer alle Stories oder Textrahmen die neben dem Dokument oder auf den Musterseiten (in dem Dokument gibt es mehrere Musterseiten) liegen, nicht mitgetaggt werden. So denke ich, soll es sein.

Ich habe es jetzt ausprobiert mit
Code
var myFirstTextFrame = myTextrahmen.textContainers[0] 

dann bekomme ich die Fehlermeldung bei Zeile 671
Code
var myPageName = myParentPage.name; 

Objekt unterstützt Eigenschaft oder Methode nicht.
Code
Var myTextrahmen = myDocument.stories[i] 

habe ich erstmal gelassen, weil wenn ich das ändere, bekomme ich eine andere Fehlermeldung.

Der Tipp von SamiSalami ist nett gemeint, den versteh ich nur leider nicht.

Viel Grüße,

Kirsten


als Antwort auf: [#455803]

XMLAttribute setzen

Martin Fischer
  
Beiträge gesamt: 12732

3. Nov 2010, 11:16
Beitrag # 13 von 18
Beitrag ID: #455871
Bewertung:
(5286 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kirsten,

ich fürchte, mit der little-by-little-und-blind-im-großen-Ganzen-Methode kommen wir hier nicht mehr weiter.


Mein Vorschlag:
Du wendest Dich an einen Skripter (ich selbst habe dafür keine Zeit), der das ganze Skript mit einer Aufgabenbeschreibung (was es tun soll und was es nicht tut) und Beispieldaten (vorher - nachher) analysiert und für CS4 in Schwung bringt.


als Antwort auf: [#455863]

XMLAttribute setzen

netsrik
Beiträge gesamt: 93

3. Nov 2010, 11:20
Beitrag # 14 von 18
Beitrag ID: #455875
Bewertung:
(5285 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

Du hast vollkommen recht.

Danke Dir trotzdem,

viele Grüße,

Kirsten


als Antwort auf: [#455871]

XMLAttribute setzen

SamiSalami
Beiträge gesamt: 66

3. Nov 2010, 22:02
Beitrag # 15 von 18
Beitrag ID: #455963
Bewertung:
(5232 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo :-)

Also der Grundgedanke ist einfach mal herauszufinden, was in deinem Skript passiert und welche Objekte darin denn nun tatsächlich angesprochen werden.
Dh. du kommentierst die Problemzeile aus und nimmst die Problemvariable und schreibst stattdessen:

Code
alert(myProblemVariable); 


Dann führst du das Skript aus und er wird dir statt der Fehlermeldung den Inhalt der Variable ausgeben. Sollte es sich um ein leeres Fenster halten oder undefined dort stehen, ist sofort klar, dass schon vorher was schiefläuft ;-)
Solltest du eine Referenz auf ein Objekt haben, sieht die Ausgabe in etwa so aus "[object bla]" und du weißt schonmal womit da gearbeitet wird und ob es das Objekt ist das du wolltest.

Hoffe das war verständlicher?

Auf jeden Fall stocherst du mit der Methode nicht ganz so blind herum und kannst vielleicht besser in das Skript einsteigen.


als Antwort auf: [#455875]
X