Saba/SCORM 2004 3rd Edition 'Attempt Status' Suspended - rollup

A SCORM Question regarding how I invoke Rollup (macro?) in Saba.
I have a SCORM manifest which contains two SCOs.
The second is only available when the first is completed by having a preConditionRule (similar to the SCORM/Rustici Golf Examples).
When a Delegate is successful with the first SCO I set 'cmi.completion_status' to 'completed' and 'cmi.success_status' to 'passed'.
The second SCO is a test so I set 'cmi.score.raw', 'cmi.score.scaled' and 'cmi.completion_status' to 'completed'.
As I have a 0.8 in the second SCO's primaryObjective the Saba LMS is able to evaluate a test status of 'passed' or 'failed' on exit of the test.
When I exit this Learning, Saba displays that both SCORM Items have been passed and completed.
However, the 'Content Attempt Status' is always 'Suspended'. This initially pointed to some of my JS interactions as I was using 'cmi.suspend_data' to store some info on a SCO. Even though this is disabled and even when I have a single unrelated SCO, the 'Suspended' Status is still set.
So, I still don't seem to get a Rollup (never seen one) and it is somehow to do with this 'Suspended' State I am somehow setting or not resolving.
One question is whether I should be setting 'cmi' 'completion_status' and 'success_status' in my interactions with the SCORM API at 'Object' Level (cmi.objective.n.success_status') rather than 'cmi.success_status' or both? I've tried both but am not certain which is right. I think it may depend on the Manifest.
Has anyone managed to get Saba to Rollup (Set Learning Assignments' 'Completion Status' so it no longer displays 'Not Evaluated') in this way?
My Manifest file seems ok, the Saba Player's Table of Contents shows the green light for each completed SCO in the Package but until I resolve the Status of 'Suspended', I am a little stuck.
I 'cmi.exit' both SCOs in the 'normal' way.
I am using Pipwerks Wrapper on this too but it seems to be ok.
Does this all point to the API, to the Manifest or to something I'm not setting up on Saba?
Thanks.

You're right that setting cmi.exit to 'normal' should not reflect suspended. Unless another call is being made on unload of the SCO, typically a window.unload or otherwise.
I've got a bookmarklet up on http://goo.gl/MXJVNM, but it sounds like with those events happening so fast you won't be able to trap the status without having another logging mechanism.
You could always offload the test to the cloud.scorm.com to see if it performs the same way, and you'll get a rich set of logs to review.
Mark

Related

How to tell that a test case (TFS work item) had been tested?

I don't see in the test case work item status and reason anything to say "tested successfully"
Design status is for when the test case is being written
Ready status is for when the test case is ready to be tested
Closed status has reasons saying the test case is "not to test" (deprecated, different, duplicated)
So how can we mark a test case as "successfully tested"?
It does not seem right that the tester does not have to attest that the case has been tested with success.
There is an "Outcome" field that will show pass, failed ect.
There is no such kind of build-in state in Test Case work item. However, you could create your own customized work item state.
More details please take a look at this tutorial-- Add a workflow stateAdd a workflow state
If you have latest version of tfs on web test hub you should select
several test cases and update the state (screens from Azure DevOps
Service):
Set new value for the State field
Seems you're confusing Test Case with Test Result. A test as defined by a Test Case can be run multiple times to obtain many Test Results. This may not be very useful if the test is only getting run once, although it certainly still works; it is more useful when the test is being run multiple times, e.g. regression tests.
Also, if I may, your initial premise re: the different states a stock Test Case may be in is not correct. Per How workflow states and state categories are used in Backlogs and Boards, section State categories,
Design status is for when a test case is proposed, i.e. we should come up with a plan to test this case
Ready status is for when a test case is in progress, i.e. we are implementing the the test plan
Closed is for when a test case is completed, i.e. we have the plan
That said, I don't see why you couldn't use your above breakdown if it makes more sense for your team. But either way, the notion of "tested successfully" still belongs to the realm of the Test Result. Hope this helps to clarify things.

Youtrack - unable to change to some statuses after linking a project to a board

I get this error when I move the issue from In Progress to Done.
Workflow jetbrains-youtrack-scrum reports error: Cannot find State [Done]
Contact project admin admin
This was fine before, but has started behaving differently ever since the issue was also added to two boards.
Both the boards have "Done" as a valid status. What can be the problem?
This workflow may fail with such an error if it is not possible to set 'Done' state to a parent issue.
Thus, most probably, this particular issue is a subtask of some other issue from another project, which doesn't have a 'Done' state in its 'State' field values set.

User exit for production order confirmation in CO11N?

I've watched quite a few videos on YouTube and have a basic understanding of how to find user-exits (enhancements?) and implement them. However when I try to replicate what I've seen it doesn't appear to be working.
I'm looking to create a user-exit that would execute when a production order has been confirmed (closed/finished) via CO11N. Someone suggested that I put in a line of code "BREAK username." So that I could verify that my code was firing. Nothing breaks. I've tried putting in a message from code found on the internet
MESSAGE s208(00) WITH 'TEST'.
No message is shown. I've activated the include and the project. I've tried different exits/includes and no matter what I do, nothing seems to break or show a message.
Is there something simple I'm missing? I've tried CONFPI05 and CONFPM05.
CONFPI05 is for process orders. CONFPM05 is for plant maintenance orders. First you need to check which kind of order you use. I assume you use production orders. You should check User-Exit CONFPP05 than.
Anyway, I would recommend using BAdI WORKORDER_CONFIRM. Within this BAdI there are methods available where you can raise an error message.
From the BAdI documentation:
Note that in the methods, no system messages may be sent. The only
exceptions are the AT_SAVE and AT_CANCEL_CHECK methods. Within these
methods, a system message may be issued, but only if you trigger the
exception ERROR_WITH_MESSAGE (for AT_SAVE method) or NOT_ALLOWED (for
AT_CANCEL_CHECK method) at the same time.
Note also that within the methods, the "commit work" instruction may
not be carried out because this would lead to incorrect data in the
database.
I strongly recommend not to use MESSAGE statement in any User-Exit or BAdI implementation. The MESSAGE statement will implicit call a COMMIT WORK which could cause database inconsistencies (happens very often by the way).
One additional note. You should check using Checkpoint Groups instead of using BREAK-POINT or BREAK username directly.
I checked the documentation:
CONFPI05 to update your own data after saving the confirmation
In another documentation I found another warning:
In this customer enhancement it is strictly forbidden to send error messages or other messages because otherwise there is the danger that data will be inconsistent. SAP cannot be held responsible for this!!
This sounds like changes in update task. By default breakpoints in update task are not enabled.
Should your code be processed after you pushed save?
If yes, what you can try:
Set anywhere a breakpoint. Or try /h during data insertion.
In debug screen activate the update debugging:
Continue the process with F8.
Hopefully you stop at your break-point.

Worklight JSON Store, can we get race conditions?

Worklight 6.1 on both Windows (colleague) and Mac (me), building an a Hybrid app destined for Android device but to speed up development we do initial testing as Mobile Web App in Chrome browser on desktop.
We get a weird symptom that I'm trying to fine-down to a reproducible test case. I think I see different behaviours when stepping in debugger and just letting it run. Want to check whether a certain coding pattern could be the cause of the symptom before I go any further.
Fundamental question: should we wait for the resolution of a promise returned by a JSONSTore request for an action on a collection before issuing another request? more explanation below.
The overall intent is to load some data into the JSONStore, with some intelligent replace/merge action if a record is already present. Pseudo code:
for each record retrieved from back-end
if ( record already present in Store )
do some data merging
replace record
else
add record
The application code actually works like this, just considering the add() case, the problem manifests when the store is empty, all records need to be added
for each record to add
addPromise = store.get().add(record);
listOfPromises.insert(addPromise);
examine the list of promises recording any errors
That is there is no "wait" for add to finish before issuing the next add request. Hence in effect we've initiated a set of adds "in parallel" whatever that might mean in JavaScript in Chrome.
The code appears to run just fine, no errors reported. On android device it works reliably. In Chrome under normal running (no stepping in debugger) we end up with no reported errors but only one record inserted - indeed as though a snapshot of the initial "empty" store had been taken and each add is working on that "empty" copy.
After writing this I'm now pretty convinced that the coding pattern described above is vulnerable to a kind of race and that the better approach is build a list of documents to be added and insert them in a single operation.
A more detailed answer will be coming later, but I now know that this
the coding pattern described above is vulnerable to a kind of race and
that the better approach is build a list of documents to be added and
insert them in a single operation.
is true. In the browser the JSONStore does require that we wait for the result of one request before issuing another one. The recommended approach is
var dataToAdd = buildArrayOfDataToAdd(responseFromServer);
var dataToReplace = buildArrayOfDataToReplace(responseFromServer);
jsonstore.add( dataToAdd ).then( function() { jsonstore.replace( dataToReplace); })

Run code when user deletes module from a page

I'm currently developing a DNN module. It would be nice if we were able to run custom code whenever a module is deleted from a page by the user, and also when a module gets restored from recycle bin.
I haven't found any examples on how this could be done, so I'm not sure if this is possible? Any ideas?
I am unaware of any event mechanism inside DNN where you could set your hooks. You could probably debug the DNN code and trace the call stack until you find a usable spot where you can inject some code (which would likely be destroyed after the next DNN update), or maybe detect a way that was intended to be used by the core team.
However, if a module is deleted from a page, the IsDeleted field in the Modules table is set to true. If it gets restored from the bin, it is again set to false.
You can use a TRIGGER in your Sql Server that fires when the Modules table is updated, checks if the update refers to an IsDeleted field, write stuff into a Notification table, and use Sql Query Notification based on SqlDependency to run some code (see http://www.codeproject.com/Articles/144344/Query-Notification-using-SqlDependency-and-SqlCach for an introduction).
Some steps to go, but it should work (and be less exhausting than climbing the Matterhorn :-) ).
There is absolutely hooks in DNN Platform (DotNetNuke) that a developer can attached C# code to.
While there isn't a turn key example that I can provide at the moment, check out the following:
https://github.com/dnnsoftware/Dnn.Platform/blob/c35fdc7fb75db0438f3b872ce4e279e3ea73e7c2/DNN%20Platform/Library/Entities/EventManager.cs
You are looking to hook onto the ModuleRemoved event by the sounds of it.
Here is an example for the user logging in that you could adapt to your event:
Does DNN fire an event when a user logs in?
I hope this helps in the future.