Kouzelné tlačítko

Tímto názvem označují mí kolegové kus skriptu, který je skryt pod tlačítkem v liště ikon. Jeho použití je jednoduché, dopad veliký: lehce umí změnit hodnotu jakéhokoliv pole v aktivním dokumentu, nebo pole vytvořit či smazat. Ti, kteří jej znají a používají, ví, že se jedná o neocenitelného pomocníka - již není třeba psát jednorázového agenta na změnu jednoho needitovatelého pole, stačí jenom vyplnit hodnotu v dialogu.

Po Internetu koluje několik verzí kódu, pro R5, ND6 apod. Já jsem nakonec skončil u toho, který umí pole i přidávat a mazat. Jak si jej přidáte do svého klienta Lotus Notes? Popis pro ND6 ( pro R5 obdobné):

  1. V menu zvolíme File - Preferencies - Toolbar Preferences.
  2. Záložka Customize, toolbar Customize, tlačítko New - Button....
  3. Vyplňte název tlačítka dle libosti, vyberte si vhodnou ikonku, a do pole Formula vložte následující kód: REM {Get a listing of all the fields on the current document}; List := @DocFields;

    REM {Possible data types to choose from.}; REM {I called Number Integer because use keyboard to select what you want with keyboard quicker.}; DataTypes := "Text" : "Date" : "Integer" : "Password" : "Name" : "Common Name" : "**** Remove Field ****" : "Text Multi Value" : "Date Multi Value" : "Integer Multi Value" : "Name Multi Value";

    REM {Prompt for which field needs to be updated.}; EditField := @Prompt([OkCancelList]; "Select Field To Update"; "Select the field you wish to update:"; ""; List : "**** ADD A NEW FIELD ****");

    REM {If adding a new field, prompt for the field name}; NewFieldName := @If(EditField = "**** ADD A NEW FIELD ****"; @Prompt([OkCancelEdit]; "Enter Field Name"; "Enter the name of the new field:"; ""); ""); CheckFieldName := @If(@IsMember(NewFieldName; List) & NewFieldName != ""; @Return(@Prompt([Ok]; "Already In List"; "The field " + NewFieldName + " already exists on the document.")); ""); UpdateVariable := @If(NewFieldName = ""; ""; EditField := NewFieldName);

    REM {Prompt for which data type you would like the data to be}; REM {This needs to be done before value prompt to determine if the}; REM { Picklist or any prompting needs to be used.}; DataType := @Prompt([OkCancelList] : [NoSort]; "Choose Data Type"; "Please Select the correct data type or action for field: " + EditField; "Text"; DataTypes);

    REM {For multi-valued fields, let the user choose the separator to use}; Separator := @If(@Contains(DataType; "Multi Value"); @Prompt([OkCancelList] : [NoSort]; "Choose Separator"; "Choose the separator to split out your multiple values"; ":"; (":" : ";" : "+" : "-" : "*")); "");

    REM {Pull out the current value of the field}; CurrValue1 := @Eval(@Text(EditField)); CurrValue2 := @Abstract([TextOnly]; 254; ""; @Text(EditField)); CurrValue := @If(@IsNumber(CurrValue1) | @IsTime(CurrValue1); @Implode(@Text(CurrValue1); Separator); CurrValue2 != ""; CurrValue2; @Implode(@Text(CurrValue1); Separator));

    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 = "**** Remove Field ****"; ""; @Contains(DataType; "Multi Value"); @Prompt([OkCancelEdit]; "New Value"; "Please enter the new desired value for: " + EditField + " seperated with " + Separator + " for each value."; CurrValue); @Prompt([OkCancelEdit]; "New Value"; "Please enter the new desired value for: " + EditField + "."; CurrValue) );

    REM {If data conversion doesn't work then don't set field.}; @If( DataType = "Date"; @If(@SetField(EditField; @TextToTime(RawValue))); DataType = "Integer"; @If(@IsError(@TextToNumber(RawValue)); ""; @SetField(EditField; @TextToNumber(RawValue))); DataType = "Password"; @SetField(EditField; @Password(RawValue)); DataType = "**** Remove Field ****"; @SetField(EditField; @DeleteField); DataType = "Text Multi Value"; @SetField(EditField; @Explode(RawValue; Separator)); DataType = "Date Multi Value"; @SetField(EditField; @TextToTime(@Explode(RawValue; Separator))); DataType = "Integer Multi Value"; @If(@IsError(@TextToNumber(@Explode(RawValue; Separator))); ""; @SetField(EditField; @TextToNumber(@Explode(RawValue; Separator)))); DataType = "Name Multi Value"; @SetField(EditField; @Explode(@Name([Canonicalize]; RawValue); Separator)); @SetField(EditField; RawValue) ); ""

     
  4. Uložte a vyzkoušejte. Vyberte v pohledu libovolný dokument a stiskněte kouzelné tlačítko.
     
  5. Zvolte pole, které hodláte měnit, a v dalších krocích vyplňte jeho novou hodnotu a uložte.
     

Poznámka: Změna se uloží v těchto dvou případech:

  • stojíte nad dokumentem v pohledu nebo
  • máte dokument otevřen v editačním módu.

Předchozí: Uvedení Workplace 2.5 na český trh
Následující: Redbook: Lotus Workplace 2.0.1