Page 1 of 2 1 2 LastLast
Showing results 1 to 10 of 11

Thread: API-Zugriff auf Function-Filter

  1. #1
    Join Date
    12.12.2011
    Posts
    20

    Frage API-Zugriff auf Function-Filter

    Guten Tag,

    ich würde gerne über die API Filter einer Bildumschalt-Funktion ( 'Screen switch' ) konfigurieren.
    Die Funktion ist bereits angelegt und die Filter vorkonfiguriert.



    Aus C# will ich neue Data-Sets anlegen, editieren und löschen.



    Leider ist mir nicht klar, wie ich über die RtFunction mittels DynProperty an diese Eigenschaften komme! Ich möchte auf jeden Fall den Umweg über XML-Export der Function -> XML-Manipulation -> XML-Import der Function vermeiden!

  2. #2

    Default Re: API-Zugriff auf Function-Filter

    Hallo Stefan,

    Das Prinzip wie das funktioniert in der API ist eigentlich überall gleich. Mittels "CreateDynproperty" lässt sich ein neuer Dataset erstellen. Nachdem der Dataset erzeugt ist, kann sie konfiguriert werden.

    Die Reihenfolge in der die DynProperties gesetzt werden ist dabei oft relevant. So muss unter umstände zuerst der Typ definiert werden, und danach können weitere Properties definiert werden. Properties die in der GUI ausgegraut sind wenn eine weitere Option in der GUI nicht aktiv ist, können auch über die API nicht gesetzt werden wenn dieses Dynproperty nicht zuerst gesetzt wird.

    XML Export hilft auf jeden Fall weiter zu verstehen wie die Datasets konfiguriert sind, und welche DynProperties über die API verwendet werden können und mit welche Werte sie zu befüllen sind.

    Die online hilfe "object model" bietet im Kapitel "RtFunction.CreateDynProperty" ein Beispiel wie das mit der Bildumschaltung auf das erweiterte Trend Modul Bild funktioniert.

    Hier ein kleines Beispiel in VBA, das Prinzip in C# ist fast gleich.

    Sub add_dataset()
    'create a new dataset at the function
    MyWorkspace.ActiveDocument.RtFunctions.Item("Function_Screen_CF_Reporting").CreateDynProperty ("PictFilter[0].DataSet")
    'check the number of datasets
    Debug.Print MyWorkspace.ActiveDocument.RtFunctions.Item("Function_Screen_CF_Reporting").DynProperties("PictFilter[0].DataSet[-1]")
    'access a specific data set property
    Debug.Print MyWorkspace.ActiveDocument.RtFunctions.Item("Function_Screen_CF_Reporting").DynProperties("PictFilter[0].DataSet[0].TimeFilterIdx")
    Debug.Print MyWorkspace.ActiveDocument.RtFunctions.Item("Function_Screen_CF_Reporting").DynProperties("PictFilter[0].DataSet[1].DatSetType")
    End Sub

  3. #3
    Join Date
    12.12.2011
    Posts
    20

    Default Re: API-Zugriff auf Function-Filter

    Danke!

    Müsste man dann nicht eigentlich so Variablen aus einem Archiv dem DataSet zuordnen können.
    currentFunction.CreateDynProperty("PictFilter[0].DataSet[" + dataSetIndex + "].Filter");
    ....
    currentFunction.CreateDynProperty("PictFilter[0].DataSet[" + dataSetIndex + "].Filter[" + filterIndex + "].VarInfo");
    
    currentFunction.DynProperties["PictFilter[0].DataSet[" + dataSetIndex + "].Filter[" + filterIndex + "].VarInfo[0].Variable"] = "CM";
    currentFunction.DynProperties["PictFilter[0].DataSet[" + dataSetIndex + "].Filter[" + filterIndex + "].VarInfo[0].VarName"] = "CF_foo";
    currentFunction.DynProperties["PictFilter[0].DataSet[" + dataSetIndex + "].Filter[" + filterIndex + "].VarInfo[0].Variable"] = "CF_foo";

  4. #4

    Default Re: API-Zugriff auf Function-Filter

    Im Prinzip sollte man bei Elemente die in der GUI neu erzeugt werden in ein Dialog (datasets), oder hinzugefügt werden in ein Dialog (Variablen), "CreateDynProperty" aufrufen, und entsprechend die Dynproperties für die neu erzeugte Elemente setzen.

    Ohne das jetzt explizit ausprobiert zu haben, hätte ich gesagt, das müsste auch so funktionieren mit Variablen für das Dataset für das Archiv.

    Übrigens gibt es keine "DeleteDynProperty" in der API. Man kann nur neue erstellen und bestehende modifizieren.

    Mfg
    Mark

  5. #5
    Join Date
    12.12.2011
    Posts
    20

    Default AW: API-Zugriff auf Function-Filter

    Hi Mark,

    habe folgendes ausprobiert:
    ....
    bool a = currentFunction.CreateDynProperty("PictFilter[0].DataSet[" + dataSetIndex + "].Filter");
    ....
    bool b = currentFunction.CreateDynProperty("PictFilter[0].DataSet[" + dataSetIndex + "].Filter[" + filterIndex + "].VarInfo");
    currentFunction.DynProperties["PictFilter[0].DataSet[" + dataSetIndex + "].Filter[" + filterIndex + "].VarInfo[0].Variable"] = "CM";
    currentFunction.DynProperties["PictFilter[0].DataSet[" + dataSetIndex + "].Filter[" + filterIndex + "].VarInfo[0].VarName"] = "CF_foo";
    currentFunction.DynProperties["PictFilter[0].DataSet[" + dataSetIndex + "].Filter[" + filterIndex + "].VarInfo[0].Variable"] = "CF_foo";

    a = true;
    b = false;

    Leider werden keine Variablen dem DataSet hinzugefügt!
    Last edited by stefan.maus : 16th October 2012 at 09:13

  6. #6
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    879

    Default AW: API-Zugriff auf Function-Filter

    Handbuch -> Programmierschnittstellen -> Object Model -> RtFunctions

  7. #7
    Join Date
    12.12.2011
    Posts
    20

    Daumen runter Re: API-Zugriff auf Function-Filter

    Danke. Löst mein Problem aber leider nicht.
    Last edited by stefan.maus : 16th October 2012 at 10:05

  8. #8
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    879

    Default AW: API-Zugriff auf Function-Filter

    Das Prinzip ist ja das gleiche...
    Was beim einer Bildumschaltfunktion auf das ETM funktioniert, kann auch bei allen anderen Funktionen herangezogen werden...
    Vorgehensweise ist immer die gleiche...

    Einfach im Editor "F1" drücken und dann den obigen Pfad folgen....
    Wie die einzelnen zu modifzierenden Properties heißen, kann ab besten durch das *.xml exportieren der Funktion herausgefunden werden...

  9. #9
    Join Date
    12.12.2011
    Posts
    20

    Default Re: API-Zugriff auf Function-Filter

    Doku und XML habe ich mir selbstverständlich angeschaut.


    //Filter
    _currentFunction = CurrentProject.RtFunctions().Item(functionName);
    _currentFunction.CreateDynProperty("PictFilter[0].DataSet");
    _currentFunction.DynProperties["PictFilter[0].DataSet[0].Name"] = "DataSet_Foo_1";
    _currentFunction.DynProperties["PictFilter[0].DataSet[0].DatSetType"] = 3;

    _currentFunction.CreateDynProperty("PictFilter[0].DataSet[0].Filter");
    _currentFunction.CreateDynProperty("PictFilter[0].DataSet[0].Filter[0].VarInfo"); _currentFunction.DynProperties["PictFilter[0].DataSet[0].Filter.VarInfo[0].Archive"] = "CM";
    _currentFunction.DynProperties["PictFilter[0].DataSet[0].Filter.VarInfo[0].VarName"] = "CF_Foo";
    _currentFunction.DynProperties["PictFilter[0].DataSet[0].Filter.VarInfo[0].Variable"] = "CF_Foo";


    DataSet wird angelegt und bekommt den Namen. Das Hinzufügen von Variablen funktioniert auf diese Weise nicht.

  10. #10

    Default Re: API-Zugriff auf Function-Filter

    Hallo Stefan,

    Eventuell liegt das an der Reihenfolge vom Setzen der DynProperties (wie schon mal erwähnt), zugegeben, das ist hier vielleicht nicht so offensichtlich.

    Mit DynPropertiesEnum gibt es übrigens eine weitere Möglichkeit zu prüfen welche DynProperties es gibt, und welchen Datentyp diese erwarten. Einfach im Debugger in VBA durchsteppen und im locals Fenster den Inhalt der "DynProps" variablen ansehen.

    Mit diesem Beispiel hat es bei mir funktioniert:

    Sub ScrSwRepViewer()
    Dim aP As Project
    Dim mFnc As RtFunction
    Dim mVar As Variable
    Dim mArv As ArchiveED
    Dim mArvVar As ArchiveVarED
    Dim dynProps1, dynProps2, dynProps3, dynProps4, dynProps5
    
    Set aP = MyWorkspace.ActiveDocument
    Set mFnc = aP.RtFunctions.Item("b")
    Set mVar = aP.Variables.Item("var")
    Set mArv = aP.ArchivesED.Item("01")
    Set mArvVar = mArv.Item("var")
    
    mFnc.CreateDynProperty ("PictFilter[0].DataSet[0].Filter[0].VarInfo")
    mFnc.DynProperties("PictFilter[0].DataSet[0].Filter[0].VarInfo[0].Archive") = "01"
    mFnc.DynProperties("PictFilter[0].DataSet[0].Filter[0].VarInfo[0].Variable") = "var"
    mFnc.DynProperties("PictFilter[0].DataSet[0].Filter[0].VarInfo[0].VarName") = "var"
    mFnc.DynProperties("PictFilter[0].DataSet[0].Filter[0].VarInfo[0].VarMinValue") = -1000
    mFnc.DynProperties("PictFilter[0].DataSet[0].Filter[0].VarInfo[0].VarMaxValue") = 1000
    
    
    dynProps1 = mFnc.DynPropertiesEnum("")
    dynProps2 = mFnc.DynPropertiesEnum("PictFilter[0]")
    dynProps3 = mFnc.DynPropertiesEnum("PictFilter[0].DataSet[0]")
    dynProps4 = mFnc.DynPropertiesEnum("PictFilter[0].DataSet[0].Filter[0]")
    dynProps5 = mFnc.DynPropertiesEnum("PictFilter[0].DataSet[0].Filter[0].VarInfo[0]")
    
    
    
    
    End Sub

    Mfg
    Mark

Similar Threads

  1. Math-Var: Zugriff auf Unterprojekt-Variablen
    By stessl666 in forum zenon Supervisor
    Replies: 3
    Last Post: 20th December 2011, 16:00
  2. Replies: 4
    Last Post: 14th June 2011, 11:16
  3. Zugriff auf Microsoft WebBrowser
    By henrykm in forum VBA
    Replies: 6
    Last Post: 9th February 2010, 12:01
  4. Dynamischer Zugriff auf Textarray
    By affoltep in forum zenon Supervisor
    Replies: 5
    Last Post: 10th August 2009, 09:30
  5. Replies: 2
    Last Post: 3rd June 2008, 15:04

Tags for this Thread

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •