/// <summary>
    /// method
    /// US:902
    /// executes the actions in the expression passed in
    /// </summary>
    /// <param name="strExp"></param>
    /// <returns></returns>
    public CStatus Execute(string strExp)
    {
        CParseExpression ParseExp = new CParseExpression(BaseData, PatientID, PatCLID, ChecklistID, ItemID);
        CStringStatus    ss       = ParseExp.ParseAction(strExp);

        if (!ss.Status)
        {
            return(ss);
        }

        switch (ss.Value)
        {
        case "checklist.cancel()":
            return(CancelChecklist(PatCLID));

        case "item.disable()":
            return(DisableChecklistItem(PatCLID, ItemID));

        default:
            return(ParseSpecifiedAction(ss.Value));
        }
    }
    /// <summary>
    /// method
    /// US:902
    /// evaluates all the expressions in the list
    /// </summary>
    /// <returns></returns>
    public CStatus Evaluate()
    {
        CParseExpression ParseExp = new CParseExpression(BaseData, PatientID, PatCLID, ChecklistID, ItemID);
        CStatus          status   = new CStatus();

        foreach (CExpression exp in this)
        {
            CStringStatus ss = ParseExp.Parse(exp.GetIf());
            if (!ss.Status)
            {
                status = ss;
                break;
            }

            if (ss.Value.IndexOf(CExpression.NullTkn) >= 0)
            {
                CPatChecklistItemData     PatChecklistItem = new CPatChecklistItemData(BaseData);
                CPatChecklistItemDataItem di = null;
                status = PatChecklistItem.GetPatCLItemDI(PatCLID, ItemID, out di);
                if (!status.Status)
                {
                    return(status);
                }

                di.TSID         = Convert.ToInt64(k_DEFAULT_STATE_ID.Bad);
                di.OSID         = Convert.ToInt64(k_DEFAULT_STATE_ID.Unknown);
                di.IsOverridden = k_TRUE_FALSE_ID.False;
                di.OverrideDate = CDataUtils.GetNullDate();
                di.DSID         = Convert.ToInt64(k_DEFAULT_STATE_ID.Bad);

                status = PatChecklistItem.UpdatePatChecklistItem(di);
                if (!status.Status)
                {
                    return(status);
                }

                continue;
            }

            int nResult = CLogic.Evaluate(ss.Value);
            CExecuteExpression ExecuteExp = new CExecuteExpression(
                BaseData,
                PatientID,
                PatCLID,
                ChecklistID,
                ItemID);
            switch (nResult)
            {
            // false
            case 0:
                string strElse = exp.GetElse();
                if (!string.IsNullOrEmpty(strElse))
                {
                    status = ExecuteExp.Execute(strElse);
                }
                break;

            // true
            case 1:
                status = ExecuteExp.Execute(exp.GetThen());
                break;

            // error
            case 2:
                status.Status        = false;
                status.StatusCode    = k_STATUS_CODE.Failed;
                status.StatusComment = LogicModuleMessages.ERROR_LOGIC + exp.Expression;
                break;
            }

            if (!status.Status)
            {
                break;
            }
        }

        return(status);
    }