Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Ik heb ergens het idee dat er een soort reporting moet zijn (als een actie mislukt bijvoorbeeld) maar dat heb ik niet. Mogelijk vanwege mijn aangepaste batch. 

Voorbeelden

Find en Replace

Zelf heb ik deze veelvuldig gebruikt, erg handig als je een groot aantal pagina's hebt waarvoor hetzelfde stuk tekst moet vervangen voor iets anders (of verwijderen). Dit kan op 2 manieren. 

Manier 1

De 1ste manier werkt met een lijst match cases wat op de volgende manier wordt geformateerd:

--findReplace "find1:replace1, find2:replace2"

De actie findReplace krijgt als parameter een lijst mee waarvan de elementen zijn gescheiden door een komma. Het argument voor de dubbele punt geeft aan waar op gezocht wordt, het argument na de dubbele punt geeft aan wat daarvoor in de plaats moet komen.

Deze manier van Find & Replace lijkt in de meeste gevallen prima te werken, maar in mijn geval was het niet goed genoeg omdat het lijkt dat je hiermee geen dubbele punten kan verwijderen, aangezien dit onderdeel is van de syntax van de actie zelf. Voor dit soort gevallen is een andere manier van Find & Replace mogelijk.

Manier 2

De 2de manier werkt met regular expressions en wordt als volgt geformateerd:

--findReplaceRegex "(a )(test)(.*):\$1\$3#\$2#"

De actie is anders, namelijk findReplaceRegex. De actie is hetzelfde als findReplace afgezien van de parameter die er in gaat. Het argument voor de dubbele punt is de regex, het argument na de dubbele punt is hetgeen wat voor hetgene beschreven in de regex in de plaats moet komen. 

Praktijk voorbeeld

Ik heb manier 2 een aantal keer gebruikt om de functie en attribute beschrijvingen (80% van de wiki) van quick link bars te voorzien. In een bestand genaamd 'qlb_findReplaceQuickLink.txt' staat het volgende script: 

-a modifyPage --space "@space@" --title "@title@" --content "" --findReplaceRegex "(Quick).*?(links).*?(Function overview).*?(Attribute overview).*?(Constants overview).*?(Dimensions overview): " --noConvert
-a modifyPage --space "@space@" --title "@title@" --content "" --content2 "<links>" --noConvert

"@space@" en ''@title@" worden later vervangen door een space en title. De eerste regel verwijderd alle bestaande quick link bars. Dit was een noodzakelijke actie omdat bij het kopiëren van de artikels naar MODS de quick link bars mee werden gekopieerd, maar dan zonder hyperlinks (dus als platte tekst). Deze moesten eerst worden verwijderd voordat de quick link bar met de juiste hyperlinks kon worden toegevoegd aan het artikel.  

De actie findReplaceRegex in deze regel bepaald dus wat er verwijderd moet worden en wat niet. Deze regex zoekt naar alles wat de strings tussen haken bevat en vervangt het met een lege string. De --noConvert is trouwens een hele belangrijke flag die je moet setten, dit zorgt ervoor dat de HTML in de content wordt gezien als HTML en niet als platte tekst. Als je dit weglaat krijg je een hoop HTML tags als platte tekst, en dat is waarschijnlijk niet de bedoeling. 

Dit script wordt in CMD dan als volgt aangeroepen:

confluence --action runFromPageList --space "QUAESTOR" --title "Functions" --children --file qlb_findReplaceQuickLink

De strings ingevuld bij --space en --title vervangen dus "@space@" en ''@title@" in qlb_findReplaceQuickLink.txt. De actie runFromPageList zorgt ervoor dat dit script voor alle childpages van het artikel waarop je het aanroept wordt uitgevoerd, in dit geval dus alles wat onder "Functions" staat.

Dit script is te gebruiken voor vergelijkbare acties, alleen de title, space en regex moeten veranderd worden. Gebruik deze gigantisch handige webtool als je, net als ik, geen held  bent met regex! Dit genereerd een regex die een opgegeven string matched. Houd er wel rekening mee dat dit geen 100% waterdichte methode is, er zijn verschillende soorten regex en het kan anders uitpakken dan gewenst. Let in elk geval op de volgende dingen in de CLI:

  • Als je op Windows zit en je wilt bijvoorbeeld $1 gebruiken om een replacement te doen, NIET de $ escapen. Als je op Unix zit, WEL de $ escapen. Zie dit topic: Using string replacement with CLI
  • Whitespace karakter (\s+) lijkt niet te werken, spatie ( ) lijkt wel te werken. 

Voorbeeld Regex

Attribute match regex

Omdat we allemaal weten dat, zelfs met een keihandige tool als degene hierboven, het een gedoe is om een specifieke regex te maken ga ik in dit onderdeel een aantal regex neerzetten die ik heb gebruikt, met uitleg, zodat iedereen die bezig gaat met de CLI en vergelijkbare taken moet uitvoeren als ik bij de Quaestor documentatie in elk geval op dat vlak tijd kan besparen.

((@)+([A-Z0-9]*[_]*)+([\s+]?[\n]?)+)

Dit matched strings beginnend met @ met alleen maar hoofdletters of cijfers, al dan niet eindigend met een spatie of newline. Dit is gebruikt voor het toevoegen van links aan attributes. Dit matched @EEN_ATTRIBUUT en @EEN_ANDERE_ATTRIBUUT enzovoorts,  maar bijvoorbeeld niet @een_attribuut of @een_ATTRIBUUT

De volledige actie zag er als volgt uit:

-a getPageSource --space "QUAESTOR" --title "Attributes" --file temp-page-source.txt
-a storePage --space "QUAESTOR" --title "Attributes" --file temp-page-source.txt --content "" --findReplaceRegex "((@)+([A-Z0-9]*[_]*)+([\s+]?[\n]?)+):<a class="confluence-link" href=/display/QUAESTOR/$0>$0</a>" --noConvert

...

EDIT 4-7-12

Er is nog een manier om de CLI werkend te krijgen en dat is gewoon de JAR loslaten op java.exe in de bin map van de java instalatie:

java -jar "%dirPath%"/lib/confluence-cli-2.7.0-SNAPSHOT.jar

Als de enviroment variable niet geset is is eerst een CD actie nodig om bij de bin map te komen:

cd C:\Program Files\Java\jdk1.6.0_24\jre\bin

De actie moet natuurlijk omgeschreven worden naar jouw java instalatie.

 

Voorbeelden

Extern script uitvoeren

In het voorbeeld hierboven wordt er al een voorbeeld van gegeven; het uitvoeren van een extern script middels de run actie. Als je meer dan 1 actie achter elkaar wilt uitvoeren moet je dit doen, want in de CMD kan je maar 1 actie tegelijk uitvoeren, hoogst onhandig in de meeste gevallen natuurlijk. Er veranderd wel iets aan de werkwijze, normaal gesproken gebruik je --action om een actie aan te duiden.

...