1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 | REM {Edit Document Fields 6.0.0 by Chad Schelfhout.}; REM {Visit http://www.chadsmiley.com/EditDocumentFields for the latest updates}; REM {Changable constants}; cEnableConfirmation := @True; cFieldHistoryValues := 10; cStandardSeparators := ":" : ";" : " "; cPromptTitle := @DbTitle + " - " + @ViewTitle; REM {Unchangable constants}; cProfileName := "ChadSmiley Tools"; cEditLastField := "edfLastField"; cEditLastFieldDataType := "edfLastFieldDataType"; cEditLastFieldDataTypeValue := "edfLastFieldDataTypeValue"; cEditLastSeparator := "%~%"; cValueListSeparator := "^"; cFromRawValueSeparator := "%@%"; cSemicolonReplace := "#SC#"; cMaxSearchForSelectedDocs := 5520; cMaxUpdatedDocuments := 1000; cArraySeparator := ";"; cNoteEntryLength := 11; cPromptNewLineOne := @Char(13); cPromptNewLineTwo := cPromptNewLineOne + cPromptNewLineOne; cPromptTab := @Char(9); cCategoryNoteID := "NT00000000"; cTextExtractList := "Text Left":"Text Left Back":"Text Right":"Text Right Back"; cNoPromptList := cTextExtractList:"Remove Field":"Unique":"Sort Ascending":"Sort Descending":"Implode":"Explode":"Proper Case Text":"Proper Case Text Multi Value":"Lower Case Text":"Lower Case Text Multi Value":"Upper Case Text":"Upper Case Text Multi Value":"Password Convert":"Trim":"Trim then Unique"; cErrorCheckCode := "@Implode( @Unique( @Explode( NoteIDList : ErrorNoteID ; cArraySeparator ; @False ) ) )"; cErrorInformation := "\"Error documents: \" + @Implode( @Unique( @Explode( ErrorNoteIDList ; cArraySeparator ; @False ) ) ; \", \" ) + cPromptNewLineOne + \"Not updated documents: \" + @Implode( @Unique( @Explode( ErrorNoteIDList ; cArraySeparator ; @False ) ) ; \", \" )"; REM {Data types|@Function execution}; DataTypesCombo := @Explode( "Integer|@TextToNumber( RawValue )$"+ "Integer Multi Value|@TextToNumber( @Explode( RawValue ; Separator; @True) )$"+ "Date|@ToTime( RawValue )$"+ "Date Multi Value|@ToTime( @Explode( RawValue ; Separator; @True) )$"+ "Text|@Text( RawValue )$"+ "Text Multi Value|@Text( @Explode( RawValue ; Separator; @True) )$"+ "Text Left|@Left( @Text( @GetField( EditField[ef] ) ) ; ExtractValue )$"+ "Text Left Back|@LeftBack( @Text( @GetField( EditField[ef] ) ) ; ExtractValue )$"+ "Text Right|@Right( @Text( @GetField( EditField[ef] ) ) ; ExtractValue )$"+ "Text Right Back|@RightBack( @Text( @GetField( EditField[ef] ) ) ; ExtractValue )$"+ "Trim|@Trim( @Text( @GetField( EditField[ef] ) ) )$"+ "Trim then Unique|@Unique(@Trim( @Text( @GetField( EditField[ef] ) ) ) )$"+ "Name|RawValue$"+ "Name Multi Value|RawValue$"+ "Common Name|@Name( [CN]; RawValue )$"+ "Common Name Multi Value|@Name( [CN]; @Explode( RawValue ; \":\"; @True ) )$"+ "Upper Case Text|@UpperCase( @Implode( @Text( @GetField( EditField[ef] ) ) ) )$"+ "Lower Case Text|@LowerCase( @Implode( @Text( @GetField( EditField[ef] ) ) ) )$"+ "Proper Case Text|@ProperCase( @Implode( @Text( @GetField( EditField[ef] ) ) ) )$"+ "Upper Case Text Multi Value|@UpperCase( @Explode( @Text( @GetField( EditField[ef] ) ) ; Separator; @True ))$"+ "Lower Case Text Multi Value|@LowerCase( @Explode( @Text( @GetField( EditField[ef] ) ) ; Separator; @True) )$"+ "Proper Case Text Multi Value|@ProperCase( @Explode( @Text( @GetField( EditField[ef] ) ) ; Separator; @True) )$"+ "Replace Substring|@ReplaceSubstring( @GetField( EditField[ef] ); FromRawValue ; RawValue )$"+ "Replace|@Explode( @Replace( @GetField( EditField[ef] ) ; FromRawValue ; RawValue ) ; Separator ; @True )$"+ "Implode|@Implode( @Text( @GetField( EditField[ef] ) ) ; Separator )$"+ "Explode|@Explode( @Text( @GetField( EditField[ef] ) ) ; Separator; @True )$"+ "Formula|@Eval( RawValue )$"+ "Abbreviate Name|@Name([Abbreviate]; RawValue )$"+ "Abbreviate Name Multi Value|@Name( [Abbreviate]; @Explode( RawValue ; Separator; @True ) )$"+ "Password Set|@Password( RawValue )$"+ "Password Convert|@Password( @GetField( EditField[ef] ) )$"+ "Remove Field|@DeleteField$"+ "Unique|@Unique(@GetField( EditField[ef]))$"+ "+ Append Values|@If(" + " @GetField(EditField[ef]) = \"\"; RawValue;" + " @Contains(DefaultDataType; \"Date\");" + " @If( @IsError( @ToTime( RawValue ) ) ;" + " \"\" ;" + " @SetField( EditField[ef] ; @GetField(EditField[ef]) : @TextToTime( @Explode( RawValue ; Separator ) ) ) ) ;" + " @Contains(DefaultDataType; \"Integer\" );" + " @If( @IsError( @TextToNumber( @Explode( RawValue ; Separator ) ) ) ;" + " \"\" ;" + " @SetField( EditField[ef] ; @GetField(EditField[ef]) : @TextToNumber( @Explode( RawValue ; Separator ) ) ) ) ;" + " @SetField( EditField[ef] ; @GetField(EditField[ef]) : @Explode( RawValue ; Separator ) ) )$"+ "Sort Ascending|@Sort(@GetField(EditField[ef]) ; [Ascending] )$"+ "Sort Descending|@Sort(@GetField(EditField[ef]); [Descending])" ; "$" ); DataTypes := @Word( DataTypesCombo ; "|" ; 1 ); DataTypesAction := @Word( DataTypesCombo ; "|" ; 2 ); REM {Get a listing of all the fields on the current document}; List := @Sort( @DocFields ); REM {Look for last field modified in Profile Doc}; FieldList := @Explode( @GetProfileField( cProfileName ; cEditLastField ; @UserName ) ; cArraySeparator ; @True ) ; REM {Get the list of forms and field that was updated using Edit Document Fields}; FieldListForms := @Word( FieldList ; cEditLastSeparator ; 1 ); FieldListField := @Word( FieldList ; cEditLastSeparator ; 2 ); FieldListLastIndex := @Member( Form; FieldListForms ); REM {If the FieldListLastIndex is greater than zero then set the last field to the what was in the profile document}; @If( FieldListLastIndex > 0; @Do( LastField := FieldListField[ FieldListLastIndex ]; FieldList := @ReplaceSubstring( FieldList ; FieldList[ FieldListLastIndex ] ; "" ) ); LastField :="" ); REM {Prompt for which field needs to be updated. Loop until a field is selected or 'Cancel' is selected}; @DoWhile( EditField := @Prompt( [OkCancelEditCombo] ; cPromptTitle ; "Select the field you wish to alter or enter a new field to add:" ; LastField ; @Trim( @Unique( List : LastField ) ) ); EditField = "" ); EditFieldPromptTitle := "Change '" + EditField + "' in " + cPromptTitle; REM {This will allow the retrieval of the data type of the field that was last selected. Data is stored like Form+Field%~%DataType.}; FormFieldList := @Explode( @GetProfileField( cProfileName ; cEditLastFieldDataType ; @UserName ) ; cArraySeparator ; @True ) ; FormFieldListFormField := @Word( FormFieldList ; cEditLastSeparator ; 1 ); FormFieldListDataType := @Word( FormFieldList ; cEditLastSeparator ; 2 ); FormFieldListFormulaCode := @ReplaceSubstring( @Word( FormFieldList ; cEditLastSeparator ; 3 ) ; cSemicolonReplace ; ";" ); FormFieldListIndex := @Member( Form + EditField; FormFieldListFormField ); @If( FormFieldListIndex > 0; @Do( DefaultDataType := FormFieldListDataType[ FormFieldListIndex ]; FormFieldListFormulaCode := FormFieldListFormulaCode[ FormFieldListIndex ]; FormFieldList := @ReplaceSubstring( FormFieldList ; FormFieldList[ FormFieldListIndex ] ; "" ) ); DefaultDataType :="" ); REM {If there was no data type used for the field on the form the try to determine the data type}; DefaultDataType := @If( DefaultDataType != "" ; DefaultDataType ; @If( @IsNumber( @GetField( EditField ) ) ; @If( @Count( @GetField( EditField ) ) > 1 ; "Integer Multi Value" ; "Integer" ) ; @IsTime( @GetField( EditField ) ) ; @If( @Count( @GetField( EditField ) ) > 1 ; "Date Mult iValue" ; "Date" ) ; @If( @Count( @GetField( EditField ) ) > 1 ; "Text Multi Value" ; "Text" ) ) ); REM {If the data type is a type of error then select the data type of text}; DefaultDataType := @IfError( DefaultDataType ; "Text" ); REM {Prompt for which data type you would like the data to be. This needs to be done before value prompt to determine if the Picklist or any prompting needs to be used.}; DataType := @Prompt( [OkCancelList] ; EditFieldPromptTitle; "Please select the correct data type or action for field: " + EditField + "."; DefaultDataType ; DataTypes ); REM {The DataTypeAction will contain the formula that will be executed to retrieve the new value}; DataTypeAction := DataTypesAction[ @Member( DataType ; DataTypes ) ]; REM {If formula was used on this field then use that instead of the fields value. Format the original value as text because the @Prompt command requires text.}; OriginalValue := @If( DataType = "Formula" & DefaultDataType = "Formula" & FormFieldListFormulaCode != "" ; FormFieldListFormulaCode ; @If( @Contains( DefaultDataType ; MultiValue ) ; @Implode( @Text( @GetField( EditField ) ) ; cArraySeparator ); @Text( @GetField( EditField ) ) ) ); REM {This will allow the retrieval of history of values of the field. Data is stored like Form+Field+DataType%~%ValueList.}; FormFieldListDataTypeValues := @Explode( @GetProfileField( cProfileName ; cEditLastFieldDataTypeValue ; @UserName ) ; cArraySeparator ; @True ) ; FormFieldListFormFieldDataType := @Word( FormFieldListDataTypeValues ; cEditLastSeparator ; 1 ) ; FormFieldListValuesLists := @Word( FormFieldListDataTypeValues ; cEditLastSeparator ; 2 ) ; FormFieldListDTIndex := @Member( Form + EditField + DataType; FormFieldListFormFieldDataType ); @If( FormFieldListDTIndex > 0; @Do( FormFieldListValuesList := FormFieldListDataTypeValues[ FormFieldListDTIndex ]; FormFieldListValuesList := @ReplaceSubstring( @Trim( @Explode( FormFieldListValuesLists[ FormFieldListDTIndex ] ; cValueListSeparator ; @False ) ) ; cSemicolonReplace; ";" ); FormFieldListDataTypeValues := @ReplaceSubstring( FormFieldListDataTypeValues ; FormFieldListDataTypeValues[ FormFieldListDTIndex ] ; "" ) ); FormFieldListValuesList :="" ); REM {Prompt for additional fields and determine the string that they are searching for.}; @If( DataType = ("Replace Substring":"Replace" ) ; @Do( EditField := @Unique( EditField : @Prompt( [OkCancelListMult] ; cPromptTitle ; "Select any addtional fields you wish to alter:" ; EditField ; List ) ); FromRawValue := @Prompt( [OkCancelEditCombo] ; EditFieldPromptTitle ; "Enter or select the text (case sensitive) to search for in: " + @Implode( EditField ; ", " ) + "." ; "" ; @Unique( @Word( FormFieldListValuesList ; cFromRawValueSeparator ; 2 ) ) ) ); @Do( EditField := EditField; FromRawValue := "" ) ); REM { With the Edit combo there will be a list of standard seperators to choose from.}; Separator := @If( DataType = ("Implode":"Explode" ) ; @Prompt( [OkCancelEditCombo] ; cPromptTitle ; "Enter or select the " + @If( DataType = "Implode" ; "separator" ; "separators" ) + ":" ; "" ; @Unique( @If( FormFieldListValuesList = "" ; cStandardSeparators ; FormFieldListValuesList : cStandardSeparators ) ) ); cArraySeparator ); REM {Determine the string to search for}; ExtractValue := @If( DataType = cTextExtractList ; @Prompt( [OkCancelEditCombo] ; cPromptTitle ; "Enter or select the search string or string length:" ; @Subset( FormFieldListValuesList ; 1 ) ; @Unique( FormFieldListValuesList ) ); "" ); REM {Based on what type of data is being entered different prompts will happen if any at all.}; RawValue := @If( @Contains( DataType ; "Name Multi Value" ) ; @PickList( [Name] ); @Contains( DataType ; "Name" ) ; @PickList( [Name] : [Single] ); DataType = ( cNoPromptList ) ; "" ; @Contains( DataType ; "Multi Value" ) ; @Prompt( [OkCancelEditCombo] ; EditFieldPromptTitle; "Enter or select the new desired value for: " + @Implode( EditField ; ", " ) + "." + cPromptNewLineTwo + "Seperated with ; for each value." ; OriginalValue ; @Unique( OriginalValue : FormFieldListValuesList ) ) ; @Contains( DataType ; "+ Append Values" ) ; @Prompt( [OkCancelEditCombo] ; EditFieldPromptTitle; "Enter or select values to append: " + @Implode( EditField ; ", " ) + "." + cPromptNewLineTwo + "Seperated with ; for each value." ; "" ; @Unique( FormFieldListValuesList ) ) ; DataType = ("Replace Substring":"Replace" ) ; @Prompt( [OkCancelEditCombo] ; EditFieldPromptTitle ; "Enter or select the text to repalce with in: " + EditField + "." ; "" ; @Unique( @Word( FormFieldListValuesList ; cFromRawValueSeparator ; 1 ) ) ) ; DataType = "Formula" ; @Do( @DoWhile( OriginalValue := @Prompt( [OkCancelEditCombo] ; EditFieldPromptTitle ; "Enter or select the new desired formula for: " + EditField + "." ; OriginalValue ; @Unique( OriginalValue : FormFieldListValuesList ) ); tempReturnCheck := @CheckFormulaSyntax( OriginalValue ); @If( tempReturnCheck != "1"; @Prompt( [Ok] ; "Invalid Formula - " + EditFieldPromptTitle ; "Invalid Formula entered: " + cPromptNewLineTwo + cPromptTab + "Error: " + cPromptTab + cPromptTab + @Text( tempReturnCheck ) + cPromptNewLineOne + cPromptTab + "Formula: " + cPromptTab + cPromptTab + OriginalValue ) ; "" ); tempReturnCheck != "1" ); OriginalValue ); @Prompt( [OkCancelEditCombo] ; EditFieldPromptTitle ; "Enter or select the new desired value for: " + EditField + "." ; OriginalValue ; @Unique( OriginalValue : FormFieldListValuesList ) ) ); REM {Store Field in Profile doc}; @SetProfileField( cProfileName ; cEditLastField ; @Unique( @Trim( FieldList : ( Form + cEditLastSeparator + EditField[1] ) ) ); @UserName ); REM {Store Data Type of Field in Profile doc}; @SetProfileField( cProfileName ; cEditLastFieldDataType ; @Unique( @Trim( FormFieldList : ( Form + EditField[1] + cEditLastSeparator + DataType + cEditLastSeparator + @ReplaceSubstring( @If( DataType = "Formula" ; RawValue ; FormFieldListFormulaCode ) ; ";" ; cSemicolonReplace ) ) ) ) ; @UserName ); REM {Store Data Value of Field in Profile doc}; @SetProfileField( cProfileName ; cEditLastFieldDataTypeValue ; @Unique( @Trim( FormFieldListDataTypeValues : ( Form + EditField[1] + DataType + cEditLastSeparator + @Implode( @Subset( @Unique( @ReplaceSubstring( @If( DataType = ("Implode":"Explode" ) ; Separator ; DataType = cTextExtractList ; ExtractValue ; DataType = ( "Replace Substring":"Replace" ) ; RawValue + cFromRawValueSeparator + FromRawValue ; RawValue ) : FormFieldListValuesList ; ";" ; cSemicolonReplace ) ) ; cFieldHistoryValues ); cValueListSeparator ) ) ) ) ; @UserName );REM {If multi docs selected, only process those checked ... an unchecked doc cannot be NavNextSelected}; @Command([NavNextSelected]); @UpdateFormulaContext; REM {Store all Note IDs before manipulation in case field modifications cause categorized views or sorted columns to reorganize}; NoteIDList := @Text( @NoteID ); ErrorNoteIDList := ""; @Command([NavNextSelected]); @UpdateFormulaContext; REM {Start Looping Selected documents to gather all the documents that need to be updated.}; @While( ( @Left( NoteIDList ; cNoteEntryLength ) != ( @Text( @NoteID + cArraySeparator ) ) ) & ( @Length( NoteIDList ) < cMaxSearchForSelectedDocs ) ; NoteIDList := NoteIDList + cArraySeparator + @Text( @NoteID ); NoteIDList := @ReplaceSubstring( NoteIDList ; cCategoryNoteID + cArraySeparator ; "" ); @Command([NavNextSelected]); @UpdateFormulaContext ); REM {Remove all category Note IDs}; NoteIDList := @ReplaceSubstring( NoteIDList ; cCategoryNoteID ; "" ); REM {Remove all duplicate Note IDs}; NoteIDList := @Unique( @Explode( NoteIDList ; cArraySeparator ; @False ) ); @StatusBar( "Found " + @Text( @Elements( NoteIDList ) ) + " documents." ); NotNoteIDList := ""; REM {Determine if the document should be updated.}; tmpPrompt := @Implode( "The following information will be used to update the " + @Text( @Elements( NoteIDList ) ) + " document" + @If( @Elements( NoteIDList ) > 1 ; "s" ; "" ) + "." + cPromptTab + cPromptTab + cPromptNewLineTwo + cPromptTab + "Field:" + cPromptTab + cPromptTab + EditField + cPromptNewLineOne + cPromptTab + "Data type/action: " + cPromptTab + DataType + cPromptNewLineOne + cPromptTab + @If( DataType = ("Implode":"Explode" ) ; "Separator: " + cPromptTab + Separator ; DataType = ("Text Left":"Text Left Back":"Text Right":"Text Right Back" ) ; "Search string: " + cPromptTab + ExtractValue ; DataType = ("Replace Substring":"Replace" ) ; "Search string: " + cPromptTab + FromRawValue + cPromptNewLineOne + cPromptTab + "Replace string: " + cPromptTab + RawValue ; DataType = cNoPromptList; "" ; "Value: " + cPromptTab + cPromptTab + @Text( RawValue ) ) + cPromptNewLineTwo + "Would you like to continue?" ); @If( cEnableConfirmation ; @Do( @StatusBar( @Explode( tmpPrompt ; cPromptNewLineOne ; @True ) ); @If( @Prompt( [YesNo]; EditFieldPromptTitle ; tmpPrompt ); "" ; @Return ( "" ) ) ); "" ); REM {Loop through selected docs taking each NoteIDList out of the list as it is processed}; DocUpdateCount := 0; DocNavigationCount := 0; @While( DocUpdateCount < @Elements( NoteIDList ) ; @If( @TextToNumber( @Text( @DocumentUniqueID ) ) != 0 ; @Do( NoteIDList := @Replace( NoteIDList ; @NoteID ; "" ) ; NotNoteIDList := NotNoteIDList : @NoteID; @For( ef := 1; ef <= @Elements( EditField ); ef := ef + 1; formulaResult := @Eval( DataTypeAction ); REMark := " **REM** The values entered above will be applied to all selected doc. If data conversion doesn't work then don't set field."; @If( @IsError( formulaResult ); @Do( tmpPrompt := "Error with NoteID of " + @NoteID + ". Continue?" + cPromptTab + cPromptNewLineOne + cPromptTab + "Error: " + cPromptTab + cPromptTab + @Text( FormulaResult ) + cPromptNewLineOne + cPromptTab + "Formula: " + cPromptTab + cPromptTab + DataTypeAction + cPromptNewLineOne + cPromptTab + @If( @Contains( DataTypeAction ; "EditField[ef]" ) ; "EditField[ef]:" ; "Field:" + cPromptTab ) + cPromptTab + EditField[ef] + cPromptNewLineOne + cPromptTab + "Data type/action: " + cPromptTab + DataType + cPromptNewLineOne + cPromptTab + @If( DataType = ("Replace Substring":"Replace" ) ; "FromRawValue: " + cPromptTab + @Text( FromRawValue )+ cPromptNewLineOne + cPromptTab + "RawValue: " + cPromptTab + @Text( RawValue ) ; DataType = cNoPromptList; "" ; "RawValue: " + cPromptTab + @Text( RawValue ) ); @StatusBar( @Explode( tmpPrompt ; cPromptNewLineOne ; @True ) ); @If( @Prompt( [YesNo] ;"Error - " + EditFieldPromptTitle ; tmpPrompt ) ; ErrorNoteIDList := ErrorNoteIDList+ cArraySeparator + @Text( @NoteID ); @Return( @If( @Eval( cErrorCheckCode ) != "" ; @StatusBar( @Explode( @Eval( cErrorInformation ) ; cPromptNewLineOne ; @True ) ): @Prompt( [Ok] ; "Unable to Update - " + EditFieldPromptTitle ; @Eval( cErrorInformation ) ); "" ) ) ) ); @SetField( EditField[ef] ; formulaResult ) ) ); @If( DocNavigationCount > cMaxUpdatedDocuments ; NoteIDList := ""; @Do( DocUpdateCount := DocUpdateCount + 1; @Command([NavNextSelected]); @UpdateFormulaContext; REMark := " **REM** If we haven't processed all docs yet but the current doc is not in the NoteIDList list, keep looping ... if cnt exceeds MaxUpdatedDocuments assume infinite loop and stop "; @If( DocUpdateCount < @Elements( NoteIDList ) & ( !@Member( @NoteID ; NoteIDList ) ) & ( !@Member( @NoteID ; NotNoteIDList) ); @While( (! @Member( @NoteID ; NoteIDList ) & DocNavigationCount < cMaxUpdatedDocuments ); @Command([NavNextSelected]); @UpdateFormulaContext; DocNavigationCount := DocNavigationCount + 1); "") ) ) ); @Do( @Command([NavNextSelected]); @UpdateFormulaContext ) ) ); @If( @Implode( @Unique( @Explode( NoteIDList : ErrorNoteIDList ; cArraySeparator ; @False ) ) ) != "" ; @StatusBar( @Explode( @Eval( cErrorInformation ) ; cPromptNewLineOne ; @True ) ): @Prompt( [Ok] ; "Unable to Update - " + EditFieldPromptTitle ; @Eval( cErrorInformation ) ); "" ); @StatusBar( "Navigated through " + @Text( DocUpdateCount + DocNavigationCount ) + " documents." ); @StatusBar( "Performed '" + DataType + "' for '" + @Implode( EditField ; ", " ) + "' field" + @If( @Elements( EditField ) > 1; "s " ; " " ) + "on " + @Text( DocUpdateCount ) + " document" + @If( DocUpdateCount > 1 ; "s" ; "" ) + "." ) |
Pingback: Edit Document Fields 6.0.0 « ChadSmiley Blog
The code is broken since you´re adding HTML breaks to the end of all lines!
This code works very well. Thanks for the post!
I tried to use this in Notes 8.5 in the formula for an Action button. However, when the action button is pressed, the prompts all show as expected but no documents are updated. No matter how many documents I select, the final messages state “Navigated through 1 document”. But not even 1 document is updated. What am I missing?
I have not used Domino in a couple of years, so I will not be much help. The only idea that comes to mind is to make sure that the highlighted document is the first selected. Also are there responses in the view? I would recommend a flat view. Finally what where the steps that you where doing. There are a few prompts, please indicate which you selected, some only allow one document to be updated.