Project activity #29406
openProject activity #28068: Rollen maken voor Tezza | O.b.v. de huidige 4 Alfresco-rollen, omwille dat klanten het beter kunnen beheren
Project activity #28339: Nieuwe autorisatieprofielen maken voor Tezza
Migratie script
100%
Description
Onderdeel van dit mini-project is ook de migratie-script om alle Zaken uit de Zaken site te migreren naar de eigen sites voor bestaande klanten
Objecten Script in JavaScript-Console
Ik wil graag een migratiescript ook voor Objecten zoals ik dat ook voor de Zaaktypes heb.
- Alle members van de ZT Groepen moeten site_<Zaaktype>_contributor
- Contributor rechten zijn nodig voor de claimen functionaliteit + Groepswerkvoorraad
- Alle members van de objecten site_<ObjectType>_contributor
- We gaan allen de directe members, dus geen custom groepen migreren
- Verwijderen van de ZT Groepen
- Rekening houden met UUID of ZT Identificatie
- Verwijderen van de TEZZA groepen
Graag dit stukje opnemen in de Documentatie van Tezza:
https://git.contezza.nl/develop/products/tezza-services/-/blob/release/2.28/docs/src/docs/asciidoc/includes/_migration_authorization_structure.adoc?ref_type=heads
Files
Updated by Bram Geerlings 7 months ago
- Assignee changed from Roel Vestering to Tjerk Vaags
Updated by Tjerk Vaags 7 months ago
Test aanpak:
- opstarten main tezza services + workspace
- aanmaken zaken via tezza app of script
- opstarten tezza services branch gerelateerd aan #29270
- testen onderstaand migratiescript
- batchExecuter toevoegen
- groepen functie bij create site
Updated by Tjerk Vaags 7 months ago
· Edited
Script om dummy zaken aan te maken op site 'zaken'
// Catalogus VR
var catalogusUrl = "http://openzaak.local:8000/catalogi/api/v1/catalogussen/3a87bb4c-6876-43a0-bfbf-1c5c960ecf28";
var siteNode = getZakenSite();
if (siteNode == null) {
throw "Site 'zaken' does not exists."
}
//createZaken(catalogusUrl, siteNode);
function createZaken(catalogusUrl, siteNode) {
var zaakTypen = ztc.zaaktypeList(catalogusUrl, null, null, null);
for each(zaaktype in zaakTypen){
var randomTimes = Math.floor(Math.random() * 10) + 1;
for (var i = 0; i < randomTimes; i++) {
zaakBody = createZaakBody(zaaktype);
createZaak(zaakBody, siteNode);
}
}
}
function createZaak(data, siteNode) {
var action = actions.create("zaakCreate");
for (var i in data) {
var value = data[i];
action.parameters[i] = value;
}
action.execute(siteNode.getNodeRef());
result = apiUtils.getActionResult(action);
print(result);
}
function createZaakBody(zaaktype) {
var body = {};
body.betalingsindicatie = null;
body.bronorganisatie = "002220647";
body["create-initiator"] = false;
body.omschrijving = "Testzaak " + Math.floor(Math.random() * 999999);
body.resultType = "zaakInfo";
body.startdatum = "";
body.team = null;
body.toelichting = "Dit is zaak gebaseerd op zaaktype: " + zaaktype.getOmschrijving();
body.verantwoordelijkeOrganisatie = "002220647";
body.vertrouwelijkheidaanduiding = null;
body.zaaktype = zaaktype.getUrl();
return body;
}
function getZakenSite() {
var query = {
query: "TYPE:'st:site' AND name:'zaken'",
language: "fts-alfresco",
page: {
maxItems: 1,
skipCount: 0,
},
};
return search.query(query)[0];
}
Updated by Tjerk Vaags 7 months ago
· Edited
@Bram Geerlings Script aangepast. Kwam erachter dat onderstaand stuk niet op elke omgeving hetzelfde is. Loop nog tegen het issue aan dat het aanmaken van de site niet wilt. Blijf een index error terugkrijgen. Oftewel, bij de getNodeRef geeft het '09233662 Site ZTMeldingOpenbareRuimte does not exist' terug.
Voor de rest zou je de test kunnen opbouwen door het volgende te doen- Tezza starten vanuit main branch
- dummy data script draaien --> https://support.contezza.nl/issues/29406#note-4
- switchen naar test branch 29270
- Tezza opnieuw starten
- testen van migratie script.
Niet op elke omgeving hetzelfde
var zaaktypenFolders = site.node.children[0].children[2].children;
for each(zaaktypeFolder in zaaktypenFolders){
var zaaktypeId = null;
var zaaktypeUrl = zaaktypeFolder.children[0].children[0].children[0].properties["tza:zaaktypeUrl"];
var zaaktypeContainer = zaaktypeFolder.children[0];
Aangepast script
var dryRun = false;
var zaaktypeSiteCreate = false;
var moveZaken = true;
var zaaktypeIdentificaties = getZaaktypeIdentificaties();
for each(identificatie in zaaktypeIdentificaties){
logger.log("Creating site for: "+ identificatie);
var zaakType = ztc.zaaktypeList(null, identificatie, "definitief", null)[0];
//var currentUserGroup = Huidige user(group)s bij zaaktype.identificatie ophalen.
if(!dryRun && !zaaktypeSiteCreate){
siteHelper.createSite(zaaktype.getIdentificatie(), zaaktype.getOmschrijving(), zaaktype.getOmschrijving(), "ZAAK");
// currentCurrentUsergroup toevoegen aan site_zaaktype_Collaborator group
}
var results = getZakenOfZaaktype(identificatie);
for each (var result in results) {
var zaak = zrc.getZaak(result.getId());
if(!dryRun && !moveZaken){
var identificatieCleaned = identificatie.replace(/[\s\W_-]/g, "");
var docLib = siteService.getSite(identificatieCleaned).getContainer("document-library");
if (docLib == null) {
throw "Site '" + identificatieCleaned + "' does not exists."
}
logger.log("Moving: " + zaak.getIdentificatie());
//create folderstructure
var registratieDatum = zaak.getRegistratiedatum();
var targetFolder = apiUtils.createFolderStructure(docLib, registratieDatum.getYear() + "/" + registratieDatum.getMonth())
result.move(targetFolder);
}
}
}
function getZakenOfZaaktype(identificatie) {
var zaakTypen = ztc.zaaktypeList(null, identificatie, null, null);
var zaken = [];
for each(zaaktype in zaakTypen){
var q = {
language: "fts-alfresco",
query: "TYPE:'cm:folder' AND =tza:zaaktypeUrl:'" + zaaktype.getUrl() + "' AND ASPECT:'tza:zaak' AND NOT ASPECT:'stuf:zkn' AND NOT TYPE:'rma:recordFolder'"
};
results = search.query(q);
for each (var result in results) {
zaken.push(result);
}
}
return zaken;
}
function getZaaktypeIdentificaties() {
var zaakTypen = ztc.zaaktypeList(null, null, "definitief", null);
var identificaties = [];
for each(zaaktype in zaakTypen){
identificaties.push(zaaktype.getIdentificatie());
}
return identificaties;
}
Updated by Tjerk Vaags 7 months ago
- Assignee changed from Tjerk Vaags to Bram Geerlings
Updated by Bram Geerlings 6 months ago
- Status changed from Backlog to In Progress
Updated by Bram Geerlings 6 months ago
var dryRun = false;
var moveZaken = true;
var zaaktypen = getZaaktypen();
var zakenSite = siteService.getSite("Zaken");
for each(zaaktype in zaaktypen){
if(!dryRun) {
logger.log("Attempting to get site for: " + zaaktype.getIdentificatie());
var existingSite = siteService.getSite(siteHelper.getCleanSiteShortName(zaaktype.getIdentificatie()))
if (existingSite) {
logger.log("Site for identificatie: '" + zaaktype.getIdentificatie() + "' found");
targetSite = existingSite.getNode();
} else {
logger.log("Creating site for: " + zaaktype.getIdentificatie());
targetSite = siteHelper.createSite(zaaktype.getIdentificatie(), zaaktype.getOmschrijving(), zaaktype.getOmschrijving(), "ZAAK");
}
}
var zaaktypeFolderCurrent = zakenSite.getContainer("documentLibrary").childByNamePath("Zaken/" + zaaktype.getOmschrijving());
if(zaaktypeFolderCurrent != null) {
var zakenFolder = targetSite.childByNamePath("documentLibrary/Zaken");
if (zakenFolder == null) {
zakenFolder = targetSite.childByNamePath("documentLibrary").createNode("Zaken", "cm:folder");
}
if (!dryRun) {
for each(var child in zaaktypeFolderCurrent.children) {
traverse(child, zakenFolder, 0);
}
}
}
}
function traverse(child, folder, depth) {
var lookupName = child.getDisplayPath() + "/" + child.name;
var parts = lookupName.split("/");
var currentPart = parts.slice(parts.length - (depth + 1), parts.length).join("/");
var existingFolder = folder.childByNamePath(currentPart);
if (existingFolder != null) {
for each(var childFolder in child.children) {
traverse(childFolder, folder, depth + 1);
}
} else {
var targetparts = child.getDisplayPath().split("/");
var targetFolderPath = targetparts.slice(targetparts.length - depth, targetparts.length).join("/");
var targetFolder = folder.childByNamePath(targetFolderPath);
print(child.displayPath + "/" + child.name);
print(targetFolder.displayPath + "/" + targetFolder.name);
logger.log("Moving '" + child.name + "' from " + child.displayPath + "/" + " into " + targetFolder.displayPath + "/" + targetFolder.name);
child.move(targetFolder);
}
}
function getZaaktypen() {
var zaakTypen = ztc.zaaktypeList(null, null, "definitief", null);
var zaaktypenDefinitief = [];
for each(zaaktype in zaakTypen){
zaaktypenDefinitief.push(zaaktype);
}
return zaaktypenDefinitief;
}
Updated by Tahir Malik 5 months ago
- Description updated (diff)
- Priority changed from P4 Normal to P3 High
- Target version changed from Contezza Development Backlog to Tezza 2024.12
Updated by Bram Geerlings 5 months ago
Merge request voor Objecttype sites migratie script zit in
https://git.contezza.nl/develop/products/tezza-services/-/merge_requests/72
Updated by Bram Geerlings 5 months ago
- Assignee changed from Bram Geerlings to Rick de Rooij
Updated by Erik Hoogland 5 months ago
Nog een bevinding vanuit amsterdam-workspace: als er eerst een script wordt gedraaid wat de Objecttype sites aanmaakt, zal het migratie script de zaken uit Objecten site niet verplaatsen.
Updated by Erik Hoogland 4 months ago
- Assignee changed from Rick de Rooij to Erik Hoogland
Updated by Erik Hoogland 4 months ago
- Status changed from In Progress to Ready in Dev
- Assignee changed from Erik Hoogland to Tjerk Vaags
@Tjerk Vaags Bij mij werkt het migratie script nu, kan jij dit testen en reviewen?
Updated by Tahir Malik 4 months ago
- Target version changed from Tezza 2024.12 to Tezza 2025.01
Updated by Tjerk Vaags 4 months ago
Twee tests gedaan.
Test 1:- Objecten aangemaakt op de oude manier obv van Main branch
- Overstappen naar andere test branch voor tezza services
- Setup-script gedraaid
- Migratie-script gedraaid
- Objecten zijn succesvol verplaats naar desbetreffende sites
- Objecten aangemaakt op de oude manier obv van Main branch
- Overstappen naar andere test branch voor tezza services
- Setup-script niet gedraaid
- Migratie-script gedraaid
- Nieuwe objecten-sites worden aangemaakt als ze niet bestaan.
- Objecten zijn succesvol verplaats naar desbetreffende sites
Bevinding:
Oude folderstructuur blijft bestaan als het leeg is. De vraag is of de site 'Objecten' überhaupt moet blijven bestaan.
Updated by Tjerk Vaags 4 months ago
- Status changed from Ready in Dev to Feedback
- Assignee changed from Tjerk Vaags to Erik Hoogland
Updated by Erik Hoogland 4 months ago
- Assignee changed from Erik Hoogland to Bram Geerlings
@Bram Geerlings Kan jij mog even naar de cleanup kijken?
Updated by Erik Hoogland 4 months ago
- Status changed from Feedback to Ready in Dev
- Assignee changed from Bram Geerlings to Rick de Rooij
Heb het volledige migratie proces getest vanuit tezza-workspace, wisselend tussen tezza-services 2.27.1 (oude situatie) en 2.27.3-SNAPSHOT (Nieuwe situatie)
De volgende aanpassingen zijn nog gedaan, waarna het akkoord is:- Bij migratiescript zaken, zorgen dat er een Zaken folder wordt aangemaakt bij een albestaande zaaktype site
- Verwijderen onnodig hoofdstuk 'Migratie zaaktypegroepen'
- Hoofdstuk 'Migratie autorisatiestructuur' onder bijlage hernoemd naar 'Migratie autorisatiegroepen' om verwarring met ander hoofdstuk met zelfde naam te voorkomen
- link naar dit hoofdstuk onder 'Migratie zaken en objecten' is ook aangepast
Updated by Rick de Rooij 4 months ago
- Status changed from Ready in Dev to Ready in Acc
Updated by Tahir Malik 3 months ago
- Target version changed from Tezza 2025.01 to Tezza 2025.02
Updated by Rick de Rooij 2 months ago
- Assignee changed from Rick de Rooij to Tahir Malik
- Target version changed from Tezza 2025.02 to Tezza 2025.03
Updated by Tahir Malik about 2 months ago
- Assignee changed from Tahir Malik to Juri Balradj
Updated by Juri Balradj about 2 months ago
- Assignee changed from Juri Balradj to Tahir Malik