Skip to main content

Content Transport Feature per API erstellen

Comments

9 comments

  • Zendesk API User
    Author: broszeit - 7/16/2013 11:03

    Hallo Artem,

    ich habe gerade versucht das Problem nachzustellen, bei mir funktionierte das Erstellen des Features mit anschließendem Importieren allerdings, wenn ich die Version mit hinzugefügtem FeatureDescriptor verwende. (mit den folgenden Anpassungen)

    while ((len = featureStream.read(buf)) > 0) {
        out.write(buf, 0, len);
        out.close();
        featureStream.close();
    }

    Die beiden close() Anweisungen ergeben in der Schleife keinen Sinn, ich habe sie hinter die Schleife verschoben.

    ConnectionManager.closeInstance();

    Woher kommt diese Methode? Ich kann diese weder in der FS4.2 noch in der FS5.0 API finden und der Code kompiliert bei mir nicht, wenn ich diese Zeile drin lasse....

    Welche FirstSpirit Version wird überhaupt eingesetzt?

    Viele Grüße

    Rouven

    0
  • Zendesk API User
    Author: tklein - 7/16/2013 11:10

    Das Feature ist noch nicht fertig, deswegen kommst du nicht dran.

    Nach dem:

    ServerActionHandle<? extends FeatureProgress, Boolean> featureProgress = agent.createFeatureTransportFile(featureDescriptor);

    musst du erst warten bis der Prozess durch ist. das machst du mit

    featureProgress.getResult(false)

    siehe dazu: http://www.e-spirit.com/odfs42/access/de/espirit/firstspirit/access/ServerActionHandle.html

    und dann kann dein Code weiter laufen...

    0
  • Zendesk API User
    Author: apetrov - 7/16/2013 12:18

    Danke, mit den Änderungen hat es funktioniert. Jedoch wie bereits erwähnt nur nachdem ich über alle FeatureDescriptoren iteriert und meinen rausgesucht habe. Die ConnectionManager.closeInstance() Methode ist von einer eigenen Klasse, deshalb hier nicht weiter wichtig (schließt im Grunde nur die Verbindung usw.). Benutzt wird die Version 5.0.318.57504.

    Kommt man an das neue Feature nur indem man über alle FeatureDescriptoren iteriert?

    0
  • Zendesk API User
    Author: tklein - 7/16/2013 12:27

    nein es sollte auch gehen, wenn man den FeatureDescripter nutzt, den man oben bekommt:

    FeatureDescriptor featureDescriptor = agent.createFeature(idProvider.getUid(), revision, false);

    [...]

    ServerActionHandle<? extends FeatureProgress, Boolean> featureProgress = agent.createFeatureTransportFile(featureDescriptor);

    0
  • Zendesk API User
    Author: apetrov - 8/14/2013 16:49

    Tobias Klein schrieb:

    nein es sollte auch gehen, wenn man den FeatureDescripter nutzt, den man oben bekommt:

    FeatureDescriptor featureDescriptor = agent.createFeature(idProvider.getUid(), revision, false);

    [...]

    ServerActionHandle<? extends FeatureProgress, Boolean> featureProgress = agent.createFeatureTransportFile(featureDescriptor);

    Das funktioniert leider nicht. Ich muss dann den umständlichen Weg gehen und über alle existierenden Features iterieren. Das müsste doch einfacher gehen?

    0
  • Zendesk API User
    Author: tklein - 8/16/2013 9:05

    hm bei mir schon. und ohne Fehlerbeschreibung was mit dem Beispiel nicht geht bzw. wie sich das "funktioniert nicht" äussert kann ich dir wohl nicht weiterhelfen.

    0
  • Zendesk API User
    Author: apetrov - 8/16/2013 12:21

    public static void main(String[] args) {

            connection = de.espirit.firstspirit.access.ConnectionManager.getConnection(host,

                    port, de.espirit.firstspirit.access.ConnectionManager.HTTP_MODE, "fs5root",

                    user, password);

             try {

                connection.connect();

                System.out.println("Verbindung hergestellt - ");

            } catch (IOException ex) {

                JOptionPane.showMessageDialog(new JFrame(), ex.getMessage());

            } catch (AuthenticationException ex) {

                JOptionPane.showMessageDialog(new JFrame(), ex.getMessage());

            } catch (MaximumNumberOfSessionsExceededException ex) {

                JOptionPane.showMessageDialog(new JFrame(), ex.getMessage());

            }

            project = connection.getProjectByName("Mithras Energy");

            IDProvider featureTemplate = project.getUserService().getStore(Store.Type.TEMPLATESTORE, false).getStoreElement(24);

            try {

                createFeature(featureTemplate, getAgent());

            } catch (Exception ex) {

                Logger.getLogger(Feature.class.getName()).log(Level.SEVERE, null, ex);

            }

        }

        public static FeatureAgent getAgent() {

            SpecialistsBroker broker = connection.getBroker().requireSpecialist(BrokerAgent.TYPE).getBrokerByProjectName(project.getName());

            return broker.requireSpecialist(FeatureAgent.TYPE);

        }

        public static void createFeature(IDProvider template, FeatureAgent agent) throws Exception {

            List<Revision> history = template.getHistory();

            FeatureDescriptor featureDescriptor = agent.createFeature(template.getUid(), history.get(0), false);

            FeatureModel featureModel = agent.createFeatureModel(featureDescriptor);

            featureModel.add(template);

            agent.saveFeature(featureModel);

            InputStream inputStream = getInputStream(featureDescriptor, agent);

            writeFile(inputStream);

        }

        private static InputStream getInputStream(FeatureDescriptor featureDescriptor, FeatureAgent agent) throws Exception {

            ServerActionHandle<? extends FeatureProgress, Boolean> featureProgress = agent.createFeatureTransportFile(featureDescriptor);

            try {

                //Wait until feature is generated

                while (!featureProgress.getResult(false)) {

                    try {

                        Thread.sleep(1000);

                    } catch (InterruptedException ex) {

                        throw new Exception(ex);

                    }

                }

            } catch (Exception ex) {

                throw new Exception(ex);

            }

            FeatureProgress progress = featureProgress.getProgress(true);

            return agent.downloadFeatureFile(progress.getFeatureFile());

        }

        private static void writeFile(InputStream inputStream) {

            FileOutputStream out = null;

            try {

                File file = new File("homepage.zip");

                out = new FileOutputStream(file);

                byte[] b = new byte[1024];

                int count;

                while ((count = inputStream.read(b)) > 0) {

                    out.write(b, 0, count);

                }

                inputStream.close();

                out.close();

            } catch (FileNotFoundException ex) {

                Logger.getLogger(Feature.class.getName()).log(Level.SEVERE, null, ex);

            } catch (IOException ex) {

                Logger.getLogger(Feature.class.getName()).log(Level.SEVERE, null, ex);

            } finally {

                try {

                    out.close();

                } catch (IOException ex) {

                    Logger.getLogger(Feature.class.getName()).log(Level.SEVERE, null, ex);

                }

            }

        }

    Im Ergebnis wird zwar eine Zip Datei erstellt, aber alle darin enthaltenen Dateien haben keine Daten.

    0
  • Zendesk API User
    Author: apetrov - 8/16/2013 13:36

    Wenn ich die createFeature(...) Methode allerdings dahingehend ändere:

    ...

    public static void createFeature(IDProvider template, FeatureAgent agent) throws Exception {

            List<Revision> history = template.getHistory();

            FeatureDescriptor featureDescriptor = agent.createFeature(template.getUid(), history.get(0), false);

            FeatureModel featureModel = agent.createFeatureModel(featureDescriptor);

            featureModel.add(template);

            agent.saveFeature(featureModel);

            List<FeatureDescriptor> featureDescriptors = agent.getFeatureDescriptors();

            for (FeatureDescriptor fd : featureDescriptors) {

                if (fd.getFeatureName().equals(featureDescriptor.getFeatureName())) {

                    featureDescriptor = fd;

                    break;

                }

            }

            InputStream inputStream = getInputStream(featureDescriptor, agent);

            writeFile(inputStream);

        }

    ...

    Funktioniert es und ich bekomme einen validen Feature-Export. Bei unserem Vorgehen kommen allerdings im Laufe der Zeit immer mehr Features zum Projekt dazu. Da man ein erstelltes Features nicht mehr löschen kann, muss die for()-Schleife irgendwann über unzählige Features iterieren.

    0
  • Zendesk API User
    Author: gockel - 8/16/2013 13:55

    Das dazugehörige Problem ist hier beschrieben: siehe Re: Export von Datenquellen per Skript

    0

Please sign in to leave a comment.