美好的一天,
我首先要说的是我在一家小公司工作,没有接受过正式培训 记下我所知道的一切我已经学会了买试错误&使用其他人的代码。
应用程序:我们有一个已经运行了很长时间的采购订单数据库,并将人们放入供应商名称的年龄差异化。现在我找到了一个进入所选表单的代码并更改了字段值,这正是我唯一需要的问题 这是单行。我要更新的字段有大约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 “
很抱歉这篇文章很长但不确定需要什么。第一次发帖求助,但我很害怕,我错过了相反的事情。
弗朗索瓦
答案 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, ":")
希望有所帮助。