OK Brains Trust, this needs all of your input! I can't explain this at all.

Have implemented Joshua's suggestion from above, macro cal and 
action-listops code, and added a couple of action-log calls to try and 
tract processing.

Code is as follows:
<code>
\define buttonActions()
<$list filter="[tag[Mark]]">
     <!--add global exhibition_id to the exhibition_id list-field of each 
marked artwork tiddler-->
     <!--$listops $subfilter will append any new filter run to the existing 
list-field-->
           <$action-listops
               $field="exhibition_id" 
               $subfilter="[{$:/TLS/exhibition_id}]"
          />

<$action-log message="artwork_id" value={{!!artwork_id}} />
   
     <!--append each artwork_id to artwork_id list-field of the exhibition 
tiddler-->
          <$action-listops
               $tiddler= {{{ [{$:/TLS/exhibition_id}] }}}
               $field="artwork_id" 
               $subfilter="[{$:/TLS/artwork_id}]"
          />

<$action-log message="exhibition_id" value={{$:/TLS/artwork_id}} />

    
</$list>
\end

This action will link the marked artworks with the selected exhibition.

The list of marked artworks

<$list 
     filter="[tag[Artworks]tag[Mark]!<currentTiddler>sort[title]]">
     &bull; 
     <$link/>
     <$view  field="artwork_title" /> 
     <$view field="artwork_type"/>
     <br/>
</$list>

<!-- the selected exhibition id will be stored in the exhibiton_id field on 
this tiddler-->
Choose the exhibition from this list:

<$macrocall 
     $name="edit-list" 
     tiddler="$:/TLS/exhibition_id"
     listview="{{{ [<value>get[exhibition_name]] }}}" 
     filter="[tag[Exhibitions]!tag[Index]]" 
/>

<$action-log message="macrocall exhibition_id" value={{$:/TLS/artwork_id}} 
/>

<$button actions=<<buttonActions>> >
Link Artworks to Exhibition
</$button>
</code>



On Tuesday, 6 October 2020 at 15:34:43 UTC+11 Bob Jansen wrote:

> Joshua,
>
> just tried your suggestion. MIxed result.
>
> The test was:
>
> artworks marked TK17 and TK19
> exhibition selected TK21
>
> The first action-listops worked as the action-setfield did before, TK21 
> added to the exhibition_id field of both TK17 and TK19. 
>
> The second action-listops worked better, only one instance of TK19 added 
> to the artwork_id of TK21 but TK17 missing. I my code, I would have seen 
> two TK19's in the field so the action-listops means I don't need the 
> 'contains' list operator.
>
> $:/TLS/artwork_id is set to TK19 but maybe the second action-listops is 
> not being performed until both artwork tiddlers have been processed through 
> the first action-listops.
>
> Still onward and upward.
>
> bobj
>
>
> On Tuesday, 6 October 2020 10:26:49 UTC+11, Joshua Fontany wrote:
>>
>> One problem here is that the code inside of the $button, including your 
>> $action widgets, are parsed/rendered once when the Button itself is 
>> displayed, and will not be updated as the underlying Wiki tiddlers change 
>> (for example, once that Button is onscreen, changes to the list of Tagged 
>> tiddlers will not be picked up).
>>
>> In order to work around this, it is recommended that you pass all actions 
>> that need complex wikitext to a button as-a-macro-parameter to the 
>> "actions" parameter. This causes the wikitext in the actions block to be 
>> parsed and "rendered" at the time the button is clicked. Like so:
>>
>> \define buttonActions()
>> <$list filter="[tag[Mark]]">
>>      <!--add global exhibition_id to the exhibition_id list-field of each 
>> marked artwork tiddler-->
>>      <!--$listops $subfilter will append any new filter run to the 
>> existing list-field-->
>>            <$action-listops
>>                $field="exhibition_id" 
>>                $subfilter="[{$:/TLS/exhibition_id}]"
>>           />
>>    
>>      <!--append each artwork_id to artwork_id list-field of the 
>> exhibition tiddler-->
>>           <$action-listops
>>                $tiddler= {{{ [{$:/TLS/exhibition_id}] }}}
>>                $field="artwork_id" 
>>                $subfilter="[{$:/TLS/artwork_id}]"
>>           />
>>      
>> </$list>
>> \end
>>
>> <$button actions=<<buttonActions>> >
>> Link Artworks to Exhibition
>> </$button>
>>
>>
>> Best,
>> Joshua Fontany
>>
>> On Monday, October 5, 2020 at 12:10:48 AM UTC-7 TW Tones wrote:
>>
>>> Bob,
>>>
>>> I have not seen a fault yet, I will keep looking, however when adding 
>>> items to a list consider using the ActionListops widget 
>>> <https://tiddlywiki.com/#ActionListopsWidget>rather than adding 
>>> suffixes. It has the advantage of not setting it twice etc...
>>>
>>> Your second attempt at the first action set field will store each 
>>> tiddler tagged Mark in _null thus current tiddler will be the 
>>> currentTiddler running when you click the button.
>>>
>>> When debugging buttons 
>>>
>>>    - you can make large buttons by displaying an intermediate result as 
>>>    the button title to see the output.
>>>    - Your can also make the same loop as just a list, and text what 
>>>    your logic generated before you hide it with actions tiddlers when don't 
>>>    themselves present output, just actions.
>>>
>>> <$list filter="[tag[Mark]]">
>>>      <!--append exhibition_id to exhibition_id of each marked artwork 
>>> tiddler-->
>>>
>>>      
>>>            action-setfield 
>>>                $field="exhibition_id" 
>>>                $value={{{ [{!!exhibition_id}addsuffix[ 
>>> ]addsuffix{$:/TLS/exhibition_id}] }}}
>>>                `{{{ [{!!exhibition_id}addsuffix[ 
>>> ]addsuffix{$:/TLS/exhibition_id}] }}}`
>>>            
>>>    
>>>      <!--append each artwork_id to artwork_id of the exhibition 
>>> tiddler-->
>>>      
>>>           action-setfield 
>>>                $tiddler= {{{ [{$:/TLS/exhibition_id}] }}}
>>>                $field="artwork_id" 
>>>                $value={{{ [{$:/TLS/exhibition_id!!artwork_id}addsuffix[ 
>>> ]addsuffix{$:/TLS/artwork_id}] }}}
>>>                `{{{ [{$:/TLS/exhibition_id!!artwork_id}addsuffix[ 
>>> ]addsuffix{$:/TLS/artwork_id}] }}}`
>>>           
>>>      
>>> </$list>
>>>
>>> See how I replicated the tripl braces, keep both upto date as you test 
>>> you outcomes
>>>
>>>    - I basically converted the otherwise actions into text and took it 
>>>    outside of the button.
>>>
>>> Regards
>>> Tony
>>>
>>> On Monday, 5 October 2020 17:05:50 UTC+11, Bob Jansen wrote:
>>>>
>>>> I am trying to implement a simple function in my TW.
>>>>
>>>> <code>
>>>> <$button>
>>>> <$list filter="[tag[Mark]]">
>>>>      <!--append exhibition_id to exhibition_id of each marked artwork 
>>>> tiddler-->
>>>>      
>>>>            <$action-setfield 
>>>>                $field="exhibition_id" 
>>>>                $value={{{ [{!!exhibition_id}addsuffix[ 
>>>> ]addsuffix{$:/TLS/exhibition_id}] }}}
>>>>           />
>>>>    
>>>>      <!--append each artwork_id to artwork_id of the exhibition 
>>>> tiddler-->
>>>>      
>>>>           <$action-setfield 
>>>>                $tiddler= {{{ [{$:/TLS/exhibition_id}] }}}
>>>>                $field="artwork_id" 
>>>>                $value={{{ [{$:/TLS/exhibition_id!!artwork_id}addsuffix[ 
>>>> ]addsuffix{$:/TLS/artwork_id}] }}}
>>>>           />
>>>>      
>>>> </$list>
>>>>
>>>> Link Artworks to Exhibition
>>>> </$button>
>>>> </code>
>>>>
>>>> The first action-setfield works. The second one doesn't but I can not 
>>>> determine why. It differs from the first in that the first is editing a 
>>>> field of the <currentTiddler> from a $list widget whilst the second is 
>>>> editing a field of a tiddler whose title is stored in the tiddler 
>>>> $:/TLS/exhibition_id.
>>>>
>>>> Is it possible to edit a tiddler not part of the $list widget set?
>>>>
>>>> To my understanding, there are essentially two transclusions involved, 
>>>> first to get to the tiddler whose title is in $:/TLS/exhibition_id and the 
>>>> second to the field artwork_id stored in this tiddler.
>>>>
>>>> From Tones' excellent cheat sheet, I thought I has it right but 
>>>> obviously not. 
>>>>
>>>> There is obviously an error in my wikitext. But what??
>>>>
>>>> Secondly, an earlier query regarding conditional operators with some 
>>>> advice from Saq Imtiaz.
>>>>
>>>> I want to only perform the action-setfield if the value to be inserted 
>>>> is not already in the field.
>>>>
>>>> I thought this would work (replacement for the first action-setfield 
>>>> statement from above).
>>>> <code>
>>>>      <$list [{!!exhibition_id}!contains{$:/TLS/exhibition_id}] 
>>>>  variable="_null" >
>>>>            <$action-setfield 
>>>>                $field="exhibition_id" 
>>>>                $value={{{ [{!!exhibition_id}addsuffix[ 
>>>> ]addsuffix{$:/TLS/exhibition_id}] }}}
>>>>           />
>>>>      </$list>
>>>> </code>
>>>>  but it doesn't.
>>>>
>>>> What an I doing wrong here?
>>>>
>>>> bobj
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/b3a4d332-8853-49cf-9a45-db67e9a09d3dn%40googlegroups.com.

Reply via email to