plamka
I'm new here

Datenbankinhalte per Script Projektübergreifend kopieren

Jump to solution

Hallo,

ich würde gerne Inhalte aus einer Datenbank aus dem Projekt A in die Datenbank aus dem Projekt B kopieren.

Projekt B hat zugleich einen Remotezugang auf die Medieninhalte aus dem Projekt A.

Mein Script funktioniert bereits zu 99%. Ich habe nurnoch ein Problem mit den Remotemedien.

Mein Code sieht wie folgt aus:

us = context.getUserService();

cs = us.getStore(Store.CONTENT_STORE, false);

contentSource = cs.getContent2ByName("i_news");

schemaTable = contentSource.getSchema();

Session orSession = schemaTable.getSession();

Select select = orSession.createSelect("I_News");

...

entity_news.setValue("pic_press_release",entity_press_release.getValue("image"));

...

"entity_news" ist ein neuer Datensatz in dem Projekt B. (Wird später per orSession.commit() gespeichert)

"entity_press_release" ist der Datensatz aus dem Projekt A. (Wird an einer anderen Stelle ermittelt, hab das hier weg gelassen)

Die Felder "pic_press_release" und "image" sind beide vom Typ "FS_REFERENCE".

Das Problem was ich jetzt habe ist, dass ich das Objekt aus dem Projekt B nicht dem Objekt aus Projekt A

gleich setzen darf.

Der Inhalt von "image" könnte z.B.

PIC_PRESS_RELEASE

<CMS_VALUE name="cs_picture" tag="FS_REFERENCE"><LANG id="§" set="1"><UID>testobjekt</UID><UIDTYPE>MEDIASTORE_LEAF</UIDTYPE><REMOTE/><SECTION></SECTION></LANG></CMS_VALUE>

Das Feld  "pic_press_release" erwartet allerdings

PIC_PRESS_RELEASE

<CMS_VALUE name="cs_pic_press_release" tag="FS_REFERENCE"><LANG id="§" set="1"><UID>testobjekt</UID><UIDTYPE>MEDIASTORE_LEAF</UIDTYPE><REMOTE>internet</REMOTE></LANG></CMS_VALUE>

Kann ich den Wert entity_press_release.getValue("image") noch nirgendwie manipulieren? z.B. replace von Zeichenketten ???

Hat jemand eine Idee?

0 Kudos
1 Solution

Accepted Solutions

Mit diesem Code sollte es funktionieren:

remoteProject = context.getConnection().getProjectById(9);

mediaStore = remoteProject.getUserService().getStore(Store.Type.MEDIASTORE,false);

medium = mediaStore.getMediaByUid("business_handshake");

tr = TargetReferences.newInstance(context.getProject().getMasterLanguage(),medium, "intranet");

data.get("cs_pic").getEditor().set(context.project.masterLanguage, tr);

dataset.setData(data);

dataset.save();

Viele Grüße

Matthias Gelinski

View solution in original post

0 Kudos
10 Replies
plamka
I'm new here

Noch ein paar Infos.

Wenn ich mir die Klasse von dem Objekt "entity_press_release.getValue("image") "

zurück geben lasse, erhalte ich de.espirit.firstspirit.client.editorcomponent.EditorWrapper

Mit der Klasse kann ich leider nichts anfangen ???

0 Kudos
0 Kudos

Hi, ich habe jetzt folgendes gemacht, komme allerdings nicht so recht weiter.

     dataObject = contentSource.getDataObject(entity_news);

     dateValue = dataObject.createDataValue("cs_pic_subline_ES");

   

Muss ich überhaupt ein neues Element erstellen  ????   

Der Inhalt muss am Ende wie folgt ausschauen ->

<UID>testobjekt</UID><UIDTYPE>MEDIASTORE_LEAF</UIDTYPE><REMOTE>internet</REMOTE>

    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

    Document doc = builder.newDocument();

    Element element = doc.createElement("UID");

   

Reicht es eigentlich aus ein w3c Element anzulegen oder muss ich das anders machen???

So wie ich das momentan nämlich mache, funktioniert das nicht richtig

   dateValue =    dataObject.create("cs_pic_press_release", us, element) ;

   dateValue.getEditor().setValueNode(element);

   contentSource.setDataObject(entity_news, dataObject);

Zum Schluss wird abgespeichert, es wird aber immer nur ein leeres Element angelegt ???

  orSession.release(entity_news);

  orSession.commit(); 

Bin ich auf dem richtigen Weg???

0 Kudos

ich habe jetzt noch folgendes ausprobiert

dateValue =dataObject.create("cs_pic_press_release", us, null);

dateValue.getEditor().getValue().setUid("Taufe_Rio_Blanco_2");

dateValue.getEditor().getValue().setRemoteSymName("internet");

dateValue.getEditor().getValue().setUidType(UidType.MEDIASTORE_LEAF);

Das funktioniert ebenfalls nicht, die Änderungen werden nicht gespeichert ????

Reicht der folgende Aufruf nicht aus ???

contentSource.setDataObject(entity_news, dataObject);

orSession.release(entity_news);

orSession.commit();

0 Kudos

Kann mir jemand sagen ob ich jetzt auf dem richtigen Weg bin???

So funktioniert das nämlich auch nicht ?

dataObject = contentSource.getDataObject(entity_news);

dataValue =    dataObject.create("cs_pic_press_release", us, null);

editorValue = dataValue.getEditor();

value = editorValue.get(siteStore.getProject().getMasterLanguage());

value.setUid("SEITE");

value.setRemoteSymName("internet");

value.setUidType(UidType.MEDIASTORE_LEAF);

editorValue.set(siteStore.getProject().getMasterLanguage(), value);

0 Kudos

Ihr letzter Ansatz war schon gut.

Nach dem verändern des DataObjects müssen sie dieses jedoch wieder sichern.

Wenn man zusätzlich noch den Weg über das Dataset geht, sollte es mit dem Folgenden Code funktionieren.

dataset = contentSource.getDataset(entity_news);

dataObject = dataset.getData();

dataValue = dataObject.create("cs_pic_press_release", us, null);

editorValue = dataValue.getEditor();

value = editorValue.get(siteStore.getProject().getMasterLanguage());

value.setUid("SEITE");

value.setRemoteSymName("internet");

value.setUidType(UidType.MEDIASTORE_LEAF);

editorValue.set(siteStore.getProject().getMasterLanguage(), value);

dataset.setData(dataObject);

0 Kudos

Vielen Dank für die Antwort, leider speichert er das Dataset immer noch nicht ???

Mein Quellcode sieht wie folgt aus:

us = context.getUserService();

cs = us.getStore(Store.CONTENT_STORE, false);

contentSource = cs.getContent2ByName("i_news");

schemaTable = contentSource.getSchema();

Session orSession = schemaTable.getSession();

Select select = orSession.createSelect("I_News");

keys_news = orSession.fetchKeys(select);

if(keys_news.size()>0)

{

    // update

    row_news = keys_news.get(0);

    Entity entity_news = orSession.find(row_news);

    Object object_news = entity_news.getValue("pr_fs_id") ;

    text.append("News update ID: "+object_news+"<br/>");

   

    entity_news.setValue("pic_subline_DE","Text ... ");

   

    // get dataset

    dataset = contentSource.getDataset(entity_news);

    dataObject = dataset.getData();

    dataValue = dataObject.create("cs_pic_press_release", us, null);

    editorValue = dataValue.getEditor();

    value = editorValue.get(siteStore.getProject().getMasterLanguage());

    value.setUid("SITE");

    value.setRemoteSymName("internet");

    value.setUidType(UidType.MEDIASTORE_LEAF);

    editorValue.set(siteStore.getProject().getMasterLanguage(), value);

    dataset.setData(dataObject);

    contentSource.setDataObject(entity_news, dataObject);

       

    orSession.release(entity_news);

    orSession.commit();  

}

0 Kudos

Mit diesem Code sollte es funktionieren:

remoteProject = context.getConnection().getProjectById(9);

mediaStore = remoteProject.getUserService().getStore(Store.Type.MEDIASTORE,false);

medium = mediaStore.getMediaByUid("business_handshake");

tr = TargetReferences.newInstance(context.getProject().getMasterLanguage(),medium, "intranet");

data.get("cs_pic").getEditor().set(context.project.masterLanguage, tr);

dataset.setData(data);

dataset.save();

Viele Grüße

Matthias Gelinski

0 Kudos
TimoMeister
Returning Responder

Gibt es hier ein fertiges Script, das man verwenden kann um Datensätze von einem Projekt in das andere kopireren kann?

0 Kudos