zoukankan      html  css  js  c++  java
  • Autogenerate LotusScript setter and getter properties for class variables

    Here's the problem. You're using object-oriented LotusScript to create classes and objects. Like a good object-oriented LotusScript developer, you're declaring all your class variables as "Private" and then writing "Setter" and "Getter" properties to allow access to them.

    The truth is, most of the "Setter" and "Getter" properties that you would write offer direct read/write access to those variables anyway -- and writing them out is such a pain! You could cheat and declare the class variables as public or you could have a Lotus Notes form generate them for you.

    Here is the code for a button that will do just this:

    private m_MyVar1 as string
    private m_MyVar2 as Variant
    private m_MyVar3 as Integer
    private m_MyVar4() as string
    

    That will generate these:

    Public Property Get MyVar1 as String
    MyVar1 = me.m_MyVar1
    End Property
    Public Property Set MyVar1 as String
    me.m_MyVar1 = MyVar1
    End Property
    Public Property Get MyVar2 as Variant
    MyVar2 = me.m_MyVar2
    End Property
    Public Property Set MyVar2 as Variant
    me.m_MyVar2 = MyVar2
    End Property
    
    ... and so on.
    

    To further set this up, create a Lotus Notes form in any Lotus Notes database and put two text fields in it.

    These text fields should be labeled as:

    • Input: This is a multi-value Lotus Notes text field. Set the multi-value options tick boxes to use "NewLine" for both display and input.
    • Output: This is a single value Lotus Notes text field.

    Now follow these steps:

    1. Create a button on the form and paste the button code below into its LotusScript Click event.
    2. Create a new Lotus Notes document from the form and paste your class variable declarations into the Input field.
    3. Click the button.

    The "Setter" and "Getter" properties will be created in the Output field. You can then copy and paste the LotusScript below into your class definition code:  

    Button code
    Dim session As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim inputVar As Variant
    
    Set uidoc = ws.CurrentDocument
    Set doc = uidoc.document
    
    Call doc.ComputeWithForm
    (False, False)
    
    inputVar = doc.Input
    If inputVar(0) = "" Then
    Messagebox "No input found"
    Exit Sub
    End If
    
    
    %REM
    Assumptions are that class variables 
    will declared thus private m_MyVar1 as 
    string private m_MyVar2 as Variant private 
    m_MyVar3 as Integer private m_MyVar4() 
    as string
    
    and so on. We use the Split function to 
    create a variant array (tempVar) of 4 members. 
    These will be
    tempVar(0) = the word "Private".
    tempVar(1) = the variable's name
    tempVar(2) = the word "as"
    tempvar(3) = the variable's type.
    
    You need two text fields on a form:
    "Input" = multi-value Text field. Set the multi-value 
    options tickboxes to use NewLine.
    "Output" = single value Text field
    %END REM
    Dim outputString As String
    Dim tempString As String
    Dim tempVar As Variant
    Dim variableName As String
    Dim setgetVariableName As String
    Dim variableType As String
    Dim NL As String
    outputString$ = ""
    Dim classVariablePrefix As String
    classVariablePrefix$ = "m_"
    NL$ = Chr$(13) & Chr$(10) ' True for 
    Windoze only. Should change for Mac or 
    Linux clients.
    Forall inputLine In inputVar
    tempVar = Split(inputLine, " ")
    variableName = Trim(tempVar(1))
    variableType = Trim(tempVar(3))
    
    If Instr(variableName, "(") > 0 Then ' must be 
    an array, so need to declare the set and 
    get as Variant variableName$ = 
    Strleft(variableName$, "(") variableType$ = 
    "Variant"
    End If
    
    If Instr(variableName$, classVariablePrefix$) > 0 
    Then setgetVariableName$ = Strrightback
    (variableName$, classVariablePrefix$) Else 
    setgetVariableName$ = variableName$ End 
    If outputString$ = outputString$ & "public 
    property get " & setgetVariableName$ & " as " 
    & variableType$ & NL$ outputString$ = outputString$ 
    & Chr$(9) & setgetVariableName$ & " = me." 
    & variableName$ & NL$ outputString$ = 
    outputString$ & "End Property" & NL$ outputString$ = 
    outputString$ & "public property set " 
    & setgetVariableName$ & " as " & variableType$ 
    & NL$ outputString$ = outputString$ & Chr$(9) 
    & " me." & variableName$ & " = " & setgetVariableName$ 
    & NL$ outputString$ = outputString$ & "End Property" 
    & NL$ & NL$ End Forall
    
    doc.Output = outputString
    Call uidoc.reload 
    

    Do you have comments on this tip? Let us know.

    This tip was submitted to the SearchDomino.com tip library by member Mike Brown. Please let others know how useful it is via the rating scale below. Do you have a useful Lotus Notes, Domino, Workplace or WebSphere tip or code snippet to share? Submit it to our monthly tip contest and you could win a prize.

  • 相关阅读:
    微信退款和支付宝退款接口调用(java版)
    SpringBoot实现JWT认证
    param-validate的使用
    SpringBoot统一参数校验开源项目:param-validate
    AOP+自定义注解实现全局参数校验
    Java自定义注解的实现
    Java初级面试题--持续更新
    React-native run-android fail on :app:processDebugResources解决办法
    【原创】Ionic单页应用跳转外链,构造路由返回的解决办法及代码
    angular 负数遇到货币过滤器,负号会变成括号的解决办法
  • 原文地址:https://www.cnblogs.com/hannover/p/2467535.html
Copyright © 2011-2022 走看看