Monday, August 1, 2011

Cancel active sync processing if incoming data is deemed bad or insufficient

QUESTION:
How would I cancel active sync processing if the incoming data is insufficient?

If canceled, would that cause the workflow to not execute?

How could I create an audit log entry that could be seen in some IdM reports for 
this particular senario?
ANSWER:
To cancel active sync processing, one would set the IAPI.cancel variable to true 
within in the active sync form.

If IAPI.cancel is set to true, then no workflow will be launched as a result.

If you wish to have some type of audit logging, then you would not want to set 
IAPI.cancel to true, but instead let the workflow handle the audit task.

One approach is to use form logic in your active sync form for data validation. You 
can then set a view attribute based on the data validation which will trigger the 
downstream workflow to audit the bad record and then end (i.e., bypassing actual 
provisioning). Because the event is audited you can use IdM reporting to send 
nightly/weekly reports of the invalid feed data.

For example...in your active sync input form you have:

      <Field name='processInputs.IgnoreRecord'>
        <Expansion>
          <cond>
       <isnull>
         <ref>activeSync.givenName</ref>
       </isnull>
       <s>Record rejected due to invalid feed data : givenName was null</s>
            <null/>
     </cond>
        </Expansion>
      </Field>

You then modify the workflow to do something like this....

      <Activity name='start'>
        <Transition to='Audit Rejected Feed Record'>
     <ref>IgnoreRecord</ref>
        </Transition>
   <Transition to='Approve'/>
      </Activity>

          ....

      <Activity name='Audit Rejected Feed Record'>
        <Action application='com.waveset.session.WorkflowServices'>
          <Argument name='op' value='audit'/>
          <Argument name='type' value='User'/>
          <Argument name='action' value='Create'/>
          <Argument name='accountId' value='$(user.activeSync.accountId)'/>
          <Argument name='status' value='failure'/>
          <Argument name='subject' value='$(WF_CASE_OWNER)'/>
          <Argument name='error' value='$(IgnoreRecord)'/>
          <Argument name='resource' value='$(user.activeSync.resourceName)'/>
        </Action>
        <Transition to='end'/>
      </Activity>

No comments:

Post a Comment