使用lotus脚本更改字段中的数据。想要数据是多行的

时间:2010-04-28 14:42:32

标签: lotus-notes lotus lotusscript

美好的一天,

我首先要说的是我在一家小公司工作,没有接受过正式培训 记下我所知道的一切我已经学会了买试错误&使用其他人的代码。

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

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

` 子初始化     Dim ws作为新的NotesUIWorkspace     昏暗的会话作为新的NotesSession     昏暗提示为字符串     Dim fieldName As String     Dim fieldValue As String     Dim dataTypes As Variant     将thisDataType调暗为字符串     Dim fieldValues As Variant     昏暗的newFieldValues As Variant     Dim db作为NotesDatabase     Dim coll作为NotesDocumentCollection     Dim i As Integer     Dim doc作为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

End Sub “

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

弗朗索瓦

2 个答案:

答案 0 :(得分:1)

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

使用Chr(10)可能存在特定于平台的问题(?)。您是否尝试过使用Chr(13) & Chr(10)?您还可以尝试评估@newline并使用提供给您的内容。

答案 1 :(得分:0)

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

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

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

可以修改为以下内容:

fieldValues = split(fieldValue, ":")

希望有所帮助。