Umstieg auf das neue React-File-Cover
Vorgehen
Ist eine Migration überhaupt notwendig?
Als erstes muss überprüft werden, ob ein Skript
ou.cust.ptpINV.filetype.field.html.cover.ts existiert. Wenn nein, ist keine
Migration notwendig.
Migration durchführen
1. In der Funktion getCockpit muss folgender Code angepasst werden
Vorher:
badges: {
discount: discountBadge,
netAmount: netAmountBadge
},
/* Code ab hier anpassen */
statusCodes,
verification: verifications,
/* Code anpassen Ende */
Nachher:
badges: {
discount: discountBadge,
netAmount: netAmountBadge
},
/* Neuer Code */
statusCodes: {
table: {
select: false,
showOptions: false,
showHeader: false,
showFooter: false,
hover: false,
border: false,
bordered: false,
striped: false,
columns: {
status: {
type: "icon",
label: "Status",
width: "30px"
},
message: {
label: "Info",
attributes: {
title: (_value, opts) => {
return opts.row.code || "";
}
}
}
},
rows: statusCodes
}
},
verification: {
table: {
select: false,
showOptions: false,
showHeader: false,
showFooter: false,
hover: false,
border: false,
bordered: false,
striped: false,
rowStyle: opts => {
return opts.row.isCurrent ? "font-weight: bold;" : "";
},
columns: {
status: {
type: "icon",
label: "Status",
width: "30px"
},
message: {
disableInternationalization: true,
label: "Info",
attributes: {
title: (value, opts) => {
return opts.row.tooltip || "";
}
}
}
},
rows: verifications
}
},
/* Ende neuer Code */
2. In der Funktion getHistory muss folgender Code angepasst werden
Vorher:
/* Code ab hier anpassen */
rowStyle: opt => {
// @ts-expect-error untyped in client
if (!window.ptpInvoiceCoverInstance.history.selectedInvoice) {
return "";
}
// @ts-expect-error untyped in client
if (window.ptpInvoiceCoverInstance.history.selectedInvoice.invoiceNumber == opt.row.invoiceNumber) {
return "background-color: #f2f2f2";
}
return "";
},
/* Code anpassen Ende */
Nachher:
/* Neuer Code */
rowStyle: opt => {
if (!opt.table.additionalParams.selectedInvoice) {
return "";
}
if (typeof opt.table.additionalParams.selectedInvoice === "object" && "invoiceNumber" in opt.table.additionalParams.selectedInvoice && opt.table.additionalParams.selectedInvoice.invoiceNumber === opt.row.invoiceNumber) {
return "background-color: #f2f2f2";
}
return "";
},
/* Ende neuer Code */
3. In den Funktionen getVerificationData und getVerificationDataOther muss jeweils folgender Code angepasst werden
Vorher:
rowStyle: opt => {
/* Code ab hier anpassen */
// @ts-expect-error untyped in client
if (window.ptpInvoiceCoverInstance.verification.current == opt.row.editor) {
return "cursor: default; border-left: 10px solid #4caf50;";
}
/* Code anpassen Ende */
return "";
},
columns: {
editor: {
label: "de:Rechnungsprüfer;en:verification user",
render: opt => {
/* Code ab hier anpassen */
// @ts-expect-error untyped in client
if (window.ptpInvoiceCoverInstance.verification.current == opt.row.editor) {
return `✔ <b>${opt.row.login}</b>`;
}
/* Code anpassen Ende */
return opt.row.login;
},
attributes: {
title: (value, opt) => {
/* Code ab hier anpassen */
// @ts-expect-error untyped in client
if (window.ptpInvoiceCoverInstance.verification.current == opt.row.editor) {
return `${opt.row.login} ist der aktuelle Rechnungsprüfer.`;
}
/* Code anpassen Ende */
return "";
}
}
},
Nachher:
rowStyle: opt => {
/* Neuer Code */
if (opt.table.additionalParams.current === opt.row.editor) {
return "cursor: default; border-left: 10px solid #4caf50;";
}
/* Ende neuer Code */
return "";
},
columns: {
editor: {
label: "de:Rechnungsprüfer;en:verification user",
render: opt => {
/* Neuer Code */
if (opt.table.additionalParams.current === opt.row.editor) {
return `✔ <b>${opt.row.login}</b>`;
}
/* Ende neuer Code */
return opt.row.login;
},
attributes: {
title: (value, opt) => {
/* Neuer Code */
if (opt.table.additionalParams.current === opt.row.editor) {
return `${opt.row.login} ist der aktuelle Rechnungsprüfer.`;
}
/* Ende neuer Code */
return "";
}
}
},
4. Hier muss noch der Export angepasst werden
Vorher:
/* Code ab hier anpassen */
module.exports = docFile => {
/* Ende Code anpassen */
return {
// templates: {
// global: {
// start: getHtmlTemplate("ou.cust.ptpINV.filetype.field.html.cover.globalStart"),
// end: getHtmlTemplate("ou.cust.ptpINV.filetype.field.html.cover.globalEnd"),
// },
// vendor: {
// start: getHtmlTemplate("ou.cust.ptpINV.filetype.field.html.cover.vendorStart"),
// end: get
Nachher:
/* Neuer Code */
exports.getData = getData;
function getData(docFile) {
/* Ende neuer Code */
return {
5. Überprüfen, ob im HTML-Code selbst customizing vorgenommen wurde
Dazu überprüfen, ob in diesem Skript im Daten-Objekt, das das Cover definiert,
eine Eigenschaft templateUrl existiert, z.B. ou.cust.ptpINV.cover.html. Das
bedeutet, es wurden Anpassungen am Invoice-Cover über ein Custom-Template
vorgenommen. Andernfalls ist keine weitere Migration notwendig.
6. HTML-Customizing migrieren
Falls ein anderes Custom Property hinterlegt ist als ou.sp.ptpINV.cover.html,
muss der Unterschied zwischen dem Inhalt der beiden Custom Properties evaluiert
und anhand der Anleitung unter React File-Cover
Customizing eine Customizing-Strategie gewählt
werden. Auch CSS-Anpassungen müssen hier beachtet werden.
Je nach Komplexität des vorhandenen Customizings lohnt es sich möglicherweise, hier einen Entwickler hinzuzuziehen.
7. Weitere Breaking Changes
Der clientseitige Zugriff auf das Cover über window.ptpInvoiceCoverInstance
ist nicht mehr möglich.