<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic DeclarativeWebScript can't check updated aspect until it runs asynchronously  in Alfresco Forum</title>
    <link>https://connect.hyland.com/t5/alfresco-forum/declarativewebscript-can-t-check-updated-aspect-until-it-runs/m-p/58552#M20853</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have the following case:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From inside a&amp;nbsp;DeclarativeWebScript (A) I have to wait (Thread.sleep) until a custom person aspect properties (of the active user)&amp;nbsp;is updated by another DeclarativeWebScript (B). The Thread.sleep of A is&amp;nbsp;terminated&amp;nbsp;when a condition on the aspect properties (&lt;EM&gt;IndorsePeopleModel.PROP_INTESITRANSACTION&lt;/EM&gt;) is successfully evaluated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The problem I have is that even &lt;EM&gt;IndorsePeopleModel.PROP_INTESITRANSACTION&lt;/EM&gt;&lt;SPAN&gt;&amp;nbsp;is updated by B&amp;nbsp;&lt;/SPAN&gt;, A&amp;nbsp;is never know and the sleep is never ended&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It works only if A is called&amp;nbsp;as &lt;SPAN style="color: #727174; background-color: #ffffff;"&gt;ActionExecuter and&amp;nbsp;&lt;/SPAN&gt;a&lt;SPAN style="color: #727174; background-color: #ffffff;"&gt;synchronously from a &lt;SPAN style="color: #3d3d3d;"&gt;DeclarativeWebScript&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;. &lt;/SPAN&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE style="color: #000000; background-color: #ffffff; font-size: 9.0pt;"&gt;...&lt;BR /&gt;Action action = getServiceRegistry().getActionService().createAction(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"A"&lt;/SPAN&gt;, params);&lt;BR /&gt;action.setExecuteAsynchronously(&lt;SPAN style="color: #000080; font-weight: bold;"&gt;true&lt;/SPAN&gt;);&lt;BR /&gt;getServiceRegistry().getActionService().executeAction(action, docNodeRef);&lt;BR /&gt;...&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;SPAN style="color: #727174; background-color: #ffffff;"&gt;But in this case I have a problem to know the status of the&amp;nbsp;&lt;SPAN&gt;ActionExecuter&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #727174; background-color: #ffffff;"&gt;&lt;SPAN&gt;A:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;...&lt;/P&gt;&lt;PRE style="color: #000000; background-color: #ffffff; font-size: 9.0pt;"&gt;&lt;BR /&gt;&lt;SPAN style="color: #000080; font-weight: bold;"&gt;long &lt;/SPAN&gt;delta = &lt;SPAN style="color: #0000ff;"&gt;0&lt;/SPAN&gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;long &lt;/SPAN&gt;startTime = System.currentTimeMillis();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;while &lt;/SPAN&gt;(&lt;SPAN style="color: #000080; font-weight: bold;"&gt;true&lt;/SPAN&gt;)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;long &lt;/SPAN&gt;endTime = System.currentTimeMillis();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delta = endTime - startTime;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;if &lt;/SPAN&gt;(delta &amp;gt; &lt;SPAN style="color: #0000ff;"&gt;35000&lt;/SPAN&gt;) &lt;SPAN style="color: #000080; font-weight: bold;"&gt;break&lt;/SPAN&gt;;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSONObject runJSONObject = (JSONObject) AuthenticationUtil.runAs(&lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;AuthenticationUtil.RunAsWork&amp;lt;&lt;SPAN style="color: #20999d;"&gt;Object&lt;/SPAN&gt;&amp;gt;()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&lt;SPAN style="color: #000080; font-weight: bold;"&gt;public &lt;/SPAN&gt;JSONObject doWork() &lt;SPAN style="color: #000080; font-weight: bold;"&gt;throws &lt;/SPAN&gt;Exception&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NodeRef userNodeRef = m_personService.getPerson(username);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String transactionString = (String) getNodeService().getProperty(userNodeRef, IndorsePeopleModel.PROP_INTESITRANSACTION);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.debug(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"transactionString = " &lt;/SPAN&gt;+ transactionString);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSONObject jsonTransaction = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;JSONObject(transactionString);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;return &lt;/SPAN&gt;jsonTransaction;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, Constants.USER_ADMIN);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; approved = runJSONObject.get(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"approved"&lt;/SPAN&gt;).toString();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.debug(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"approved = " &lt;/SPAN&gt;+ approved);&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;if&lt;/SPAN&gt;(jsonObject.get(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"approved"&lt;/SPAN&gt;).equals(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"1"&lt;/SPAN&gt;))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setPin(jsonObject.get(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"pin"&lt;/SPAN&gt;).toString());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;break&lt;/SPAN&gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;else&lt;/SPAN&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.sleep(&lt;SPAN style="color: #0000ff;"&gt;2000&lt;/SPAN&gt;);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;continue&lt;/SPAN&gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;SPAN style="color: #000080; font-weight: bold;"&gt;catch &lt;/SPAN&gt;(Exception e) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="color: #000080; font-weight: bold;"&gt;throw new &lt;/SPAN&gt;IllegalArgumentException(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"Error "&lt;/SPAN&gt;, e);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/PRE&gt;&lt;P&gt;...&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;B:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;..&lt;/P&gt;&lt;PRE style="color: #000000; background-color: #ffffff; font-size: 9.0pt;"&gt;&lt;SPAN style="color: #000080; font-weight: bold;"&gt;if &lt;/SPAN&gt;(!getNodeService().hasAspect(userNodeRef, IndorsePeopleModel.&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;ASPECT_PERSON&lt;/SPAN&gt;)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; getNodeService().addAspect(userNodeRef, IndorsePeopleModel.&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;ASPECT_PERSON&lt;/SPAN&gt;, &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;HashMap&amp;lt;QName, Serializable&amp;gt;());&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN style="color: #808080;"&gt;// add/replace the aspect&amp;nbsp; to person&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;//getNodeService().removeProperty(userNodeRef, IndorsePeopleModel.PROP_INTESITRANSACTION);&lt;BR /&gt;&lt;/SPAN&gt;getNodeService().setProperty(userNodeRef, IndorsePeopleModel.&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;PROP_INTESITRANSACTION&lt;/SPAN&gt;, transactionString);&lt;BR /&gt;..&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Jamil&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 06 Mar 2018 17:51:47 GMT</pubDate>
    <dc:creator>jamilnour</dc:creator>
    <dc:date>2018-03-06T17:51:47Z</dc:date>
    <item>
      <title>DeclarativeWebScript can't check updated aspect until it runs asynchronously</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/declarativewebscript-can-t-check-updated-aspect-until-it-runs/m-p/58552#M20853</link>
      <description>Hello,I have the following case:From inside a&amp;nbsp;DeclarativeWebScript (A) I have to wait (Thread.sleep) until a custom person aspect properties (of the active user)&amp;nbsp;is updated by another DeclarativeWebScript (B). The Thread.sleep of A is&amp;nbsp;terminated&amp;nbsp;when a condition on the aspect properties (IndorsePeop</description>
      <pubDate>Tue, 06 Mar 2018 17:51:47 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/declarativewebscript-can-t-check-updated-aspect-until-it-runs/m-p/58552#M20853</guid>
      <dc:creator>jamilnour</dc:creator>
      <dc:date>2018-03-06T17:51:47Z</dc:date>
    </item>
    <item>
      <title>Re: DeclarativeWebScript can't check updated aspect until it runs asynchronously</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/declarativewebscript-can-t-check-updated-aspect-until-it-runs/m-p/58553#M20854</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You should never use Thread sleeping / blocking to wait on disconnected process doing any kind of changes. Even using an asynchronous action does not guarantee this will work depending on the timing of the other web script invocation.&lt;/P&gt;&lt;P&gt;Why not simply have the client poll the web script until the expected state has been&amp;nbsp;reached (or a timeout has been reached)? What component is triggering the call to B? If it is the same client, why are these calls not properly coordinated?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 12 Mar 2018 12:38:37 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/declarativewebscript-can-t-check-updated-aspect-until-it-runs/m-p/58553#M20854</guid>
      <dc:creator>afaust</dc:creator>
      <dc:date>2018-03-12T12:38:37Z</dc:date>
    </item>
    <item>
      <title>Re: DeclarativeWebScript can't check updated aspect until it runs asynchronously</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/declarativewebscript-can-t-check-updated-aspect-until-it-runs/m-p/58554#M20855</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;B is a webscript on the same server called by another server after some time (a rest hook callback url). I should wait until the B is called and update the aspect properties. So not the same client and can't coordinate unless by listening and waiting&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 12 Mar 2018 13:38:44 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/declarativewebscript-can-t-check-updated-aspect-until-it-runs/m-p/58554#M20855</guid>
      <dc:creator>jamilnour</dc:creator>
      <dc:date>2018-03-12T13:38:44Z</dc:date>
    </item>
  </channel>
</rss>

