【问题标题】:Using a lotus script to change data in a field.Want the data to be multi lined使用莲花脚本更改字段中的数据。希望数据多行
【发布时间】:2010-04-28 14:42:32
【问题描述】:

早安,

首先我会说我在一家小公司工作,没有接受过官方培训 记下我所知道的一切,我学会了购买试验和错误并使用其他人的代码。

应用程序:我们有一个已经运行了很长时间的采购订单数据库,并且人们输入供应商名称的年龄不同。现在我找到了一个进入所选表单并更改字段值的代码,这正是我需要的唯一问题 是单行吗?我要更新的字段大约有 5 行文本(公司名称、电话号码等),而原始程序员将所有信息放在一个字段中。

问题:下面链接的脚本中是否有一种方法可以使每个提示输入进入不同的行。我尝试了一些事情,但我想我可能遗漏了一些明显的东西。(如果我尝试 chr(10) ;chLv 我得到的只是两个相邻的值,或者用逗号分隔)

` 子初始化 Dim ws 作为新的 NotesUIWorkspace 暗淡会话作为新的 NotesSession 暗淡提示为字符串 将 fieldName 暗淡为​​字符串 将字段值调暗为字符串 将数据类型调暗为变体 将此数据类型调暗为字符串 将 fieldValues 变暗为变体 将 newFieldValues 调暗为变体 暗淡 db 作为 NotesDatabase Dim coll As NotesDocumentCollection 将 i 调暗为整数 将文档变暗为 NotesDocument 将项目暗淡为 NotesItem

prompt = "Please enter the name of the field to be updated"
fieldName = ws.Prompt(3, "Enter Field Name", prompt, "")
If fieldName = "" Then Exit Sub
If Instr(fieldName, " ") <> 0 Then
    prompt = "Error! Field Names can't have spaces!"
    Msgbox prompt, 16, "Error"
    Exit Sub
End If
prompt = "Please enter the new value. For multiple values, separate with a colon."
Value1 =ws.Prompt(3, "Enter Field Value", prompt, "")
Value2= ws.Prompt(3, "Enter Field Value", prompt, "")   
Fieldvalue=value1 + Chr(10) +value2

Redim dataTypes(5) As String
dataTypes(0) = "Text"
dataTypes(1) = "Number"
dataTypes(2) = "Date"
dataTypes(3) = "Readers"
dataTypes(4) = "Authors"
dataTypes(5) = "DELETE THIS FIELD"
prompt = "Choose the data type of the value(s)"
thisDataType = ws.Prompt(4, "Choose Data Type", prompt, dataTypes(0), dataTypes)
If thisDataType = "" Then Exit Sub

Set db = session.CurrentDatabase
Set coll = db.UnprocessedDocuments
fieldValues = Evaluate({@Explode("} & fieldValue & {"; ":")})
Select Case thisDataType
Case dataTypes(0) : Redim newFieldValues(Ubound(fieldValues)) As String
Case dataTypes(1) : Redim newFieldValues(Ubound(fieldValues)) As Double
Case dataTypes(2) : Redim newFieldValues(Ubound(fieldValues)) As Variant
Case dataTypes(3) : Redim newFieldValues(Ubound(fieldValues)) As String
Case dataTypes(4) : Redim newFieldValues(Ubound(fieldValues)) As String
End Select
For i = Lbound(fieldValues) To Ubound(fieldValues)
    Select Case thisDataType
    Case dataTypes(0) : newFieldValues(i) = Trim(fieldValues(i))
    Case dataTypes(1) : newFieldValues(i) = Val(fieldValues(i))
    Case dataTypes(2) : newFieldValues(i) = Cdat(fieldValues(i))
    Case dataTypes(3) : newFieldValues(i) = Trim(fieldValues(i))
    Case dataTypes(4) : newFieldValues(i) = Trim(fieldValues(i))
    End Select
Next
Set doc = coll.GetFirstDocument
While Not doc Is Nothing
    If thisDataType = "DELETE THIS FIELD" Then
        If doc.HasItem(fieldName) Then Call doc.RemoveItem(fieldName)
    Else
        Call doc.ReplaceItemValue(fieldName, newFieldValues)
        If thisDataType = dataTypes(3) Or thisDataType = dataTypes(4) Then
            Set item = doc.GetFirstItem(fieldName)
            If thisDataType = dataTypes(3) Then item.IsReaders = True
            If thisDataType = dataTypes(4) Then item.IsAuthors = True
        End If
    End If
    Call doc.Save(True, False)
    Set doc = coll.GetNextDocument(doc)
Wend

结束子 '

抱歉,这篇文章很长,但不确定需要什么。第一次发帖求助,但我害怕我错过了相反的东西。

弗朗索瓦

【问题讨论】:

    标签: lotus-notes lotus lotusscript


    【解决方案1】:

    如果您不关心这些值实际上不是单独的,而是实际上是由换行符分隔的单个字符串,您可以尝试评估 Field fieldname:=@implode(fieldname, @newline) 在使用 java 的 java api 中存在一个错误(现已修复)换行符\n 没有转换为存储的值。通过评估 @formula 设置字段是一种解决方法。

    使用Chr(10) 可能存在特定于平台的问题(?)。您是否尝试过使用Chr(13) &amp; Chr(10)?你也可以尝试评估@newline 并使用它给你的东西。

    【讨论】:

    • 感谢您的建议。我还在忙着玩它,我需要大量的反复试验才能完成工作。有趣的是表单可以轻松转换多个字段,而另一半他们决定将所有内容都放在一个字段中。如果我可能对我的一个想法感到困扰,是否可以将一个新字段写入这样的文档(已存储在表单中的文档)?
    • 在 Notes 中,表单上的字段和文档上的项目之间存在根本区别。这两件事是相关的,但经常混为一谈。您应该尝试并始终将它们视为不同的事物。除非有很好的架构理由将表单存储在文档中,否则您应该考虑摆脱它们。如果你需要去更新存储的表单,那就有问题了。
    • 再次感谢您花时间回答/解释它并更好地理解它。我也有 99% 的脚本实际上认为我有它。在正确的位置使用 Chr(10) 和 Chr(13) 现在会更改多行中的值,但是当您双击它时,它会恢复为旧值。再次感谢您的帮助。
    【解决方案2】:

    要在字段中的单独行中显示值,您必须打开字段属性并在第三个选项卡上确保选项“显示单独的值”设置为“新行”。

    另一方面,lotusscript 中的 split 函数等价于 @explode,所以这一行:

    fieldValues = Evaluate({@Explode("} & fieldValue & {"; ":")})
    

    可以修改为:

    fieldValues = split(fieldValue, ":")
    

    希望对您有所帮助。

    【讨论】:

    • 感谢您抽出宝贵时间回复。是否有一种方法可以使用相同的脚本更改字段属性? (在新行中显示单独的值)。原因是我需要更改的这些表单可以追溯到大约 1992 年,从那时起他们更改了表单分配的格式,但保持“将表单存储在文档中”设置,所以我可以更改这些字段设置的唯一方法是通过使用全局数据库表单模板更新,我不确定它会造成什么样的破坏。再次感谢 Frabcois
    • 哎哟。听起来您已经走上了一个非常难以维护的应用程序的道路。在某个阶段,有人将不得不硬着头皮进行重构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    相关资源
    最近更新 更多