0

良い一日、

私は小さな会社で働いており、Notes の正式なトレーニングを受けていないことから始めます。私が学んだことはすべて、試行錯誤を繰り返し、他の人のコードを使用することです。

アプリケーション: 非常に長い間実行されている注文書データベースがあり、人々がサプライヤ名に異なる年齢を入力しました。今、選択したフォームに入り、フィールド値を変更するコードを見つけました。これは、まさに必要なものです。唯一の問題は、それが単一行であることです。更新したいフィールドには約 5 行のテキスト行 (会社名、電話番号など) があり、元のプログラマーはすべての情報を 1 つのフィールドに入れました。

質問: 以下にリンクされているスクリプトに、各プロンプト入力を別の行に入れる方法はありますか?隣り合った2つの値を取得するか、コンマで区切って取得します)

` 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)ます\n保存された値に。@式を評価してフィールドを設定することは回避策でした。

の使用にプラットフォーム固有の問題がある可能性 (?) がありますChr(10)。使ってみましたChr(13) & Chr(10)か?また、それによって得られるものを評価@newlineして使用することもできます。

于 2010-04-29T14:38:27.637 に答える
0

フィールド内の個別の行に値を表示するには、フィールドのプロパティを開き、3 番目のタブで [個別の値を表示] オプションが [改行] に設定されていることを確認します。

別の注記として、lotusscript の split 関数は @explode と同等であるため、次の行:

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

次のように変更できます。

fieldValues = split(fieldValue, ":")

それが役立つことを願っています。

于 2010-04-28T17:26:45.600 に答える