以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  自定义函数第一次调用出错以后的就正常了  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=107933)

--  作者:李小胖
--  发布时间:2017/10/12 21:07:00
--  自定义函数第一次调用出错以后的就正常了
自定义函数权限判断   (他只在第一次调用的时候弹出这个错误窗口是为什么呢? 下面就是自定义函数的全部代码)
调用的目标发生了异常。

System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.Runtime.InteropServices.ExternalException: 所请求的剪贴板操作失败。
   在 System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
   在 System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)
   在 System.Windows.Forms.Clipboard.SetText(String text, TextDataFormat format)
   在 System.Windows.Forms.Clipboard.SetText(String text)
   在 UserCode.AJMi5keGe3em3rR4X(Object[] Args)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.UserFunctions.Execute(String Name, Object[] Args)






下面的内容是自定义函数
\'Args(0) TmpModuleID   \'传入模块名称
\'Args(1) QX   \'传入需要判断的权限(读取,编辑,删除,增加,分享...等等)
\'可传入的参数有,addon   assign     audit  back  deleteon  editon  printon  readon  Share
\'               插件    指派分配   审计   返回  删除?     编辑?   打印?    只读?   分享
\'---------------------------------------下面是 人员ID 和部门ID  的判断参数(判断是否本人是否本部门)
\'Args(2) SalesManID2   \'传入销售员ID(判断参数)   \'修改数据的时候才传入这个参数作为判断,(用来判断以前的数据的人员是不是本人)
\'Args(3) DepartmentID2  \'传入部门ID(判断参数)   \'用作数据对比的部门ID(旧数据中的)

Dim ModuleID2 As String = Args(0)
Dim QX As String = Args(1)
Dim SalesManID2 As String =  Args(2)
Dim DepartmentID2 As String = Args(3)


Dim cmd As New SQLCommand
cmd.C

cmd.CommandText = "Select " & QX & " f rom {QX_roleDetail} where RoleID = \'" & TmpRoleID & "\' And ModuleNO = \'" & ModuleID2 & "\'"


Dim Res As  String = cmd.ExecuteScalar

Select Case Res
    Case "0"
        Return("无权限")  \'返回
    Case "1"
        If  SalesManID2 <> "" Then  \'销售员ID 如果不等于是空
            If SalesManID2 <> TmpUserID Then  \'销售员ID 不等于用户ID
                Return("无权限")
            End If
        End If
    Case "2"
        If DepartmentID2 <> "" Then \'如果部门本表ID 不等于空
            If DepartmentID2 <> TmpDepartmentID Then  \'如果部门本表ID 不等于 全局变量的部门ID
                Return("无权限")
            End If
        End If
    Case "3"
        \' 这个判断是是不是本部门的,如果不是就不能修改
        If TmpDepartmentID.SubString(0,TmpDepartmentID.length-2)  <> DepartmentID2.SubString(0,TmpDepartmentID.length-2) Then
            Return("无权限")
        End If
    Case "4"
        \' 如果  8866.substring(0.2)   不等于  887766.substring(0,2)
        If DepartmentID2.SubString(0,2) <> TmpDepartmentID.SubString(0,2) Then \'同上 (主要是判断相等就能编辑)
            Return("无权限")
        End If
    Case Else
        Return Nothing
        
End Select
Return Nothing


[此贴子已经被作者于2017/10/12 21:08:02编辑过]

--  作者:有点甜
--  发布时间:2017/10/12 22:36:00
--  

调用函数之前,有调用剪切板的代码?Clipboard

 

做个例子看看。


--  作者:李小胖
--  发布时间:2017/10/13 11:20:00
--  
以下是引用有点甜在2017/10/12 22:36:00的发言:

调用函数之前,有调用 ?Clipboard

 

做个例子看看。



cmd.CommandText = "Select " & QX & " fr om {QX_roleDetail} where RoleID = \'" & TmpRoleID & "\' And ModuleNO = \'" & ModuleID2 & "\'"

ClipBoard.SetText(cmd.CommandText)


Dim Res As  String = cmd.ExecuteScalar

上面的代码   我删除了调用 剪切板 这段


--  作者:有点甜
--  发布时间:2017/10/13 11:25:00
--  

1、bin文件夹删除,重新测试。

 

2、加入msgbox,定位出错位置。