Foxtable(狐表)用户栏目专家坐堂 → 学习官方每日一练 登录验证后无法进行下一步操作 麻烦老师帮忙看看 谢谢


  共有4815人关注过本帖树形打印复制链接

主题:学习官方每日一练 登录验证后无法进行下一步操作 麻烦老师帮忙看看 谢谢

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
学习官方每日一练 登录验证后无法进行下一步操作 麻烦老师帮忙看看 谢谢  发帖心情 Post By:2021/5/13 10:23:00 [显示全部帖子]

学习官方每日一练   登录验证后无法进行下一步操作  麻烦老师帮忙看看  谢谢

图片点击可在新窗口打开查看此主题相关图片如下:动画.gif
图片点击可在新窗口打开查看

以下内容是专门发给有点蓝浏览


访问地址:
http://192.168.41.4/login.htm   登录名  张三   密码  666
登录成功后
http://192.168.41.4/Begin.htm?id=773

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)这些实例仅提供学习用,先自己分析代...  发帖心情 Post By:2021/5/13 11:53:00 [显示全部帖子]

经过代码逐一按照顺序测试   当前在内部函数NewQuestion  这个代码下红色部分不弹值,导致UsersTestForm表空增了一行数据   当前用户就没有试题可操作了
 麻烦老师帮忙看看是啥原因呢?

'开始新的练习
Dim e As RequestEventArgs = Args(0)
Dim vtext As String = e.PlainText 'ajex传入
MessageBox.Show(vtext)
If vtext > "" Then
    Dim varr() As String = vtext.Split("|")
    If varr.Length = 3 Then
        Dim drU As DataRow = Functions.Execute("CheckToken",varr(0),e) '权限验证
        If drU IsNot Nothing  Then
            Dim qttype As String
            Dim qt As String = e.Cookies("cqt")
MessageBox.Show(e.Cookies("cqt"))
            If qt = 2 Then
                qttype = " and TestType = 5" '属于考试项目
            Else
                qttype = " and TestType <> 5"
            End If

            Dim openid As String = drU("OpenID")
MessageBox.Show(openid)
            If Functions.Execute("UpdateLogonTime",openid) Then '更新用户操作时间
                Dim dt As DataTable = DataTables("UsersTestForm")
                dt.ReplaceFor("IsCompleted",1,"[OpenId] = '" & openid  & "' and IsCompleted = 0" & qttype) '如果其它的练习没有完成,则统一设置为完成
                Dim drnew As DataRow = dt.AddNew
                drnew("TestID") = _BizCodeBuilder.GetNextCode("UsersTestForm") '使用专门的类获取编号,避免并发的时候产生重复编号
MessageBox.Show(drnew("TestID"))
                drnew("OpenId") = openid
                drnew("UserNick") = drU("Nickname")
                drnew("TestDate") = Date.Now
                Dim qty As Integer = val(varr(2))
MessageBox.Show(qty)
                If qty = 0 Then qty = 1
                drnew("QuestionQty") = qty '选择的题目数量
                drnew("AnswerQty") = 0
                drnew("AnswerCodeQty") = 0
                drnew("CorrectQty") = 0
                drnew("CorrectRate") = 0 '如果=1准确率默认为100%
                drnew("IsCompleted") = 0
                drnew("CompleteRate") = 0
                '设置选择的练习题型
                Dim drDict As DataRow = DataTables("uSysDictionarys").Find("ItemName='" & varr(1) & "' and GroupName='做题题型'")
                Dim subType As Integer = 0
                If drDict IsNot Nothing Then
                    subType = val(drDict("ItemValue"))
MessageBox.Show(val(drDict("ItemValue")))
                End If
                drnew("TestType") = subType
                dt.Save
                
                '把已经完成的练习移除,避免占用内存
                Dim ids As List(Of String) = dt.GetValues("TestID","IsCompleted = 1")
                dt.RemoveFor("IsCompleted = 1")
                DataTables("UsersCodeAnswerForm").RemoveFor("TestID in ('" & String.Join("','",ids.ToArray)  & "')")
                DataTables("UsersTestForm").RemoveFor("TestID in ('" & String.Join("','",ids.ToArray)  & "')")
                
                '从问题顺序表获取一道题
                Dim sql As String = CExp("exec [upd_GetNextNewQuestionFor] @OpenID='{0}',@SelectTestType={1}",openid ,subType)
                dt = Functions.Execute("Cmd_GetDataTable","Q",sql)
                Dim drQs As DataRow
                If dt.DataRows.Count > 0 Then
                    drQs = dt.DataRows(0)
                    Dim htmJson As String = Functions.Execute("GetNewAnswerHtm",openid ,drQs("QuestionID"),drQs("QuestionType"),drnew) '生成题目html代码
                    e.WriteString(htmJson)
                    Return ""
                End If
            End If
        End If
    End If
End If
e.WriteString("错误: 无法创建新的练习, 请通知官方客服!")

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)在跟踪,看是那一句代码的问题。再看...  发帖心情 Post By:2021/5/13 14:37:00 [显示全部帖子]

2021-05-13 12:09:56.9745
host=192.168.41.4
path=test\newquestion.htm
HttpMethod=POST
poststring=773|标准题(全部)|10
ip=192.168.41.4


2021-05-13 12:12:50.2688
host=192.168.41.4
path=test\Check.htm
HttpMethod=POST
poststring=773|0
ip=192.168.41.4

2021-05-13 12:12:50.3539
事件/函数: 自定义函数,NewQuestion
调用的目标发生了异常。
   在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.UserFunctions.Execute(String Name, Object[] Args)
未将对象引用设置到对象的实例。
   在 UserCode.AyDTit5gB0RU0SMFJ(Object[] Args)

启用了日志  但是看不大明白这个提示自定义函数NewQuestion 错误在那  

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)哪一句出错?MessageBox.Show(openid...  发帖心情 Post By:2021/5/13 15:23:00 [显示全部帖子]

            Dim openid As String = drU("OpenID")
MessageBox.Show(drU("OpenID"))
            If Functions.Execute("UpdateLogonTime",openid) Then '更新用户操作时间

                Dim dt As DataTable = DataTables("UsersTestForm")
                dt.ReplaceFor("IsCompleted",1,"[OpenId] = '" & openid  & "' and IsCompleted = 0" & qttype) '如果其它的练习没有完成,则统一设置为完成

                Dim drnew As DataRow = dt.AddNew
MessageBox.Show("12")
                drnew("TestID") = _BizCodeBuilder.GetNextCode("UsersTestForm") '使用专门的类获取编号,避免并发的时候产生重复编号
MessageBox.Show("123")
                drnew("OpenId") = openid
MessageBox.Show("1234")
                drnew("UserNick") = drU("Nickname")
                drnew("TestDate") = Date.Now
MessageBox.Show("1235")
                Dim qty As Integer = val(varr(2))
MessageBox.Show(qty)
                If qty = 0 Then qty = 1
                drnew("QuestionQty") = qty '选择的题目数量
                drnew("AnswerQty") = 0
                drnew("AnswerCodeQty") = 0
                drnew("CorrectQty") = 0
                drnew("CorrectRate") = 0 '如果=1准确率默认为100%
                drnew("IsCompleted") = 0
                drnew("CompleteRate") = 0
                '设置选择的练习题型
                Dim drDict As DataRow = DataTables("uSysDictionarys").Find("ItemName='" & varr(1) & "' and GroupName='做题题型'")
                Dim subType As Integer = 0
                If drDict IsNot Nothing Then
                    subType = val(drDict("ItemValue"))
MessageBox.Show(val(drDict("ItemValue")))
                End If
                drnew("TestType") = subType
                dt.Save

红色部分不弹提示  后续的也不弹

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)检查一下全局代码,看看数据库对应的...  发帖心情 Post By:2021/5/13 15:42:00 [显示全部帖子]


编号表是存在的 
就是没有数据写入这个UsersTestForm表

此主题相关图片如下:11.png
按此在新窗口浏览图片

此主题相关图片如下:22.png
按此在新窗口浏览图片

以下内容是专门发给有点蓝浏览



麻烦老师帮忙看看   中午折腾了一中午都没有找到原因  谢谢老师的耐心解答!

访问地址:
http://192.168.41.4/login.htm   登录名  张三   密码  666
登录成功后
http://192.168.41.4/Begin.htm?id=773
[此贴子已经被作者于2021/5/13 15:43:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)一样自己调试一下全局代码另外看看这...  发帖心情 Post By:2021/5/13 18:05:00 [显示全部帖子]

全局代码:红色部分一个都不弹出值

'执行任务的时间
Public s_TaskDate As Date
'是否正在执行任务
Public s_Tasking As Boolean

'编号生成'
Public _BizCodeBuilder As BizCodeBuilder

'不重复编号上传用,这里的用法比较简单,没有做复杂的编号规则处理
'开发测试的时候注意,如果服务器开了服务,本地也开了服务,那么可能会
Public Class BizCodeBuilder
    Private _bizcode As DataTable '直接把编号表取出到内存'
    Private _codelock As New Object

    Public Sub New()
        Dim sql = "Se lect * From [uSysBizCode] "
        _bizcode = Functions.Execute("Cmd_GetDataTable", "Q", sql, True)
MessageBox.Show("0")
    End Sub

    Public Function GetNextCode(s_name As String,Optional s_prefix As String = Nothing) As String
        SyncLock _codelock '使用锁处理并发
            Dim dr As DataRow = _bizcode.Find(CExp("BizName='{0}'", s_name))
MessageBox.Show("1")
            If dr Is Nothing Then
MessageBox.Show("2")
                '建议先在编号表中维护好需要产生编号的表,不用默认生成的编号规则'
                dr = _bizcode.AddNew()
MessageBox.Show(s_name)
                dr("BizName") = s_name 
                dr("MaxValue") = 1
                If String.IsNullOrEmpty(s_prefix) Then s_prefix = Date.now.ToString("mmss") & "BH"
                dr("Prefix") = s_prefix
                dr("Mark") = "yyyyMMdd"
                dr("MarkValue") = Date.Today.ToString("yyyyMMdd")
                dr("Length") = 4
            Else
                '这里的处理规则是按时间进行重新编号,至于是按年,月还是日,在掩码中体现'
                If dr("MarkValue") <> Date.Today.ToString(dr("Mark")) Then 
                    dr("MaxValue") = 1
                    dr("MarkValue") = Date.Today.ToString(dr("Mark"))
                Else
                    dr("MaxValue") = dr("MaxValue") + 1
                End If
            End If
            dr.Save()
            Return dr("Prefix") & dr("MarkValue") & Format(dr("MaxValue"),"0".PadLeft(dr("Length"),"0")) 
        End SyncLock
    End Function
End Class


内部函数NewQuestion 
       Dim drnew As DataRow = dt.AddNew
MessageBox.Show(_BizCodeBuilder is nothing)
                drnew("TestID") = _BizCodeBuilder.GetNextCode("UsersTestForm") 
这个红色部分弹出值    true


uSysBizCode表现在只有一行数据

此主题相关图片如下:12.png
按此在新窗口浏览图片



 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)内部函数NewQuestion  &nb...  发帖心情 Post By:2021/5/14 1:25:00 [显示全部帖子]

老师  经过在老师的指导下  
当前依次进行如下操作:
T_SetDefaultRandSelectionTask 利用这个函数作为计划任务进行后台生成题目
QuestionsSelection  系统随机生成答题数据
系统用户登录成功后,点练习页面  点开始按钮后
UsersTestForm  生成练习记录数据  
系统初步能够实现答题了


有一个问题:题目默认是全部提醒  数量为10   结果现在点开始按钮之后   答题的题目编号永远是1  这样答题就会永远继续下去  而不是只有10个题目  麻烦老师看看怎么修正呢?

图片点击可在新窗口打开查看此主题相关图片如下:动画11.gif
图片点击可在新窗口打开查看



  

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)同样的方法,自己跟踪一下前端js、服...  发帖心情 Post By:2021/5/14 9:13:00 [显示全部帖子]

函数GetNewAnswerHtm代码:

'用于上一题和下一题按钮的调用处理
Dim openid As String = Args(0) '用户公众号openid
Dim QuestionID As String = Args(1) '题目ID
Dim QuestionType As Integer = Args(2) '题目类型
Dim drtestid As DataRow= Args(3) '主单题目所在的行记录
MessageBox.Show(openid)     ‘可以正常弹出当前用户的id值’
Dim AnswerQty As Integer = drtestid("AnswerQty") + drtestid("AnswerCodeQty") + 1 '生成下一题的序号
MessageBox.Show(AnswerQty)    ‘永远是1’
Dim dr As DataRow
Dim jo As new JObject '使用json和js交互
jo("Seq") = AnswerQty & "|" & QuestionType & "|" & CStr(drtestid("TestID")) '题号|题目类型|主单ID
If Args.Length >= 5 Then
    jo("score") = CInt(Args(4))
End If

老师我的理解是AnswerQty永远等于1,是因为主单题目所在行记录是第一行。要解决这个问题首先得解决主单ID,那么整个主单题目表示什么名字表呢?我没有正确找到对应的内容,老师是否可以帮忙点一下!

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)答题记录都在UsersAnswerForm表,Seq...  发帖心情 Post By:2021/5/14 10:37:00 [显示全部帖子]

我理解的是在登录成功之后  程序依次如下操作:
1、Begin函数
点击开始答题


2、NewQuestion函数开始生成练习题目

在运行时候提示【没有正确传输题目类型的值  值传输了OpenId和题目数量】

图片点击可在新窗口打开查看此主题相关图片如下:newquestion.png
图片点击可在新窗口打开查看

3、GetNewAnswerHtm函数
再显示出对应上一题与下一题的练习题目

4、NextQuestion函数 根据选择上一题还是下一题再做对应的判断

那么Dim drtestid As DataRow= Args(3) '主单题目所在的行记录】drtestid外部传进来前这个怎么查询数据    
这个在哪里可以判断呢?我没有成功找出来。
老师是否可以帮忙指点一下呢?

以下内容是专门发给有点蓝浏览


[此贴子已经被作者于2021/5/14 10:37:58编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)GetNewAnswerHtm函数在哪里被调用的,...  发帖心情 Post By:2021/5/14 12:19:00 [显示全部帖子]

我理解的是在登录成功之后  程序依次如下操作:
1、Begin函数
点击开始答题

2、GetNewAnswerHtm函数

3、NewQuestion函数调用GetNewAnswerHtm函数开始生成练习题目


4、NextQuestion函数调用GetNewAnswerHtm函数 根据选择上一题还是下一题再做对应的判断



那么Dim drtestid As DataRow= Args(3) '主单题目所在的行记录】drtestid外部传进来前这个怎么查询数据    
这个在哪里可以判断呢?我没有成功找出来。
老师是否可以帮忙指点一下呢?

 Dim p_Qty  As String = e.PostValues("cboqty")这个地方弹出是空值   貌似begin函数的题量没有传递过来  老师有没有办法解决呢?
begin函数代码:
 With wb.AddInputGroup("form1","ipg1","题型选择" & "【" & dr("Nickname") & "】")
        Dim items As String = "标准化考试"   
        Dim items2 As String = "100"
        Dim items3 As String = "请选择类别"
        If qt = 1 Then
            items = "标准题(全部)|选择题|判断题|简答题|"
            items2 = "|10|20|50|100|"
            items3 = "|党史学习|教育整顿|综合学习|其他学习|"
            If hasValue Then
                '设置本次练习选中的类型和数量
                Dim drDict As DataRow = DataTables("uSysDictionarys").Find("GroupName='做题题型' And ItemValue='" & drlast("TestType") & "'")
                If drDict IsNot Nothing Then
                    items = items.Replace(drDict ("ItemName"),"[" & drDict("ItemName") & "]")
                End If
                items2 = items2.Replace("|" & drlast("QuestionQty") & "|","|[" & drlast("QuestionQty") & "]|")
                
            End If
            items2 = items2.Trim("|")
        End If
        With .AddSelect("cbotype1","类别",items3)
            If hasValue Then .Enabled = False
        End With
        With .AddSelect("cbotype","题型",items)
            If hasValue Then .Enabled = False
        End With
        With .AddSelect("cboqty","题量",items2)
            If hasValue Then .Enabled = False
        End With
    End With
[此贴子已经被作者于2021/5/14 12:23:02编辑过]

 回到顶部
总数 13 1 2 下一页