ccarlson62
asked on
Deleting Name from Field
I have a multi-value text field on documents that hold common user names. I need to provide a view action where a user can select documents and it will cycle though the docs and cycle through the names in the field and remove theirs if it matches their session.CommonUserName. I have not done much with lists or arrays so I don't know the best approach for testing for the presence of their session.CommonName in the list and removing it. I have no problem building the collection and cycling though the documents. I just need help with testing for the presence of the sesssion.CommonUserName in the field and removing it from the list.
ASKER
That would be fine only I need the code to execute in all selected docs and I have to prompt them to make sure that they want to actually remove their name. If I do it in formula, the prompt will show for every doc the code executes against and that would be bad.
Create 2 agents:
One agent prompts the user and calls the second one if the user clicks OK.
The second one does the work on the selected documents.
One agent prompts the user and calls the second one if the user clicks OK.
The second one does the work on the selected documents.
Or, an agent and an action button in the view that prompts user then runs agent.
If you must have a single script, this shoudl do it. I coded it so t hat you cannot remove your name if it is the only name in the list.
If you must have a single script, this shoudl do it. I coded it so t hat you cannot remove your name if it is the only name in the list.
Const fieldName = "Name of the field"
If MsgBox("Remove your name from selected documents?", 292 , "Confirm") = 7 Then Beep : End
Dim s As New NotesSession, db as NotesDatabase, docs as notesDocumentCollection, doc as notesDocument, content as variant, i as Integer, user as string
user = s.CommonUserName
Set db = s.currentDatabase
Set docs = db.unprocessedDocuments
Set doc = docs.getFirstDocument
Do Until doc Is Nothing
content = doc.getFirstItem(fieldName)
If Ubound(content) > 0 Then 'skip it if there is only one name -- we don't want to remove the last owner!!!
For i = 0 to Ubound(content)
If content(i) = user Then
content(i) = content(Ubound(content))
'puts the last owner in the list in our spot (if we are last, this does nothing)
Redim Preserve content(Ubound(content)-1)
'then drops the last item which is either now a dup or was us anyway
doc.replaceItemValue fieldName, content
End If
Next
End If
Set doc = docs.getNextDocument(doc)
Loop
Msgbox "Complete"
Should really have one correction. Between lines 17 and 18, should really have the two more lines
doc.replaceItemValue fieldName, content
doc.Save False , False '<--------new line
Exit For '<--------new line
End If
So basically, I'm assigning the contents to a temp variable content, and searching through the content array element by element.
If the name is present, I'm just truncating the content by one (after moving the trunctaed entry to where the current user's name is), then reassing the field value, saving, and letting it drop through to the next document.
If not for the exit for, the loop would continue processing, and would puke when it hit the index for the previous upper bound, because the new upper bound is one short, and I'm out of bounds.
Boy this new code snippet thing sucks. If you paste it directly into the code editor, or even any regular text editor, it comes through as a single line. Hint: Paste it into a Notes memo first, then cut and paste it from the memo into the editor.
ASKER
Ok I tried the formula route. Below is the code in my agent. Everything is working except the ...
(@Replace(ReviewerProp;sNa me;NULL_ST RING));
Can anyone see whats wrong here?
Select @All;
FIELD audittrail := audittrail;
sName:=@Name([CN];@UserNam e);
newauditstring := @Text(@Now) +" - Updated by "+ sName +", Removed self as reviewer";
@Prompt([Ok];"INPUT";"User is "+sname);
@Prompt([Ok];"INPUT";"name s are "+ReviewerProp);
@If(@Contains(ReviewerProp ;sName);
@Do(@Trim(@Replace(Reviewe rProp;sNam e;NULL_STR ING));
@Prompt([Ok];"Message";"sh ould be gone now");
@Prompt([Ok];"Message";"na mes are "+ReviewerProp);
@SetField("audittrail";new auditstrin g +@NewLine+ audittrail);
@Command([FileSave]));@Pro mpt([Ok];" Message";" No Match found"))
(@Replace(ReviewerProp;sNa
Can anyone see whats wrong here?
Select @All;
FIELD audittrail := audittrail;
sName:=@Name([CN];@UserNam
newauditstring := @Text(@Now) +" - Updated by "+ sName +", Removed self as reviewer";
@Prompt([Ok];"INPUT";"User
@Prompt([Ok];"INPUT";"name
@If(@Contains(ReviewerProp
@Do(@Trim(@Replace(Reviewe
@Prompt([Ok];"Message";"sh
@Prompt([Ok];"Message";"na
@SetField("audittrail";new
@Command([FileSave]));@Pro
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank you sir!
SELECT @All;
namesField := name_of_field_you_are_work
@Trim(
@Replace(
namesField;
@UserName;
NULL_STRING
)
)