<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to User created Refactoring functions?</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/</id><updated>2023-08-09T17:05:53.067000Z</updated><subtitle>Recent posts to User created Refactoring functions?</subtitle><entry><title>User created Refactoring functions?</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/?limit=25#b932/5bcf" rel="alternate"/><published>2023-08-09T17:05:53.067000Z</published><updated>2023-08-09T17:05:53.067000Z</updated><author><name>bnewman</name><uri>https://forge.codesys.com/u/bnewman/</uri></author><id>https://forge.codesys.com5b660ca5362514a037d9d8211507affb1d6b86d8</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;That's fine with me&lt;br/&gt;
I added a comment to that snippet with an improved version that does throw an except if the property already exists&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>User created Refactoring functions?</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/?limit=250#b932" rel="alternate"/><published>2023-08-09T09:38:16.368000Z</published><updated>2023-08-09T09:38:16.368000Z</updated><author><name>h-hermsen</name><uri>https://forge.codesys.com/u/hermsen/</uri></author><id>https://forge.codesys.com22e3b03e26e4c64e81056d6d7c3678865c4708b3</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Thank you for this snippet, I took the liberty to post repost it here;&lt;br/&gt;
&lt;a href="https://forge.codesys.com/tol/scripting/snippets/search/?q=status%3AUnlicense"&gt;https://forge.codesys.com/tol/scripting/snippets/search/?q=status%3AUnlicense&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>User created Refactoring functions?</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/?limit=25#d16e" rel="alternate"/><published>2023-08-08T19:23:41.809000Z</published><updated>2023-08-08T19:23:41.809000Z</updated><author><name>bnewman</name><uri>https://forge.codesys.com/u/bnewman/</uri></author><id>https://forge.codesys.comc4fd9c09ed565c92f6db2d3a80255120401acba0</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Here is an updated version that works in Codesys 3.5.19.2&lt;/p&gt;
&lt;p&gt;That old version didn't like the line&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;fb.create_property(propname, proptype)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;def&lt;/span&gt; &lt;span class="nt"&gt;CreateAllProperties&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;fbname&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nt"&gt;get&lt;/span&gt; &lt;span class="nt"&gt;current&lt;/span&gt; &lt;span class="nt"&gt;project&lt;/span&gt;
    &lt;span class="nt"&gt;project&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;primary&lt;/span&gt; 
    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nt"&gt;find&lt;/span&gt; &lt;span class="nt"&gt;the&lt;/span&gt; &lt;span class="nt"&gt;function&lt;/span&gt; &lt;span class="nt"&gt;block&lt;/span&gt;
    &lt;span class="nt"&gt;fb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;find&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;fbname&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;True&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;

    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nt"&gt;get&lt;/span&gt; &lt;span class="nt"&gt;the&lt;/span&gt; &lt;span class="nt"&gt;declaration&lt;/span&gt; &lt;span class="nt"&gt;text&lt;/span&gt;
    &lt;span class="nt"&gt;declaration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;fb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;textual_declaration&lt;/span&gt;
    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nt"&gt;iterate&lt;/span&gt; &lt;span class="nt"&gt;all&lt;/span&gt; &lt;span class="nt"&gt;lines&lt;/span&gt; &lt;span class="nt"&gt;in&lt;/span&gt; &lt;span class="nt"&gt;the&lt;/span&gt; &lt;span class="nt"&gt;declaration&lt;/span&gt;
    &lt;span class="nt"&gt;for&lt;/span&gt; &lt;span class="nt"&gt;i&lt;/span&gt; &lt;span class="nt"&gt;in&lt;/span&gt; &lt;span class="nt"&gt;range&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;declaration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;linecount&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;
        &lt;span class="nt"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;declaration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;get_line&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;i&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;  &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nt"&gt;get&lt;/span&gt; &lt;span class="nt"&gt;this&lt;/span&gt; &lt;span class="nt"&gt;declaration&lt;/span&gt; &lt;span class="nt"&gt;line&lt;/span&gt;
        &lt;span class="nt"&gt;stripped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;strip&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nt"&gt;strip&lt;/span&gt; &lt;span class="nt"&gt;out&lt;/span&gt; &lt;span class="nt"&gt;white&lt;/span&gt; &lt;span class="nt"&gt;space&lt;/span&gt; &lt;span class="nt"&gt;in&lt;/span&gt; &lt;span class="nt"&gt;this&lt;/span&gt; &lt;span class="nt"&gt;line&lt;/span&gt;
        &lt;span class="nt"&gt;endofline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;stripped&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;find&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;";"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="nt"&gt;stripped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;stripped&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;endofline&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nt"&gt;discards&lt;/span&gt; &lt;span class="nt"&gt;anything&lt;/span&gt; &lt;span class="nt"&gt;past&lt;/span&gt; &lt;span class="nt"&gt;the&lt;/span&gt; &lt;span class="s2"&gt;";"&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;comments&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="nt"&gt;if&lt;/span&gt; &lt;span class="nt"&gt;stripped&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;startswith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"_"&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;
            &lt;span class="nt"&gt;var&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;stripped&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;split&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;":"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;   &lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;NOTE&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;this&lt;/span&gt; &lt;span class="nt"&gt;also&lt;/span&gt; &lt;span class="nt"&gt;removes&lt;/span&gt; &lt;span class="nt"&gt;initial&lt;/span&gt; &lt;span class="nt"&gt;value&lt;/span&gt; &lt;span class="nt"&gt;declarations&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;or&lt;/span&gt; &lt;span class="nt"&gt;puts&lt;/span&gt; &lt;span class="nt"&gt;them&lt;/span&gt; &lt;span class="nt"&gt;into&lt;/span&gt; &lt;span class="nt"&gt;the&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;index&lt;/span&gt; &lt;span class="nt"&gt;of&lt;/span&gt; &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;which&lt;/span&gt; &lt;span class="nt"&gt;we&lt;/span&gt; &lt;span class="nt"&gt;can&lt;/span&gt; &lt;span class="nt"&gt;discard&lt;/span&gt;
            &lt;span class="nt"&gt;membername&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;strip&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nt"&gt;propname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;membername&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;lstrip&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"_"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nt"&gt;proptype&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;strip&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nt"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Creating property \""&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;propname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;"\" with type "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;proptype&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nt"&gt;fb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;create_property&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;propname&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;return_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;proptype&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;None&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nt"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"property "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;propname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;" with type "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;proptype&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;"was created!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

            &lt;span class="nt"&gt;newprop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;fb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;find&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;propname&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
            &lt;span class="nt"&gt;getter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;newprop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;find&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Get"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;
            &lt;span class="nt"&gt;setter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nt"&gt;newprop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;find&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Set"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;            
            &lt;span class="p"&gt;#&lt;/span&gt;&lt;span class="nn"&gt;newprop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;textual_declaration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;insert&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"{attribute 'monitoring':='call'}\r\n"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nt"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Inserting to getter"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nt"&gt;getter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;textual_implementation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;propname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;":= "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;membername&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;";"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nt"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Inserting to setter"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nt"&gt;setter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;textual_implementation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;membername&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;":= "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;propname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;";"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nt"&gt;CreateAllProperties&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"*NameOfFunctionBlock*"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry><entry><title>User created Refactoring functions?</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/?limit=50#274c" rel="alternate"/><published>2022-09-19T17:20:19.010000Z</published><updated>2022-09-19T17:20:19.010000Z</updated><author><name>tvm</name><uri>https://forge.codesys.com/u/tvm/</uri></author><id>https://forge.codesys.com00ce47f09a6b0d1aa9390ba188251f4f96343bcd</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Try this:&lt;br/&gt;
&lt;a href="https://help.codesys.com/webapp/_cds_struct_using_scripts;product=codesys;version=3.5.17.0" rel="nofollow"&gt;https://help.codesys.com/webapp/_cds_struct_using_scripts;product=codesys;version=3.5.17.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This script will find any variable that starts with an underscore and create a property for it&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;def CreateAllProperties(fbname):&lt;/span&gt;
&lt;span class="err"&gt;    # get current project&lt;/span&gt;
&lt;span class="err"&gt;    project = projects.primary &lt;/span&gt;
&lt;span class="err"&gt;    # find the function block&lt;/span&gt;
&lt;span class="err"&gt;    fb = project.find(fbname, True)[0]&lt;/span&gt;
&lt;span class="err"&gt;    # get the declaration text&lt;/span&gt;
&lt;span class="err"&gt;    declaration = fb.textual_declaration&lt;/span&gt;
&lt;span class="err"&gt;    # iterate all lines in the declaration&lt;/span&gt;
&lt;span class="err"&gt;    for i in range(declaration.linecount):&lt;/span&gt;
&lt;span class="err"&gt;        line = declaration.get_line(i)  # get this declaration line&lt;/span&gt;
&lt;span class="err"&gt;        stripped = line.strip() #strip out white space in this line&lt;/span&gt;
&lt;span class="err"&gt;        endofline = stripped.find(";")&lt;/span&gt;
&lt;span class="err"&gt;        stripped = stripped[0:endofline]    #discards anything past the ";" (comments, etc)&lt;/span&gt;
&lt;span class="err"&gt;        if stripped.startswith("_"):&lt;/span&gt;
&lt;span class="err"&gt;            var = stripped.split(":")   #NOTE: this also removes initial value declarations, or puts them into the [2] index of var, which we can discard&lt;/span&gt;
&lt;span class="err"&gt;            propname = var[0][1:]&lt;/span&gt;
&lt;span class="err"&gt;            proptype = var[1]&lt;/span&gt;
&lt;span class="err"&gt;            print("Creating property " + propname + " with type " + proptype)&lt;/span&gt;
&lt;span class="err"&gt;            fb.create_property(propname, proptype)&lt;/span&gt;
&lt;span class="err"&gt;            newprop = fb.find(propname)[0]&lt;/span&gt;
&lt;span class="err"&gt;            getter = newprop.find("Get")[0]&lt;/span&gt;
&lt;span class="err"&gt;            setter = newprop.find("Set")[0]            &lt;/span&gt;
&lt;span class="err"&gt;            newprop.textual_declaration.insert(0,0,"{attribute 'monitoring':='call'}\r\n")&lt;/span&gt;
&lt;span class="err"&gt;            getter.textual_implementation.replace(propname + ":= _" + propname + ";")&lt;/span&gt;
&lt;span class="err"&gt;            setter.textual_implementation.replace("_" + propname + ":= " + propname + ";")&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry><entry><title>User created Refactoring functions?</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/678b24f53f/?limit=25#5e2a" rel="alternate"/><published>2022-08-15T17:06:17.887000Z</published><updated>2022-08-15T17:06:17.887000Z</updated><author><name>thecolonel26</name><uri>https://forge.codesys.com/u/thecolonel26/</uri></author><id>https://forge.codesys.com0930b2bc3a5650195629e358f3724a4cdbeff91b</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Is there any way to extend Codesys Development System with C# or Python to add your own refactoring functions?&lt;/p&gt;
&lt;p&gt;I would very much like to automate FB properties to automatically add a backing VAR. It is vary tedious doing that by hand.&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>