Использование скрипта лотоса для изменения данных в поле. Хотите, чтобы данные были многолинейными - PullRequest
0 голосов
/ 28 апреля 2010

Добрый день,

Начну с того, что я работаю в небольшой компании и не имею официального обучения Записывает все, что я узнал, покупая методом проб и ошибок и используя коды других людей.

Применение: у нас есть база данных заказов на поставку, которая работает очень долго и бросает вызов людям, которые в разных словах вводят имена поставщиков. Теперь я нашел код, который переходит в выбранные формы и изменяет значения полей, и это именно то, что мне нужно, единственная проблема это одна строка Поле, которое я хочу обновить, содержит около 5 строк текста (название компании, номер телефона и т. Д.), А первоначальный программист отложил всю информацию в одном поле.

Вопрос: есть ли способ, в сценарии, связанном ниже, как я могу сделать так, чтобы каждый ввод подсказки переходил в другую строку. Я попробовал несколько вещей, и я думаю, что я могу упустить что-то очевидное (если я пытаюсь выполнить chr (10) ; chLv все, что я получаю, это либо 2 значения рядом друг с другом, либо разделение их запятой)

` Sub Initialize Dim ws As New NotesUIWorkspace Dim session As New NotesSession Тусклая подсказка как строка 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 Doc As NotesDocument Тусклый элемент 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

End Sub «

Извините за длинный пост, но не был уверен, что нужно. Я впервые пишу о помощи, но мне страшно, что я упустил что-то противоположное.

Francois

Ответы [ 2 ]

1 голос
/ 29 апреля 2010

Если вас не волнует, что значения на самом деле не являются отдельными, а на самом деле представляют собой одну строку, разделенную символами новой строки, вы можете попробовать оценить Field fieldname:=@implode(fieldname, @newline) Была ошибка (теперь исправленная) в Java API, где используется Java символы новой строки \n не переводятся в сохраненное значение. Обход поля с помощью оценки @formula - это обходной путь.

Возможно (?), Что есть проблема, связанная с платформой при использовании Chr(10). Вы пытались использовать Chr(13) & Chr(10)? Вы также можете попытаться оценить @newline и использовать то, что вам дает.

0 голосов
/ 28 апреля 2010

Чтобы отобразить значения в отдельных строках внутри поля, необходимо открыть свойства поля и на 3-й вкладке убедиться, что для параметра «Отображать отдельные значения с помощью» установлено значение «Новая строка».

С другой стороны, функция split в lotusscript эквивалентна @explode, поэтому эта строка:

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

можно изменить на следующее:

fieldValues = split(fieldValue, ":")

Надеюсь, это поможет.

...