Scorm 2004 calculating completion percentage based on interactions

Viewed 283

I am using Scorm 2004 and I am wondering if there is a way to calculate completion percentage based on interaction (i.e cmi.interactions.*)? or what's the straightforward way to calculate completion percentage?

The reason I was thinking about using interaction is because we have: cmi.interactions.0.objectives.n.id and I was thinking we can use cmi.objective.n.completion_status. But how to find the total number of objectives to find the completion ratio?

I appreciate any help or hint.

Update

I was able to parse suspended_data. Now the question is how to get completion progress out of it.

{
  "progress": {
    "lessons": {
      "1": {
        "c": 1,
        "p": 100,
        "i": {
          "0": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "1": {
            "c": 1
          },
          "2": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "3": {
            "c": 1
          },
          "4": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "5": {
            "c": 1
          },
          "6": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "7": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "8": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              },
              "1": {
                "c": 1
              },
              "2": {
                "c": 1
              },
              "3": {
                "c": 1
              },
              "4": {
                "c": 1
              }
            }
          },
          "9": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "10": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "11": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "12": {
            "c": 1
          },
          "13": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "14": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "15": {
            "c": 1
          },
          "16": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          }
        }
      },
      "2": {
        "c": 1,
        "p": 100,
        "i": {
          "0": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "1": {
            "c": 1
          },
          "2": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "3": {
            "c": 1
          },
          "4": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "5": {
            "c": 1
          },
          "6": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "7": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "8": {
            "c": 1
          },
          "9": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          }
        }
      },
      "3": {
        "c": 1,
        "p": 100,
        "i": {
          "0": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "1": {
            "c": 1
          },
          "2": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "3": {
            "c": 1
          },
          "4": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "5": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "6": {
            "c": 1
          },
          "7": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "8": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "9": {
            "c": 1
          },
          "10": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "11": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          },
          "12": {
            "c": 1
          },
          "13": {
            "c": 1,
            "i": {
              "0": {
                "c": 1
              }
            }
          }
        }
      },
      "4": {
        "a": 7,
        "p": 47,
        "r": 1,
        "s": 20,
        "i": {
          "0": {
            "c": 1,
            "k": 1,
            "s": 0
          },
          "1": {
            "c": 1,
            "k": 0,
            "s": 1
          },
          "2": {
            "c": 1,
            "k": 0,
            "x": [1]
          },
          "3": {
            "c": 1,
            "k": 1,
            "s": 3
          },
          "4": {
            "c": 1,
            "k": 0,
            "s": 3
          },
          "5": {
            "c": 1,
            "k": 0,
            "s": 2
          },
          "6": {
            "c": 1,
            "k": 1,
            "s": 1
          }
        }
      }
    },
    "p": 75
  },
  "score": 20
}
1 Answers

You are looking for the progress_measure field, likely in objectives. There are two, one for objective and one for overall sco:

You should be able to use cmi.objectives.n.progress_measure to get completion progress for the objective itself. There are some good examples here in this forum that may help: https://community.articulate.com/discussions/articulate-storyline/how-to-manage-cmi-data-model-variables

Description from the documentation of the data model:

cmi.objectives.n.progress_measure (real (10,7) range (0..1), RW) Measure of the progress the learner has made toward completing the objective

How to use the data stored in this calculated field to get completion %:

Notice that the range is from 0 to 1 so to get the completion % you need to multiply the value in cmi.objectives.n.progress_measure by 100 to get a percentage (e.g. 0.67 * 100 = 67%).

Related