FLS Admin Guide
Prerequisites
These items must be in place before you can create and operate an FLS instance. Check each one with your System Admin if you're unsure.
- An FLS Registration must exist for your form type before creating an Instance. Registrations are the master config templates. If one doesn't exist for your use case, create it first (see Create a Registration).
- An EIP notification template must be published for FLS dispatch emails. The Registration's DefaultEipTemplCode field must reference a valid template. Contact your System Admin to verify.
- A Bridge Config row (MFLSBRIDGECONFIG) is required if your module needs to receive FLS events (e.g., TMS certificate gating). This is a one-time developer setup.
- A Survey Instrument Config must be created and not locked before an instance can open with CompletionMethod=Survey. See Instrument Config.
- You must have an Access Rule granting you at minimum AccessType=Manage for the target Registration. System Admins grant access rules.
Admin Roles Setup
Two roles are relevant for FLS administration: HR Admin (manages registrations and instances) and Incharge (monitors specific instances and manages respondents). Both are granted via MFLSACCESSRULE.
| AccessType | Code | What it grants | Typical assigned to |
|---|---|---|---|
| Manage | 0 | Full CRUD: create/edit instances, add respondents, view all results including individual responses, pause/close | HR Admin, System Admin |
| ViewSummary | 1 | View aggregated results and completion stats only; can nudge respondents; cannot see individual answers | Department head, Training Manager (view only) |
| ViewResponses | 2 | Same as ViewSummary plus ability to see individual respondent answers (who answered what) | Incharge with response-level access |
You can restrict an Incharge to a specific Org Unit or Department by setting Scope=OrgUnit and ScopeObjectId=their department ID. This ensures they see only their team's responses โ not other departments'.
What is a Registration?
A Registration is the master configuration template for a type of form. Think of it as the blueprint โ it defines the form's behaviour (completion method, draft support, multi-attempt, token expiry, reminder schedule). Once a Registration is created, you can create many Instances from it โ each instance is a specific deployment to a specific group of people at a specific time.
Example: "TMS Training Feedback" is one Registration. Each training batch that completes creates a new Instance from that same Registration. The Registration is created once; Instances are created repeatedly.
Create a Registration
Call POST /fls/registrations or use the Admin UI. Fill all required fields:
| Field | Type | Example | Notes |
|---|---|---|---|
| RegistrationCode | string(50) | TMS-TRAINING-FB | Unique code; no spaces. Used as identifier in Bridge Config. |
| RegistrationName | string(200) | TMS Training Feedback | Human-readable display name. |
| FormTemplateId | int | 4 | Links to MFORMTEMPLATE. Determines form layout/shell. |
| ModuleId | int | 301 | 301=TMS, 501=HRMS. Links to calling module for Bridge Config lookup. |
| CompletionMethod | int | 0 | 0=Survey (use Survey Engine), 1=QuickRating, 2=External (webhook acknowledgement) |
| AllowDraftResponse | bit | 1 | 1=respondents can save draft and return later. Recommended for long forms. |
| AllowMultiAttempt | bit | 0 | 0=one submission only. 1=can re-submit. Use 0 for appraisals; 1 for satisfaction polls. |
| IsMandatory | bit | 1 | 1=respondent must complete; used for certificate gating and appraisal sign-off. |
| TokenExpiryHours | int | 72 | Hours after dispatch before token expires. 72=3 days is typical for training feedback. |
| DefaultEipTemplCode | string | FLS-TMS-DISPATCH-V1 | EIP template code for dispatch email. Must be published in EIP before use. |
| WebhookPath | string | (null) | Optional HTTP callback for external form completion (CompletionMethod=2 only). |
// POST /fls/registrations โ example request body
{
"registrationCode" : "TMS-TRAINING-FB" ,
"registrationName" : "TMS Training Feedback" ,
"formTemplateId" : 4 ,
"moduleId" : 301 ,
"completionMethod" : 0 ,
"allowDraftResponse" : true ,
"allowMultiAttempt" : false ,
"isMandatory" : true ,
"tokenExpiryHours" : 72 ,
"defaultEipTemplCode" : "FLS-TMS-DISPATCH-V1"
}
Reminder Rule Builder
Reminder rules automate nudges and escalations. They are configured on the Registration and apply to all Instances created from it. Rules are evaluated daily by a Quartz job.
| Field | Values | Example | Meaning |
|---|---|---|---|
| ReminderTrigger | 0=DayOffset, 1=OnDeadline, 2=OnStatusChange | 0 (DayOffset) | When to evaluate the rule |
| DayOffset | integer (days after instance opened) | 3 | Evaluate 3 days after OpenedOn date |
| StatusFilter | 0=NotStarted, 1=Opened, 2=InProgress, -1=Any non-submitted | 0 (NotStarted) | Only apply rule to respondents matching this status |
| ReminderAction | 0=NotifyRespondent, 1=EscalateToManager, 2=AutoClose | 0 (Notify) | What to do when rule fires |
| EipTemplCode | string | FLS-REMINDER-V1 | EIP email template to use for the notification |
| MaxFireCount | integer | 1 | Maximum times this rule fires per respondent per instance. Use 1 to avoid spamming. |
Recommended rule set for TMS Training Feedback:
| Rule # | Day | Status Filter | Action | Template |
|---|---|---|---|---|
| 1 | 3 | Not Started | Notify Respondent | FLS-REMINDER-V1 |
| 2 | 6 | Not Started OR In Progress | Notify Respondent | FLS-REMINDER-V2 (urgent) |
| 3 | 7 | Any non-submitted | Escalate to Manager | FLS-ESCALATE-V1 |
The EipTemplCode must match a published template in the EIP module. If it doesn't exist, the Quartz job will log an error and skip that rule. Verify templates with your EIP admin before creating reminder rules.
Bridge Config Linkage
If your Registration needs to send events to another module (e.g., TMS needs to know when feedback is submitted), a Bridge Config row must exist in MFLSBRIDGECONFIG. This is typically a one-time developer setup per integration. As an admin, you should know which Bridge Configs are active so you understand what happens when respondents submit.
| ModuleId | Module | Events subscribed | Action on FormSubmitted |
|---|---|---|---|
| 301 | TMS | FormSubmitted, InstanceCompleted | Update learner feedback status; aggregate trainer ratings |
| 501 | HRMS | StepCompleted, InstanceCompleted | Unlock next appraisal step; update employee records |
| 601 | PERM (Performance) | InstanceCompleted | Finalise performance review records |
Access Rules
Access Rules control who can manage or view results for a Registration. Use POST /fls/registrations/{id}/access-rules to grant access.
| Field | Values | Notes |
|---|---|---|
| PrincipalType | 0=User, 1=Role | Assign to a specific user or a role group |
| PrincipalId | UserId or RoleId | The user or role being granted access |
| AccessType | 0=Manage, 1=ViewSummary, 2=ViewResponses | See Admin Roles section for details |
| Scope | 0=All, 1=OrgUnit, 2=Department | Limit to a specific org unit or department |
| ScopeObjectId | WorkOUId or DeptId | Required if Scope โ 0. Leave null for all-access. |
Survey Instrument Config
An Instrument Config is the questionnaire definition. One Registration links to one or more Instrument Configs (e.g., Step 1 uses Config #21, Step 2 uses Config #22 in a multi-step appraisal).
| Field | Type | Example | Notes |
|---|---|---|---|
| InstrumentTitle | string | Training Feedback Survey | Shown as the survey heading to respondents |
| InstrumentTypeId | int | 0=Feedback, 1=Assessment, 2=Poll | Determines scoring logic |
| LangDefault | string | en, ta, ar | Default language; respondent can switch if translations exist |
| IsAnonymous | bit | 0=named, 1=anonymous | If 1, respondent names never appear in results queries |
| ShowProgressBar | bit | 1 | Show section progress bar to respondent |
| IsNpsEnabled | bit | 1 | If 1, NPS questions are calculated as part of the instrument score |
| IsLocked | bit | 0 | Set to 1 once instance opens to prevent structure changes mid-survey |
| VersionNo | int | 3 | Auto-incremented on publish. Use to track instrument revisions. |
Adding Sections
Sections divide a long survey into pages. Each section is shown one at a time with a "Next" button. Recommended: 3โ6 questions per section to avoid respondent fatigue.
Go to Survey Designer โ Sections tab for your Instrument Config.
Click "Add Section". Enter SectionCode (e.g., GENERAL-FB), SectionName (shown as the section heading), and optional Description (shown as subtext).
Set the DisplayOrder for each section. Sections are shown in ascending order.
Add questions to each section (see Question Bank below).
Question Bank
Questions are defined once in MSURVEYQUESTIONBANK and reused across multiple Instrument Configs. This means a question like "How would you rate the trainer?" can be standardised and used in multiple survey types without rewriting it.
Check if the question already exists in the bank (search by QuestionCode). Reuse if possible.
If new: Create question in bank with QuestionCode (e.g., TMS-TRAINER-KNOWLEDGE), QuestionText, QuestionTypeId, default scale settings.
Link the bank question to your section via MSURVEYINSTQUESTION. Here you can override: IsRequired, scale range, weight, branching rules for this specific instrument.
Set DisplayOrder within the section. Questions appear in ascending order.
6 Question Types
Rating (Stars)
- Fields: ScaleMin (usually 1), ScaleMax (1โ5 for stars, up to 10 for extended)
- Optional: LabelLow (e.g., "Poor"), LabelHigh (e.g., "Excellent")
- Result: AnswerNumeric. Aggregated to AvgRating in survey summary.
- Use when: you want a familiar star rating for trainer quality, course satisfaction, etc.
NPS (Net Promoter Score)
- Fixed scale: 0 to 10. No configuration needed beyond enabling IsNpsEnabled on the instrument.
- Result: AnswerNumeric. Automatically categorised as Promoter (9-10), Passive (7-8), Detractor (0-6).
- NPS Score = (Promoters% โ Detractors%), ranges from โ100 to +100.
- Use when: measuring likelihood to recommend a course, trainer, or programme.
Single Choice (Radio buttons)
- Add 2โ6 options in MSURVEYQUESTIONOPTION for the question.
- Respondent picks exactly one option.
- Result: AnswerOptionIds (one value). Aggregated to OptionDistJson showing count per option.
- Use when: "Overall, how was this training? Very Good / Good / Average / Poor"
Multi Choice (Checkboxes)
- Respondent selects one or more options.
- Result: AnswerOptionIds (comma-separated). Each option counted in OptionDistJson.
- Use when: "What did you find most useful? [Relevant content] [Good pace] [Practical examples] [Clear explanations]"
Yes / No
- Two options with configurable labels (default: "Yes" / "No").
- Change labels via MSURVEYQUESTIONOPTION (PositiveLabel / NegativeLabel).
- Result: AnswerOptionIds (1 or 2). Shown as Yes/No counts in results.
- Use when: "Would you recommend this course to a colleague?"
Free Text
- Fields: MaxLength (default 1000), MinLength (optional โ force a minimum response length).
- Result: AnswerText. Not numerically aggregated; shown as a list of text responses.
- Use when: "Any other comments or suggestions?" or "Describe one thing the trainer did well."
Branching Rules
Branching rules show or hide questions based on previous answers. Stored in BranchRulesJson on MSURVEYINSTQUESTION. The format is a JSON array of conditions.
// Show Question 106 (text) only if Question 101 (rating) scored < 3
// BranchRulesJson on Q106:
[
{
"conditionQuestionId" : 101 ,
"operator" : "lt" , // lt | gt | eq | neq | in
"value" : 3 ,
"action" : "show" // show | hide | require
}
]
Complex branching (nested conditions, multiple jumps) makes the survey difficult to test and confusing for respondents. Prefer simple single-condition rules: "If rating < 3, show the improvement text box".
Anonymous Settings
Two different anonymous modes exist โ understand the difference:
| Setting | What it controls | Use case |
|---|---|---|
| Survey IsAnonymous=1 | Results queries never return respondent names โ even admins cannot see who answered what. Respondent identity is hidden from all result views. | 360ยฐ peer review, upward feedback, sensitive HR surveys |
| QuickRating IdentityMode=0 | QuickRating entries stored without linking to the rater's user ID. Admin can see rating values and comments but not who submitted them. | Anonymous trainer ratings, anonymous product ratings |
Once an instrument is set IsAnonymous=1 and responses are collected, you cannot retroactively identify respondents. Set this before launching โ changing it post-launch is not supported.
Create an Instance
An Instance is a specific deployment of a Registration to a specific set of people for a specific time period. Creating an instance is the most common admin task.
Select Registration โ choose the Registration that matches your form type (e.g., "TMS Training Feedback").
Set names โ enter InstanceCode (e.g., TMS-FB-Q2-2026) and InstanceName (e.g., "TMS Batch Feedback Q2-2026"). InstanceName is shown to respondents and incharges.
Link an entity (optional) โ set EntityObjectId if this instance relates to a specific entity (e.g., the Training Batch ID for TMS).
Add groups โ define audience groups. Each group gets a GroupCode, GroupName, and links to a context object (ContextObjectTypeId=1=Employee, ContextObjectId=DeptId). See Groups section.
Set schedule โ call POST /fls/instances/{id}/schedule with OpensFrom, ClosesOn, GlobalDeadlineDt. The instance stays in Draft until opened.
Add incharges โ add incharge users to MFLSINCHARGE. They will see the instance in their dashboard and can monitor progress.
Open the instance โ call POST /fls/instances/{id}/open or use the admin UI. This transitions status to Open, generates tokens, and dispatches emails.
Scheduling (Opens / Closes)
| Field | Meaning | Notes |
|---|---|---|
| OpensFrom | Date/time the form becomes accessible | If in the future, a Quartz job auto-opens it at this time. Or call OpenFlsInstance manually. |
| ClosesOn | Date/time the form stops accepting responses | A Quartz job auto-closes the instance. Respondents who haven't submitted see "Closed" after this. |
| GlobalDeadlineDt | The hard deadline for individual respondents | Can differ from ClosesOn. Used by reminder rules (OnDeadline trigger fires at this date). |
For TMS batches that complete at unpredictable times, call OpenFlsInstance manually from TmsFeedbackBLL after the batch is marked complete โ don't rely on a scheduled OpensFrom date.
Groups & Target Audience
Groups divide respondents within an instance โ useful for multi-batch or multi-department deployments. Each group has its own completion stats, optional deadline, and step configuration (for multi-step forms).
| MFLSINSTANCEGROUP Field | Purpose | Example |
|---|---|---|
| GroupCode | Unique code within the instance | BATCH-A, DEPT-FINANCE |
| GroupName | Display name for the group | Batch A, Finance Department |
| ContextObjectTypeId | Type of entity this group represents | 1=Employee, 5=Department, 9=TrainingBatch |
| ContextObjectId | ID of the specific entity | BatchId=2047 |
| StepCount | Number of sequential steps for this group | 1 (single form), 3 (multi-step appraisal) |
| BlockingFlag | 1=block next step until current step complete | 1 (for certificate gating or step sequencing) |
| BlockingSp | Optional SP to validate blocking condition | SP_TMS_CHECKFEEDBACKBLOCK |
| DeadlineDt | Group-specific deadline (overrides GlobalDeadlineDt) | 2026-06-27 23:59 |
Opening an Instance
Opening an instance is the point of no return โ tokens are generated, emails are dispatched, and the form is live. Verify these before opening:
- All respondents added to their correct groups
- Survey Instrument Config linked and not locked (if CompletionMethod=Survey)
- EIP dispatch template confirmed as published
- OpensFrom and ClosesOn dates set correctly
- Reminder rules configured (if auto-nudge is desired)
- At least one incharge assigned (so someone monitors progress)
Pause / Resume / Close
Use POST /fls/instances/{id}/control with Action parameter:
| Action | Code | Effect on respondents | Events fired |
|---|---|---|---|
| Pause | 0 | Cannot access form link โ they see a "Paused" message | InstanceStatusChanged (to Paused) |
| Resume | 1 | Form becomes accessible again; in-progress drafts preserved | InstanceStatusChanged (to Open) |
| Close | 2 | Cannot access form โ link shows "Closed". No further submissions. | InstanceStatusChanged (to Closed) |
| Archive | 3 | No access. Instance marked Archived for data retention. | None |
A Closed instance cannot be re-opened. If you need to pause temporarily (e.g., a system maintenance window), use Pause not Close. Use Close only when collection is definitively finished.
Add Respondents (One by One)
Use POST /fls/instances/{id}/respondents for single adds (or the Admin UI "Add Respondent" form).
| Field | Required | Notes |
|---|---|---|
| FlsInstanceId | โ | The instance to add to |
| GroupId | โ | Which group within the instance |
| RespondentName | โ | Full name shown in admin view |
| RespondentMail | โ | Email for token dispatch |
| RespondentRefId | optional | Your module's ID (e.g., EmployeeId, EnrollmentId) for cross-reference |
| RespondentType | optional | 0=Employee, 1=Manager, 2=HR, 3=Peer, 4=External |
| StepNo | optional | For multi-step: which step this person fills. Default=1. |
Bulk Import (CSV)
For large groups, paste a CSV into the Bulk Import tab. The system expects comma-separated values, one row per respondent:
// CSV format (header row required):
Name,Email,Reference,Group,RespondentType
Arun Kumar,arun.k@myorg.com,EMP-10842,Batch A,0
Bhavana Singh,bhavana.s@myorg.com,EMP-10843,Batch B,0
Chetan Rao,chetan.r@myorg.com,EMP-10844,Batch A,0
Respondent Statuses
| Status | Code | Admin action available |
|---|---|---|
| Not Started | 0 | Send reminder (nudge); re-dispatch token |
| Opened | 1 | Wait; they clicked but haven't started filling |
| In Progress | 2 | Send gentle reminder; draft is saved |
| Submitted | 3 | View their responses; no further action needed |
| Expired | 4 | Nudge to re-dispatch with new token; or manually mark as submitted if completed offline |
| Opted Out | 5 | View opt-out reason (if captured); no further reminders sent |
Send Reminder / Nudge
Nudging sends a new email reminder to a respondent with their token link. Call POST /fls/respondents/{id}/nudge or use the "Remind" button in the admin UI. The NudgeCount field increments on each nudge โ use this to track how many times a respondent has been contacted.
To nudge all pending respondents at once, the admin UI has a "Send Reminder to All Pending" button. This triggers a batch nudge across all respondents with status Not Started or In Progress for the current instance.
Opt-Out Handling
If the EIP dispatch template includes an opt-out link and the Registration allows opt-out, respondents can decline participation. When they opt out:
- RespondentSts is set to 5 (OptedOut)
- OptedOutAt timestamp is recorded
- No further reminder emails are sent
- They appear in the respondent list with "Opted Out" status
Admins cannot force opt-out respondents to re-enter. If the form is mandatory (IsMandatory=1), the admin must handle the opt-out case through their module's own workflow (e.g., manager override in HRMS).
Create a QuickRating Config
A QuickRating Config defines how a rating widget behaves for a specific entity type. Create one config per type of entity you want rated (e.g., one for Trainers, one for Courses).
| Field | Example | Notes |
|---|---|---|
| ConfigName | Trainer Rating โ 5 Stars | Admin display name |
| ObjectTypeId | 3 | What type of entity: 3=Trainer, 5=Course, 8=Product |
| BizTransactionTypeId | -1 | Further scope (e.g., distinguish "rate trainer per session" vs "rate trainer overall"). -1=all contexts. |
| ScaleMin | 1 | Minimum rating value |
| ScaleMax | 5 | Maximum. โค5 shows stars; >5 shows numeric buttons. |
| AllowComment | 1 | 0=none, 1=optional, 2=required |
| CommentMaxLength | 500 | Max chars for comment textarea |
| AllowMultiRating | 0 | 0=one rating per user per entity; 1=can re-rate |
| IdentityMode | 0 | 0=anonymous ratings; 1=record user identity |
| WidgetLabel | Rate this trainer | Prompt text shown above the stars/buttons |
| ThankyouLabel | Thank you for your rating! | Shown after submission |
Embed Context (ObjectTypeId)
The Angular QuickRating widget uses [objectTypeId] + [objectId] to scope the widget to a specific entity. Ensure your ObjectTypeId values are consistent across modules โ define them in a shared constants file or system table.
<!-- Trainer rating widget embedded in TMS Batch card -->
<app-quick-rating-widget
[objectTypeId ]="3" <!-- 3 = Trainer -->
[objectId ]="trainerId" <!-- specific trainer ID -->
[bizTypeId ]="sessionId" <!-- optional: scope per session -->
[showSummary ]="true" <!-- show avg rating badge below stars -->
/>
Review Ratings
View all ratings for an entity via GET /quickrating/ratings?objectTypeId=3&objectId=301. Returns paginated QuickRatingRows with Rating, CommentText (if allowed), RatedOn, and optionally RatingByRefId (if IdentityMode=1).
View trend over time via GET /quickrating/trend?objectTypeId=3&objectId=301. Returns monthly AvgRating trend data, suitable for charting on the Trainer Rating Card.
Enable TMS Feedback
TMS feedback is enabled at two levels: per-organisation (in TMS Settings) and per-batch (at dispatch time).
Org-level default: In TMS Settings โ Feedback Settings, set: Default Instrument Config ID, Block Certificate by Default, Feedback Deadline Days, Auto-Dispatch on Batch Completion.
Batch-level override: When dispatching feedback for a specific batch, the Training Manager can override the instrument config and certificate-blocking setting.
Bridge Config: The TMS Bridge Config (MFLSBRIDGECONFIG row for ModuleId=301) must already exist for events to flow back to TMS. This is a one-time developer setup โ verify with your System Admin.
Certificate Gating
When BlockCertificate=1 is set at dispatch time, the MFLSINSTANCEGROUP row is created with BlockingFlag=1 and BlockingSp=SP_TMS_CHECKFEEDBACKBLOCK. The SP is called whenever a learner requests their certificate:
-- SP_TMS_CHECKFEEDBACKBLOCK returns 1 (blocked) or 0 (allowed)
IF EXISTS (
SELECT 1 FROM MFLSRESPONDENT
WHERE FlsRespondentId = @FlsRespondentId
AND RespondentSts <> 3 -- not Submitted
AND BlocksCertificate = 1
)
SELECT 1 -- blocked
ELSE
SELECT 0 -- allowed
Learners who opted out (status=5) or whose token expired (status=4) are still blocked if BlocksCertificate=1. The Training Manager must decide whether to manually mark them as submitted or grant a certificate override through TMS.
Auto-Dispatch Settings
| Setting | What it does |
|---|---|
| Auto-Dispatch on Batch Completion | When a TMS batch transitions to "Completed" status, TmsFeedbackBLL.DispatchBatchFeedbackAsync is called automatically using the default instrument config ID and certificate setting. |
| Feedback Deadline Days | Number of days after batch completion before the FLS instance auto-closes. Default: 7 days. |
| Block Certificate by Default | If true, all auto-dispatched instances are created with BlockCertificate=1. Can be overridden per batch at dispatch time. |
| Default Instrument Config ID | The survey template used for all auto-dispatched feedback forms unless overridden. |
Viewing Trainer Reports
Navigate to TMS โ Trainer Profile โ Feedback tab, or to the Trainer Rating Card component. Select the trainer and period (e.g., Q2-2026). The card shows:
- Dimension bars: Knowledge / Clarity / Engagement (average from survey questions linked to these dimensions)
- Overall average
- Completion rate (how many learners submitted vs. total assigned)
- Historical quarterly trend
The dimension averages come from SP_TMS_FLS_UPDATESUMMARY, which maps specific InstQuestionIds to each dimension. If you add a new survey instrument, ensure the question IDs are mapped in the SP โ otherwise the trainer report will show no data.
Survey Results Dashboard
Access results via GET /fls/surveys/{flsInstanceId}/results or through the admin UI Results tab. The dashboard shows:
- Completion summary: submitted/total, progress bar
- Group filter: All Groups / Batch A / Batch B (if multiple groups)
- Per-question cards: Rating shows average + distribution bar chart; NPS shows Promoters/Passives/Detractors + NPS Score; Choice shows option counts; Text shows free-text list
- Respondent detail: Click a respondent row (if AccessType=ViewResponses) to open a modal showing all their answers
Export Options
- Summary CSV: One row per question, aggregated stats (AvgRating, NPS Score, option distribution)
- Full response export: One row per respondent per answer. Only available with AccessType=Manage or ViewResponses. Anonymous instruments export without respondent names.
- Trainer report PDF: Auto-generated from TTRAINERFEEDBACKSUMMARY โ includes dimension bars, historical trend, session count
Access Control for Results
As noted in Access Rules, ViewSummary allows aggregated results only. ViewResponses allows per-respondent detail. For anonymous instruments, even ViewResponses users cannot see respondent names โ only response content.
Troubleshooting
| Issue | Likely Cause | How to Fix |
|---|---|---|
| Respondent sees "This link has expired" | TokenExpiry has passed (TokenExpiryHours elapsed since dispatch) | Nudge the respondent via Admin โ Respondents โ Remind. This re-dispatches a fresh token. Or extend TokenExpiryHours on the Registration for future instances. |
| Respondent not receiving email | 1) RespondentMail is incorrect; 2) EIP template not published; 3) LFLSDISPATCHLOG shows DeliveryStatus=Failed | Check LFLSDISPATCHLOG for this respondent. If DeliveryStatus=Failed, verify email address and EIP template status. Correct and nudge. |
| Instance stuck in "Scheduled" โ not opening | OpensFrom is in the future, or OpenFlsInstance was never called (for manual dispatch) | If OpensFrom is past and still Scheduled: check Quartz job logs. If TMS auto-dispatch: ensure SP_TMS_DISPATCHFEEDBACK was called and returned success. Manually call OpenFlsInstance if needed. |
| Survey results page shows no data | GroupId filter is excluding results; or TSURVEYRESPONSESUMMARY not yet populated | Check the Group filter in the Results view (switch to "All Groups"). If still empty and there are Submitted respondents, the summary aggregation job may not have run. Trigger manually via the Recalculate Summary button. |
| Trainer rating card shows 0 / no data | SP_TMS_FLS_UPDATESUMMARY doesn't map the survey question IDs to trainer dimensions | Verify the InstQuestionIds for Knowledge/Clarity/Engagement questions in SP_TMS_FLS_UPDATESUMMARY match the InstrumentConfig used for this batch. If the instrument was updated, the SP mapping may be stale. |
| Certificate still blocked after feedback submitted | SP_TMS_CHECKFEEDBACKBLOCK checking old RespondentSts value; or caching | Verify RespondentSts=3 for the learner in MFLSRESPONDENT. Check if SP_TMS_CHECKFEEDBACKBLOCK has a cache or if there's a query result cache in TMS DAL. Force refresh or clear the TMS learner cache. |
| "Instance Completed" event not firing | Not all groups have 100% submission (instance completion waits for all groups) | Check each group's SubmittedCount vs. RespondentCount in MFLSINSTANCEGROUP. The InstanceCompleted event fires only when all groups reach 100%. If a group is stuck, investigate any Opted Out or Expired respondents. |
GoodBooks GB5 ยท FLS Admin Guide ยท 2026-07-01