Comments

  • Graham Sawell

    Hi Chris,

    I had a similar issue; the way I navigated around it is to bind the property to the activity rather than using just form properties alone. This way it will still trigger the formSubmitted event and include your associated activity fields, but the values in the fields will also persist in the activity (and when you open the form), rather than only being captured on the snapshots.

    The snapshots that you see in form history are fixed, there's no way to edit once submitted, but I've found that doesn't necessarily matter so long as you can go back into the form and tweak the persisted values and re-submit.

    I hope that makes sense. If not/if you want to see it in action, Alex has my details, happy to show you over a webex.

    Cheers,

    Graham

  • Graham Sawell

    I believe what you mean is it's not yet added to the standard OFSC adapter.

    It's certainly not useless from OICS' perspective if you know how to use OICS. The event subscription REST API is not rocket science.

  • Graham Sawell

    Hi Shankar, I hope you're well. The new functionality allows us to expose form submission events, which can be created to suit your own needs, but greatly help with customisations that used to require development in the past. The release notes may help shed light: https://www.oracle.com/webfolder/technetwork/tutorials/tutorial/cloud/fsvc/releases/19A/19A-field-service-wn.htm#F6685

  • Graham Sawell

    There's a new subscription event called formSubmitted for this purpose. Take a look at: https://www.oracle.com/webfolder/technetwork/tutorials/tutorial/cloud/fsvc/releases/19A/19A-field-service-wn.htm#F6685

  • Graham Sawell

    Hi Chris,

    It’s a tough one without the detail, but my recommendation would be to move the logic to a bucket level higher.

    I’ve seen clients routing teams separately because they don’t trust the engine to partition off work adequately or to gain more control over the schedule, or sometimes just because the uphill struggle with change and implementation means that battles are carefully chosen, with areas like this seen as bridges to cross in later phases.

    The benefits of OFSC’s heuristics are easily handicapped by smaller sets of data to work with, which then amount to hard limitations as far as efficiency is concerned, but also regularly dampen the operation’s ability to trace a decision back to its origins, as well as to improve and automate a level of calm in the controlled chaos of the day-to-day.

    The part that sticks out to me here is that to effectively evaluate the decision of who does the linked job, we either have to consider the priorities and limitations of both teams, or we have to consider the priories of one group and force the other side to adhere. If we're going to consider the priorities of the other team, that means we're doing exactly the same as higher level bucket would, only with more to maintain and fewer benefits.

    I’d sooner look to give OFSC all the tools to make a decision across two teams and come to a compromise. Not to mention that there may also be great opportunities currently missed, perhaps they work entirely different functions, but that could be an opportunity for more cross-skilling or a more efficient PPM schedule that takes advantage of opportunistic ‘right place right time’ moments to hit two birds with one stone. There’s something to be said for those moments where there’s a ‘call to arms’ situation, and you need only consult one bucket, especially in reactive cases.

    If there’s too much pressure from the business or a genuinely exceptional reason not to work this way, then your next best bet would be to force the scheduling of the linked job. I’ve not found an acceptable way to do this OOTB (it’s likely deliberately designed this way), but I’ve used the Find matching resources API to find the best match and force it on the schedule in circumstances that have called for it (https://docs.oracle.com/en/cloud/saas/field-service/19a/cxfsc/op-rest-ofsccore-v1-resources-custom-actions-findmatchingresources-post.html)

    I hope this helps. Any questions just shout.

    Regards,
    Graham

     

  • Graham Sawell

    Hi Austin,

    If your activity times are relatively uniform, you could trigger the message scenario on activity start, with a fixed delay equal to whatever you’d consider an outlier activity duration (e.g. avg duration is 45 mins, so 1h30m may be an outlier). You could then set a two blocking conditions up, one to block any messages where the position in route is not ‘last’ (i.e. don’t send a message if it’s not the last activity of the day), and another to block the message if the activity status is not started (i.e. if they’ve completed it, as they should, don’t message).

    Another option if you use fleet tracking is to use the last engine start event, where the engineer was on a customer site, and then didn’t go to another recognised customer site, and to have this run late in the evening before your dailyExtract cutoff executes. This is good indicator for their activity end and route deactivation time.

  • Graham Sawell

    From personal experience I know the team pushes for OWASP Top 10 prevention as a minimum, standards like RASP are a nice theoretical defence but I expect that enterprise cyberdefence teams, especially in multi-tenancy configurations like OFSC, cannot afford to let self-protection (which is still in relative infancy) run amock, there are attack vectors for RASP that target its need to 'fix' anomalies, causing denial of service concerns. Web clients can (and regularly do) bring with them opportunistic malware, XSS compromised browsers, it becomes a bit of a mess. I imagine for this reason that Oracle preference their ability to respond quickly to anomalies using dedicated security professionals, and preference prevention as the key focus of their efforts.

    If the client is concerned about OFSC as a threat to their wider architecture then I would suggest using OFSC's integrations passively, with certificate-based communication, managed by middleware that communicates with OFSC over a locked down VPN. There's no possibility to extend the individual security on a per-customer basis in OFSC, but Oracle may have 'stamped' some form of RASP compliance that may keep these kind of queries from customers at bay.

    Just my 2 cents, as you asked

  • Graham Sawell

    Hi Jeffry,

    Your best bet would be to get in touch with Oracle directly on any security matters as it's an ever-evolving battle.

  • Graham Sawell

    Hi Anil,

    The plugin API can only interact with activities that exist, so when you fire the postMessage back with a close method, when it comes to activities unless you specify an activity id (aid), no data will be modified. Because the activity has not yet been created, there is no activity ID.

    I haven't managed to find a workaround for this within the limitations the plugin API sets. There is no method for creating an activity using the plugin framework, which is a shame as it limits the possibilities with the framework - that is, unless you are happy to sacrifice offline functionality and create activities using the standard API. Native OFSC will create an activity offline, but we can't access this functionality.

    What I have done in the past is to move the plugin functionality to once the activity has been created, so the user is creating more of a placehoder.

    However, given that you are looking to implement this functionality within the book feature, I presume you're looking to query capacity? If so, an online plugin is your only option to safely avoid booking conflicts. I have developed booking plugins with integrated calendars, timeslot selection for OFSC customers in the past and am very familiar with the quirks if you are looking for guidance.

    Hopefully this provides some insight. My email is graham [at] sawell.co.uk if you have any more questions or want to get in touch.

  • Graham Sawell

    Zsolt is correct, OFSC offers only a passive means of identifying activity updates. You can either elect to use the Events API or the History API. For this use case I would reccomend using the Events API. Set up a subscription for just the fields you are interested in, having either middleware or a script to poll and process the subscription to identify changes as they happen in near real-time.

    Alternatively, if you have no need to know the information near real-time, but need it for the purpose of reconsiliation and storage on your CRM, you may opt to only send the data from a status change, which can be handled by outbound messaging. In general, the actions that commonly require real-time updates to systems of record (ETA changing, assignments changing, inventory movement) have a defined outbound message trigger for that purpose.

  • Graham Sawell

    Hi Bill,

    Unfortunately it’s not possible to start an activity assigned to a bucket, which it looks like you’re trying to do. Please correct me if I’m wrong. The activity needs to be assigned to a field resource, tool, or vehicle, and have a user assigned. This has a licence implication, whereas buckets and org units do not count towards licensed resources.

    One alternative if you don’t want to give managers their own field resource could be to use a different identifier based on a custom property for a manager having completed the activity. This could be as simple as a tick box only visible to managers that shows they completed the work, or you could have multiple fields asking for the time they took and any other information. They would stay in pending status, but you could filter the activities when you reconcile work in your BI/MI system to look for this flag. It’s also possible to cancel activities and use a different cancellation reason, but this may have implications for your source of work orders, as I expect the two systems are tightly coupled on status changes.

    There are other options too, such as using service requests, but any solution will largely depend on how you are currently using OFSC and the overall architecture. The easiest option by far is to simply give managers a route, regardless of if they use it, but I appreciate the additional licence implications may make it undesirable.

    I hope this helps.

    Regards,
    Graham

  • Graham Sawell

    Hi Richard,

    If you're navigating away from the inventory object to a single plugin instance to search, then using the default behaviour should take you back to the last screen that was being used before the plugin was opened, i.e.

    {
        "apiVersion": 1,
        "method": "close",
        "backScreen": "default"
    }
    

    This would effectively be your 'exit without doing anything' method, you could then additionally have a method that uses the same backScreen action of default, but also creates the inventory against the current activity, as you can maniuplate any activity the user has access to using the plugin API irrespective of where the user is routed in the navigation.

  • Graham Sawell

    Unless there is a very specific and essential requirement (which can normally be covered with custom properties, pre/postwork or service requests), I would be shy of getting trapped in status design. OFSC is not going to budge and it's normally for good reason.

    At first it seems counterintuitive, but the simplification of statuses looks to minimise processing by technicians, improve compliance and squash bad habits from other FSMs that unfortunately still linger in 2018 (dispatching to device, having separate mobile and dispatch states, it's all a mess best left forgotten!) if you need to complicate the status design due to existing architecture, have the middleware add the verbosity required by the upstream system. I have had to do this a couple of times where e.g. SAP is involved.

  • Graham Sawell

    Hi Richard,

    It is possible to launch OFSC from URLs in other apps, functionally this looks at the url, and if the URL is *etadirect.com / *toadirect.com the phone will offer to open it inside OFSC mobility. This functionality is quite limited, last time I had a play OFSC does not interperet URLs in the traditional sense (e.g. instance.etadirect.com/activities/120123 opening a certain activity) and instead opts for a javascript SPA-style navigation using knockout.js, where the navigation router is called in JS rather than implied in the URL, with a couple of exeptions in generic parts of the system - simple example being the difference between the core navigation and /mobility. Android also supports a system with intents and actions, which allow you to launch and intersect apps in a more granular way than iOS (albeit they are not used in OFSC currently)

    Is the OFSC GUI key to the process? If not, have you considered using the API? You could make a web service call passing the file binary data using the relatively new (and brilliant) granular access control functionality, removing what used to be a hurdle managing specific API accounts for transactions. This would allow you to implement a quick and painless oauth2 credential check. The user can, in theory, upload the file from any third party system with acceptable authentication using this mechanism, which uses web service calls and a webhook to validate a user token. It sounds more daunting than it is!

    If you absolutely have to use the OFSC GUI and you use an MDM with a standard enterprise browser (e.g. Safari/Webkit), there are ways to achieve this by injecting code. I have used this method to implement everything from cosmetic fixes to bring activitiy colours on the supervisor view, to implementing custom caching to bypass the iPhone cache limitations. Hapy to provide code examples / guidance on how to achieve this if it is of interest, but I would only use this after all other avenues have been exhausted. I think I'm connected to you on LinkedIn so just shout if you want further info, or my email is graham [a.t] sawell.co.uk

  • Graham Sawell

    Hi Lara,

    Sure, happy to help. Drop me an email: graham [at] sawell.co.uk and I can send you over some example code.