0

再会,

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

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

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

` Sub Initialize Dim ws As New NotesUIWorkspace Dim session As New NotesSession Dim prompt As String Dim fieldName As String Dim fieldValue As String Dim dataTypes As Variant Dim thisDataType As String Dim fieldValues As Variant Dim newFieldValues As Variant Dim db As NotesDatabase Dim coll As NotesDocumentCollection Dim i As Integer Dim doc As NotesDocument Dim item As 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

结束子'

对不起,很长的帖子,但不确定需要什么。第一次发帖寻求帮助,但我害怕我错过了相反的东西。

弗朗索瓦

4

2 回答 2

1

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

有可能(?)使用Chr(10). 你试过使用Chr(13) & Chr(10)吗?你也可以尝试评估@newline和使用它给你的东西。

于 2010-04-29T14:38:27.637 回答
0

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

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

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

可以修改为以下内容:

fieldValues = split(fieldValue, ":")

希望有帮助。

于 2010-04-28T17:26:45.600 回答