2010-04-28 11 views
0

Bonne journée,l'aide d'un script de lotus pour modifier les données dans un field.Want les données à plusieurs bordées

Je vais commencer par dire je travaille pour une petite entreprise et ont aucune formation officielle en tout Remarques I savoir que j'ai appris acheter des essais et erreurs & en utilisant d'autres codes des peuples. Application: Nous avons une base de données de commandes qui dure depuis très longtemps et qui a jeté les âges que les gens ont mis dans les noms de fournisseurs de manière diffuse. Maintenant, j'ai trouvé un code qui va dans les formulaires sélectionnés et change les valeurs du champ, ce qui est exactement ce dont j'ai besoin le seul problème est que c'est une seule ligne. Le champ que je veux mettre à jour comporte environ 5 lignes de texte (nom de l'entreprise, numéro de téléphone, etc.) et le programmeur d'origine a mis toutes les informations dans un champ. Question: Y a-t-il une manière dans le script lié ci-dessous comment je peux faire entrer chaque invite dans une ligne diffirent.J'ai essayé quelques chose et je pense que je peux manquer quelque chose d'évident. (Si j'essaie chr (10); chlv tout ce que je reçois est soit les 2 valeurs à côté de l'autre ou les faire séparés par une virgule)

` Sous Initialiser Dim ws As New NotesUIWorkspace session de Dim Comme l'invite New NotesSession Dim As String Dim fieldName As String Dim fieldValue As String Dim dataTypes Comme variante Dim thisDataType As String Dim FieldValues ​​As Variant Dim newFieldValues ​​As Variant Dim db Comme NotesDatabase Dim coll Comme NotesDocumentCollection Dim i As Integer Dim doc Comme NotesDocument élément Dim Comme

NotesChamp
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 '

Désolé pour le long message, mais je ne savais pas ce qui était nécessaire. La première fois que j'affiche de l'aide, mais j'ai peur de manquer quelque chose de contraire.

François

Répondre

0

Pour afficher les valeurs dans des lignes distinctes dans un champ, vous devez ouvrir les propriétés du champ et sur le 3ème onglet Assurez-vous que l'option « Afficher les valeurs séparées par » est réglé sur « New Line ».

Sur une autre note la fonction split LotusScript est l'équivalent du @Explode, donc cette ligne:

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

peut être modifié à ce qui suit:

fieldValues = split(fieldValue, ":") 

espoir qui aide.

+0

Merci d'avoir pris le temps de répondre. Y aurait-il un moyen de changer les propriétés du champ en utilisant le même script? (L'affichage des valeurs séparées dans la nouvelle ligne). La raison en est que ces formulaires que j'ai besoin de changer remontent à environ 1992 et depuis ils ont changé le format des formulaires mais ils ont gardé le paramètre "Enregistrer le formulaire dans le document", donc la seule façon de changer ces champs paramètres est en utilisant une mise à jour de modèle de formulaire de base de données globale et je ne suis pas sûr quels types de ravages il fera. Merci encore Frabcois – Francois

+0

Ouch. On dirait que vous êtes déjà sur la route d'une application horriblement inabordable. Au moment où quelqu'un devra mordre la balle et refactoriser. – Kerr

1

Si vous ne vous inquiétez pas que les valeurs ne sont pas réellement séparées, mais sont en fait une seule chaîne séparée par newlines, vous pouvez essayer Field fieldname:[email protected](fieldname, @newline) Il y avait un bug (maintenant corrigé) dans l'API Java où java newline les caractères \n n'ont pas été traduits jusqu'à la valeur stockée. Avoir le champ défini en évaluant un @formula était une solution de contournement.

Il est possible (?) Qu'il existe un problème spécifique à la plate-forme pour utiliser Chr(10). Avez-vous essayé d'utiliser Chr(13) & Chr(10)?Vous pouvez également essayer d'évaluer @newline et en utilisant ce que cela vous donne.

+0

Merci pour les conseils. Je suis toujours occupé à jouer avec ça, ça prend beaucoup de tâtonnements pour que je puisse faire quelque chose. Le plus drôle, ce sont les formes qui ont plusieurs champs convertis facilement, c'est juste l'autre moitié où ils ont décidé de tout coller dans un seul champ. Si je peux m'embêter avec une idée, est-il possible d'écrire un nouveau champ dans un document comme celui-ci (un document qui a été stocké dans le formulaire)? – Francois

+0

Dans Notes, il existe une différence fondamentale entre un champ sur un formulaire et un élément sur un document. Ces deux choses sont liées mais souvent confondues. Vous devriez essayer et toujours penser à eux comme des choses distinctes. À moins qu'il y ait une bonne raison architecturale d'avoir des formulaires stockés sur le document, vous devriez chercher à vous en débarrasser. Si vous avez besoin d'aller mettre à jour des formulaires stockés, il y a quelque chose qui ne va pas. – Kerr

+0

Merci encore d'avoir pris le temps de répondre/expliquer apriciate et comprendre que ça alloue mieux maintenant.Je suis aussi 99% là avec mon script actuellement pensé que je l'avais. Utiliser Chr (10) et Chr (13) au bon endroit change maintenant la valeur en lignes multiples mais quand vous double-cliquez dessus, il revient à l'ancienne valeur. Merci encore pour tout ce que vous aidez. – Francois